Merge mozilla-central to inbound
authorCarsten "Tomcat" Book <cbook@mozilla.com>
Mon, 24 Jul 2017 14:59:06 +0200
changeset 419294 d055c4a269c41792c09bceeae314084c7eba9bc0
parent 419293 1547c1b9a0d216b9c7f2a0ff69d1ba1541da6233 (current diff)
parent 419224 60a5308fa987676fa5ed9fd5b3ad6c9938af0539 (diff)
child 419295 3d14ed20c13133113b428e3e2a8635ca616bc63d
push id7566
push usermtabara@mozilla.com
push dateWed, 02 Aug 2017 08:25:16 +0000
treeherdermozilla-beta@86913f512c3c [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone56.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge mozilla-central to inbound
dom/media/AbstractMediaDecoder.h
dom/media/webaudio/BufferDecoder.cpp
dom/media/webaudio/BufferDecoder.h
--- a/browser/base/content/test/general/browser_accesskeys.js
+++ b/browser/base/content/test/general/browser_accesskeys.js
@@ -42,28 +42,98 @@ add_task(async function() {
 
   focusedId = await performAccessKey("y");
   is(focusedId, "tab2button", "button accesskey in tab2");
 
   // Press the accesskey for the chrome element while the content document is focused.
   focusedId = await performAccessKeyForChrome("z");
   is(focusedId, "chromebutton", "chromebutton accesskey");
 
-  newButton.remove();
-
   gBrowser.removeTab(tab1);
   gBrowser.removeTab(tab2);
+
+  // Test whether access key for the newButton isn't available when content
+  // consumes the key event.
+
+  // When content in the tab3 consumes all keydown events.
+  const gPageURL3 = "data:text/html,<body id='tab3body'>" +
+                    "<button id='tab3button' accesskey='y'>Button in Tab 3</button>" +
+                    "<script>" +
+                    "document.body.addEventListener('keydown', (event)=>{ event.preventDefault(); });" +
+                    "</script></body>";
+  let tab3 = await BrowserTestUtils.openNewForegroundTab(gBrowser, gPageURL3);
+  tab3.linkedBrowser.messageManager.loadFrameScript("data:,(" + childHandleFocus.toString() + ")();", false);
+
+  Services.focus.clearFocus(window);
+
+  focusedId = await performAccessKey("y");
+  is(focusedId, "tab3button", "button accesskey in tab3 should be focused");
+
+  newButton.onfocus = () => {
+    ok(false, "chromebutton shouldn't get focus during testing with tab3");
+  }
+
+  // Press the accesskey for the chrome element while the content document is focused.
+  focusedId = await performAccessKey("z");
+  is(focusedId, "tab3body", "button accesskey in tab3 should keep having focus");
+
+  newButton.onfocus = null;
+
+  gBrowser.removeTab(tab3);
+
+  // When content in the tab4 consumes all keypress events.
+  const gPageURL4 = "data:text/html,<body id='tab4body'>" +
+                    "<button id='tab4button' accesskey='y'>Button in Tab 4</button>" +
+                    "<script>" +
+                    "document.body.addEventListener('keypress', (event)=>{ event.preventDefault(); });" +
+                    "</script></body>";
+  let tab4 = await BrowserTestUtils.openNewForegroundTab(gBrowser, gPageURL4);
+  tab4.linkedBrowser.messageManager.loadFrameScript("data:,(" + childHandleFocus.toString() + ")();", false);
+
+  Services.focus.clearFocus(window);
+
+  focusedId = await performAccessKey("y");
+  is(focusedId, "tab4button", "button accesskey in tab4 should be focused");
+
+  newButton.onfocus = () => {
+    // EventStateManager handles accesskey before dispatching keypress event
+    // into the DOM tree, therefore, chrome accesskey always wins focus from
+    // content. However, this is different from shortcut keys.
+    todo(false, "chromebutton shouldn't get focus during testing with tab4");
+  }
+
+  // Press the accesskey for the chrome element while the content document is focused.
+  focusedId = await performAccessKey("z");
+  is(focusedId, "tab4body", "button accesskey in tab4 should keep having focus");
+
+  newButton.onfocus = null;
+
+  gBrowser.removeTab(tab4);
+
+  newButton.remove();
 });
 
 function childHandleFocus() {
+  var sent = false;
   content.document.body.firstChild.addEventListener("focus", function focused(event) {
+    sent = true;
     let focusedElement = content.document.activeElement;
     focusedElement.blur();
     sendAsyncMessage("Test:FocusFromAccessKey", { focus: focusedElement.id })
   }, true);
+  content.document.body.addEventListener("keydown", function keydown(event) {
+    sent = false;
+  }, true);
+  content.document.body.addEventListener("keyup", function keyup(event) {
+    if (!sent) {
+      sent = true;
+      let focusedElement = content.document.activeElement;
+      sendAsyncMessage("Test:FocusFromAccessKey", { focus: focusedElement.id });
+    }
+  });
 }
 
 function performAccessKey(key) {
   return new Promise(resolve => {
     let mm = gBrowser.selectedBrowser.messageManager;
     mm.addMessageListener("Test:FocusFromAccessKey", function listenForFocus(msg) {
       mm.removeMessageListener("Test:FocusFromAccessKey", listenForFocus);
       resolve(msg.data.focus);
--- a/browser/components/extensions/ext-menus.js
+++ b/browser/components/extensions/ext-menus.js
@@ -298,69 +298,47 @@ var gMenuBuilder = {
   itemsToCleanUp: new Set(),
 };
 
 // Called from pageAction or browserAction popup.
 global.actionContextMenu = function(contextData) {
   gMenuBuilder.buildActionContextMenu(contextData);
 };
 
+const contextsMap = {
+  onAudio: "audio",
+  onEditableArea: "editable",
+  inFrame: "frame",
+  onImage: "image",
+  onLink: "link",
+  onPassword: "password",
+  isTextSelected: "selection",
+  onVideo: "video",
+
+  onBrowserAction: "browser_action",
+  onPageAction: "page_action",
+  onTab: "tab",
+  inToolsMenu: "tools_menu",
+};
+
 const getMenuContexts = contextData => {
   let contexts = new Set();
 
-  if (contextData.inFrame) {
-    contexts.add("frame");
-  }
-
-  if (contextData.isTextSelected) {
-    contexts.add("selection");
-  }
-
-  if (contextData.onLink) {
-    contexts.add("link");
-  }
-
-  if (contextData.onEditableArea) {
-    contexts.add("editable");
-  }
-
-  if (contextData.onPassword) {
-    contexts.add("password");
-  }
-
-  if (contextData.onImage) {
-    contexts.add("image");
-  }
-
-  if (contextData.onVideo) {
-    contexts.add("video");
-  }
-
-  if (contextData.onAudio) {
-    contexts.add("audio");
-  }
-
-  if (contextData.onPageAction) {
-    contexts.add("page_action");
-  }
-
-  if (contextData.onBrowserAction) {
-    contexts.add("browser_action");
-  }
-
-  if (contextData.onTab) {
-    contexts.add("tab");
+  for (const [key, value] of Object.entries(contextsMap)) {
+    if (contextData[key]) {
+      contexts.add(value);
+    }
   }
 
   if (contexts.size === 0) {
     contexts.add("page");
   }
 
   // New non-content contexts supported in Firefox are not part of "all".
-  if (!contextData.onTab) {
+  if (!contextData.onTab && !contextData.inToolsMenu) {
     contexts.add("all");
   }
 
   return contexts;
 };
 
 function MenuItem(extension, createProperties, isRoot = false) {
   this.extension = extension;
@@ -577,47 +555,58 @@ MenuItem.prototype = {
       }
     }
 
     return true;
   },
 };
 
 // While any extensions are active, this Tracker registers to observe/listen
-// for contex-menu events from both content and chrome.
+// for menu events from both Tools and context menus, both content and chrome.
 const menuTracker = {
+  menuIds: ["menu_ToolsPopup", "tabContextMenu"],
+
   register() {
     Services.obs.addObserver(this, "on-build-contextmenu");
     for (const window of windowTracker.browserWindows()) {
       this.onWindowOpen(window);
     }
     windowTracker.addOpenListener(this.onWindowOpen);
   },
 
   unregister() {
     Services.obs.removeObserver(this, "on-build-contextmenu");
     for (const window of windowTracker.browserWindows()) {
-      const menu = window.document.getElementById("tabContextMenu");
-      menu.removeEventListener("popupshowing", this);
+      for (const id of this.menuIds) {
+        const menu = window.document.getElementById(id);
+        menu.removeEventListener("popupshowing", this);
+      }
     }
     windowTracker.removeOpenListener(this.onWindowOpen);
   },
 
   observe(subject, topic, data) {
     subject = subject.wrappedJSObject;
     gMenuBuilder.build(subject);
   },
 
   onWindowOpen(window) {
-    const menu = window.document.getElementById("tabContextMenu");
-    menu.addEventListener("popupshowing", menuTracker);
+    for (const id of this.menuIds) {
+      const menu = window.document.getElementById(id);
+      menu.addEventListener("popupshowing", menuTracker);
+    }
   },
 
   handleEvent(event) {
     const menu = event.target;
+    if (menu.id === "menu_ToolsPopup") {
+      const tab = tabTracker.activeTab;
+      const pageUrl = tab.linkedBrowser.currentURI.spec;
+      gMenuBuilder.build({menu, tab, pageUrl, inToolsMenu: true});
+    }
     if (menu.id === "tabContextMenu") {
       const trigger = menu.triggerNode;
       const tab = trigger.localName === "tab" ? trigger : tabTracker.activeTab;
       const pageUrl = tab.linkedBrowser.currentURI.spec;
       gMenuBuilder.build({menu, tab, pageUrl, onTab: true});
     }
   },
 };
--- a/browser/components/extensions/schemas/menus.json
+++ b/browser/components/extensions/schemas/menus.json
@@ -17,34 +17,42 @@
         }]
       }
     ]
   },
   {
     "namespace": "contextMenus",
     "permissions": ["contextMenus"],
     "description": "Use the browser.contextMenus API to add items to the browser's context menu. You can choose what types of objects your context menu additions apply to, such as images, hyperlinks, and pages.",
-    "$import": "menus"
+    "$import": "menus",
+    "types": [
+      {
+        "id": "ContextType",
+        "type": "string",
+        "enum": ["all", "page", "frame", "selection", "link", "editable", "password", "image", "video", "audio", "launcher", "browser_action", "page_action", "tab"],
+        "description": "The different contexts a menu can appear in. Specifying 'all' is equivalent to the combination of all other contexts except for 'tab' and 'tools_menu'."
+      }
+    ]
   },
   {
     "namespace": "menus",
     "permissions": ["menus"],
     "description": "Use the browser.menus API to add items to the browser's menus. You can choose what types of objects your context menu additions apply to, such as images, hyperlinks, and pages.",
     "properties": {
       "ACTION_MENU_TOP_LEVEL_LIMIT": {
         "value": 6,
         "description": "The maximum number of top level extension items that can be added to an extension action context menu. Any items beyond this limit will be ignored."
       }
     },
     "types": [
       {
         "id": "ContextType",
         "type": "string",
-        "enum": ["all", "page", "frame", "selection", "link", "editable", "password", "image", "video", "audio", "launcher", "browser_action", "page_action", "tab"],
-        "description": "The different contexts a menu can appear in. Specifying 'all' is equivalent to the combination of all other contexts except for 'tab'."
+        "enum": ["all", "page", "frame", "selection", "link", "editable", "password", "image", "video", "audio", "launcher", "browser_action", "page_action", "tab", "tools_menu"],
+        "description": "The different contexts a menu can appear in. Specifying 'all' is equivalent to the combination of all other contexts except for 'tab' and 'tools_menu'."
       },
       {
         "id": "ItemType",
         "type": "string",
         "enum": ["normal", "checkbox", "radio", "separator"],
         "description": "The type of menu item."
       },
       {
--- a/browser/components/extensions/test/browser/browser_ext_menus.js
+++ b/browser/components/extensions/test/browser/browser_ext_menus.js
@@ -250,8 +250,64 @@ add_task(async function test_multiple_co
   await closeExtensionContextMenu(popup.firstChild);
 
   const info = await extension.awaitMessage("click");
   is(info.menuItemId, "child", "onClicked the correct item");
 
   await BrowserTestUtils.removeTab(tab);
   await extension.unload();
 });
+
+add_task(async function test_tools_menu() {
+  const first = ExtensionTestUtils.loadExtension({
+    manifest: {
+      permissions: ["menus"],
+    },
+    async background() {
+      await browser.menus.create({title: "alpha", contexts: ["tools_menu"]});
+      await browser.menus.create({title: "beta", contexts: ["tools_menu"]});
+      browser.test.sendMessage("ready");
+    },
+  });
+
+  const second = ExtensionTestUtils.loadExtension({
+    manifest: {
+      permissions: ["menus"],
+    },
+    async background() {
+      await browser.menus.create({title: "gamma", contexts: ["tools_menu"]});
+      browser.menus.onClicked.addListener((info, tab) => {
+        browser.test.sendMessage("click", {info, tab});
+      });
+
+      const [tab] = await browser.tabs.query({active: true});
+      browser.test.sendMessage("ready", tab.id);
+    },
+  });
+
+  const tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "http://example.com/");
+  await first.startup();
+  await second.startup();
+
+  await first.awaitMessage("ready");
+  const tabId = await second.awaitMessage("ready");
+  const menu = await openToolsMenu();
+
+  const [separator, submenu, gamma] = Array.from(menu.children).slice(-3);
+  is(separator.tagName, "menuseparator", "Separator before first extension item");
+
+  is(submenu.tagName, "menu", "Correct submenu type");
+  is(submenu.getAttribute("label"), "Generated extension", "Correct submenu title");
+  is(submenu.firstChild.children.length, 2, "Correct number of submenu items");
+
+  is(gamma.tagName, "menuitem", "Third menu item type is correct");
+  is(gamma.getAttribute("label"), "gamma", "Third menu item label is correct");
+
+  closeToolsMenu(gamma);
+
+  const click = await second.awaitMessage("click");
+  is(click.info.pageUrl, "http://example.com/", "Click info pageUrl is correct");
+  is(click.tab.id, tabId, "Click event tab ID is correct");
+
+  await BrowserTestUtils.removeTab(tab);
+  await first.unload();
+  await second.unload();
+});
--- a/browser/components/extensions/test/browser/head.js
+++ b/browser/components/extensions/test/browser/head.js
@@ -8,16 +8,17 @@
  *          getBrowserActionPopup getPageActionPopup
  *          closeBrowserAction closePageAction
  *          promisePopupShown promisePopupHidden
  *          openContextMenu closeContextMenu
  *          openContextMenuInSidebar openContextMenuInPopup
  *          openExtensionContextMenu closeExtensionContextMenu
  *          openActionContextMenu openSubmenu closeActionContextMenu
  *          openTabContextMenu closeTabContextMenu
+ *          openToolsMenu closeToolsMenu
  *          imageBuffer imageBufferFromDataURI
  *          getListStyleImage getPanelForNode
  *          awaitExtensionPanel awaitPopupResize
  *          promiseContentDimensions alterContent
  *          promisePrefChangeObserved openContextMenuInFrame
  *          promiseAnimationFrame getCustomizableUIPanelID
  */
 
@@ -331,16 +332,45 @@ async function closeExtensionContextMenu
   let popupHiddenPromise = BrowserTestUtils.waitForEvent(contentAreaContextMenu, "popuphidden");
   EventUtils.synthesizeMouseAtCenter(itemToSelect, modifiers);
   await popupHiddenPromise;
 
   // Bug 1351638: parent menu fails to close intermittently, make sure it does.
   contentAreaContextMenu.hidePopup();
 }
 
+async function openToolsMenu(win = window) {
+  const node = win.document.getElementById("tools-menu");
+  const menu = win.document.getElementById("menu_ToolsPopup");
+  const shown = BrowserTestUtils.waitForEvent(menu, "popupshown");
+  if (AppConstants.platform === "macosx") {
+    // We can't open menubar items on OSX, so mocking instead.
+    menu.dispatchEvent(new MouseEvent("popupshowing"));
+    menu.dispatchEvent(new MouseEvent("popupshown"));
+  } else {
+    node.open = true;
+  }
+  await shown;
+  return menu;
+}
+
+function closeToolsMenu(itemToSelect, win = window) {
+  const menu = win.document.getElementById("menu_ToolsPopup");
+  const hidden = BrowserTestUtils.waitForEvent(menu, "popuphidden");
+  if (AppConstants.platform === "macosx") {
+    // Mocking on OSX, see above.
+    itemToSelect.doCommand();
+    menu.dispatchEvent(new MouseEvent("popuphiding"));
+    menu.dispatchEvent(new MouseEvent("popuphidden"));
+  } else {
+    EventUtils.synthesizeMouseAtCenter(itemToSelect, {}, win);
+  }
+  return hidden;
+}
+
 async function openChromeContextMenu(menuId, target, win = window) {
   const node = win.document.querySelector(target);
   const menu = win.document.getElementById(menuId);
   const shown = BrowserTestUtils.waitForEvent(menu, "popupshown");
   EventUtils.synthesizeMouseAtCenter(node, {type: "contextmenu"}, win);
   await shown;
   return menu;
 }
--- a/browser/extensions/onboarding/content/onboarding.js
+++ b/browser/extensions/onboarding/content/onboarding.js
@@ -456,16 +456,18 @@ class Onboarding {
     switch (evt.target.id) {
       case "onboarding-overlay-button":
       case "onboarding-overlay-close-btn":
       // If the clicking target is directly on the outer-most overlay,
       // that means clicking outside the tour content area.
       // Let's toggle the overlay.
       case "onboarding-overlay":
         this.toggleOverlay();
+        let selectedTour = this._tours.find(tour => !this.isTourCompleted(tour.id)) || this._tours[0];
+        this.gotoPage(selectedTour.id);
         break;
       case "onboarding-notification-close-btn":
         this.hideNotification();
         this._removeTourFromNotificationQueue(this._notificationBar.dataset.targetTourId);
         break;
       case "onboarding-notification-action-btn":
         let tourId = this._notificationBar.dataset.targetTourId;
         this.toggleOverlay();
@@ -828,25 +830,25 @@ class Onboarding {
 
       div.id = `${tour.id}-page`;
       div.classList.add("onboarding-tour-page");
       div.style.display = "none";
       pagesFrag.appendChild(div);
       // Cache elements in arrays for later use to avoid cost of querying elements
       this._tourItems.push(li);
       this._tourPages.push(div);
+
+      this.markTourCompletionState(tour.id);
     }
-    tours.forEach(tour => this.markTourCompletionState(tour.id));
 
     let dialog = this._window.document.getElementById("onboarding-overlay-dialog");
     let ul = this._window.document.getElementById("onboarding-tour-list");
     ul.appendChild(itemsFrag);
     let footer = this._window.document.getElementById("onboarding-footer");
     dialog.insertBefore(pagesFrag, footer);
-    this.gotoPage(tours[0].id);
   }
 
   _loadCSS() {
     // Returning a Promise so we can inform caller of loading complete
     // by resolving it.
     return new Promise(resolve => {
       let doc = this._window.document;
       let link = doc.createElement("link");
--- a/browser/themes/shared/privatebrowsing/aboutPrivateBrowsing.css
+++ b/browser/themes/shared/privatebrowsing/aboutPrivateBrowsing.css
@@ -1,16 +1,16 @@
 /* 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 url("chrome://global/skin/in-content/info-pages.css");
 
 :root {
-  --color-grey: #b1b1b1;
+  --color-grey: #505473;
 }
 
 html.private {
   --in-content-page-color: white;
   --in-content-text-color: white;
   --in-content-page-background: #25003e;
 }
 
@@ -117,47 +117,48 @@ a.button {
   width: 0;
   pointer-events: none;
   position: absolute;
 }
 
 .toggle + .toggle-btn {
   box-sizing: border-box;
   cursor: pointer;
-  min-width: 42px;
-  height: 26px;
+  min-width: 48px;
+  height: 27px;
   border-radius: 13px;
   background-color: var(--color-grey);
-  padding: 1px;
+  border: 1px solid #202340;
 }
 
 .toggle + .toggle-btn::after {
   position: relative;
   display: block;
   content: "";
-  width: 24px;
+  width: 25px;
   height: 100%;
   left: 0;
   border-radius: 50%;
   background: white;
   transition: left .2s ease;
 }
 
 .toggle + .toggle-btn:dir(rtl)::after {
   left: auto;
   right: 0;
   transition-property: right;
 }
 
 .toggle:checked + .toggle-btn {
   background: #16da00;
+  border-color: #0CA700;
 }
 
 .toggle:checked + .toggle-btn::after {
-  left: 16px;
+  left: 21px;
 }
 
 .toggle:checked + .toggle-btn:dir(rtl)::after {
   left: auto;
   right: 16px;
 }
 
 .toggle:-moz-focusring + .toggle-btn {
--- a/devtools/client/commandline/test/helpers.js
+++ b/devtools/client/commandline/test/helpers.js
@@ -19,16 +19,17 @@
 // A copy of this code exists in firefox mochitests. They should be kept
 // in sync. Hence the exports synonym for non AMD contexts.
 var { helpers, assert } = (function () {
 
   var helpers = {};
 
   var { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
   var { TargetFactory } = require("devtools/client/framework/target");
+  var { gDevToolsBrowser } = require("devtools/client/framework/devtools-browser");
   var Services = require("Services");
 
   var assert = { ok: ok, is: is, log: info };
   var util = require("gcli/util/util");
   var cli = require("gcli/cli");
   var KeyEvent = require("gcli/util/util").KeyEvent;
 
   const { GcliFront } = require("devtools/shared/fronts/gcli");
@@ -206,18 +207,18 @@ var { helpers, assert } = (function () {
  * - requisition
  * @return A promise which resolves to the options object when the 'load' event
  * happens on the new tab
  */
   helpers.openToolbar = function (options) {
     options = options || {};
     options.chromeWindow = options.chromeWindow || window;
 
-    return options.chromeWindow.DeveloperToolbar.show(true).then(function () {
-      var toolbar = options.chromeWindow.DeveloperToolbar;
+    var toolbar = gDevToolsBrowser.getDeveloperToolbar(options.chromeWindow);
+    return toolbar.show(true).then(function () {
       options.automator = createDeveloperToolbarAutomator(toolbar);
       options.requisition = toolbar.requisition;
       return options;
     });
   };
 
 /**
  * Navigate the current tab to a URL
@@ -238,17 +239,18 @@ var { helpers, assert } = (function () {
   });
 
 /**
  * Undo the effects of |helpers.openToolbar|
  * @param options The options object passed to |helpers.openToolbar|
  * @return A promise resolved (with undefined) when the toolbar is closed
  */
   helpers.closeToolbar = function (options) {
-    return options.chromeWindow.DeveloperToolbar.hide().then(function () {
+    var toolbar = gDevToolsBrowser.getDeveloperToolbar(options.chromeWindow).hide();
+    return toolbar.then(function () {
       delete options.automator;
       delete options.requisition;
     });
   };
 
 /**
  * A helper to work with Task.spawn so you can do:
  *   return Task.spawn(realTestFunc).then(finish, helpers.handleError);
@@ -318,28 +320,28 @@ var { helpers, assert } = (function () {
  * As addTab, but that also opens the developer toolbar. In addition a new
  * 'automator' property is added to the options object which uses the
  * developer toolbar
  */
   helpers.addTabWithToolbar = function (url, callback, options) {
     return helpers.addTab(url, function (innerOptions) {
       var win = innerOptions.chromeWindow;
 
-      return win.DeveloperToolbar.show(true).then(function () {
-        var toolbar = win.DeveloperToolbar;
+      var toolbar = gDevToolsBrowser.getDeveloperToolbar(win);
+      return toolbar.show(true).then(function () {
         innerOptions.automator = createDeveloperToolbarAutomator(toolbar);
         innerOptions.requisition = toolbar.requisition;
 
         var reply = callback.call(null, innerOptions);
 
         return Promise.resolve(reply).catch(function (error) {
           ok(false, error);
           console.error(error);
         }).then(function () {
-          win.DeveloperToolbar.hide().then(function () {
+          toolbar.hide().then(function () {
             delete innerOptions.automator;
           });
         });
       });
     }, options);
   };
 
 /**
--- a/devtools/client/framework/devtools-browser.js
+++ b/devtools/client/framework/devtools-browser.js
@@ -19,16 +19,17 @@ const {gDevTools} = require("./devtools"
 
 // Load target and toolbox lazily as they need gDevTools to be fully initialized
 loader.lazyRequireGetter(this, "TargetFactory", "devtools/client/framework/target", true);
 loader.lazyRequireGetter(this, "Toolbox", "devtools/client/framework/toolbox", true);
 loader.lazyRequireGetter(this, "DebuggerServer", "devtools/server/main", true);
 loader.lazyRequireGetter(this, "DebuggerClient", "devtools/shared/client/main", true);
 loader.lazyRequireGetter(this, "BrowserMenus", "devtools/client/framework/browser-menus");
 loader.lazyRequireGetter(this, "appendStyleSheet", "devtools/client/shared/stylesheet-utils", true);
+loader.lazyRequireGetter(this, "DeveloperToolbar", "devtools/client/shared/developer-toolbar", true);
 
 loader.lazyImporter(this, "CustomizableUI", "resource:///modules/CustomizableUI.jsm");
 loader.lazyImporter(this, "CustomizableWidgets", "resource:///modules/CustomizableWidgets.jsm");
 loader.lazyImporter(this, "AppConstants", "resource://gre/modules/AppConstants.jsm");
 loader.lazyImporter(this, "LightweightThemeManager", "resource://gre/modules/LightweightThemeManager.jsm");
 
 const {LocalizationHelper} = require("devtools/shared/l10n");
 const L10N = new LocalizationHelper("devtools/client/locales/toolbox.properties");
@@ -50,16 +51,21 @@ var gDevToolsBrowser = exports.gDevTools
   _trackedBrowserWindows: new Set(),
 
   /**
    * WeakMap keeping track of the devtools-browser stylesheets loaded in the various
    * tracked windows.
    */
   _browserStyleSheets: new WeakMap(),
 
+  /**
+   * WeakMap keeping track of DeveloperToolbar instances for each firefox window.
+   */
+  _toolbars: new WeakMap(),
+
   _tabStats: {
     peakOpen: 0,
     peakPinned: 0,
     histOpen: [],
     histPinned: []
   },
 
   /**
@@ -103,17 +109,17 @@ var gDevToolsBrowser = exports.gDevTools
     toggleMenuItem("menu_devToolbar", devToolbarEnabled);
     let focusEl = doc.getElementById("menu_devToolbar");
     if (devToolbarEnabled) {
       focusEl.removeAttribute("disabled");
     } else {
       focusEl.setAttribute("disabled", "true");
     }
     if (devToolbarEnabled && Services.prefs.getBoolPref("devtools.toolbar.visible")) {
-      win.DeveloperToolbar.show(false).catch(console.error);
+      this.getDeveloperToolbar(win).show(false).catch(console.error);
     }
 
     // Enable WebIDE?
     let webIDEEnabled = Services.prefs.getBoolPref("devtools.webide.enabled");
     toggleMenuItem("menu_webide", webIDEEnabled);
 
     if (webIDEEnabled) {
       gDevToolsBrowser.installWebIDEWidget();
@@ -494,36 +500,46 @@ var gDevToolsBrowser = exports.gDevTools
     gDevToolsBrowser._trackedBrowserWindows.add(win);
 
     BrowserMenus.addMenus(win.document);
 
     // Register the Developer widget in the Hamburger menu or navbar
     // only once menus are registered as it depends on it.
     gDevToolsBrowser.installDeveloperWidget();
 
-    // Inject lazily DeveloperToolbar on the chrome window
-    loader.lazyGetter(win, "DeveloperToolbar", function () {
-      let { DeveloperToolbar } = require("devtools/client/shared/developer-toolbar");
-      return new DeveloperToolbar(win);
-    });
-
     this.updateCommandAvailability(win);
     this.updateDevtoolsThemeAttribute(win);
     this.ensurePrefObserver();
     win.addEventListener("unload", this);
 
     let tabContainer = win.gBrowser.tabContainer;
     tabContainer.addEventListener("TabSelect", this);
     tabContainer.addEventListener("TabOpen", this);
     tabContainer.addEventListener("TabClose", this);
     tabContainer.addEventListener("TabPinned", this);
     tabContainer.addEventListener("TabUnpinned", this);
   },
 
   /**
+   * Create singleton instance of the developer toolbar for a given top level window.
+   *
+   * @param {Window} win
+   *        The window to which the toolbar should be created.
+   */
+  getDeveloperToolbar(win) {
+    let toolbar = this._toolbars.get(win);
+    if (toolbar) {
+      return toolbar;
+    }
+    toolbar = new DeveloperToolbar(win);
+    this._toolbars.set(win, toolbar);
+    return toolbar;
+  },
+
+  /**
    * Hook the JS debugger tool to the "Debug Script" button of the slow script
    * dialog.
    */
   setSlowScriptDebugHandler() {
     let debugService = Cc["@mozilla.org/dom/slow-script-debug;1"]
                          .getService(Ci.nsISlowScriptDebug);
     let tm = Cc["@mozilla.org/thread-manager;1"].getService(Ci.nsIThreadManager);
 
@@ -722,21 +738,17 @@ var gDevToolsBrowser = exports.gDevTools
     }
 
     let styleSheet = this._browserStyleSheets.get(win);
     if (styleSheet) {
       styleSheet.remove();
       this._browserStyleSheets.delete(win);
     }
 
-    // Destroy the Developer toolbar if it has been accessed
-    let desc = Object.getOwnPropertyDescriptor(win, "DeveloperToolbar");
-    if (desc && !desc.get) {
-      win.DeveloperToolbar.destroy();
-    }
+    this._toolbars.delete(win);
 
     let tabContainer = win.gBrowser.tabContainer;
     tabContainer.removeEventListener("TabSelect", this);
     tabContainer.removeEventListener("TabOpen", this);
     tabContainer.removeEventListener("TabClose", this);
     tabContainer.removeEventListener("TabPinned", this);
     tabContainer.removeEventListener("TabUnpinned", this);
   },
--- a/devtools/client/menus.js
+++ b/devtools/client/menus.js
@@ -70,19 +70,19 @@ exports.menuitems = [
     l10nKey: "devToolbarMenu",
     disabled: true,
     oncommand(event) {
       let window = event.target.ownerDocument.defaultView;
       // Distinguish events when selecting a menuitem, where we either open
       // or close the toolbar and when hitting the key shortcut where we just
       // focus the toolbar if it doesn't already has it.
       if (event.target.tagName.toLowerCase() == "menuitem") {
-        window.DeveloperToolbar.toggle();
+        gDevToolsBrowser.getDeveloperToolbar(window).toggle();
       } else {
-        window.DeveloperToolbar.focusToggle();
+        gDevToolsBrowser.getDeveloperToolbar(window).focusToggle();
       }
     },
     key: {
       id: "devToolbar",
       modifiers: "shift"
     },
     checkbox: true
   },
--- a/devtools/client/shared/developer-toolbar.js
+++ b/devtools/client/shared/developer-toolbar.js
@@ -225,17 +225,19 @@ DeveloperToolbar.prototype.createToolbar
   }
   let toolbar = this._doc.createElement("toolbar");
   toolbar.setAttribute("id", "developer-toolbar");
   toolbar.setAttribute("hidden", "true");
 
   let close = this._doc.createElement("toolbarbutton");
   close.setAttribute("id", "developer-toolbar-closebutton");
   close.setAttribute("class", "close-icon");
-  close.setAttribute("oncommand", "DeveloperToolbar.hide();");
+  close.addEventListener("command", (event) => {
+    this.hide();
+  });
   let closeTooltip = L10N.getStr("toolbar.closeButton.tooltip");
   close.setAttribute("tooltiptext", closeTooltip);
 
   let stack = this._doc.createElement("stack");
   stack.setAttribute("flex", "1");
 
   let input = this._doc.createElement("textbox");
   input.setAttribute("class", "gclitoolbar-input-node");
--- a/devtools/client/shared/test/.eslintrc.js
+++ b/devtools/client/shared/test/.eslintrc.js
@@ -1,9 +1,6 @@
 "use strict";
 
 module.exports = {
   // Extend from the shared list of defined globals for mochitests.
   "extends": "../../../.eslintrc.mochitests.js",
-  "globals": {
-    "DeveloperToolbar": true
-  }
 };
--- a/devtools/client/shared/test/browser_toolbar_basic.js
+++ b/devtools/client/shared/test/browser_toolbar_basic.js
@@ -1,27 +1,30 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Tests that the developer toolbar works properly
 
+const {gDevToolsBrowser} = require("devtools/client/framework/devtools-browser");
+
 const TEST_URI = TEST_URI_ROOT + "doc_toolbar_basic.html";
 
 add_task(function* () {
   info("Starting browser_toolbar_basic.js");
   yield addTab(TEST_URI);
 
-  ok(!DeveloperToolbar.visible, "DeveloperToolbar is not visible in to start");
+  let toolbar = gDevToolsBrowser.getDeveloperToolbar(window);
+  ok(!toolbar.visible, "DeveloperToolbar is not visible in to start");
 
-  let shown = oneTimeObserve(DeveloperToolbar.NOTIFICATIONS.SHOW);
+  let shown = oneTimeObserve(toolbar.NOTIFICATIONS.SHOW);
   document.getElementById("menu_devToolbar").doCommand();
   yield shown;
-  ok(DeveloperToolbar.visible, "DeveloperToolbar is visible in checkOpen");
+  ok(toolbar.visible, "DeveloperToolbar is visible in checkOpen");
 
   let close = document.getElementById("developer-toolbar-closebutton");
   ok(close, "Close button exists");
 
   let toggleToolbox =
     document.getElementById("menu_devToolbox");
   ok(!isChecked(toggleToolbox), "toggle toolbox button is not checked");
 
@@ -31,30 +34,30 @@ add_task(function* () {
 
   yield addTab("about:blank");
   info("Opened a new tab");
 
   ok(!isChecked(toggleToolbox), "toggle toolbox button is not checked");
 
   gBrowser.removeCurrentTab();
 
-  let hidden = oneTimeObserve(DeveloperToolbar.NOTIFICATIONS.HIDE);
+  let hidden = oneTimeObserve(toolbar.NOTIFICATIONS.HIDE);
   document.getElementById("menu_devToolbar").doCommand();
   yield hidden;
-  ok(!DeveloperToolbar.visible, "DeveloperToolbar is not visible in hidden");
+  ok(!toolbar.visible, "DeveloperToolbar is not visible in hidden");
 
-  shown = oneTimeObserve(DeveloperToolbar.NOTIFICATIONS.SHOW);
+  shown = oneTimeObserve(toolbar.NOTIFICATIONS.SHOW);
   document.getElementById("menu_devToolbar").doCommand();
   yield shown;
-  ok(DeveloperToolbar.visible, "DeveloperToolbar is visible in after open");
+  ok(toolbar.visible, "DeveloperToolbar is visible in after open");
 
   ok(isChecked(toggleToolbox), "toggle toolbox button is checked");
 
-  hidden = oneTimeObserve(DeveloperToolbar.NOTIFICATIONS.HIDE);
+  hidden = oneTimeObserve(toolbar.NOTIFICATIONS.HIDE);
   document.getElementById("developer-toolbar-closebutton").doCommand();
   yield hidden;
 
-  ok(!DeveloperToolbar.visible, "DeveloperToolbar is not visible after re-close");
+  ok(!toolbar.visible, "DeveloperToolbar is not visible after re-close");
 });
 
 function isChecked(b) {
   return b.getAttribute("checked") == "true";
 }
--- a/devtools/client/shared/test/browser_toolbar_tooltip.js
+++ b/devtools/client/shared/test/browser_toolbar_tooltip.js
@@ -1,99 +1,103 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Tests that the developer toolbar works properly
 
+const {gDevToolsBrowser} = require("devtools/client/framework/devtools-browser");
+
 const TEST_URI = "data:text/html;charset=utf-8,<p>Tooltip Tests</p>";
 const PREF_DEVTOOLS_THEME = "devtools.theme";
 
 registerCleanupFunction(() => {
   // Set preferences back to their original values
   Services.prefs.clearUserPref(PREF_DEVTOOLS_THEME);
 });
 
+let toolbar = gDevToolsBrowser.getDeveloperToolbar(window);
+
 add_task(function* showToolbar() {
   yield addTab(TEST_URI);
 
   info("Starting browser_toolbar_tooltip.js");
 
-  ok(!DeveloperToolbar.visible, "DeveloperToolbar is not visible in runTest");
+  ok(!toolbar.visible, "DeveloperToolbar is not visible in runTest");
 
-  let showPromise = observeOnce(DeveloperToolbar.NOTIFICATIONS.SHOW);
+  let showPromise = observeOnce(toolbar.NOTIFICATIONS.SHOW);
   document.getElementById("menu_devToolbar").doCommand();
   yield showPromise;
 });
 
 add_task(function* testDimensions() {
-  let tooltipPanel = DeveloperToolbar.tooltipPanel;
+  let tooltipPanel = toolbar.tooltipPanel;
 
-  DeveloperToolbar.focusManager.helpRequest();
-  yield DeveloperToolbar.inputter.setInput("help help");
+  toolbar.focusManager.helpRequest();
+  yield toolbar.inputter.setInput("help help");
 
-  DeveloperToolbar.inputter.setCursor({ start: "help help".length });
+  toolbar.inputter.setCursor({ start: "help help".length });
   is(tooltipPanel._dimensions.start, "help ".length,
           "search param start, when cursor at end");
   ok(getLeftMargin() > 30, "tooltip offset, when cursor at end");
 
-  DeveloperToolbar.inputter.setCursor({ start: "help".length });
+  toolbar.inputter.setCursor({ start: "help".length });
   is(tooltipPanel._dimensions.start, 0,
           "search param start, when cursor at end of command");
   ok(getLeftMargin() > 9, "tooltip offset, when cursor at end of command");
 
-  DeveloperToolbar.inputter.setCursor({ start: "help help".length - 1 });
+  toolbar.inputter.setCursor({ start: "help help".length - 1 });
   is(tooltipPanel._dimensions.start, "help ".length,
           "search param start, when cursor at penultimate position");
   ok(getLeftMargin() > 30, "tooltip offset, when cursor at penultimate position");
 
-  DeveloperToolbar.inputter.setCursor({ start: 0 });
+  toolbar.inputter.setCursor({ start: 0 });
   is(tooltipPanel._dimensions.start, 0,
           "search param start, when cursor at start");
   ok(getLeftMargin() > 9, "tooltip offset, when cursor at start");
 });
 
 add_task(function* testThemes() {
-  let tooltipPanel = DeveloperToolbar.tooltipPanel;
+  let tooltipPanel = toolbar.tooltipPanel;
   ok(tooltipPanel.document, "Tooltip panel is initialized");
 
   Services.prefs.setCharPref(PREF_DEVTOOLS_THEME, "dark");
 
-  yield DeveloperToolbar.inputter.setInput("");
-  yield DeveloperToolbar.inputter.setInput("help help");
+  yield toolbar.inputter.setInput("");
+  yield toolbar.inputter.setInput("help help");
   is(tooltipPanel.document.documentElement.getAttribute("devtoolstheme"),
      "dark", "Tooltip panel has correct theme");
 
   Services.prefs.setCharPref(PREF_DEVTOOLS_THEME, "light");
 
-  yield DeveloperToolbar.inputter.setInput("");
-  yield DeveloperToolbar.inputter.setInput("help help");
+  yield toolbar.inputter.setInput("");
+  yield toolbar.inputter.setInput("help help");
   is(tooltipPanel.document.documentElement.getAttribute("devtoolstheme"),
      "light", "Tooltip panel has correct theme");
 });
 
 add_task(function* hideToolbar() {
   info("Ending browser_toolbar_tooltip.js");
-  yield DeveloperToolbar.inputter.setInput("");
+  yield toolbar.inputter.setInput("");
 
-  ok(DeveloperToolbar.visible, "DeveloperToolbar is visible in hideToolbar");
+  ok(toolbar.visible, "DeveloperToolbar is visible in hideToolbar");
 
   info("Hide toolbar");
-  let hidePromise = observeOnce(DeveloperToolbar.NOTIFICATIONS.HIDE);
+  let hidePromise = observeOnce(toolbar.NOTIFICATIONS.HIDE);
   document.getElementById("menu_devToolbar").doCommand();
   yield hidePromise;
 
-  ok(!DeveloperToolbar.visible, "DeveloperToolbar is not visible in hideToolbar");
+  ok(!toolbar.visible, "DeveloperToolbar is not visible in hideToolbar");
 
   info("Done test");
 });
 
 function getLeftMargin() {
-  let style = DeveloperToolbar.tooltipPanel._panel.style.marginLeft;
+  let style = toolbar.tooltipPanel._panel.style.marginLeft;
   return parseInt(style.slice(0, -2), 10);
 }
 
 function observeOnce(topic, ownsWeak = false) {
   return new Promise(function (resolve, reject) {
     let resolver = function (subject) {
       Services.obs.removeObserver(resolver, topic);
       resolve(subject);
--- a/devtools/client/shared/test/browser_toolbar_webconsole_errors_count.js
+++ b/devtools/client/shared/test/browser_toolbar_webconsole_errors_count.js
@@ -2,24 +2,28 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /* eslint-disable mozilla/no-cpows-in-tests */
 
 "use strict";
 
 // Tests that the developer toolbar errors count works properly.
 
+const {gDevToolsBrowser} = require("devtools/client/framework/devtools-browser");
+
 // Use the old webconsole since this is directly accessing old DOM, and
 // the error count isn't reset when pressing the clear button in new one
 // See Bug 1304794.
 Services.prefs.setBoolPref("devtools.webconsole.new-frontend-enabled", false);
 registerCleanupFunction(function* () {
   Services.prefs.clearUserPref("devtools.webconsole.new-frontend-enabled");
 });
 
+let toolbar = gDevToolsBrowser.getDeveloperToolbar(window);
+
 function test() {
   const TEST_URI = TEST_URI_ROOT + "doc_toolbar_webconsole_errors_count.html";
 
   let tab1, tab2, webconsole;
 
   Services.prefs.setBoolPref("javascript.options.strict", true);
 
   registerCleanupFunction(() => {
@@ -30,25 +34,25 @@ function test() {
   addTab(TEST_URI).then(openToolbar);
 
   function openToolbar(tab) {
     tab1 = tab;
     ignoreAllUncaughtExceptions(false);
 
     expectUncaughtException();
 
-    if (!DeveloperToolbar.visible) {
-      DeveloperToolbar.show(true).then(onOpenToolbar);
+    if (!toolbar.visible) {
+      toolbar.show(true).then(onOpenToolbar);
     } else {
       onOpenToolbar();
     }
   }
 
   function onOpenToolbar() {
-    ok(DeveloperToolbar.visible, "DeveloperToolbar is visible");
+    ok(toolbar.visible, "DeveloperToolbar is visible");
     webconsole = document.getElementById("developer-toolbar-toolbox-button");
 
     waitForButtonUpdate({
       name: "web console button shows page errors",
       errors: 3,
       warnings: 0,
       callback: addErrors,
     });
@@ -235,19 +239,19 @@ function test() {
         // Get out of the toolbar event execution loop.
         executeSoon(options.callback);
       }
       return result;
     }
 
     if (!check()) {
       info("wait for: " + options.name);
-      DeveloperToolbar.on("errors-counter-updated", function onUpdate(event) {
+      toolbar.on("errors-counter-updated", function onUpdate(event) {
         if (check()) {
-          DeveloperToolbar.off(event, onUpdate);
+          toolbar.off(event, onUpdate);
         }
       });
     }
   }
 
   function openWebConsole(tab, callback) {
     let target = TargetFactory.forTab(tab);
     gDevTools.showToolbox(target, "webconsole").then((toolbox) =>
--- a/devtools/client/webconsole/hudservice.js
+++ b/devtools/client/webconsole/hudservice.js
@@ -2,16 +2,17 @@
  * 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 WebConsoleUtils = require("devtools/client/webconsole/utils").Utils;
 const {extend} = require("devtools/shared/extend");
 var {TargetFactory} = require("devtools/client/framework/target");
+var {gDevToolsBrowser} = require("devtools/client/framework/devtools-browser");
 var {Tools} = require("devtools/client/definitions");
 const { Task } = require("devtools/shared/task");
 var promise = require("promise");
 var Services = require("Services");
 loader.lazyRequireGetter(this, "Telemetry", "devtools/client/shared/telemetry");
 loader.lazyRequireGetter(this, "WebConsoleFrame", "devtools/client/webconsole/webconsole", true);
 loader.lazyRequireGetter(this, "NewWebConsoleFrame", "devtools/client/webconsole/new-webconsole", true);
 loader.lazyRequireGetter(this, "gDevTools", "devtools/client/framework/devtools", true);
@@ -384,17 +385,18 @@ WebConsole.prototype = {
 
   /**
    * The clear output button handler.
    * @private
    */
   _onClearButton: function WC__onClearButton()
   {
     if (this.target.isLocalTab) {
-      this.browserWindow.DeveloperToolbar.resetErrorsCount(this.target.tab);
+      gDevToolsBrowser.getDeveloperToolbar(this.browserWindow)
+        .resetErrorsCount(this.target.tab);
     }
   },
 
   /**
    * Alias for the WebConsoleFrame.setFilterState() method.
    * @see webconsole.js::WebConsoleFrame.setFilterState()
    */
   setFilterState: function WC_setFilterState()
--- a/dom/animation/test/mozilla/file_hide_and_show.html
+++ b/dom/animation/test/mozilla/file_hide_and_show.html
@@ -3,16 +3,21 @@
 <script src="../testcommon.js"></script>
 <style>
 @keyframes move {
   100% {
     transform: translateX(100px);
   }
 }
 
+div.pseudo::before {
+  animation: move 0.01s;
+  content: 'content';
+}
+
 </style>
 <body>
 <script>
 'use strict';
 
 test(function(t) {
   var div = addDiv(t, { style: 'animation: move 100s infinite' });
   assert_equals(div.getAnimations().length, 1,
@@ -152,11 +157,40 @@ test(function(t) {
                 'animations again');
 
   assert_not_equals(div.getAnimations()[0], animation,
                     'Restarted animation is a newly-generated animation');
 
 }, 'CSS Animation which has already finished starts playing when its parent ' +
    'element is shown from "display:none" state');
 
+promise_test(function(t) {
+  var div = addDiv(t, { 'class': 'pseudo' });
+  var eventWatcher = new EventWatcher(t, div, 'animationend');
+
+  assert_equals(document.getAnimations().length, 1,
+                'CSS animation on pseudo element');
+
+  return eventWatcher.wait_for('animationend').then(function() {
+    assert_equals(document.getAnimations().length, 0,
+                  'No CSS animation on pseudo element after the animation ' +
+                  'finished');
+
+    // Remove the class which generated this pseudo element.
+    div.classList.remove('pseudo');
+
+    // We need to wait for two frames to process re-framing.
+    // The callback of 'animationend' is processed just before rAF callbacks,
+    // and rAF callbacks are processed before re-framing process, so waiting for
+    // one rAF callback is not sufficient.
+    return waitForAnimationFrames(2);
+  }).then(function() {
+    // Add the class again to re-generate pseudo element.
+    div.classList.add('pseudo');
+    assert_equals(document.getAnimations().length, 1,
+                  'A new CSS animation on pseudo element');
+  });
+}, 'CSS animation on pseudo element restarts after the pseudo element that ' +
+   'had a finished CSS animation is re-generated');
+
 done();
 </script>
 </body>
--- a/dom/events/EventStateManager.cpp
+++ b/dom/events/EventStateManager.cpp
@@ -181,23 +181,16 @@ PrintDocTreeAll(nsIDocShellTreeItem* aIt
       break;
     item = parent;
   }
 
   PrintDocTree(item, 0);
 }
 #endif
 
-// mask values for ui.key.chromeAccess and ui.key.contentAccess
-#define NS_MODIFIER_SHIFT    1
-#define NS_MODIFIER_CONTROL  2
-#define NS_MODIFIER_ALT      4
-#define NS_MODIFIER_META     8
-#define NS_MODIFIER_OS       16
-
 /******************************************************************/
 /* mozilla::UITimerCallback                                       */
 /******************************************************************/
 
 class UITimerCallback final :
     public nsITimerCallback,
     public nsINamed
 {
@@ -763,40 +756,44 @@ EventStateManager::PreHandleEvent(nsPres
   case eDragOver:
     // Send the enter/exit events before eDrop.
     GenerateDragDropEnterExit(aPresContext, aEvent->AsDragEvent());
     break;
 
   case eKeyPress:
     {
       WidgetKeyboardEvent* keyEvent = aEvent->AsKeyboardEvent();
-
-      int32_t modifierMask = 0;
-      if (keyEvent->IsShift())
-        modifierMask |= NS_MODIFIER_SHIFT;
-      if (keyEvent->IsControl())
-        modifierMask |= NS_MODIFIER_CONTROL;
-      if (keyEvent->IsAlt())
-        modifierMask |= NS_MODIFIER_ALT;
-      if (keyEvent->IsMeta())
-        modifierMask |= NS_MODIFIER_META;
-      if (keyEvent->IsOS())
-        modifierMask |= NS_MODIFIER_OS;
-
-      // Prevent keyboard scrolling while an accesskey modifier is in use.
-      if (modifierMask) {
-        bool matchesContentAccessKey = (modifierMask == Prefs::ContentAccessModifierMask());
-
-        if (modifierMask == Prefs::ChromeAccessModifierMask() ||
-            matchesContentAccessKey) {
+      if (keyEvent->ModifiersMatchWithAccessKey(AccessKeyType::eChrome) ||
+          keyEvent->ModifiersMatchWithAccessKey(AccessKeyType::eContent)) {
+        // If the eKeyPress event will be sent to a remote process, this
+        // process needs to wait reply from the remote process for checking if
+        // preceding eKeyDown event is consumed.  If preceding eKeyDown event
+        // is consumed in the remote process, TabChild won't send the event
+        // back to this process.  So, only when this process receives a reply
+        // eKeyPress event in TabParent, we should handle accesskey in this
+        // process.
+        if (IsRemoteTarget(GetFocusedContent())) {
+          // However, if there is no accesskey target for the key combination,
+          // we don't need to wait reply from the remote process.  Otherwise,
+          // Mark the event as waiting reply from remote process and stop
+          // propagation in this process.
+          if (CheckIfEventMatchesAccessKey(keyEvent, aPresContext)) {
+            keyEvent->StopPropagation();
+            keyEvent->MarkAsWaitingReplyFromRemoteProcess();
+          }
+        }
+        // If the event target is in this process, we can handle accesskey now
+        // since if preceding eKeyDown event was consumed, eKeyPress event
+        // won't be dispatched by widget.  So, coming eKeyPress event means
+        // that the preceding eKeyDown event wasn't consumed in this case.
+        else {
           AutoTArray<uint32_t, 10> accessCharCodes;
           keyEvent->GetAccessKeyCandidates(accessCharCodes);
 
-          if (HandleAccessKey(keyEvent, aPresContext, accessCharCodes,
-                              modifierMask, matchesContentAccessKey)) {
+          if (HandleAccessKey(keyEvent, aPresContext, accessCharCodes)) {
             *aStatus = nsEventStatus_eConsumeNoDefault;
           }
         }
       }
     }
     // then fall through...
     MOZ_FALLTHROUGH;
   case eKeyDown:
@@ -812,16 +809,28 @@ EventStateManager::PreHandleEvent(nsPres
       //       TextComposition::IsComposing() is false even before
       //       compositionend if there is no composing string.
       //       And also don't expose other document's composition state.
       //       A native IME context is typically shared by multiple documents.
       //       So, don't use GetTextCompositionFor(nsIWidget*) here.
       RefPtr<TextComposition> composition =
         IMEStateManager::GetTextCompositionFor(aPresContext);
       aEvent->AsKeyboardEvent()->mIsComposing = !!composition;
+
+      // Widget may need to perform default action for specific keyboard
+      // event if it's not consumed.  In this case, widget has already marked
+      // the event as "waiting reply from remote process".  However, we need
+      // to reset it if the target (focused content) isn't in a remote process
+      // because PresShell needs to check if it's marked as so before
+      // dispatching events into the DOM tree.
+      if (aEvent->IsWaitingReplyFromRemoteProcess() &&
+          !aEvent->PropagationStopped() &&
+          !IsRemoteTarget(content)) {
+        aEvent->ResetWaitingReplyFromRemoteProcessState();
+      }
     }
     break;
   case eWheel:
   case eWheelOperationStart:
   case eWheelOperationEnd:
     {
       NS_ASSERTION(aEvent->IsTrusted(),
                    "Untrusted wheel event shouldn't be here");
@@ -919,33 +928,31 @@ EventStateManager::HandleQueryContentEve
     contentObserver->HandleQueryContentEvent(aEvent);
     return;
   }
 
   ContentEventHandler handler(mPresContext);
   handler.HandleQueryContentEvent(aEvent);
 }
 
-// static
-int32_t
-EventStateManager::GetAccessModifierMaskFor(nsISupports* aDocShell)
+static AccessKeyType
+GetAccessKeyTypeFor(nsISupports* aDocShell)
 {
   nsCOMPtr<nsIDocShellTreeItem> treeItem(do_QueryInterface(aDocShell));
-  if (!treeItem)
-    return -1; // invalid modifier
+  if (!treeItem) {
+    return AccessKeyType::eNone;
+  }
 
   switch (treeItem->ItemType()) {
-  case nsIDocShellTreeItem::typeChrome:
-    return Prefs::ChromeAccessModifierMask();
-
-  case nsIDocShellTreeItem::typeContent:
-    return Prefs::ContentAccessModifierMask();
-
-  default:
-    return -1; // invalid modifier
+    case nsIDocShellTreeItem::typeChrome:
+      return AccessKeyType::eChrome;
+    case nsIDocShellTreeItem::typeContent:
+      return AccessKeyType::eContent;
+    default:
+      return AccessKeyType::eNone;
   }
 }
 
 static bool
 IsAccessKeyTarget(nsIContent* aContent, nsIFrame* aFrame, nsAString& aKey)
 {
   // Use GetAttr because we want Unicode case=insensitive matching
   // XXXbz shouldn't this be case-sensitive, per spec?
@@ -987,18 +994,32 @@ IsAccessKeyTarget(nsIContent* aContent, 
   if (aContent->IsXULElement(nsGkAtoms::label)) {
     return true;
   }
 
   return false;
 }
 
 bool
-EventStateManager::ExecuteAccessKey(nsTArray<uint32_t>& aAccessCharCodes,
-                                    bool aIsTrustedEvent)
+EventStateManager::CheckIfEventMatchesAccessKey(WidgetKeyboardEvent* aEvent,
+                                                nsPresContext* aPresContext)
+{
+  AutoTArray<uint32_t, 10> accessCharCodes;
+  aEvent->GetAccessKeyCandidates(accessCharCodes);
+  return WalkESMTreeToHandleAccessKey(const_cast<WidgetKeyboardEvent*>(aEvent),
+                                      aPresContext, accessCharCodes,
+                                      nullptr, eAccessKeyProcessingNormal,
+                                      false);
+}
+
+bool
+EventStateManager::LookForAccessKeyAndExecute(
+                     nsTArray<uint32_t>& aAccessCharCodes,
+                     bool aIsTrustedEvent,
+                     bool aExecute)
 {
   int32_t count, start = -1;
   nsIContent* focusedContent = GetFocusedContent();
   if (focusedContent) {
     start = mAccessKeys.IndexOf(focusedContent);
     if (start == -1 && focusedContent->GetBindingParent())
       start = mAccessKeys.IndexOf(focusedContent->GetBindingParent());
   }
@@ -1008,16 +1029,19 @@ EventStateManager::ExecuteAccessKey(nsTA
   for (uint32_t i = 0; i < aAccessCharCodes.Length(); ++i) {
     uint32_t ch = aAccessCharCodes[i];
     nsAutoString accessKey;
     AppendUCS4ToUTF16(ch, accessKey);
     for (count = 1; count <= length; ++count) {
       content = mAccessKeys[(start + count) % length];
       frame = content->GetPrimaryFrame();
       if (IsAccessKeyTarget(content, frame, accessKey)) {
+        if (!aExecute) {
+          return true;
+        }
         bool shouldActivate = Prefs::KeyCausesActivation();
         while (shouldActivate && ++count <= length) {
           nsIContent *oc = mAccessKeys[(start + count) % length];
           nsIFrame *of = oc->GetPrimaryFrame();
           if (IsAccessKeyTarget(oc, of, accessKey))
             shouldActivate = false;
         }
 
@@ -1054,98 +1078,109 @@ EventStateManager::ExecuteAccessKey(nsTA
 // static
 void
 EventStateManager::GetAccessKeyLabelPrefix(Element* aElement, nsAString& aPrefix)
 {
   aPrefix.Truncate();
   nsAutoString separator, modifierText;
   nsContentUtils::GetModifierSeparatorText(separator);
 
-  nsCOMPtr<nsISupports> container = aElement->OwnerDoc()->GetDocShell();
-  int32_t modifierMask = GetAccessModifierMaskFor(container);
-
-  if (modifierMask == -1) {
+  AccessKeyType accessKeyType =
+    GetAccessKeyTypeFor(aElement->OwnerDoc()->GetDocShell());
+  if (accessKeyType == AccessKeyType::eNone) {
     return;
   }
-
-  if (modifierMask & NS_MODIFIER_CONTROL) {
+  Modifiers modifiers = WidgetKeyboardEvent::AccessKeyModifiers(accessKeyType);
+  if (modifiers == MODIFIER_NONE) {
+    return;
+  }
+
+  if (modifiers & MODIFIER_CONTROL) {
     nsContentUtils::GetControlText(modifierText);
     aPrefix.Append(modifierText + separator);
   }
-  if (modifierMask & NS_MODIFIER_META) {
+  if (modifiers & MODIFIER_META) {
     nsContentUtils::GetMetaText(modifierText);
     aPrefix.Append(modifierText + separator);
   }
-  if (modifierMask & NS_MODIFIER_OS) {
+  if (modifiers & MODIFIER_OS) {
     nsContentUtils::GetOSText(modifierText);
     aPrefix.Append(modifierText + separator);
   }
-  if (modifierMask & NS_MODIFIER_ALT) {
+  if (modifiers & MODIFIER_ALT) {
     nsContentUtils::GetAltText(modifierText);
     aPrefix.Append(modifierText + separator);
   }
-  if (modifierMask & NS_MODIFIER_SHIFT) {
+  if (modifiers & MODIFIER_SHIFT) {
     nsContentUtils::GetShiftText(modifierText);
     aPrefix.Append(modifierText + separator);
   }
 }
 
 struct MOZ_STACK_CLASS AccessKeyInfo
 {
   WidgetKeyboardEvent* event;
   nsTArray<uint32_t>& charCodes;
-  int32_t modifierMask;
-
-  AccessKeyInfo(WidgetKeyboardEvent* aEvent, nsTArray<uint32_t>& aCharCodes, int32_t aModifierMask)
+
+  AccessKeyInfo(WidgetKeyboardEvent* aEvent,
+                nsTArray<uint32_t>& aCharCodes)
     : event(aEvent)
     , charCodes(aCharCodes)
-    , modifierMask(aModifierMask)
   {
   }
 };
 
 static bool
 HandleAccessKeyInRemoteChild(TabParent* aTabParent, void* aArg)
 {
   AccessKeyInfo* accessKeyInfo = static_cast<AccessKeyInfo*>(aArg);
 
   // Only forward accesskeys for the active tab.
   bool active;
   aTabParent->GetDocShellIsActive(&active);
   if (active) {
-    accessKeyInfo->event->mAccessKeyForwardedToChild = true;
+    // Even if there is no target for the accesskey in this process,
+    // the event may match with a content accesskey.  If so, the keyboard
+    // event should be handled with reply event for preventing double action.
+    // (e.g., Alt+Shift+F on Windows may focus a content in remote and open
+    // "File" menu.)
+    accessKeyInfo->event->StopPropagation();
+    accessKeyInfo->event->MarkAsWaitingReplyFromRemoteProcess();
     aTabParent->HandleAccessKey(*accessKeyInfo->event,
-                                accessKeyInfo->charCodes,
-                                accessKeyInfo->modifierMask);
+                                accessKeyInfo->charCodes);
     return true;
   }
 
   return false;
 }
 
 bool
-EventStateManager::HandleAccessKey(WidgetKeyboardEvent* aEvent,
-                                   nsPresContext* aPresContext,
-                                   nsTArray<uint32_t>& aAccessCharCodes,
-                                   bool aMatchesContentAccessKey,
-                                   nsIDocShellTreeItem* aBubbledFrom,
-                                   ProcessingAccessKeyState aAccessKeyState,
-                                   int32_t aModifierMask)
+EventStateManager::WalkESMTreeToHandleAccessKey(
+                     WidgetKeyboardEvent* aEvent,
+                     nsPresContext* aPresContext,
+                     nsTArray<uint32_t>& aAccessCharCodes,
+                     nsIDocShellTreeItem* aBubbledFrom,
+                     ProcessingAccessKeyState aAccessKeyState,
+                     bool aExecute)
 {
   EnsureDocument(mPresContext);
   nsCOMPtr<nsIDocShell> docShell = aPresContext->GetDocShell();
   if (NS_WARN_IF(!docShell) || NS_WARN_IF(!mDocument)) {
     return false;
   }
-
+  AccessKeyType accessKeyType = GetAccessKeyTypeFor(docShell);
+  if (accessKeyType == AccessKeyType::eNone) {
+    return false;
+  }
   // Alt or other accesskey modifier is down, we may need to do an accesskey.
   if (mAccessKeys.Count() > 0 &&
-      aModifierMask == GetAccessModifierMaskFor(docShell)) {
+      aEvent->ModifiersMatchWithAccessKey(accessKeyType)) {
     // Someone registered an accesskey.  Find and activate it.
-    if (ExecuteAccessKey(aAccessCharCodes, aEvent->IsTrusted())) {
+    if (LookForAccessKeyAndExecute(aAccessCharCodes,
+                                   aEvent->IsTrusted(), aExecute)) {
       return true;
     }
   }
 
   int32_t childCount;
   docShell->GetChildCount(&childCount);
   for (int32_t counter = 0; counter < childCount; counter++) {
     // Not processing the child which bubbles up the handling
@@ -1168,19 +1203,19 @@ EventStateManager::HandleAccessKey(Widge
       }
 
       nsPresContext *subPC = subPS->GetPresContext();
 
       EventStateManager* esm =
         static_cast<EventStateManager*>(subPC->EventStateManager());
 
       if (esm &&
-          esm->HandleAccessKey(aEvent, subPC, aAccessCharCodes,
-                               aMatchesContentAccessKey, nullptr,
-                               eAccessKeyProcessingDown, aModifierMask)) {
+          esm->WalkESMTreeToHandleAccessKey(aEvent, subPC, aAccessCharCodes,
+                                            nullptr, eAccessKeyProcessingDown,
+                                            aExecute)) {
         return true;
       }
     }
   }// if end . checking all sub docshell ends here.
 
   // bubble up the process to the parent docshell if necessary
   if (eAccessKeyProcessingDown != aAccessKeyState) {
     nsCOMPtr<nsIDocShellTreeItem> parentShellItem;
@@ -1191,39 +1226,48 @@ EventStateManager::HandleAccessKey(Widge
       NS_ASSERTION(parentPS, "Our PresShell exists but the parent's does not?");
 
       nsPresContext *parentPC = parentPS->GetPresContext();
       NS_ASSERTION(parentPC, "PresShell without PresContext");
 
       EventStateManager* esm =
         static_cast<EventStateManager*>(parentPC->EventStateManager());
       if (esm &&
-          esm->HandleAccessKey(aEvent, parentPC, aAccessCharCodes,
-                               aMatchesContentAccessKey, docShell,
-                               eAccessKeyProcessingDown, aModifierMask)) {
+          esm->WalkESMTreeToHandleAccessKey(aEvent, parentPC, aAccessCharCodes,
+                                            docShell, eAccessKeyProcessingDown,
+                                            aExecute)) {
         return true;
       }
     }
   }// if end. bubble up process
 
   // If the content access key modifier is pressed, try remote children
-  if (aMatchesContentAccessKey && mDocument && mDocument->GetWindow()) {
-    // If the focus is currently on a node with a TabParent, the key event will
-    // get forwarded to the child process and HandleAccessKey called from there.
+  if (aExecute &&
+      aEvent->ModifiersMatchWithAccessKey(AccessKeyType::eContent) &&
+      mDocument && mDocument->GetWindow()) {
+    // If the focus is currently on a node with a TabParent, the key event
+    // should've gotten forwarded to the child process and HandleAccessKey
+    // called from there.
+    if (TabParent::GetFrom(GetFocusedContent())) {
+      // If access key may be only in remote contents, this method won't handle
+      // access key synchronously.  In this case, only reply event should reach
+      // here.
+      MOZ_ASSERT(aEvent->IsHandledInRemoteProcess() ||
+                 !aEvent->IsWaitingReplyFromRemoteProcess());
+    }
     // If focus is somewhere else, then we need to check the remote children.
-    nsFocusManager* fm = nsFocusManager::GetFocusManager();
-    nsIContent* focusedContent = fm ? fm->GetFocusedContent() : nullptr;
-    if (TabParent::GetFrom(focusedContent)) {
-      // A remote child process is focused. The key event should get sent to
-      // the child process.
-      aEvent->mAccessKeyForwardedToChild = true;
-    } else {
-      AccessKeyInfo accessKeyInfo(aEvent, aAccessCharCodes, aModifierMask);
+    // However, if the event has already been handled in a remote process,
+    // then, focus is moved from the remote process after posting the event.
+    // In such case, we shouldn't retry to handle access keys in remote
+    // processes.
+    else if (!aEvent->IsHandledInRemoteProcess()) {
+      AccessKeyInfo accessKeyInfo(aEvent, aAccessCharCodes);
       nsContentUtils::CallOnAllRemoteChildren(mDocument->GetWindow(),
-                                              HandleAccessKeyInRemoteChild, &accessKeyInfo);
+                                              HandleAccessKeyInRemoteChild,
+                                              &accessKeyInfo);
     }
   }
 
   return false;
 }// end of HandleAccessKey
 
 void
 EventStateManager::DispatchCrossProcessEvent(WidgetEvent* aEvent,
@@ -5814,19 +5858,16 @@ EventStateManager::WheelPrefs::IsOverOne
 }
 
 /******************************************************************/
 /* mozilla::EventStateManager::Prefs                              */
 /******************************************************************/
 
 bool EventStateManager::Prefs::sKeyCausesActivation = true;
 bool EventStateManager::Prefs::sClickHoldContextMenu = false;
-int32_t EventStateManager::Prefs::sGenericAccessModifierKey = -1;
-int32_t EventStateManager::Prefs::sChromeAccessModifierMask = 0;
-int32_t EventStateManager::Prefs::sContentAccessModifierMask = 0;
 
 // static
 void
 EventStateManager::Prefs::Init()
 {
   DebugOnly<nsresult> rv = Preferences::RegisterCallback(OnChange, "dom.popup_allowed_events");
   MOZ_ASSERT(NS_SUCCEEDED(rv),
              "Failed to observe \"dom.popup_allowed_events\"");
@@ -5841,31 +5882,16 @@ EventStateManager::Prefs::Init()
                                     sKeyCausesActivation);
   MOZ_ASSERT(NS_SUCCEEDED(rv),
              "Failed to observe \"accessibility.accesskeycausesactivation\"");
   rv = Preferences::AddBoolVarCache(&sClickHoldContextMenu,
                                     "ui.click_hold_context_menus",
                                     sClickHoldContextMenu);
   MOZ_ASSERT(NS_SUCCEEDED(rv),
              "Failed to observe \"ui.click_hold_context_menus\"");
-  rv = Preferences::AddIntVarCache(&sGenericAccessModifierKey,
-                                   "ui.key.generalAccessKey",
-                                   sGenericAccessModifierKey);
-  MOZ_ASSERT(NS_SUCCEEDED(rv),
-             "Failed to observe \"ui.key.generalAccessKey\"");
-  rv = Preferences::AddIntVarCache(&sChromeAccessModifierMask,
-                                   "ui.key.chromeAccess",
-                                   sChromeAccessModifierMask);
-  MOZ_ASSERT(NS_SUCCEEDED(rv),
-             "Failed to observe \"ui.key.chromeAccess\"");
-  rv = Preferences::AddIntVarCache(&sContentAccessModifierMask,
-                                   "ui.key.contentAccess",
-                                   sContentAccessModifierMask);
-  MOZ_ASSERT(NS_SUCCEEDED(rv),
-             "Failed to observe \"ui.key.contentAccess\"");
   sPrefsAlreadyCached = true;
 }
 
 // static
 void
 EventStateManager::Prefs::OnChange(const char* aPrefName, void*)
 {
   nsDependentCString prefName(aPrefName);
@@ -5876,54 +5902,16 @@ EventStateManager::Prefs::OnChange(const
 
 // static
 void
 EventStateManager::Prefs::Shutdown()
 {
   Preferences::UnregisterCallback(OnChange, "dom.popup_allowed_events");
 }
 
-// static
-int32_t
-EventStateManager::Prefs::ChromeAccessModifierMask()
-{
-  return GetAccessModifierMask(nsIDocShellTreeItem::typeChrome);
-}
-
-// static
-int32_t
-EventStateManager::Prefs::ContentAccessModifierMask()
-{
-  return GetAccessModifierMask(nsIDocShellTreeItem::typeContent);
-}
-
-// static
-int32_t
-EventStateManager::Prefs::GetAccessModifierMask(int32_t aItemType)
-{
-  switch (sGenericAccessModifierKey) {
-    case -1:                             break; // use the individual prefs
-    case nsIDOMKeyEvent::DOM_VK_SHIFT:   return NS_MODIFIER_SHIFT;
-    case nsIDOMKeyEvent::DOM_VK_CONTROL: return NS_MODIFIER_CONTROL;
-    case nsIDOMKeyEvent::DOM_VK_ALT:     return NS_MODIFIER_ALT;
-    case nsIDOMKeyEvent::DOM_VK_META:    return NS_MODIFIER_META;
-    case nsIDOMKeyEvent::DOM_VK_WIN:     return NS_MODIFIER_OS;
-    default:                             return 0;
-  }
-
-  switch (aItemType) {
-    case nsIDocShellTreeItem::typeChrome:
-      return sChromeAccessModifierMask;
-    case nsIDocShellTreeItem::typeContent:
-      return sContentAccessModifierMask;
-    default:
-      return 0;
-  }
-}
-
 /******************************************************************/
 /* mozilla::AutoHandlingUserInputStatePusher                      */
 /******************************************************************/
 
 AutoHandlingUserInputStatePusher::AutoHandlingUserInputStatePusher(
                                     bool aIsHandlingUserInput,
                                     WidgetEvent* aEvent,
                                     nsIDocument* aDocument) :
--- a/dom/events/EventStateManager.h
+++ b/dom/events/EventStateManager.h
@@ -179,27 +179,57 @@ public:
    *
    * @param  aContent  the given element (must not be null)
    * @return           registered accesskey
    */
   uint32_t GetRegisteredAccessKey(nsIContent* aContent);
 
   static void GetAccessKeyLabelPrefix(dom::Element* aElement, nsAString& aPrefix);
 
+  /**
+   * HandleAccessKey() looks for access keys which matches with aEvent and
+   * execute when it matches with a chrome access key or some content access
+   * keys.
+   * If the event may match chrome access keys, this handles the access key
+   * synchronously (if there are nested ESMs, their HandleAccessKey() are
+   * also called recursively).
+   * If the event may match content access keys and focused target is a remote
+   * process, this does nothing for the content because when this is called,
+   * it should already have been handled in the remote process.
+   * If the event may match content access keys and focused target is not in
+   * remote process but there are some remote children, this will post
+   * HandleAccessKey messages to all remote children.
+   *
+   * @return            true if there is accesskey which aEvent and
+   *                    aAccessCharCodes match with.  Otherwise, false.
+   *                    I.e., when this returns true, a target is executed
+   *                    or focused.
+   *                    Note that even if this returns false, a target in
+   *                    remote process may be executed or focused
+   *                    asynchronously.
+   */
   bool HandleAccessKey(WidgetKeyboardEvent* aEvent,
                        nsPresContext* aPresContext,
-                       nsTArray<uint32_t>& aAccessCharCodes,
-                       int32_t aModifierMask,
-                       bool aMatchesContentAccessKey)
+                       nsTArray<uint32_t>& aAccessCharCodes)
   {
-    return HandleAccessKey(aEvent, aPresContext, aAccessCharCodes,
-                           aMatchesContentAccessKey, nullptr,
-                           eAccessKeyProcessingNormal, aModifierMask);
+    return WalkESMTreeToHandleAccessKey(aEvent, aPresContext, aAccessCharCodes,
+                                        nullptr, eAccessKeyProcessingNormal,
+                                        true);
   }
 
+  /**
+   * CheckIfEventMatchesAccessKey() looks for access key which matches with
+   * aEvent in the process but won't execute it.
+   *
+   * @return            true if there is accesskey which aEvent matches with
+   *                    in this process.  Otherwise, false.
+   */
+  bool CheckIfEventMatchesAccessKey(WidgetKeyboardEvent* aEvent,
+                                    nsPresContext* aPresContext);
+
   nsresult SetCursor(int32_t aCursor, imgIContainer* aContainer,
                      bool aHaveHotspot, float aHotspotX, float aHotspotY,
                      nsIWidget* aWidget, bool aLockCursor);
 
   static void StartHandlingUserInput()
   {
     ++sUserInputEventDepth;
     ++sUserInputCounter;
@@ -311,39 +341,28 @@ protected:
   /**
    * Prefs class capsules preference management.
    */
   class Prefs
   {
   public:
     static bool KeyCausesActivation() { return sKeyCausesActivation; }
     static bool ClickHoldContextMenu() { return sClickHoldContextMenu; }
-    static int32_t ChromeAccessModifierMask();
-    static int32_t ContentAccessModifierMask();
 
     static void Init();
     static void OnChange(const char* aPrefName, void*);
     static void Shutdown();
 
   private:
     static bool sKeyCausesActivation;
     static bool sClickHoldContextMenu;
-    static int32_t sGenericAccessModifierKey;
-    static int32_t sChromeAccessModifierMask;
-    static int32_t sContentAccessModifierMask;
 
     static int32_t GetAccessModifierMask(int32_t aItemType);
   };
 
-  /**
-   * Get appropriate access modifier mask for the aDocShell.  Returns -1 if
-   * access key isn't available.
-   */
-  static int32_t GetAccessModifierMaskFor(nsISupports* aDocShell);
-
   /*
    * If aTargetFrame's widget has a cached cursor value, resets the cursor
    * such that the next call to SetCursor on the widget will force an update
    * of the native cursor. For use in getting puppet widget to update its
    * cursor between mouse exit / enter transitions. This call basically wraps
    * nsIWidget ClearCachedCursor.
    */
   void ClearCachedWidgetCursor(nsIFrame* aTargetFrame);
@@ -426,54 +445,74 @@ protected:
                                             bool aNoContentDispatch);
   nsresult SetClickCount(WidgetMouseEvent* aEvent, nsEventStatus* aStatus);
   nsresult CheckForAndDispatchClick(WidgetMouseEvent* aEvent,
                                     nsEventStatus* aStatus);
   void EnsureDocument(nsPresContext* aPresContext);
   void FlushPendingEvents(nsPresContext* aPresContext);
 
   /**
-   * The phases of HandleAccessKey processing. See below.
+   * The phases of WalkESMTreeToHandleAccessKey processing. See below.
    */
   typedef enum {
     eAccessKeyProcessingNormal = 0,
     eAccessKeyProcessingUp,
     eAccessKeyProcessingDown
   } ProcessingAccessKeyState;
 
   /**
-   * Access key handling.  If there is registered content for the accesskey
-   * given by the key event and modifier mask then call
-   * content.PerformAccesskey(), otherwise call HandleAccessKey() recursively,
-   * on descendant docshells first, then on the ancestor (with |aBubbledFrom|
-   * set to the docshell associated with |this|), until something matches.
+   * Walk EMS to look for access key and execute found access key when aExecute
+   * is true.
+   * If there is registered content for the accesskey given by the key event
+   * and modifier mask then call content.PerformAccesskey(), otherwise call
+   * WalkESMTreeToHandleAccessKey() recursively, on descendant docshells first,
+   * then on the ancestor (with |aBubbledFrom| set to the docshell associated
+   * with |this|), until something matches.
    *
    * @param aEvent the keyboard event triggering the acccess key
    * @param aPresContext the presentation context
    * @param aAccessCharCodes list of charcode candidates
-   * @param aMatchesContentAccessKey true if the content accesskey modifier is pressed
-   * @param aBubbledFrom is used by an ancestor to avoid calling HandleAccessKey()
-   *        on the child the call originally came from, i.e. this is the child
-   *        that recursively called us in its Up phase. The initial caller
-   *        passes |nullptr| here. This is to avoid an infinite loop.
+   * @param aBubbledFrom is used by an ancestor to avoid calling
+   *        WalkESMTreeToHandleAccessKey() on the child the call originally
+   *        came from, i.e. this is the child that recursively called us in
+   *        its Up phase. The initial caller passes |nullptr| here. This is to
+   *        avoid an infinite loop.
    * @param aAccessKeyState Normal, Down or Up processing phase (see enums
    *        above). The initial event receiver uses 'normal', then 'down' when
    *        processing children and Up when recursively calling its ancestor.
-   * @param aModifierMask modifier mask for the key event
+   * @param aExecute is true, execute an accesskey if it's found.  Otherwise,
+   *        found accesskey won't be executed.
+   *
+   * @return            true if there is a target which aEvent and
+   *                    aAccessCharCodes match with in this process.
+   *                    Otherwise, false.  I.e., when this returns true and
+   *                    aExecute is true, a target is executed or focused.
+   *                    Note that even if this returns false, a target in
+   *                    remote process may be executed or focused
+   *                    asynchronously.
    */
-  bool HandleAccessKey(WidgetKeyboardEvent* aEvent,
-                       nsPresContext* aPresContext,
-                       nsTArray<uint32_t>& aAccessCharCodes,
-                       bool aMatchesContentAccessKey,
-                       nsIDocShellTreeItem* aBubbledFrom,
-                       ProcessingAccessKeyState aAccessKeyState,
-                       int32_t aModifierMask);
+  bool WalkESMTreeToHandleAccessKey(WidgetKeyboardEvent* aEvent,
+                                    nsPresContext* aPresContext,
+                                    nsTArray<uint32_t>& aAccessCharCodes,
+                                    nsIDocShellTreeItem* aBubbledFrom,
+                                    ProcessingAccessKeyState aAccessKeyState,
+                                    bool aExecute);
 
-  bool ExecuteAccessKey(nsTArray<uint32_t>& aAccessCharCodes,
-                        bool aIsTrustedEvent);
+  /**
+   * Look for access key and execute found access key if aExecute is true in
+   * the instance.
+   *
+   * @return            true if there is a target which matches with
+   *                    aAccessCharCodes and aIsTrustedEvent.  Otherwise,
+   *                    false.  I.e., when this returns true and aExecute
+   *                    is true, a target is executed or focused.
+   */
+  bool LookForAccessKeyAndExecute(nsTArray<uint32_t>& aAccessCharCodes,
+                                  bool aIsTrustedEvent,
+                                  bool aExecute);
 
   //---------------------------------------------
   // DocShell Focus Traversal Methods
   //---------------------------------------------
 
   nsIContent* GetFocusedContent();
   bool IsShellVisible(nsIDocShell* aShell);
 
--- a/dom/html/HTMLVideoElement.cpp
+++ b/dom/html/HTMLVideoElement.cpp
@@ -18,16 +18,17 @@
 #include "ImageContainer.h"
 #include "VideoFrameContainer.h"
 
 #include "nsIScriptSecurityManager.h"
 #include "nsIXPConnect.h"
 
 #include "nsITimer.h"
 
+#include "FrameStatistics.h"
 #include "MediaError.h"
 #include "MediaDecoder.h"
 #include "mozilla/Preferences.h"
 #include "mozilla/dom/WakeLock.h"
 #include "mozilla/dom/power/PowerManagerService.h"
 #include "mozilla/dom/Performance.h"
 #include "mozilla/dom/VideoPlaybackQuality.h"
 
--- a/dom/ipc/PBrowser.ipdl
+++ b/dom/ipc/PBrowser.ipdl
@@ -801,20 +801,19 @@ child:
     async SwappedWithOtherRemoteLoader(IPCTabContext context);
 
     /**
      * A potential accesskey was just pressed. Look for accesskey targets
      * using the list of provided charCodes.
      *
      * @param event keyboard event
      * @param isTrusted true if triggered by a trusted key event
-     * @param modifierMask indicates which accesskey modifiers are pressed
      */
     async HandleAccessKey(WidgetKeyboardEvent event,
-                          uint32_t[] charCodes, int32_t modifierMask);
+                          uint32_t[] charCodes);
 
     /**
      * Tells the root child docShell whether or not to use
      * global history. This is sent right after the PBrowser
      * is bound to a frameloader element.
      */
     async SetUseGlobalHistory(bool aUse);
 
--- a/dom/ipc/TabChild.cpp
+++ b/dom/ipc/TabChild.cpp
@@ -1594,17 +1594,17 @@ TabChild::RecvRealMouseButtonEvent(const
   if (pendingLayerization) {
     context.SetPendingLayerization();
   }
 
   WidgetMouseEvent localEvent(aEvent);
   localEvent.mWidget = mPuppetWidget;
   APZCCallbackHelper::ApplyCallbackTransform(localEvent, aGuid,
       mPuppetWidget->GetDefaultScale());
-  APZCCallbackHelper::DispatchWidgetEvent(localEvent);
+  DispatchWidgetEventViaAPZ(localEvent);
 
   if (aInputBlockId && aEvent.mFlags.mHandledByAPZ) {
     mAPZEventState->ProcessMouseEvent(aEvent, aGuid, aInputBlockId);
   }
   return IPC_OK();
 }
 
 
@@ -1643,16 +1643,23 @@ TabChild::MaybeCoalesceWheelEvent(const 
          mCoalescedWheelData.CanCoalesce(aEvent, aGuid, aInputBlockId))) {
       mCoalescedWheelData.Coalesce(aEvent, aGuid, aInputBlockId);
       return true;
     }
   }
   return false;
 }
 
+nsEventStatus
+TabChild::DispatchWidgetEventViaAPZ(WidgetGUIEvent& aEvent)
+{
+  aEvent.ResetWaitingReplyFromRemoteProcessState();
+  return APZCCallbackHelper::DispatchWidgetEvent(aEvent);
+}
+
 void
 TabChild::MaybeDispatchCoalescedWheelEvent()
 {
   if (mCoalescedWheelData.IsEmpty()) {
     return;
   }
   const WidgetWheelEvent* wheelEvent =
     mCoalescedWheelData.GetCoalescedWheelEvent();
@@ -1673,17 +1680,17 @@ TabChild::DispatchWheelEvent(const Widge
     nsCOMPtr<nsIDocument> document(GetDocument());
     APZCCallbackHelper::SendSetTargetAPZCNotification(
       mPuppetWidget, document, aEvent, aGuid, aInputBlockId);
   }
 
   localEvent.mWidget = mPuppetWidget;
   APZCCallbackHelper::ApplyCallbackTransform(localEvent, aGuid,
                                              mPuppetWidget->GetDefaultScale());
-  APZCCallbackHelper::DispatchWidgetEvent(localEvent);
+  DispatchWidgetEventViaAPZ(localEvent);
 
   if (localEvent.mCanTriggerSwipe) {
     SendRespondStartSwipeEvent(aInputBlockId, localEvent.TriggersSwipe());
   }
 
   if (aInputBlockId && aEvent.mFlags.mHandledByAPZ) {
     mAPZEventState->ProcessWheelEvent(localEvent, aGuid, aInputBlockId);
   }
@@ -1740,17 +1747,17 @@ TabChild::RecvRealTouchEvent(const Widge
         mSetAllowedTouchBehaviorCallback);
     }
     APZCCallbackHelper::SendSetTargetAPZCNotification(mPuppetWidget, document,
                                                       localEvent, aGuid,
                                                       aInputBlockId);
   }
 
   // Dispatch event to content (potentially a long-running operation)
-  nsEventStatus status = APZCCallbackHelper::DispatchWidgetEvent(localEvent);
+  nsEventStatus status = DispatchWidgetEventViaAPZ(localEvent);
 
   if (!AsyncPanZoomEnabled()) {
     // We shouldn't have any e10s platforms that have touch events enabled
     // without APZ.
     MOZ_ASSERT(false);
     return IPC_OK();
   }
 
@@ -1800,26 +1807,26 @@ TabChild::RecvRealDragEvent(const Widget
       do_GetService("@mozilla.org/widget/dragservice;1");
     if (dragService) {
       // This will dispatch 'drag' event at the source if the
       // drag transaction started in this process.
       dragService->FireDragEventAtSource(eDrag, aEvent.mModifiers);
     }
   }
 
-  APZCCallbackHelper::DispatchWidgetEvent(localEvent);
+  DispatchWidgetEventViaAPZ(localEvent);
   return IPC_OK();
 }
 
 mozilla::ipc::IPCResult
 TabChild::RecvPluginEvent(const WidgetPluginEvent& aEvent)
 {
   WidgetPluginEvent localEvent(aEvent);
   localEvent.mWidget = mPuppetWidget;
-  nsEventStatus status = APZCCallbackHelper::DispatchWidgetEvent(localEvent);
+  nsEventStatus status = DispatchWidgetEventViaAPZ(localEvent);
   if (status != nsEventStatus_eConsumeNoDefault) {
     // If not consumed, we should call default action
     SendDefaultProcOfPluginEvent(aEvent);
   }
   return IPC_OK();
 }
 
 void
@@ -1911,41 +1918,46 @@ TabChild::RecvRealKeyEvent(const WidgetK
   // want to process any following keypress events.
   if (aEvent.mMessage == eKeyPress && mIgnoreKeyPressEvent) {
     return IPC_OK();
   }
 
   WidgetKeyboardEvent localEvent(aEvent);
   localEvent.mWidget = mPuppetWidget;
   localEvent.mUniqueId = aEvent.mUniqueId;
-  nsEventStatus status = APZCCallbackHelper::DispatchWidgetEvent(localEvent);
+  nsEventStatus status = DispatchWidgetEventViaAPZ(localEvent);
 
   // Update the end time of the possible repeated event so that we can skip
   // some incoming events in case event handling took long time.
   UpdateRepeatedKeyEventEndTime(localEvent);
 
   if (aEvent.mMessage == eKeyDown) {
     mIgnoreKeyPressEvent = status == nsEventStatus_eConsumeNoDefault;
   }
 
   if (localEvent.mFlags.mIsSuppressedOrDelayed) {
     localEvent.PreventDefault();
   }
 
   // If a response is desired from the content process, resend the key event.
-  // If mAccessKeyForwardedToChild is set, then don't resend the key event yet
-  // as RecvHandleAccessKey will do this.
-  if (localEvent.WantReplyFromContentProcess()) {
+  if (aEvent.WantReplyFromContentProcess()) {
+    // If the event's default isn't prevented but the status is no default,
+    // That means that the event was consumed by EventStateManager or something
+    // which is not a usual event handler.  In such case, prevent its default
+    // as a default handler.  For example, when an eKeyPress event matches
+    // with a content accesskey, and it's executed, peventDefault() of the
+    // event won't be called but the status is set to "no default".  Then,
+    // the event shouldn't be handled by nsMenuBarListener in the main process.
+    if (!localEvent.DefaultPrevented() &&
+        status == nsEventStatus_eConsumeNoDefault) {
+      localEvent.PreventDefault();
+    }
     SendReplyKeyEvent(localEvent);
   }
 
-  if (localEvent.mAccessKeyForwardedToChild) {
-    SendAccessKeyNotHandled(localEvent);
-  }
-
   return IPC_OK();
 }
 
 mozilla::ipc::IPCResult
 TabChild::RecvKeyEvent(const nsString& aType,
                        const int32_t& aKeyCode,
                        const int32_t& aCharCode,
                        const int32_t& aModifiers,
@@ -1957,27 +1969,27 @@ TabChild::RecvKeyEvent(const nsString& a
   return IPC_OK();
 }
 
 mozilla::ipc::IPCResult
 TabChild::RecvCompositionEvent(const WidgetCompositionEvent& aEvent)
 {
   WidgetCompositionEvent localEvent(aEvent);
   localEvent.mWidget = mPuppetWidget;
-  APZCCallbackHelper::DispatchWidgetEvent(localEvent);
+  DispatchWidgetEventViaAPZ(localEvent);
   Unused << SendOnEventNeedingAckHandled(aEvent.mMessage);
   return IPC_OK();
 }
 
 mozilla::ipc::IPCResult
 TabChild::RecvSelectionEvent(const WidgetSelectionEvent& aEvent)
 {
   WidgetSelectionEvent localEvent(aEvent);
   localEvent.mWidget = mPuppetWidget;
-  APZCCallbackHelper::DispatchWidgetEvent(localEvent);
+  DispatchWidgetEventViaAPZ(localEvent);
   Unused << SendOnEventNeedingAckHandled(aEvent.mMessage);
   return IPC_OK();
 }
 
 mozilla::ipc::IPCResult
 TabChild::RecvPasteTransferable(const IPCDataTransfer& aDataTransfer,
                                 const bool& aIsPrivateData,
                                 const IPC::Principal& aRequestingPrincipal)
@@ -2239,28 +2251,26 @@ TabChild::RecvSwappedWithOtherRemoteLoad
 
   docShell->SetInFrameSwap(false);
 
   return IPC_OK();
 }
 
 mozilla::ipc::IPCResult
 TabChild::RecvHandleAccessKey(const WidgetKeyboardEvent& aEvent,
-                              nsTArray<uint32_t>&& aCharCodes,
-                              const int32_t& aModifierMask)
+                              nsTArray<uint32_t>&& aCharCodes)
 {
   nsCOMPtr<nsIDocument> document(GetDocument());
   nsCOMPtr<nsIPresShell> presShell = document->GetShell();
   if (presShell) {
     nsPresContext* pc = presShell->GetPresContext();
     if (pc) {
       if (!pc->EventStateManager()->
                  HandleAccessKey(&(const_cast<WidgetKeyboardEvent&>(aEvent)),
-                                 pc, aCharCodes,
-                                 aModifierMask, true)) {
+                                 pc, aCharCodes)) {
         // If no accesskey was found, inform the parent so that accesskeys on
         // menus can be handled.
         WidgetKeyboardEvent localEvent(aEvent);
         localEvent.mWidget = mPuppetWidget;
         SendAccessKeyNotHandled(localEvent);
       }
     }
   }
--- a/dom/ipc/TabChild.h
+++ b/dom/ipc/TabChild.h
@@ -590,19 +590,19 @@ public:
 
   virtual mozilla::ipc::IPCResult RecvUIResolutionChanged(const float& aDpi,
                                                           const int32_t& aRounding,
                                                           const double& aScale) override;
 
   virtual mozilla::ipc::IPCResult
   RecvThemeChanged(nsTArray<LookAndFeelInt>&& aLookAndFeelIntCache) override;
 
-  virtual mozilla::ipc::IPCResult RecvHandleAccessKey(const WidgetKeyboardEvent& aEvent,
-                                                      nsTArray<uint32_t>&& aCharCodes,
-                                                      const int32_t& aModifierMask) override;
+  virtual mozilla::ipc::IPCResult
+  RecvHandleAccessKey(const WidgetKeyboardEvent& aEvent,
+                      nsTArray<uint32_t>&& aCharCodes) override;
 
   virtual mozilla::ipc::IPCResult RecvSetUseGlobalHistory(const bool& aUse) override;
 
   virtual mozilla::ipc::IPCResult RecvHandledWindowedPluginKeyEvent(
     const mozilla::NativeEventData& aKeyEventData,
     const bool& aIsConsumed) override;
 
   virtual mozilla::ipc::IPCResult RecvPrint(const uint64_t& aOuterWindowID,
@@ -797,16 +797,21 @@ private:
 
   bool MaybeCoalesceWheelEvent(const WidgetWheelEvent& aEvent,
                                const ScrollableLayerGuid& aGuid,
                                const uint64_t& aInputBlockId,
                                bool* aIsNextWheelEvent);
 
   void MaybeDispatchCoalescedWheelEvent();
 
+  /**
+   * Dispatch aEvent on aEvent.mWidget.
+   */
+  nsEventStatus DispatchWidgetEventViaAPZ(WidgetGUIEvent& aEvent);
+
   void DispatchWheelEvent(const WidgetWheelEvent& aEvent,
                           const ScrollableLayerGuid& aGuid,
                           const uint64_t& aInputBlockId);
 
   void InternalSetDocShellIsActive(bool aIsActive,
                                    bool aPreserveLayers);
 
   class DelayedDeleteRunnable;
--- a/dom/ipc/TabParent.cpp
+++ b/dom/ipc/TabParent.cpp
@@ -812,25 +812,24 @@ TabParent::ThemeChanged()
     // send down to the child. We do this for every remote tab for now,
     // but bug 1156934 has been filed to do it once per content process.
     Unused << SendThemeChanged(LookAndFeel::GetIntCache());
   }
 }
 
 void
 TabParent::HandleAccessKey(const WidgetKeyboardEvent& aEvent,
-                           nsTArray<uint32_t>& aCharCodes,
-                           const int32_t& aModifierMask)
+                           nsTArray<uint32_t>& aCharCodes)
 {
   if (!mIsDestroyed) {
     // Note that we don't need to mark aEvent is posted to a remote process
     // because the event may be dispatched to it as normal keyboard event.
     // Therefore, we should use local copy to send it.
     WidgetKeyboardEvent localEvent(aEvent);
-    Unused << SendHandleAccessKey(localEvent, aCharCodes, aModifierMask);
+    Unused << SendHandleAccessKey(localEvent, aCharCodes);
   }
 }
 
 void
 TabParent::Activate()
 {
   if (!mIsDestroyed) {
     Unused << Manager()->SendActivate(this);
@@ -2042,17 +2041,33 @@ TabParent::RecvReplyKeyEvent(const Widge
   nsIPresShell* presShell = doc->GetShell();
   NS_ENSURE_TRUE(presShell, IPC_OK());
   nsPresContext* presContext = presShell->GetPresContext();
   NS_ENSURE_TRUE(presContext, IPC_OK());
 
   AutoHandlingUserInputStatePusher userInpStatePusher(localEvent.IsTrusted(),
                                                       &localEvent, doc);
 
-  EventDispatcher::Dispatch(mFrameElement, presContext, &localEvent);
+  nsEventStatus status = nsEventStatus_eIgnore;
+
+  // Handle access key in this process before dispatching reply event because
+  // ESM handles it before dispatching the event to the DOM tree.
+  if (localEvent.mMessage == eKeyPress &&
+      (localEvent.ModifiersMatchWithAccessKey(AccessKeyType::eChrome) ||
+       localEvent.ModifiersMatchWithAccessKey(AccessKeyType::eContent))) {
+    RefPtr<EventStateManager> esm = presContext->EventStateManager();
+    AutoTArray<uint32_t, 10> accessCharCodes;
+    localEvent.GetAccessKeyCandidates(accessCharCodes);
+    if (esm->HandleAccessKey(&localEvent, presContext, accessCharCodes)) {
+      status = nsEventStatus_eConsumeNoDefault;
+    }
+  }
+
+  EventDispatcher::Dispatch(mFrameElement, presContext, &localEvent, nullptr,
+                            &status);
 
   if (!localEvent.DefaultPrevented() &&
       !localEvent.mFlags.mIsSynthesizedForTests) {
     nsCOMPtr<nsIWidget> widget = GetWidget();
     if (widget) {
       widget->PostHandleKeyEvent(&localEvent);
       localEvent.StopPropagation();
     }
@@ -2061,20 +2076,26 @@ TabParent::RecvReplyKeyEvent(const Widge
   return IPC_OK();
 }
 
 mozilla::ipc::IPCResult
 TabParent::RecvAccessKeyNotHandled(const WidgetKeyboardEvent& aEvent)
 {
   NS_ENSURE_TRUE(mFrameElement, IPC_OK());
 
+  // This is called only when this process had focus and HandleAccessKey
+  // message was posted to all remote process and each remote process didn't
+  // execute any content access keys.
+  // XXX If there were two or more remote processes, this may be called
+  //     twice or more for a keyboard event, that must be a bug.  But how to
+  //     detect if received event has already been handled?
+
   WidgetKeyboardEvent localEvent(aEvent);
   localEvent.MarkAsHandledInRemoteProcess();
   localEvent.mMessage = eAccessKeyNotFound;
-  localEvent.mAccessKeyForwardedToChild = false;
 
   // Here we convert the WidgetEvent that we received to an nsIDOMEvent
   // to be able to dispatch it to the <browser> element as the target element.
   nsIDocument* doc = mFrameElement->OwnerDoc();
   nsIPresShell* presShell = doc->GetShell();
   NS_ENSURE_TRUE(presShell, IPC_OK());
 
   if (presShell->CanDispatchEvent()) {
--- a/dom/ipc/TabParent.h
+++ b/dom/ipc/TabParent.h
@@ -356,18 +356,17 @@ public:
 
   void SizeModeChanged(const nsSizeMode& aSizeMode);
 
   void UIResolutionChanged();
 
   void ThemeChanged();
 
   void HandleAccessKey(const WidgetKeyboardEvent& aEvent,
-                       nsTArray<uint32_t>& aCharCodes,
-                       const int32_t& aModifierMask);
+                       nsTArray<uint32_t>& aCharCodes);
 
   void Activate();
 
   void Deactivate();
 
   bool MapEventCoordinatesForChildProcess(mozilla::WidgetEvent* aEvent);
 
   void MapEventCoordinatesForChildProcess(const LayoutDeviceIntPoint& aOffset,
--- a/dom/media/ADTSDecoder.cpp
+++ b/dom/media/ADTSDecoder.cpp
@@ -20,18 +20,19 @@ ADTSDecoder::Clone(MediaDecoderInit& aIn
     return nullptr;
 
   return new ADTSDecoder(aInit);
 }
 
 MediaDecoderStateMachine*
 ADTSDecoder::CreateStateMachine()
 {
-  MediaFormatReaderInit init(this);
+  MediaFormatReaderInit init;
   init.mCrashHelper = GetOwner()->CreateGMPCrashHelper();
+  init.mFrameStats = mFrameStats;
   mReader = new MediaFormatReader(init, new ADTSDemuxer(mResource));
   return new MediaDecoderStateMachine(this, mReader);
 }
 
 /* static */ bool
 ADTSDecoder::IsEnabled()
 {
   RefPtr<PDMFactory> platform = new PDMFactory();
deleted file mode 100644
--- a/dom/media/AbstractMediaDecoder.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim:set ts=2 sw=2 sts=2 et cindent: */
-/* 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 AbstractMediaDecoder_h_
-#define AbstractMediaDecoder_h_
-
-#include "mozilla/Attributes.h"
-#include "mozilla/StateMirroring.h"
-
-#include "FrameStatistics.h"
-#include "MediaEventSource.h"
-#include "MediaInfo.h"
-#include "nsISupports.h"
-#include "nsDataHashtable.h"
-#include "nsThreadUtils.h"
-
-namespace mozilla {
-
-namespace layers {
-class ImageContainer;
-class KnowsCompositor;
-} // namespace layers
-
-class AbstractThread;
-class MediaResource;
-class ReentrantMonitor;
-class VideoFrameContainer;
-class MediaDecoderOwner;
-class CDMProxy;
-class GMPCrashHelper;
-
-/**
- * The AbstractMediaDecoder class describes the public interface for a media decoder
- * and is used by the MediaReader classes.
- */
-class AbstractMediaDecoder : public nsIObserver
-{
-public:
-  // Increments the parsed, decoded and dropped frame counters by the passed in
-  // counts.
-  // Can be called on any thread.
-  virtual void NotifyDecodedFrames(const FrameStatisticsData& aStats) = 0;
-
-  // Return an abstract thread on which to run main thread runnables.
-  virtual AbstractThread* AbstractMainThread() const = 0;
-  virtual VideoFrameContainer* GetVideoFrameContainer() = 0;
-  virtual mozilla::layers::ImageContainer* GetImageContainer() = 0;
-
-  // Returns the owner of this decoder or null when the decoder is shutting
-  // down. The owner should only be used on the main thread.
-  virtual MediaDecoderOwner* GetOwner() const = 0;
-
-  // Set by Reader if the current audio track can be offloaded
-  virtual void SetPlatformCanOffloadAudio(bool aCanOffloadAudio) { }
-
-  // Stack based class to assist in notifying the frame statistics of
-  // parsed and decoded frames. Use inside video demux & decode functions
-  // to ensure all parsed and decoded frames are reported on all return paths.
-  class AutoNotifyDecoded
-  {
-  public:
-    explicit AutoNotifyDecoded(AbstractMediaDecoder* aDecoder)
-      : mDecoder(aDecoder)
-    {
-    }
-    ~AutoNotifyDecoded()
-    {
-      if (mDecoder) {
-        mDecoder->NotifyDecodedFrames(mStats);
-      }
-    }
-
-    FrameStatisticsData mStats;
-
-  private:
-    AbstractMediaDecoder* mDecoder;
-  };
-
-  // Classes directly inheriting from AbstractMediaDecoder do not support
-  // Observe and it should never be called directly.
-  NS_IMETHOD Observe(nsISupports* aSubject, const char* aTopic,
-                     const char16_t* aData) override
-  {
-    MOZ_CRASH("Forbidden method");
-    return NS_OK;
-  }
-};
-
-} // namespace mozilla
-
-#endif
-
--- a/dom/media/DecoderTraits.cpp
+++ b/dom/media/DecoderTraits.cpp
@@ -291,21 +291,16 @@ DecoderTraits::CreateDecoder(MediaDecode
 
 /* static */
 MediaFormatReader*
 DecoderTraits::CreateReader(const MediaContainerType& aType,
                             MediaFormatReaderInit& aInit)
 {
   MOZ_ASSERT(NS_IsMainThread());
   MediaFormatReader* decoderReader = nullptr;
-
-  if (!aInit.mDecoder) {
-    return decoderReader;
-  }
-
   MediaResource* resource = aInit.mResource;
 
 #ifdef MOZ_FMP4
   if (MP4Decoder::IsSupportedType(aType,
                                   /* DecoderDoctorDiagnostics* */ nullptr)) {
     decoderReader = new MediaFormatReader(aInit, new MP4Demuxer(resource));
   } else
 #endif
--- a/dom/media/DecoderTraits.h
+++ b/dom/media/DecoderTraits.h
@@ -9,17 +9,16 @@
 
 #include "nsCOMPtr.h"
 
 class nsAString;
 class nsACString;
 
 namespace mozilla {
 
-class AbstractMediaDecoder;
 class ChannelMediaDecoder;
 class DecoderDoctorDiagnostics;
 class MediaContainerType;
 struct MediaDecoderInit;
 struct MediaFormatReaderInit;
 class MediaDecoderOwner;
 class MediaFormatReader;
 class MediaResource;
--- a/dom/media/FrameStatistics.h
+++ b/dom/media/FrameStatistics.h
@@ -124,16 +124,39 @@ public:
   // Increments the presented frame counters.
   // Can be called on any thread.
   void NotifyPresentedFrame()
   {
     ReentrantMonitorAutoEnter mon(mReentrantMonitor);
     ++mFrameStatisticsData.mPresentedFrames;
   }
 
+  // Stack based class to assist in notifying the frame statistics of
+  // parsed and decoded frames. Use inside video demux & decode functions
+  // to ensure all parsed and decoded frames are reported on all return paths.
+  class AutoNotifyDecoded
+  {
+  public:
+    explicit AutoNotifyDecoded(FrameStatistics* aFrameStats)
+      : mFrameStats(aFrameStats)
+    {
+    }
+    ~AutoNotifyDecoded()
+    {
+      if (mFrameStats) {
+        mFrameStats->NotifyDecodedFrames(mStats);
+      }
+    }
+
+    FrameStatisticsData mStats;
+
+  private:
+    FrameStatistics* mFrameStats;
+  };
+
 private:
   ~FrameStatistics() {}
 
   // ReentrantMonitor to protect access of playback statistics.
   mutable ReentrantMonitor mReentrantMonitor;
 
   FrameStatisticsData mFrameStatisticsData;
 };
--- a/dom/media/MediaDecoder.cpp
+++ b/dom/media/MediaDecoder.cpp
@@ -279,18 +279,16 @@ constexpr TimeUnit MediaDecoder::DEFAULT
 void
 MediaDecoder::InitStatics()
 {
   MOZ_ASSERT(NS_IsMainThread());
 }
 
 NS_IMPL_ISUPPORTS(MediaMemoryTracker, nsIMemoryReporter)
 
-NS_IMPL_ISUPPORTS0(MediaDecoder)
-
 void
 MediaDecoder::NotifyOwnerActivityChanged(bool aIsDocumentVisible,
                                          Visibility aElementVisibility,
                                          bool aIsElementInTree)
 {
   MOZ_ASSERT(NS_IsMainThread());
   MOZ_DIAGNOSTIC_ASSERT(!IsShutdown());
   SetElementVisibility(aIsDocumentVisible, aElementVisibility, aIsElementInTree);
--- a/dom/media/MediaDecoder.h
+++ b/dom/media/MediaDecoder.h
@@ -2,17 +2,16 @@
 /* vim:set ts=2 sw=2 sts=2 et cindent: */
 /* 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/. */
 
 #if !defined(MediaDecoder_h_)
 #define MediaDecoder_h_
 
-#include "AbstractMediaDecoder.h"
 #include "DecoderDoctorDiagnostics.h"
 #include "MediaDecoderOwner.h"
 #include "MediaEventSource.h"
 #include "MediaMetadataManager.h"
 #include "MediaResource.h"
 #include "MediaStatistics.h"
 #include "MediaStreamGraph.h"
 #include "SeekTarget.h"
@@ -31,16 +30,17 @@
 #include "nsISupports.h"
 #include "nsITimer.h"
 
 class nsIPrincipal;
 
 namespace mozilla {
 
 class AbstractThread;
+class FrameStatistics;
 class VideoFrameContainer;
 class MediaFormatReader;
 class MediaDecoderStateMachine;
 
 enum class MediaEventType : int8_t;
 enum class Visibility : uint8_t;
 
 // GetCurrentTime is defined in winbase.h as zero argument macro forwarding to
@@ -78,24 +78,24 @@ struct MOZ_STACK_CLASS MediaDecoderInit
     , mMinimizePreroll(aMinimizePreroll)
     , mHasSuspendTaint(aHasSuspendTaint)
     , mLooping(aLooping)
     , mContainerType(aContainerType)
   {
   }
 };
 
-class MediaDecoder : public AbstractMediaDecoder
+class MediaDecoder
 {
 public:
   typedef MozPromise<bool /* aIgnored */, bool /* aIgnored */,
                      /* IsExclusive = */ true>
     SeekPromise;
 
-  NS_DECL_THREADSAFE_ISUPPORTS
+  NS_INLINE_DECL_THREADSAFE_REFCOUNTING(MediaDecoder)
 
   // Enumeration for the valid play states (see mPlayState)
   enum PlayState
   {
     PLAY_STATE_START,
     PLAY_STATE_LOADING,
     PLAY_STATE_PAUSED,
     PLAY_STATE_PLAYING,
@@ -290,21 +290,22 @@ private:
       mCallback.ResolveIfExists(mByteSize, __func__);
     }
 
     MozPromiseHolder<SizeOfPromise> mCallback;
   };
 
   virtual void AddSizeOfResources(ResourceSizes* aSizes);
 
-  VideoFrameContainer* GetVideoFrameContainer() final override
+  VideoFrameContainer* GetVideoFrameContainer()
   {
     return mVideoFrameContainer;
   }
-  layers::ImageContainer* GetImageContainer() override;
+
+  layers::ImageContainer* GetImageContainer();
 
   // Fire timeupdate events if needed according to the time constraints
   // outlined in the specification.
   void FireTimeUpdate();
 
   // Something has changed that could affect the computed playback rate,
   // so recompute it. The monitor must be held.
   virtual void UpdatePlaybackRate();
@@ -380,19 +381,19 @@ private:
   int64_t GetDownloadPosition();
 
   // Notifies the element that decoding has failed.
   void DecodeError(const MediaResult& aError);
 
   // Indicate whether the media is same-origin with the element.
   void UpdateSameOriginStatus(bool aSameOrigin);
 
-  MediaDecoderOwner* GetOwner() const override;
+  MediaDecoderOwner* GetOwner() const;
 
-  AbstractThread* AbstractMainThread() const final override
+  AbstractThread* AbstractMainThread() const
   {
     return mAbstractMainThread;
   }
 
   typedef MozPromise<RefPtr<CDMProxy>, bool /* aIgnored */,
                      /* IsExclusive = */ true>
     CDMProxyPromise;
 
@@ -417,23 +418,16 @@ private:
   // This can be called from any thread. It's only a snapshot of the
   // current state, since other threads might be changing the state
   // at any time.
   MediaStatistics GetStatistics();
 
   // Return the frame decode/paint related statistics.
   FrameStatistics& GetFrameStatistics() { return *mFrameStats; }
 
-  // Increments the parsed and decoded frame counters by the passed in counts.
-  // Can be called on any thread.
-  virtual void NotifyDecodedFrames(const FrameStatisticsData& aStats) override
-  {
-    GetFrameStatistics().NotifyDecodedFrames(aStats);
-  }
-
   void UpdateReadyState()
   {
     MOZ_ASSERT(NS_IsMainThread());
     MOZ_DIAGNOSTIC_ASSERT(!IsShutdown());
     GetOwner()->UpdateReadyState();
   }
 
   virtual MediaDecoderOwner::NextFrameStatus NextFrameStatus()
--- a/dom/media/MediaDecoderOwner.h
+++ b/dom/media/MediaDecoderOwner.h
@@ -1,16 +1,17 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim:set ts=2 sw=2 sts=2 et cindent: */
 /* 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 MediaDecoderOwner_h_
 #define MediaDecoderOwner_h_
-#include "AbstractMediaDecoder.h"
+
+#include "MediaInfo.h"
 #include "nsAutoPtr.h"
 
 namespace mozilla {
 
 class AbstractThread;
 class GMPCrashHelper;
 class VideoFrameContainer;
 class MediaInfo;
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -1952,25 +1952,22 @@ private:
 class MediaDecoderStateMachine::CompletedState
   : public MediaDecoderStateMachine::StateObject
 {
 public:
   explicit CompletedState(Master* aPtr) : StateObject(aPtr) { }
 
   void Enter()
   {
-    // TODO : use more approriate way to decide whether need to release
-    // resource in bug1367983.
-#ifndef MOZ_WIDGET_ANDROID
     if (!mMaster->mLooping) {
       // We've decoded all samples.
       // We don't need decoders anymore if not looping.
       Reader()->ReleaseResources();
     }
-#endif
+
     bool hasNextFrame = (!mMaster->HasAudio() || !mMaster->mAudioCompleted)
                         && (!mMaster->HasVideo() || !mMaster->mVideoCompleted);
 
     mMaster->UpdateNextFrameStatus(
       hasNextFrame ? MediaDecoderOwner::NEXT_FRAME_AVAILABLE
                    : MediaDecoderOwner::NEXT_FRAME_UNAVAILABLE);
 
     Step();
--- a/dom/media/MediaFormatReader.cpp
+++ b/dom/media/MediaFormatReader.cpp
@@ -1108,20 +1108,20 @@ MediaFormatReader::MediaFormatReader(Med
   , mKnowsCompositor(aInit.mKnowsCompositor)
   , mInitDone(false)
   , mTrackDemuxersMayBlock(false)
   , mSeekScheduled(false)
   , mVideoFrameContainer(aInit.mVideoFrameContainer)
   , mCrashHelper(aInit.mCrashHelper)
   , mDecoderFactory(new DecoderFactory(this))
   , mShutdownPromisePool(new ShutdownPromisePool())
-  , mDecoder(aInit.mDecoder)
   , mBuffered(mTaskQueue,
               TimeIntervals(),
               "MediaFormatReader::mBuffered (Canonical)")
+  , mFrameStats(aInit.mFrameStats)
 {
   MOZ_ASSERT(aDemuxer);
   MOZ_COUNT_CTOR(MediaFormatReader);
   mOnTrackWaitingForKeyListener = OnTrackWaitingForKey().Connect(
     mTaskQueue, this, &MediaFormatReader::NotifyWaitingForKey);
 }
 
 MediaFormatReader::~MediaFormatReader()
@@ -1207,17 +1207,16 @@ MediaFormatReader::TearDownDecoders()
   }
 
   mDecoderFactory = nullptr;
   mPlatform = nullptr;
   mVideoFrameContainer = nullptr;
 
   ReleaseResources();
   mBuffered.DisconnectAll();
-  mDecoder = nullptr;
   return mTaskQueue->BeginShutdown();
 }
 
 nsresult
 MediaFormatReader::Init()
 {
   MOZ_ASSERT(NS_IsMainThread(), "Must be on main thread.");
 
@@ -1919,17 +1918,17 @@ MediaFormatReader::DecodeDemuxedSamples(
              decoder.mDecodeRequest.Complete();
              NotifyError(aTrack, aError);
            })
     ->Track(decoder.mDecodeRequest);
 }
 
 void
 MediaFormatReader::HandleDemuxedSamples(
-  TrackType aTrack, AbstractMediaDecoder::AutoNotifyDecoded& aA)
+  TrackType aTrack, FrameStatistics::AutoNotifyDecoded& aA)
 {
   MOZ_ASSERT(OnTaskQueue());
 
   auto& decoder = GetDecoderData(aTrack);
 
   if (decoder.mFlushing) {
     LOGV("Decoder operation in progress, let it complete.");
     return;
@@ -2145,17 +2144,17 @@ MediaFormatReader::Update(TrackType aTra
 
   MOZ_DIAGNOSTIC_ASSERT(
     !decoder.HasInternalSeekPending()
     || (!decoder.mOutput.Length() && !decoder.mQueuedSamples.Length()),
     "No frames can be demuxed or decoded while an internal seek is pending");
 
   // Record number of frames decoded and parsed. Automatically update the
   // stats counters using the AutoNotifyDecoded stack-based class.
-  AbstractMediaDecoder::AutoNotifyDecoded a(mDecoder);
+  FrameStatistics::AutoNotifyDecoded a(mFrameStats);
 
   // Drop any frames found prior our internal seek target.
   while (decoder.mTimeThreshold && decoder.mOutput.Length()) {
     RefPtr<MediaData>& output = decoder.mOutput[0];
     InternalSeekTarget target = decoder.mTimeThreshold.ref();
     auto time = output->mTime;
     if (time >= target.Time()) {
       // We have reached our internal seek target.
@@ -2515,18 +2514,18 @@ MediaFormatReader::DropDecodedSamples(Tr
     auto time = decoder.mOutput.LastElement()->mTime;
     if (time >= decoder.mTimeThreshold.ref().Time()) {
       // We would have reached our internal seek target.
       decoder.mTimeThreshold.reset();
     }
   }
   decoder.mOutput.Clear();
   decoder.mSizeOfQueue -= lengthDecodedQueue;
-  if (aTrack == TrackInfo::kVideoTrack && mDecoder) {
-    mDecoder->NotifyDecodedFrames({ 0, 0, lengthDecodedQueue });
+  if (aTrack == TrackInfo::kVideoTrack && mFrameStats) {
+    mFrameStats->NotifyDecodedFrames({ 0, 0, lengthDecodedQueue });
   }
 }
 
 void
 MediaFormatReader::SkipVideoDemuxToNextKeyFrame(TimeUnit aTimeThreshold)
 {
   MOZ_ASSERT(OnTaskQueue());
   LOG("Skipping up to %" PRId64, aTimeThreshold.ToMicroseconds());
@@ -2547,26 +2546,26 @@ void
 MediaFormatReader::VideoSkipReset(uint32_t aSkipped)
 {
   MOZ_ASSERT(OnTaskQueue());
 
   // Some frames may have been output by the decoder since we initiated the
   // videoskip process and we know they would be late.
   DropDecodedSamples(TrackInfo::kVideoTrack);
   // Report the pending frames as dropped.
-  if (mDecoder) {
-    mDecoder->NotifyDecodedFrames({ 0, 0, SizeOfVideoQueueInFrames() });
+  if (mFrameStats) {
+    mFrameStats->NotifyDecodedFrames({ 0, 0, SizeOfVideoQueueInFrames() });
   }
 
   // Cancel any pending demux request and pending demuxed samples.
   mVideo.mDemuxRequest.DisconnectIfExists();
   Reset(TrackType::kVideoTrack);
 
-  if (mDecoder) {
-    mDecoder->NotifyDecodedFrames({ aSkipped, 0, aSkipped });
+  if (mFrameStats) {
+    mFrameStats->NotifyDecodedFrames({ aSkipped, 0, aSkipped });
   }
 
   mVideo.mNumSamplesSkippedTotal += aSkipped;
 }
 
 void
 MediaFormatReader::OnVideoSkipCompleted(uint32_t aSkipped)
 {
--- a/dom/media/MediaFormatReader.h
+++ b/dom/media/MediaFormatReader.h
@@ -4,30 +4,31 @@
  * 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/. */
 
 #if !defined(MediaFormatReader_h_)
 #define MediaFormatReader_h_
 
 #include "mozilla/Atomics.h"
 #include "mozilla/Maybe.h"
+#include "mozilla/StateMirroring.h"
 #include "mozilla/TaskQueue.h"
 #include "mozilla/Mutex.h"
 
+#include "FrameStatistics.h"
 #include "MediaEventSource.h"
 #include "MediaDataDemuxer.h"
 #include "MediaMetadataManager.h"
 #include "MediaPrefs.h"
 #include "nsAutoPtr.h"
 #include "PDMFactory.h"
 #include "SeekTarget.h"
 
 namespace mozilla {
 
-class AbstractMediaDecoder;
 class CDMProxy;
 class GMPCrashHelper;
 class MediaResource;
 class VideoFrameContainer;
 
 struct WaitForDataRejectValue
 {
   enum Reason
@@ -69,26 +70,21 @@ struct SeekRejectValue
 struct MetadataHolder
 {
   UniquePtr<MediaInfo> mInfo;
   UniquePtr<MetadataTags> mTags;
 };
 
 struct MOZ_STACK_CLASS MediaFormatReaderInit
 {
-  AbstractMediaDecoder* const mDecoder;
   MediaResource* mResource = nullptr;
   VideoFrameContainer* mVideoFrameContainer = nullptr;
+  FrameStatistics* mFrameStats = nullptr;
   already_AddRefed<layers::KnowsCompositor> mKnowsCompositor;
   already_AddRefed<GMPCrashHelper> mCrashHelper;
-
-  explicit MediaFormatReaderInit(AbstractMediaDecoder* aDecoder)
-    : mDecoder(aDecoder)
-  {
-  }
 };
 
 class MediaFormatReader final
 {
   static const bool IsExclusive = true;
   typedef TrackInfo::TrackType TrackType;
   typedef MozPromise<bool, MediaResult, IsExclusive> NotifyDataArrivedPromise;
 
@@ -275,17 +271,17 @@ private:
   void Update(TrackType aTrack);
   // Handle actions should more data be received.
   // Returns true if no more action is required.
   bool UpdateReceivedNewData(TrackType aTrack);
   // Called when new samples need to be demuxed.
   void RequestDemuxSamples(TrackType aTrack);
   // Handle demuxed samples by the input behavior.
   void HandleDemuxedSamples(TrackType aTrack,
-                            AbstractMediaDecoder::AutoNotifyDecoded& aA);
+                            FrameStatistics::AutoNotifyDecoded& aA);
   // Decode any pending already demuxed samples.
   void DecodeDemuxedSamples(TrackType aTrack,
                             MediaRawData* aSample);
 
   struct InternalSeekTarget
   {
     InternalSeekTarget(const media::TimeInterval& aTime, bool aDropTarget)
       : mTime(aTime)
@@ -740,19 +736,16 @@ private:
   UniquePtr<MetadataTags> mTags;
 
   // A flag indicating if the start time is known or not.
   bool mHasStartTime = false;
 
   void ShutdownDecoder(TrackType aTrack);
   RefPtr<ShutdownPromise> TearDownDecoders();
 
-  // Reference to the owning decoder object.
-  AbstractMediaDecoder* mDecoder;
-
   bool mShutdown = false;
 
   // Buffered range.
   Canonical<media::TimeIntervals> mBuffered;
 
   // Used to send TimedMetadata to the listener.
   TimedMetadataEventProducer mTimedMetadataEvent;
 
@@ -762,13 +755,15 @@ private:
   // Notify if we are waiting for a decryption key.
   MediaEventProducer<TrackInfo::TrackType> mOnTrackWaitingForKey;
 
   MediaEventProducer<nsTArray<uint8_t>, nsString> mOnEncrypted;
 
   MediaEventProducer<void> mOnWaitingForKey;
 
   MediaEventProducer<MediaResult> mOnDecodeWarning;
+
+  RefPtr<FrameStatistics> mFrameStats;
 };
 
 } // namespace mozilla
 
 #endif
--- a/dom/media/MediaMetadataManager.h
+++ b/dom/media/MediaMetadataManager.h
@@ -6,17 +6,16 @@
 
 #if !defined(MediaMetadataManager_h__)
 #define MediaMetadataManager_h__
 
 #include "mozilla/AbstractThread.h"
 #include "mozilla/LinkedList.h"
 
 #include "nsAutoPtr.h"
-#include "AbstractMediaDecoder.h"
 #include "MediaEventSource.h"
 #include "TimeUnits.h"
 #include "VideoUtils.h"
 
 namespace mozilla {
 
 class TimedMetadata;
 typedef MediaEventProducerExc<TimedMetadata> TimedMetadataEventProducer;
--- a/dom/media/flac/FlacDecoder.cpp
+++ b/dom/media/flac/FlacDecoder.cpp
@@ -21,18 +21,19 @@ FlacDecoder::Clone(MediaDecoderInit& aIn
   }
 
   return new FlacDecoder(aInit);
 }
 
 MediaDecoderStateMachine*
 FlacDecoder::CreateStateMachine()
 {
-  MediaFormatReaderInit init(this);
+  MediaFormatReaderInit init;
   init.mCrashHelper = GetOwner()->CreateGMPCrashHelper();
+  init.mFrameStats = mFrameStats;
   mReader = new MediaFormatReader(init, new FlacDemuxer(mResource));
   return new MediaDecoderStateMachine(this, mReader);
 }
 
 /* static */ bool
 FlacDecoder::IsEnabled()
 {
 #ifdef MOZ_FFVPX
--- a/dom/media/fmp4/MP4Decoder.cpp
+++ b/dom/media/fmp4/MP4Decoder.cpp
@@ -27,20 +27,21 @@ namespace mozilla {
 
 MP4Decoder::MP4Decoder(MediaDecoderInit& aInit)
   : ChannelMediaDecoder(aInit)
 {
 }
 
 MediaDecoderStateMachine* MP4Decoder::CreateStateMachine()
 {
-  MediaFormatReaderInit init(this);
+  MediaFormatReaderInit init;
   init.mVideoFrameContainer = GetVideoFrameContainer();
   init.mKnowsCompositor = GetCompositor();
   init.mCrashHelper = GetOwner()->CreateGMPCrashHelper();
+  init.mFrameStats = mFrameStats;
   mReader = new MediaFormatReader(init, new MP4Demuxer(mResource));
   return new MediaDecoderStateMachine(this, mReader);
 }
 
 static bool
 IsWhitelistedH264Codec(const nsAString& aCodec)
 {
   int16_t profile = 0, level = 0;
--- a/dom/media/hls/HLSDecoder.cpp
+++ b/dom/media/hls/HLSDecoder.cpp
@@ -23,20 +23,21 @@ MediaDecoderStateMachine*
 HLSDecoder::CreateStateMachine()
 {
   MOZ_ASSERT(NS_IsMainThread());
 
   MediaResource* resource = GetResource();
   MOZ_ASSERT(resource);
   auto resourceWrapper = static_cast<HLSResource*>(resource)->GetResourceWrapper();
   MOZ_ASSERT(resourceWrapper);
-  MediaFormatReaderInit init(this);
+  MediaFormatReaderInit init;
   init.mVideoFrameContainer = GetVideoFrameContainer();
   init.mKnowsCompositor = GetCompositor();
   init.mCrashHelper = GetOwner()->CreateGMPCrashHelper();
+  init.mFrameStats = mFrameStats;
   mReader =
     new MediaFormatReader(init, new HLSDemuxer(resourceWrapper->GetPlayerId()));
 
   return new MediaDecoderStateMachine(this, mReader);
 }
 
 ChannelMediaDecoder*
 HLSDecoder::Clone(MediaDecoderInit& aInit)
--- a/dom/media/mediasource/MediaSourceDecoder.cpp
+++ b/dom/media/mediasource/MediaSourceDecoder.cpp
@@ -34,20 +34,21 @@ MediaSourceDecoder::MediaSourceDecoder(M
   mExplicitDuration.Set(Some(UnspecifiedNaN<double>()));
 }
 
 MediaDecoderStateMachine*
 MediaSourceDecoder::CreateStateMachine()
 {
   MOZ_ASSERT(NS_IsMainThread());
   mDemuxer = new MediaSourceDemuxer(AbstractMainThread());
-  MediaFormatReaderInit init(this);
+  MediaFormatReaderInit init;
   init.mVideoFrameContainer = GetVideoFrameContainer();
   init.mKnowsCompositor = GetCompositor();
   init.mCrashHelper = GetOwner()->CreateGMPCrashHelper();
+  init.mFrameStats = mFrameStats;
   mReader = new MediaFormatReader(init, mDemuxer);
   return new MediaDecoderStateMachine(this, mReader);
 }
 
 nsresult
 MediaSourceDecoder::Load(nsIPrincipal* aPrincipal)
 {
   MOZ_ASSERT(NS_IsMainThread());
--- a/dom/media/mediasource/TrackBuffersManager.cpp
+++ b/dom/media/mediasource/TrackBuffersManager.cpp
@@ -57,17 +57,17 @@ AppendStateToStr(SourceBufferAttributes:
       return "IMPOSSIBLE";
   }
 }
 
 static Atomic<uint32_t> sStreamSourceID(0u);
 
 class DispatchKeyNeededEvent : public Runnable {
 public:
-  DispatchKeyNeededEvent(AbstractMediaDecoder* aDecoder,
+  DispatchKeyNeededEvent(MediaSourceDecoder* aDecoder,
                          const nsTArray<uint8_t>& aInitData,
                          const nsString& aInitDataType)
     : Runnable("DispatchKeyNeededEvent")
     , mDecoder(aDecoder)
     , mInitData(aInitData)
     , mInitDataType(aInitDataType)
   {
   }
@@ -77,17 +77,17 @@ public:
     MediaDecoderOwner* owner = mDecoder->GetOwner();
     if (owner) {
       owner->DispatchEncrypted(mInitData, mInitDataType);
     }
     mDecoder = nullptr;
     return NS_OK;
   }
 private:
-  RefPtr<AbstractMediaDecoder> mDecoder;
+  RefPtr<MediaSourceDecoder> mDecoder;
   nsTArray<uint8_t> mInitData;
   nsString mInitDataType;
 };
 
 TrackBuffersManager::TrackBuffersManager(MediaSourceDecoder* aParentDecoder,
                                          const MediaContainerType& aType)
   : mInputBuffer(new MediaByteBuffer)
   , mBufferFull(false)
--- a/dom/media/moz.build
+++ b/dom/media/moz.build
@@ -79,17 +79,16 @@ if CONFIG['MOZ_WEBRTC']:
 XPIDL_SOURCES += [
     'nsIDOMNavigatorUserMedia.idl',
     'nsIMediaManager.idl',
 ]
 
 XPIDL_MODULE = 'dom_media'
 
 EXPORTS += [
-    'AbstractMediaDecoder.h',
     'ADTSDecoder.h',
     'ADTSDemuxer.h',
     'AudioBufferUtils.h',
     'AudioChannelFormat.h',
     'AudioCompactor.h',
     'AudioConverter.h',
     'AudioMixer.h',
     'AudioPacketizer.h',
--- a/dom/media/mp3/MP3Decoder.cpp
+++ b/dom/media/mp3/MP3Decoder.cpp
@@ -21,18 +21,19 @@ MP3Decoder::Clone(MediaDecoderInit& aIni
   if (!IsEnabled()) {
     return nullptr;
   }
   return new MP3Decoder(aInit);
 }
 
 MediaDecoderStateMachine*
 MP3Decoder::CreateStateMachine() {
-  MediaFormatReaderInit init(this);
+  MediaFormatReaderInit init;
   init.mCrashHelper = GetOwner()->CreateGMPCrashHelper();
+  init.mFrameStats = mFrameStats;
   mReader = new MediaFormatReader(init, new MP3Demuxer(mResource));
   return new MediaDecoderStateMachine(this, mReader);
 }
 
 /* static */
 bool
 MP3Decoder::IsEnabled() {
   RefPtr<PDMFactory> platform = new PDMFactory();
--- a/dom/media/ogg/OggDecoder.cpp
+++ b/dom/media/ogg/OggDecoder.cpp
@@ -11,20 +11,21 @@
 #include "OggDemuxer.h"
 #include "OggDecoder.h"
 
 namespace mozilla {
 
 MediaDecoderStateMachine* OggDecoder::CreateStateMachine()
 {
   RefPtr<OggDemuxer> demuxer = new OggDemuxer(mResource);
-  MediaFormatReaderInit init(this);
+  MediaFormatReaderInit init;
   init.mVideoFrameContainer = GetVideoFrameContainer();
   init.mKnowsCompositor = GetCompositor();
   init.mCrashHelper = GetOwner()->CreateGMPCrashHelper();
+  init.mFrameStats = mFrameStats;
   mReader = new MediaFormatReader(init, demuxer);
   demuxer->SetChainingEvents(&mReader->TimedMetadataProducer(),
                              &mReader->MediaNotSeekableProducer());
   return new MediaDecoderStateMachine(this, mReader);
 }
 
 /* static */
 bool
--- a/dom/media/ogg/OggDemuxer.cpp
+++ b/dom/media/ogg/OggDemuxer.cpp
@@ -1,17 +1,16 @@
  /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim:set ts=2 sw=2 sts=2 et cindent: */
 /* 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 "nsError.h"
 #include "MediaDecoderStateMachine.h"
-#include "AbstractMediaDecoder.h"
 #include "OggDemuxer.h"
 #include "OggCodecState.h"
 #include "mozilla/AbstractThread.h"
 #include "mozilla/Atomics.h"
 #include "mozilla/PodOperations.h"
 #include "mozilla/SharedThreadPool.h"
 #include "mozilla/Telemetry.h"
 #include "mozilla/TimeStamp.h"
--- a/dom/media/test/test_mediarecorder_principals.html
+++ b/dom/media/test/test_mediarecorder_principals.html
@@ -10,84 +10,80 @@ https://bugzilla.mozilla.org/show_bug.cg
   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
   <script type="text/javascript" src="manifest.js"></script>
 </head>
 <body>
 <div>
   <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1018299">Test for MediaRecorder Principal Handling</a>
 </div>
 
-<video id="v1" preload="auto"></video>
-<video id="v2" preload="auto"></video>
+<video id="v1" preload="metadata"></video>
+<video id="v2" preload="metadata"></video>
 
 <pre id="test">
 <script type="text/javascript">
 SimpleTest.waitForExplicitFinish();
 
-var pushPrefs = (...p) => SpecialPowers.pushPrefEnv({set: p});
-var throwOutside = e => setTimeout(() => { throw e; });
+let throwOutside = e => setTimeout(() => { throw e; });
 
 // Generate a random key. The first load with that key will return
 // data, the second and subsequent loads with that key will return a redirect
 // to a different origin ('localhost:8888' will be redirected to 'example.org',
-// and 'example.org' will be redirected to 'localhost:8888'). We rely on the
-// fact that Ogg will do a seek to the end of the resource, triggering a new
-// load with the same key which will return a same-origin resource.
+// and 'example.org' will be redirected to 'localhost:8888').
 // Loading data from two different origins should be detected by the media
 // cache and result in a null principal so that the MediaRecorder usages below
 // fail.
+// This test relies on that preloading the metadata then loading a sufficiently
+// long video will result in two separate requests to load the resource. This
+// ends up relying on the impl of MediaCache and friends and we should probably
+// replace this test with a more robust gtest or the like.
 let key = Math.floor(Math.random()*100000000);
 let interval;
 
 function testPrincipals(resource) {
   if (!resource) {
     todo(false, "No types supported");
     return;
   }
-  // Reduce cache size and cache-ahead to make HTMLMediaElement do partial requests.
-  return pushPrefs(['media.cache_readahead_limit', 2],
-                   ['media.cache_size', 192])
-  .then(() => {
-    // First test: Load file from same-origin first, then get redirected to
-    // another origin before attempting to record stream.
-    let video = document.getElementById("v1");
-    video.src =
-        "http://mochi.test:8888/tests/dom/media/test/dynamic_redirect.sjs?key=v1_" +
-        key + "&res=" + resource.name;
-    video.load();
-    // To limit readahead, avoid racing with playback and "catching up" mode.
-    return new Promise(resolve => video.oncanplaythrough = resolve).then(() => {
-      video.play();
-      interval = setInterval(() => info("video.currentTime = "+ video.currentTime), 1000);
+  // First test: Load file from same-origin first, then get redirected to
+  // another origin before attempting to record stream.
+  let video = document.getElementById("v1");
+  video.src =
+      "http://mochi.test:8888/tests/dom/media/test/dynamic_redirect.sjs?key=v1_" +
+      key + "&res=" + resource.name;
+  video.load();
+  // To limit readahead, avoid racing with playback and "catching up" mode.
+  return new Promise(resolve => video.onloadeddata = resolve).then(() => {
+    video.play();
+    interval = setInterval(() => info("video.currentTime = "+ video.currentTime), 1000);
 
-      let msg = "mediaRecorder.start() must throw SecurityError";
-      return new Promise(resolve => video.onplaying = resolve)
-      .then(() => waitUntil(() => video.currentTime > resource.duration / 2))
-      // Test failure of the next step only, so "catch-bypass" any errors above.
-      .then(() => Promise.resolve()
-        .then(() => new MediaRecorder(video.mozCaptureStreamUntilEnded()).start())
-        .then(() => ok(false, msg), e => is(e.name, "SecurityError", msg)), 0)
-      .then(() => clearInterval(interval));
-    });
+    let msg = "mediaRecorder.start() must throw SecurityError";
+    return new Promise(resolve => video.onplaying = resolve)
+    .then(() => waitUntil(() => video.currentTime > resource.duration / 5))
+    // Test failure of the next step only, so "catch-bypass" any errors above.
+    .then(() => Promise.resolve()
+      .then(() => new MediaRecorder(video.mozCaptureStreamUntilEnded()).start())
+      .then(() => ok(false, msg), e => is(e.name, "SecurityError", msg)), 0)
+    .then(() => clearInterval(interval));
   })
   .then(() => {
     // Second test: Load file from same-origin first, but record ASAP, before
     // getting redirected to another origin.
     let video = document.getElementById("v2");
     video.src =
         "http://mochi.test:8888/tests/dom/media/test/dynamic_redirect.sjs?key=v2_" +
         key + "&res=" + resource.name;
     video.load();
     let rec, hasStopped, hasEnded = new Promise(r => video.onended = r);
     let data = [];
 
     let msgNoThrow = "mediaRecorder.start() should not throw here";
     let msgSecErr = "mediaRecorder.onerror must fire SecurityError";
     let msgOnStop = "mediaRecorder.onstop must also have fired";
-    return new Promise(resolve => video.onloadedmetadata = resolve).then(() => {
+    return new Promise(resolve => video.onloadeddata = resolve).then(() => {
       rec = new MediaRecorder(video.mozCaptureStreamUntilEnded());
       rec.ondataavailable = e => data.push(e.data);
       rec.start();
       hasStopped = new Promise(resolve => rec.onstop = resolve);
       video.play();
     })
     .then(() => ok(true, msgNoThrow), e => is(e.name, null, msgNoThrow))
     .then(() => Promise.race([
@@ -96,24 +92,24 @@ function testPrincipals(resource) {
     ]))
     .then(() => ok(false, msgSecErr), e => is(e.name, "SecurityError", msgSecErr))
     .then(() => Promise.race([hasStopped, hasEnded.then(() => Promise.reject())]))
     .then(() => ok(true, msgOnStop), e => ok(false, msgOnStop))
     .then(() => clearInterval(interval));
   });
 }
 
-testPrincipals(getPlayableVideo(gSeekTests))
+testPrincipals({ name:"pixel_aspect_ratio.mp4", type:"video/mp4", duration:28 })
 .catch(e => throwOutside(e))
 .then(() => SimpleTest.finish())
 .catch(e => throwOutside(e));
 
-var stop = stream => stream.getTracks().forEach(track => track.stop());
-var wait = ms => new Promise(resolve => setTimeout(resolve, ms));
-var waitUntil = f => new Promise(resolve => {
-  var ival = setInterval(() => f() && resolve(clearInterval(ival)), 100);
+let stop = stream => stream.getTracks().forEach(track => track.stop());
+let wait = ms => new Promise(resolve => setTimeout(resolve, ms));
+let waitUntil = f => new Promise(resolve => {
+  let ival = setInterval(() => f() && resolve(clearInterval(ival)), 100);
 });
 
 </script>
 </pre>
 
 </body>
 </html>
--- a/dom/media/wave/WaveDecoder.cpp
+++ b/dom/media/wave/WaveDecoder.cpp
@@ -17,18 +17,19 @@ ChannelMediaDecoder*
 WaveDecoder::Clone(MediaDecoderInit& aInit)
 {
   return new WaveDecoder(aInit);
 }
 
 MediaDecoderStateMachine*
 WaveDecoder::CreateStateMachine()
 {
-  MediaFormatReaderInit init(this);
+  MediaFormatReaderInit init;
   init.mCrashHelper = GetOwner()->CreateGMPCrashHelper();
+  init.mFrameStats = mFrameStats;
   mReader = new MediaFormatReader(init, new WAVDemuxer(mResource));
   return new MediaDecoderStateMachine(this, mReader);
 }
 
 /* static */ bool
 WaveDecoder::IsSupportedType(const MediaContainerType& aContainerType)
 {
   if (!IsWaveEnabled()) {
deleted file mode 100644
--- a/dom/media/webaudio/BufferDecoder.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- 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/. */
-
-#include "BufferDecoder.h"
-
-#include "nsISupports.h"
-#include "MediaResource.h"
-
-namespace mozilla {
-
-NS_IMPL_ISUPPORTS0(BufferDecoder)
-
-BufferDecoder::BufferDecoder(MediaResource* aResource,
-                             AbstractThread* aMainThread)
-  : mResource(aResource)
-  , mAbstractMainThread(aMainThread)
-{
-  MOZ_ASSERT(NS_IsMainThread());
-}
-
-BufferDecoder::~BufferDecoder()
-{
-  // The dtor may run on any thread, we cannot be sure.
-}
-
-void
-BufferDecoder::BeginDecoding(TaskQueue* aTaskQueueIdentity)
-{
-  MOZ_ASSERT(!mTaskQueueIdentity && aTaskQueueIdentity);
-  mTaskQueueIdentity = aTaskQueueIdentity;
-}
-
-void
-BufferDecoder::NotifyDecodedFrames(const FrameStatisticsData& aStats)
-{
-  // ignore
-}
-
-VideoFrameContainer*
-BufferDecoder::GetVideoFrameContainer()
-{
-  // no video frame
-  return nullptr;
-}
-
-layers::ImageContainer*
-BufferDecoder::GetImageContainer()
-{
-  // no image container
-  return nullptr;
-}
-
-MediaDecoderOwner*
-BufferDecoder::GetOwner() const
-{
-  // unknown
-  return nullptr;
-}
-
-AbstractThread*
-BufferDecoder::AbstractMainThread() const
-{
-  return mAbstractMainThread;
-}
-
-} // namespace mozilla
deleted file mode 100644
--- a/dom/media/webaudio/BufferDecoder.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* -*- 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 BUFFER_DECODER_H_
-#define BUFFER_DECODER_H_
-
-#include "mozilla/Attributes.h"
-#include "mozilla/ReentrantMonitor.h"
-#include "mozilla/TaskQueue.h"
-
-#include "AbstractMediaDecoder.h"
-
-namespace mozilla {
-
-/**
- * This class provides a decoder object which decodes a media file that lives in
- * a memory buffer.
- */
-class BufferDecoder final : public AbstractMediaDecoder
-{
-public:
-  // This class holds a weak pointer to MediaResource.  It's the responsibility
-  // of the caller to manage the memory of the MediaResource object.
-  explicit BufferDecoder(MediaResource* aResource,
-                         AbstractThread* aMainThread);
-
-  NS_DECL_THREADSAFE_ISUPPORTS
-
-  // This has to be called before decoding begins
-  void BeginDecoding(TaskQueue* aTaskQueueIdentity);
-
-  void NotifyDecodedFrames(const FrameStatisticsData& aStats) final override;
-
-  VideoFrameContainer* GetVideoFrameContainer() final override;
-  layers::ImageContainer* GetImageContainer() final override;
-
-  MediaDecoderOwner* GetOwner() const final override;
-
-  AbstractThread* AbstractMainThread() const final override;
-
-private:
-  virtual ~BufferDecoder();
-  RefPtr<TaskQueue> mTaskQueueIdentity;
-  RefPtr<MediaResource> mResource;
-  const RefPtr<AbstractThread> mAbstractMainThread;
-};
-
-} // namespace mozilla
-
-#endif /* BUFFER_DECODER_H_ */
--- a/dom/media/webaudio/MediaBufferDecoder.cpp
+++ b/dom/media/webaudio/MediaBufferDecoder.cpp
@@ -1,16 +1,15 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim:set ts=2 sw=2 sts=2 et cindent: */
 /* 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 "MediaBufferDecoder.h"
-#include "BufferDecoder.h"
 #include "mozilla/dom/AudioContextBinding.h"
 #include "mozilla/dom/BaseAudioContextBinding.h"
 #include "mozilla/dom/DOMException.h"
 #include "mozilla/dom/ScriptSettings.h"
 #include "mozilla/AbstractThread.h"
 #include <speex/speex_resampler.h>
 #include "nsXPCOMCIDInternal.h"
 #include "nsComponentManagerUtils.h"
@@ -128,41 +127,36 @@ private:
   void SampleNotDecoded(const MediaResult& aError);
   void FinishDecode();
   void AllocateBuffer();
   void CallbackTheResult();
 
   void Cleanup()
   {
     MOZ_ASSERT(NS_IsMainThread());
-    // MediaFormatReader expects that BufferDecoder is alive.
-    // Destruct MediaFormatReader first.
     mDecoderReader = nullptr;
-    mBufferDecoder = nullptr;
     JS_free(nullptr, mBuffer);
   }
 
 private:
   MediaContainerType mContainerType;
   uint8_t* mBuffer;
   uint32_t mLength;
   WebAudioDecodeJob& mDecodeJob;
   PhaseEnum mPhase;
-  RefPtr<BufferDecoder> mBufferDecoder;
   RefPtr<MediaFormatReader> mDecoderReader;
   MediaInfo mMediaInfo;
   MediaQueue<AudioData> mAudioQueue;
   RefPtr<AbstractThread> mMainThread;
   bool mFirstFrameDecoded;
 };
 
 NS_IMETHODIMP
 MediaDecodeTask::Run()
 {
-  MOZ_ASSERT(mBufferDecoder);
   MOZ_ASSERT(mDecoderReader);
   switch (mPhase) {
   case PhaseEnum::Decode:
     Decode();
     break;
   case PhaseEnum::AllocateBuffer:
     AllocateBuffer();
     break;
@@ -185,25 +179,23 @@ MediaDecodeTask::CreateReader()
   nsCOMPtr<nsIScriptObjectPrincipal> sop = do_QueryInterface(parent);
   if (sop) {
     principal = sop->GetPrincipal();
   }
 
   RefPtr<BufferMediaResource> resource =
     new BufferMediaResource(static_cast<uint8_t*>(mBuffer), mLength, principal);
 
-  MOZ_ASSERT(!mBufferDecoder);
   mMainThread =
     mDecodeJob.mContext->GetOwnerGlobal()->AbstractMainThreadFor(TaskCategory::Other);
-  mBufferDecoder = new BufferDecoder(resource, mMainThread);
 
   // If you change this list to add support for new decoders, please consider
   // updating HTMLMediaElement::CreateDecoder as well.
 
-  MediaFormatReaderInit init(mBufferDecoder);
+  MediaFormatReaderInit init;
   init.mResource = resource;
   mDecoderReader = DecoderTraits::CreateReader(mContainerType, init);
 
   if (!mDecoderReader) {
     return false;
   }
 
   nsresult rv = mDecoderReader->Init();
@@ -240,17 +232,16 @@ private:
   SpeexResamplerState* mResampler;
 };
 
 void
 MediaDecodeTask::Decode()
 {
   MOZ_ASSERT(!NS_IsMainThread());
 
-  mBufferDecoder->BeginDecoding(mDecoderReader->OwnerThread());
 
   mDecoderReader->AsyncReadMetadata()->Then(mDecoderReader->OwnerThread(), __func__, this,
                                        &MediaDecodeTask::OnMetadataRead,
                                        &MediaDecodeTask::OnMetadataNotRead);
 }
 
 void
 MediaDecodeTask::OnMetadataRead(MetadataHolder&& aMetadata)
--- a/dom/media/webaudio/moz.build
+++ b/dom/media/webaudio/moz.build
@@ -83,17 +83,16 @@ UNIFIED_SOURCES += [
     'AudioNode.cpp',
     'AudioNodeEngine.cpp',
     'AudioNodeExternalInputStream.cpp',
     'AudioNodeStream.cpp',
     'AudioParam.cpp',
     'AudioProcessingEvent.cpp',
     'AudioScheduledSourceNode.cpp',
     'BiquadFilterNode.cpp',
-    'BufferDecoder.cpp',
     'ChannelMergerNode.cpp',
     'ChannelSplitterNode.cpp',
     'ConstantSourceNode.cpp',
     'ConvolverNode.cpp',
     'DelayBuffer.cpp',
     'DelayNode.cpp',
     'DynamicsCompressorNode.cpp',
     'FFTBlock.cpp',
--- a/dom/media/webm/WebMDecoder.cpp
+++ b/dom/media/webm/WebMDecoder.cpp
@@ -13,20 +13,21 @@
 #include "WebMDemuxer.h"
 #include "WebMDecoder.h"
 #include "VideoUtils.h"
 
 namespace mozilla {
 
 MediaDecoderStateMachine* WebMDecoder::CreateStateMachine()
 {
-  MediaFormatReaderInit init(this);
+  MediaFormatReaderInit init;
   init.mVideoFrameContainer = GetVideoFrameContainer();
   init.mKnowsCompositor = GetCompositor();
   init.mCrashHelper = GetOwner()->CreateGMPCrashHelper();
+  init.mFrameStats = mFrameStats;
   mReader = new MediaFormatReader(init, new WebMDemuxer(mResource));
   return new MediaDecoderStateMachine(this, mReader);
 }
 
 /* static */
 bool
 WebMDecoder::IsSupportedType(const MediaContainerType& aContainerType)
 {
--- a/dom/media/webm/WebMDemuxer.cpp
+++ b/dom/media/webm/WebMDemuxer.cpp
@@ -1,17 +1,16 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim:set ts=2 sw=2 sts=2 et cindent: */
 /* 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 "nsError.h"
 #include "MediaDecoderStateMachine.h"
-#include "AbstractMediaDecoder.h"
 #include "MediaResource.h"
 #ifdef MOZ_AV1
 #include "AOMDecoder.h"
 #endif
 #include "OpusDecoder.h"
 #include "VPXDecoder.h"
 #include "WebMDemuxer.h"
 #include "WebMBufferedParser.h"
--- a/dom/xbl/nsXBLWindowKeyHandler.cpp
+++ b/dom/xbl/nsXBLWindowKeyHandler.cpp
@@ -528,24 +528,20 @@ nsXBLWindowKeyHandler::HandleEventOnCapt
 
 void
 nsXBLWindowKeyHandler::HandleEventOnCaptureInSystemEventGroup(
                          nsIDOMKeyEvent* aEvent)
 {
   WidgetKeyboardEvent* widgetEvent =
     aEvent->AsEvent()->WidgetEventPtr()->AsKeyboardEvent();
 
-  if (widgetEvent->IsCrossProcessForwardingStopped() ||
-      widgetEvent->mFlags.mOnlySystemGroupDispatchInContent) {
-    return;
-  }
-
-  nsCOMPtr<mozilla::dom::Element> originalTarget =
-    do_QueryInterface(aEvent->AsEvent()->WidgetEventPtr()->mOriginalTarget);
-  if (!EventStateManager::IsRemoteTarget(originalTarget)) {
+  // If the event won't be sent to remote process, this listener needs to do
+  // nothing.
+  if (widgetEvent->mFlags.mOnlySystemGroupDispatchInContent ||
+      !widgetEvent->WillBeSentToRemoteProcess()) {
     return;
   }
 
   if (!HasHandlerForEvent(aEvent)) {
     return;
   }
 
   // If this event wasn't marked as IsCrossProcessForwardingStopped,
--- a/js/src/devtools/rootAnalysis/analyzeHeapWrites.js
+++ b/js/src/devtools/rootAnalysis/analyzeHeapWrites.js
@@ -414,17 +414,16 @@ function ignoreContents(entry)
         "Gecko_SetNullImageValue",
 
         // The analysis thinks we'll write to mBits in the DoGetStyleFoo<false>
         // call.  Maybe the template parameter confuses it?
         /nsStyleContext::PeekStyle/,
 
         // Needs main thread assertions or other fixes.
         /UndisplayedMap::GetEntryFor/,
-        /nsStyleContext::CalcStyleDifferenceInternal/,
         /EffectCompositor::GetServoAnimationRule/,
         /LookAndFeel::GetColor/,
         "Gecko_CopyStyleContentsFrom",
         "Gecko_CSSValue_SetAbsoluteLength",
         "Gecko_UnsetDirtyStyleAttr",
         /nsCSSPropertyIDSet::AddProperty/,
     ];
     if (entry.matches(whitelist))
--- a/layout/base/PresShell.cpp
+++ b/layout/base/PresShell.cpp
@@ -8156,17 +8156,29 @@ PresShell::HandleEventInternal(WidgetEve
 
     // 2. Give event to the DOM for third party and JS use.
     if (NS_SUCCEEDED(rv)) {
       bool wasHandlingKeyBoardEvent =
         nsContentUtils::IsHandlingKeyBoardEvent();
       if (aEvent->mClass == eKeyboardEventClass) {
         nsContentUtils::SetIsHandlingKeyBoardEvent(true);
       }
-      if (aEvent->IsAllowedToDispatchDOMEvent()) {
+      // If EventStateManager or something wants reply from remote process and
+      // needs to win any other event listeners in chrome, the event is both
+      // stopped its propagation and marked as "waiting reply from remote
+      // process".  In this case, PresShell shouldn't dispatch the event into
+      // the DOM tree because they don't have a chance to stop propagation in
+      // the system event group.  On the other hand, if its propagation is not
+      // stopped, that means that the event may be reserved by chrome.  If it's
+      // reserved by chrome, the event shouldn't be sent to any remote
+      // processes.  In this case, PresShell needs to dispatch the event to
+      // the DOM tree for checking if it's reserved.
+      if (aEvent->IsAllowedToDispatchDOMEvent() &&
+          !(aEvent->PropagationStopped() &&
+            aEvent->IsWaitingReplyFromRemoteProcess())) {
         MOZ_ASSERT(nsContentUtils::IsSafeToRunScript(),
           "Somebody changed aEvent to cause a DOM event!");
         nsPresShellEventCB eventCB(this);
         if (nsIFrame* target = GetCurrentEventFrame()) {
           if (target->OnlySystemGroupDispatch(aEvent->mMessage)) {
               aEvent->StopPropagation();
           }
         }
--- a/layout/base/RestyleManager.cpp
+++ b/layout/base/RestyleManager.cpp
@@ -1809,18 +1809,28 @@ RestyleManager::AnimationsWithDestroyedF
                   nsTArray<RefPtr<nsIContent>>& aArray,
                   CSSPseudoElementType aPseudoType)
 {
   nsAnimationManager* animationManager =
     mRestyleManager->PresContext()->AnimationManager();
   nsTransitionManager* transitionManager =
     mRestyleManager->PresContext()->TransitionManager();
   for (nsIContent* content : aArray) {
-    if (content->GetPrimaryFrame()) {
-      continue;
+    if (aPseudoType == CSSPseudoElementType::NotPseudo) {
+      if (content->GetPrimaryFrame()) {
+        continue;
+      }
+    } else if (aPseudoType == CSSPseudoElementType::before) {
+      if (nsLayoutUtils::GetBeforeFrame(content)) {
+        continue;
+      }
+    } else if (aPseudoType == CSSPseudoElementType::after) {
+      if (nsLayoutUtils::GetAfterFrame(content)) {
+        continue;
+      }
     }
     dom::Element* element = content->AsElement();
 
     animationManager->StopAnimationsForElement(element, aPseudoType);
     transitionManager->StopAnimationsForElement(element, aPseudoType);
 
     // All other animations should keep running but not running on the
     // *compositor* at this point.
--- a/layout/base/ServoRestyleManager.cpp
+++ b/layout/base/ServoRestyleManager.cpp
@@ -598,22 +598,19 @@ ServoRestyleManager::ProcessPostTraversa
   // We can't really assume as used changes from display: contents elements (or
   // other elements without frames).
   ServoRestyleState& childrenRestyleState =
     thisFrameRestyleState ? *thisFrameRestyleState : aRestyleState;
 
   RefPtr<ServoStyleContext> newContext = nullptr;
   if (wasRestyled && oldStyleContext) {
     MOZ_ASSERT(styleFrame || displayContentsNode);
-    RefPtr<ServoStyleContext> currentContext =
+    newContext =
       aRestyleState.StyleSet().ResolveServoStyle(aElement, aRestyleBehavior);
-    MOZ_ASSERT(oldStyleContext->ComputedData() != currentContext->ComputedData());
-
-    newContext = currentContext;
-    newContext->UpdateWithElementState(aElement);
+    MOZ_ASSERT(oldStyleContext->ComputedData() != newContext->ComputedData());
 
     newContext->ResolveSameStructsAs(oldStyleContext);
 
     // We want to walk all the continuations here, even the ones with different
     // styles.  In practice, the only reason we get continuations with different
     // styles here is ::first-line (::first-letter never affects element
     // styles).  But in that case, newContext is the right context for the
     // _later_ continuations anyway (the ones not affected by ::first-line), not
--- a/layout/reftests/css-animations/reftest.list
+++ b/layout/reftests/css-animations/reftest.list
@@ -46,9 +46,11 @@ fails == background-position-important.h
 == mask-position-after-finish-1b.html mask-anim-ref.html
 == mask-position-in-delay-1a.html mask-anim-ref.html
 == mask-position-in-delay-1b.html mask-anim-ref.html
 == mask-size-after-finish-1a.html mask-anim-ref.html
 == mask-size-after-finish-1b.html mask-anim-ref.html
 == mask-size-in-delay-1a.html mask-anim-ref.html
 == mask-size-in-delay-1b.html mask-anim-ref.html
 
+== stop-animation-on-discarded-pseudo-element.html about:blank
+
 == updating-animation-on-pseudo-element.html updating-animation-on-pseudo-element-ref.html
new file mode 100644
--- /dev/null
+++ b/layout/reftests/css-animations/stop-animation-on-discarded-pseudo-element.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<style>
+@keyframes anim {
+  0% { background-color: red; }
+  100% { background-color: red; }
+}
+#target.x::before,
+#target.y::before {
+  content: "";
+  position: absolute;
+  width: 100px;
+  height: 100px;
+}
+#target.x::before {
+  animation: anim 100s infinite;
+}
+</style>
+<div id="target"></div>
+<script>
+var target = document.getElementById('target');
+requestAnimationFrame(() => {
+  // Create ::before, start animation
+  target.className = 'x';
+  requestAnimationFrame(() => {
+    // Remove ::before, stop animation
+    target.className = '';
+
+    requestAnimationFrame(() => {
+      // Create ::before, should not be animating
+      target.className = 'y';
+      document.documentElement.classList.remove('reftest-wait');
+    });
+  });
+});
+</script>
--- a/layout/style/ServoBindings.cpp
+++ b/layout/style/ServoBindings.cpp
@@ -21,16 +21,17 @@
 #include "nsCSSRuleProcessor.h"
 #include "nsCSSRules.h"
 #include "nsContentUtils.h"
 #include "nsDOMTokenList.h"
 #include "nsDeviceContext.h"
 #include "nsIContentInlines.h"
 #include "nsIDOMNode.h"
 #include "nsIDocumentInlines.h"
+#include "nsILoadContext.h"
 #include "nsIFrame.h"
 #include "nsINode.h"
 #include "nsIPresShell.h"
 #include "nsIPresShellInlines.h"
 #include "nsIPrincipal.h"
 #include "nsIURI.h"
 #include "nsFontMetrics.h"
 #include "nsHTMLStyleSheet.h"
@@ -277,16 +278,32 @@ Gecko_ElementBindingAnonymousContent(Raw
 
 RawGeckoNodeBorrowed
 Gecko_GetNextStyleChild(RawGeckoStyleChildrenIteratorBorrowedMut aIterator)
 {
   MOZ_ASSERT(aIterator);
   return aIterator->GetNextChild();
 }
 
+bool
+Gecko_IsPrivateBrowsingEnabled(const nsIDocument* aDoc)
+{
+  MOZ_ASSERT(aDoc);
+  MOZ_ASSERT(NS_IsMainThread());
+
+  nsILoadContext* loadContext = aDoc->GetLoadContext();
+  return loadContext && loadContext->UsePrivateBrowsing();
+}
+
+bool
+Gecko_AreVisitedLinksEnabled()
+{
+  return nsCSSRuleProcessor::VisitedLinksEnabled();
+}
+
 EventStates::ServoType
 Gecko_ElementState(RawGeckoElementBorrowed aElement)
 {
   return aElement->StyleState().ServoValue();
 }
 
 EventStates::ServoType
 Gecko_DocumentState(const nsIDocument* aDocument)
--- a/layout/style/ServoBindings.h
+++ b/layout/style/ServoBindings.h
@@ -224,16 +224,23 @@ RawServoDeclarationBlockStrongBorrowedOr
 Gecko_GetExtraContentStyleDeclarations(RawGeckoElementBorrowed element);
 RawServoDeclarationBlockStrongBorrowedOrNull
 Gecko_GetUnvisitedLinkAttrDeclarationBlock(RawGeckoElementBorrowed element);
 RawServoDeclarationBlockStrongBorrowedOrNull
 Gecko_GetVisitedLinkAttrDeclarationBlock(RawGeckoElementBorrowed element);
 RawServoDeclarationBlockStrongBorrowedOrNull
 Gecko_GetActiveLinkAttrDeclarationBlock(RawGeckoElementBorrowed element);
 
+// Visited handling.
+
+// Returns whether private browsing is enabled for a given element.
+bool Gecko_IsPrivateBrowsingEnabled(const nsIDocument* aDoc);
+// Returns whether visited links are enabled.
+bool Gecko_AreVisitedLinksEnabled();
+
 // Animations
 bool
 Gecko_GetAnimationRule(RawGeckoElementBorrowed aElementOrPseudo,
                        mozilla::EffectCompositor::CascadeLevel aCascadeLevel,
                        RawServoAnimationValueMapBorrowedMut aAnimationValues);
 RawServoDeclarationBlockStrongBorrowedOrNull
 Gecko_GetSMILOverrideDeclarationBlock(RawGeckoElementBorrowed element);
 bool Gecko_StyleAnimationsEquals(RawGeckoStyleAnimationListBorrowed,
--- a/layout/style/ServoStyleContext.cpp
+++ b/layout/style/ServoStyleContext.cpp
@@ -17,58 +17,19 @@ namespace mozilla {
 
 ServoStyleContext::ServoStyleContext(
     nsStyleContext* aParent,
     nsPresContext* aPresContext,
     nsIAtom* aPseudoTag,
     CSSPseudoElementType aPseudoType,
     ServoComputedDataForgotten aComputedValues)
   : nsStyleContext(aParent, aPseudoTag, aPseudoType)
+  , mPresContext(aPresContext)
   , mSource(aComputedValues)
 {
-  mPresContext = aPresContext;
   AddStyleBit(Servo_ComputedValues_GetStyleBits(this));
-
   FinishConstruction();
 
   // No need to call ApplyStyleFixups here, since fixups are handled by Servo when
   // producing the ServoComputedData.
 }
 
-void
-ServoStyleContext::UpdateWithElementState(Element* aElementForAnimation)
-{
-  bool isLink = false;
-  bool isVisitedLink = false;
-  // If we need visited styles for callers where `aElementForAnimation` is null,
-  // we can precompute these and pass them as flags, similar to nsStyleSet.cpp.
-  if (aElementForAnimation) {
-    isLink = nsCSSRuleProcessor::IsLink(aElementForAnimation);
-    isVisitedLink = nsCSSRuleProcessor::GetContentState(aElementForAnimation)
-                                       .HasState(NS_EVENT_STATE_VISITED);
-  }
-
-
-  auto parent = GetParentAllowServo();
-
-  // The true visited state of the relevant link is used to decided whether
-  // visited styles should be consulted for all visited dependent properties.
-  bool relevantLinkVisited = isLink ? isVisitedLink :
-    (parent && parent->RelevantLinkVisited());
-
-  if (relevantLinkVisited && GetStyleIfVisited()) {
-    AddStyleBit(NS_STYLE_RELEVANT_LINK_VISITED);
-  }
-
-  // Set the body color on the pres context. See nsStyleSet::GetContext
-  if (aElementForAnimation &&
-      aElementForAnimation->IsHTMLElement(nsGkAtoms::body) &&
-      GetPseudoType() == CSSPseudoElementType::NotPseudo &&
-      mPresContext->CompatibilityMode() == eCompatibility_NavQuirks) {
-    nsIDocument* doc = aElementForAnimation->GetUncomposedDoc();
-    if (doc && doc->GetBodyElement() == aElementForAnimation) {
-      // Update the prescontext's body color
-      mPresContext->SetBodyTextColor(StyleColor()->mColor);
-    }
-  }
-}
-
 } // namespace mozilla
--- a/layout/style/ServoStyleContext.h
+++ b/layout/style/ServoStyleContext.h
@@ -30,20 +30,16 @@ public:
   void AddRef() { Servo_StyleContext_AddRef(this); }
   void Release() { Servo_StyleContext_Release(this); }
 
   ServoStyleContext* GetStyleIfVisited() const
   {
     return ComputedData()->visited_style.mPtr;
   }
 
-  // Update visited state for a given element, and set the prescontext's
-  // body text color if applicable.
-  void UpdateWithElementState(dom::Element* aElement);
-
   /**
    * Makes this context match |aOther| in terms of which style structs have
    * been resolved.
    */
   inline void ResolveSameStructsAs(const ServoStyleContext* aOther);
 
 private:
   nsPresContext* mPresContext;
--- a/layout/style/ServoStyleSet.cpp
+++ b/layout/style/ServoStyleSet.cpp
@@ -170,43 +170,24 @@ ServoStyleSet::EndUpdate()
   return NS_OK;
 }
 
 already_AddRefed<ServoStyleContext>
 ServoStyleSet::ResolveStyleFor(Element* aElement,
                                ServoStyleContext* aParentContext,
                                LazyComputeBehavior aMayCompute)
 {
-  return GetContext(aElement, aParentContext, nullptr,
-                    CSSPseudoElementType::NotPseudo, aMayCompute);
-}
-
-already_AddRefed<ServoStyleContext>
-ServoStyleSet::GetContext(nsIContent* aContent,
-                          ServoStyleContext* aParentContext,
-                          nsIAtom* aPseudoTag,
-                          CSSPseudoElementType aPseudoType,
-                          LazyComputeBehavior aMayCompute)
-{
-  MOZ_ASSERT(aContent->IsElement());
-  Element* element = aContent->AsElement();
-
   RefPtr<ServoStyleContext> computedValues;
   if (aMayCompute == LazyComputeBehavior::Allow) {
     PreTraverseSync();
-    computedValues =
-      ResolveStyleLazily(element, CSSPseudoElementType::NotPseudo, aPseudoTag, aParentContext);
-      computedValues->UpdateWithElementState(element);
-  } else {
-    computedValues = ResolveServoStyle(element,
-                                       TraversalRestyleBehavior::Normal);
+    return ResolveStyleLazily(
+        aElement, CSSPseudoElementType::NotPseudo, nullptr, aParentContext);
   }
 
-  MOZ_ASSERT(computedValues);
-  return computedValues.forget();
+  return ResolveServoStyle(aElement, TraversalRestyleBehavior::Normal);
 }
 
 
 const ServoElementSnapshotTable&
 ServoStyleSet::Snapshots()
 {
   return mPresContext->RestyleManager()->AsServo()->Snapshots();
 }
@@ -379,32 +360,29 @@ ServoStyleSet::ResolveStyleForText(nsICo
   // rules: inherit the inherit structs, reset the reset structs. This is cheap
   // enough to do on the main thread, which means that the parallel style system
   // can avoid worrying about text nodes.
   RefPtr<ServoStyleContext> computedValues =
     Servo_ComputedValues_Inherit(mRawSet.get(),
                                  nsCSSAnonBoxes::mozText,
                                  aParentContext,
                                  InheritTarget::Text).Consume();
-  computedValues->UpdateWithElementState(nullptr);
   return computedValues.forget();
 }
 
 already_AddRefed<ServoStyleContext>
 ServoStyleSet::ResolveStyleForFirstLetterContinuation(ServoStyleContext* aParentContext)
 {
   RefPtr<ServoStyleContext> computedValues =
     Servo_ComputedValues_Inherit(mRawSet.get(),
                                  nsCSSAnonBoxes::firstLetterContinuation,
                                  aParentContext,
                                  InheritTarget::FirstLetterContinuation)
                                  .Consume();
   MOZ_ASSERT(computedValues);
-
-  computedValues->UpdateWithElementState(nullptr);
   return computedValues.forget();
 }
 
 already_AddRefed<ServoStyleContext>
 ServoStyleSet::ResolveStyleForPlaceholder()
 {
   RefPtr<ServoStyleContext>& cache =
     mNonInheritingStyleContexts[nsCSSAnonBoxes::NonInheriting::oofPlaceholder];
@@ -416,17 +394,16 @@ ServoStyleSet::ResolveStyleForPlaceholde
   RefPtr<ServoStyleContext> computedValues =
     Servo_ComputedValues_Inherit(mRawSet.get(),
                                  nsCSSAnonBoxes::oofPlaceholder,
                                  nullptr,
                                  InheritTarget::PlaceholderFrame)
                                  .Consume();
   MOZ_ASSERT(computedValues);
 
-  computedValues->UpdateWithElementState(nullptr);
   cache = computedValues;
   return computedValues.forget();
 }
 
 already_AddRefed<ServoStyleContext>
 ServoStyleSet::ResolvePseudoElementStyle(Element* aOriginatingElement,
                                          CSSPseudoElementType aType,
                                          ServoStyleContext* aParentContext,
@@ -449,32 +426,27 @@ ServoStyleSet::ResolvePseudoElementStyle
       Servo_ResolvePseudoStyle(aOriginatingElement,
                                aType,
                                /* is_probe = */ false,
                                aParentContext,
                                mRawSet.get()).Consume();
   }
 
   MOZ_ASSERT(computedValues);
-
-  bool isBeforeOrAfter = aType == CSSPseudoElementType::before ||
-                         aType == CSSPseudoElementType::after;
-  computedValues->UpdateWithElementState(isBeforeOrAfter ? aOriginatingElement : nullptr);
   return computedValues.forget();
 }
 
 already_AddRefed<ServoStyleContext>
 ServoStyleSet::ResolveTransientStyle(Element* aElement,
                                      CSSPseudoElementType aPseudoType,
                                      nsIAtom* aPseudoTag,
                                      StyleRuleInclusion aRuleInclusion)
 {
   RefPtr<ServoStyleContext> result =
     ResolveTransientServoStyle(aElement, aPseudoType, aPseudoTag, aRuleInclusion);
-  result->UpdateWithElementState(nullptr);
   return result.forget();
 }
 
 already_AddRefed<ServoStyleContext>
 ServoStyleSet::ResolveTransientServoStyle(
     Element* aElement,
     CSSPseudoElementType aPseudoType,
     nsIAtom* aPseudoTag,
@@ -502,17 +474,16 @@ ServoStyleSet::ResolveInheritingAnonymou
     nsString pseudo;
     aPseudoTag->ToString(pseudo);
     NS_ERROR(nsPrintfCString("stylo: could not get anon-box: %s",
              NS_ConvertUTF16toUTF8(pseudo).get()).get());
     MOZ_CRASH();
   }
 #endif
 
-  computedValues->UpdateWithElementState(nullptr);
   return computedValues.forget();
 }
 
 already_AddRefed<ServoStyleContext>
 ServoStyleSet::ResolveNonInheritingAnonymousBoxStyle(nsIAtom* aPseudoTag)
 {
   MOZ_ASSERT(nsCSSAnonBoxes::IsAnonBox(aPseudoTag) &&
              nsCSSAnonBoxes::IsNonInheritingAnonBox(aPseudoTag));
@@ -547,17 +518,16 @@ ServoStyleSet::ResolveNonInheritingAnony
     nsString pseudo;
     aPseudoTag->ToString(pseudo);
     NS_ERROR(nsPrintfCString("stylo: could not get anon-box: %s",
              NS_ConvertUTF16toUTF8(pseudo).get()).get());
     MOZ_CRASH();
   }
 #endif
 
-  computedValues->UpdateWithElementState(nullptr);
   cache = computedValues;
   return computedValues.forget();
 }
 
 // manage the set of style sheets in the style set
 nsresult
 ServoStyleSet::AppendStyleSheet(SheetType aType,
                                 ServoStyleSheet* aSheet)
@@ -779,40 +749,38 @@ ServoStyleSet::ProbePseudoElementStyle(E
   // For :before and :after pseudo-elements, having display: none or no
   // 'content' property is equivalent to not having the pseudo-element
   // at all.
   bool isBeforeOrAfter = aType == CSSPseudoElementType::before ||
                          aType == CSSPseudoElementType::after;
   if (isBeforeOrAfter) {
     const nsStyleDisplay* display = computedValues->ComputedData()->GetStyleDisplay();
     const nsStyleContent* content = computedValues->ComputedData()->GetStyleContent();
-    // XXXldb What is contentCount for |content: ""|?
     if (display->mDisplay == StyleDisplay::None ||
         content->ContentCount() == 0) {
       return nullptr;
     }
   }
 
-  computedValues->UpdateWithElementState(isBeforeOrAfter ? aOriginatingElement : nullptr);
   return computedValues.forget();
 }
 
 nsRestyleHint
 ServoStyleSet::HasStateDependentStyle(dom::Element* aElement,
                                       EventStates aStateMask)
 {
   NS_WARNING("stylo: HasStateDependentStyle always returns zero!");
   return nsRestyleHint(0);
 }
 
 nsRestyleHint
 ServoStyleSet::HasStateDependentStyle(dom::Element* aElement,
                                       CSSPseudoElementType aPseudoType,
-                                     dom::Element* aPseudoElement,
-                                     EventStates aStateMask)
+                                      dom::Element* aPseudoElement,
+                                      EventStates aStateMask)
 {
   NS_WARNING("stylo: HasStateDependentStyle always returns zero!");
   return nsRestyleHint(0);
 }
 
 bool
 ServoStyleSet::StyleDocument(TraversalRestyleBehavior aRestyleBehavior)
 {
@@ -1083,24 +1051,55 @@ ServoStyleSet::ClearDataAndMarkDeviceDir
 }
 
 void
 ServoStyleSet::CompatibilityModeChanged()
 {
   Servo_StyleSet_CompatModeChanged(mRawSet.get());
 }
 
+inline static void
+UpdateBodyTextColorIfNeeded(
+    const Element& aElement,
+    ServoStyleContext& aStyleContext,
+    nsPresContext& aPresContext)
+{
+  if (aPresContext.CompatibilityMode() != eCompatibility_NavQuirks) {
+    return;
+  }
+
+  if (!aElement.IsHTMLElement(nsGkAtoms::body)) {
+    return;
+  }
+
+  nsIDocument* doc = aElement.GetUncomposedDoc();
+  if (!doc || doc->GetBodyElement() != &aElement) {
+    return;
+  }
+
+  MOZ_ASSERT(!aStyleContext.GetPseudo());
+
+  // NOTE(emilio): We do the ComputedData() dance to avoid triggering the
+  // IsInServoTraversal() assertion in StyleColor(), which seems useful enough
+  // in the general case, I guess...
+  aPresContext.SetBodyTextColor(
+      aStyleContext.ComputedData()->GetStyleColor()->mColor);
+}
+
 already_AddRefed<ServoStyleContext>
 ServoStyleSet::ResolveServoStyle(Element* aElement,
                                  TraversalRestyleBehavior aRestyleBehavior)
 {
   UpdateStylistIfNeeded();
-  return Servo_ResolveStyle(aElement,
-                            mRawSet.get(),
-                            aRestyleBehavior).Consume();
+  RefPtr<ServoStyleContext> result =
+    Servo_ResolveStyle(aElement,
+                       mRawSet.get(),
+                       aRestyleBehavior).Consume();
+  UpdateBodyTextColorIfNeeded(*aElement, *result, *mPresContext);
+  return result.forget();
 }
 
 void
 ServoStyleSet::ClearNonInheritingStyleContexts()
 {
   for (RefPtr<ServoStyleContext>& ptr : mNonInheritingStyleContexts) {
     ptr = nullptr;
   }
@@ -1154,16 +1153,20 @@ ServoStyleSet::ResolveStyleLazily(Elemen
     computedValues =
       Servo_ResolveStyleLazily(elementForStyleResolution,
                                pseudoTypeForStyleResolution,
                                aRuleInclusion,
                                &Snapshots(),
                                mRawSet.get()).Consume();
   }
 
+  if (aPseudoType == CSSPseudoElementType::NotPseudo) {
+    UpdateBodyTextColorIfNeeded(*aElement, *computedValues, *mPresContext);
+  }
+
   return computedValues.forget();
 }
 
 bool
 ServoStyleSet::AppendFontFaceRules(nsTArray<nsFontFaceRuleContainer>& aArray)
 {
   UpdateStylistIfNeeded();
   Servo_StyleSet_GetFontFaceRules(mRawSet.get(), &aArray);
--- a/layout/style/ServoStyleSet.h
+++ b/layout/style/ServoStyleSet.h
@@ -476,22 +476,16 @@ private:
       sInServoTraversal = nullptr;
       mSet->RunPostTraversalTasks();
     }
 
   private:
     ServoStyleSet* mSet;
   };
 
-  already_AddRefed<ServoStyleContext> GetContext(nsIContent* aContent,
-                                                 ServoStyleContext* aParentContext,
-                                                 nsIAtom* aPseudoTag,
-                                                 CSSPseudoElementType aPseudoType,
-                                                 LazyComputeBehavior aMayCompute);
-
   /**
    * Rebuild the style data. This will force a stylesheet flush, and also
    * recompute the default computed styles.
    */
   void RebuildData();
 
   /**
    * Gets the pending snapshots to handle from the restyle manager.
--- a/layout/style/nsCSSRuleProcessor.cpp
+++ b/layout/style/nsCSSRuleProcessor.cpp
@@ -1063,16 +1063,22 @@ nsCSSRuleProcessor::ClearSheets()
 
 /* static */ void
 nsCSSRuleProcessor::Startup()
 {
   Preferences::AddBoolVarCache(&gSupportVisitedPseudo, VISITED_PSEUDO_PREF,
                                true);
 }
 
+/* static */ bool
+nsCSSRuleProcessor::VisitedLinksEnabled()
+{
+  return gSupportVisitedPseudo;
+}
+
 /* static */ void
 nsCSSRuleProcessor::InitSystemMetrics()
 {
   if (sSystemMetrics)
     return;
 
   MOZ_ASSERT(NS_IsMainThread());
 
@@ -1235,17 +1241,18 @@ nsCSSRuleProcessor::GetWindowsThemeIdent
 {
   nsCSSRuleProcessor::InitSystemMetrics();
   return sWinThemeId;
 }
 #endif
 
 /* static */
 EventStates
-nsCSSRuleProcessor::GetContentState(Element* aElement, bool aUsingPrivateBrowsing)
+nsCSSRuleProcessor::GetContentState(const Element* aElement,
+                                    bool aUsingPrivateBrowsing)
 {
   EventStates state = aElement->StyleState();
 
   // If we are not supposed to mark visited links as such, be sure to
   // flip the bits appropriately.  We want to do this here, rather
   // than in GetContentStateForVisitedHandling, so that we don't
   // expose that :visited support is disabled to the Web page.
   if (state.HasState(NS_EVENT_STATE_VISITED) &&
@@ -1255,27 +1262,28 @@ nsCSSRuleProcessor::GetContentState(Elem
     state &= ~NS_EVENT_STATE_VISITED;
     state |= NS_EVENT_STATE_UNVISITED;
   }
   return state;
 }
 
 /* static */
 EventStates
-nsCSSRuleProcessor::GetContentState(Element* aElement, const TreeMatchContext& aTreeMatchContext)
+nsCSSRuleProcessor::GetContentState(const Element* aElement,
+                                    const TreeMatchContext& aTreeMatchContext)
 {
   return nsCSSRuleProcessor::GetContentState(
     aElement,
     aTreeMatchContext.mUsingPrivateBrowsing
   );
 }
 
 /* static */
 EventStates
-nsCSSRuleProcessor::GetContentState(Element* aElement)
+nsCSSRuleProcessor::GetContentState(const Element* aElement)
 {
   nsILoadContext* loadContext = aElement->OwnerDoc()->GetLoadContext();
   bool usingPrivateBrowsing = loadContext && loadContext->UsePrivateBrowsing();
   return nsCSSRuleProcessor::GetContentState(aElement, usingPrivateBrowsing);
 }
 
 /* static */
 bool
@@ -1283,17 +1291,17 @@ nsCSSRuleProcessor::IsLink(const Element
 {
   EventStates state = aElement->StyleState();
   return state.HasAtLeastOneOfStates(NS_EVENT_STATE_VISITED | NS_EVENT_STATE_UNVISITED);
 }
 
 /* static */
 EventStates
 nsCSSRuleProcessor::GetContentStateForVisitedHandling(
-                     Element* aElement,
+                     const Element* aElement,
                      nsRuleWalker::VisitedHandlingType aVisitedHandling,
                      bool aIsRelevantLink)
 {
   // It's unnecessary to call GetContentState() here (which may flip visited to
   // unvisited) since this function will remove both unvisited and visited if
   // either is set and produce a new value.
   EventStates state = aElement->StyleState();
   if (state.HasAtLeastOneOfStates(NS_EVENT_STATE_VISITED | NS_EVENT_STATE_UNVISITED)) {
--- a/layout/style/nsCSSRuleProcessor.h
+++ b/layout/style/nsCSSRuleProcessor.h
@@ -76,16 +76,17 @@ public:
                      bool aIsShared = false);
 
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
   NS_DECL_CYCLE_COLLECTION_CLASS(nsCSSRuleProcessor)
 
 public:
   nsresult ClearRuleCascades();
 
+  static bool VisitedLinksEnabled();
   static void Startup();
   static void InitSystemMetrics();
   static void Shutdown();
   static void FreeSystemMetrics();
   static bool HasSystemMetric(nsIAtom* aMetric);
 
   /*
    * Returns true if the given aElement matches one of the
@@ -98,29 +99,29 @@ public:
                                     TreeMatchContext& aTreeMatchContext,
                                     nsCSSSelectorList* aSelectorList);
 
   /*
    * Helper to get the content state for a content node.  This may be
    * slightly adjusted from IntrinsicState().
    */
   static mozilla::EventStates GetContentState(
-                                mozilla::dom::Element* aElement,
+                                const mozilla::dom::Element* aElement,
                                 bool aUsingPrivateBrowsing);
   static mozilla::EventStates GetContentState(
-                                mozilla::dom::Element* aElement,
+                                const mozilla::dom::Element* aElement,
                                 const TreeMatchContext& aTreeMatchContext);
   static mozilla::EventStates GetContentState(
-                                mozilla::dom::Element* aElement);
+                                const mozilla::dom::Element* aElement);
 
   /*
    * Helper to get the content state for :visited handling for an element
    */
   static mozilla::EventStates GetContentStateForVisitedHandling(
-             mozilla::dom::Element* aElement,
+             const mozilla::dom::Element* aElement,
              nsRuleWalker::VisitedHandlingType aVisitedHandling,
              bool aIsRelevantLink);
 
   /*
    * Helper to test whether a node is a link
    */
   static bool IsLink(const mozilla::dom::Element* aElement);
 
--- a/layout/style/nsCSSValue.cpp
+++ b/layout/style/nsCSSValue.cpp
@@ -2887,41 +2887,45 @@ css::URLValueData::IsLocalRef() const
   }
 
   return mIsLocalRef.value();
 }
 
 bool
 css::URLValueData::HasRef() const
 {
+  bool result = false;
+
   if (IsLocalRef()) {
-    return true;
-  }
-
-  nsIURI* uri = GetURI();
-  if (!uri) {
-    return false;
+    result = true;
+  } else {
+    if (nsIURI* uri = GetURI()) {
+      nsAutoCString ref;
+      nsresult rv = uri->GetRef(ref);
+      if (NS_SUCCEEDED(rv) && !ref.IsEmpty()) {
+        result = true;
+      }
+    }
   }
 
-  nsAutoCString ref;
-  nsresult rv = uri->GetRef(ref);
-  if (NS_SUCCEEDED(rv) && !ref.IsEmpty()) {
-    return true;
-  }
-
-  return false;
+  mMightHaveRef = Some(result);
+
+  return result;
 }
 
 bool
 css::URLValueData::MightHaveRef() const
 {
   if (mMightHaveRef.isNothing()) {
-    // ::MightHaveRef is O(N), use it only use it only when MightHaveRef is
-    // called.
-    mMightHaveRef.emplace(::MightHaveRef(mString));
+    bool result = ::MightHaveRef(mString);
+    if (!ServoStyleSet::IsInServoTraversal()) {
+      // Can only cache the result if we're not on a style worker thread.
+      mMightHaveRef.emplace(result);
+    }
+    return result;
   }
 
   return mMightHaveRef.value();
 }
 
 already_AddRefed<nsIURI>
 css::URLValueData::ResolveLocalRef(nsIURI* aURI) const
 {
--- a/layout/style/nsCSSValue.h
+++ b/layout/style/nsCSSValue.h
@@ -1750,16 +1750,19 @@ struct nsCSSValueTokenStream final {
 
 private:
   // Private destructor, to discourage deletion outside of Release():
   ~nsCSSValueTokenStream();
 
 public:
   bool operator==(const nsCSSValueTokenStream& aOther) const
   {
+    // This is not safe to call OMT, due to the URI/Principal Equals calls.
+    MOZ_ASSERT(NS_IsMainThread());
+
     bool eq;
     return mPropertyID == aOther.mPropertyID &&
            mShorthandPropertyID == aOther.mShorthandPropertyID &&
            mTokenStream.Equals(aOther.mTokenStream) &&
            mLevel == aOther.mLevel &&
            (mBaseURI == aOther.mBaseURI ||
             (mBaseURI && aOther.mBaseURI &&
              NS_SUCCEEDED(mBaseURI->Equals(aOther.mBaseURI, &eq)) &&
--- a/layout/style/nsStyleContext.cpp
+++ b/layout/style/nsStyleContext.cpp
@@ -167,16 +167,20 @@ nsStyleContext::CalcStyleDifference(nsSt
   // nobody ever looked at that struct's data).  In other words, we
   // can't skip later structs if we get a big change up front, because
   // we could later get a small change in one of those structs that we
   // don't want to miss.
 
   DebugOnly<uint32_t> structsFound = 0;
 
   if (IsGecko()) {
+    // CalcStyleDifference is always called on the main thread for Gecko
+    // style contexts.  This assertion helps the heap write static analysis.
+    MOZ_ASSERT(NS_IsMainThread());
+
     // FIXME(heycam): We should just do the comparison in
     // nsStyleVariables::CalcDifference, returning NeutralChange if there are
     // any Variables differences.
     const nsStyleVariables* thisVariables = PeekStyleVariables();
     if (thisVariables) {
       structsFound |= NS_STYLE_INHERIT_BIT(Variables);
       const nsStyleVariables* otherVariables = aNewContext->StyleVariables();
       if (thisVariables->mVariables == otherVariables->mVariables) {
--- a/layout/xul/nsMenuBarListener.cpp
+++ b/layout/xul/nsMenuBarListener.cpp
@@ -266,18 +266,17 @@ nsMenuBarListener::KeyPress(nsIDOMEvent*
   InitAccessKey();
 
   if (mAccessKey)
   {
     // If accesskey handling was forwarded to a child process, wait for
     // the mozaccesskeynotfound event before handling accesskeys.
     WidgetKeyboardEvent* nativeKeyEvent =
       aKeyEvent->WidgetEventPtr()->AsKeyboardEvent();
-    if (!nativeKeyEvent ||
-        (nativeKeyEvent && nativeKeyEvent->mAccessKeyForwardedToChild)) {
+    if (!nativeKeyEvent) {
       return NS_OK;
     }
 
     nsCOMPtr<nsIDOMKeyEvent> keyEvent = do_QueryInterface(aKeyEvent);
     uint32_t keyCode, charCode;
     keyEvent->GetKeyCode(&keyCode);
     keyEvent->GetCharCode(&charCode);
 
@@ -296,32 +295,54 @@ nsMenuBarListener::KeyPress(nsIDOMEvent*
     }
 
     if (IsAccessKeyPressed(keyEvent) && hasAccessKeyCandidates) {
       // Do shortcut navigation.
       // A letter was pressed. We want to see if a shortcut gets matched. If
       // so, we'll know the menu got activated.
       nsMenuFrame* result = mMenuBarFrame->FindMenuWithShortcut(keyEvent);
       if (result) {
+        // If the keyboard event matches with a menu item's accesskey and
+        // will be sent to a remote process, it should be executed with
+        // reply event from the focused remote process.  Note that if the
+        // menubar is active, the event is already marked as "stop cross
+        // process dispatching".  So, in that case, this won't wait
+        // reply from the remote content.
+        if (nativeKeyEvent->WillBeSentToRemoteProcess()) {
+          nativeKeyEvent->StopImmediatePropagation();
+          nativeKeyEvent->MarkAsWaitingReplyFromRemoteProcess();
+          return NS_OK;
+        }
         mMenuBarFrame->SetActiveByKeyboard();
         mMenuBarFrame->SetActive(true);
         result->OpenMenu(true);
 
         // The opened menu will listen next keyup event.
         // Therefore, we should clear the keydown flags here.
         mAccessKeyDown = mAccessKeyDownCanceled = false;
 
         aKeyEvent->StopPropagation();
         aKeyEvent->PreventDefault();
       }
     }
 #ifndef XP_MACOSX
     // Also need to handle F10 specially on Non-Mac platform.
     else if (nativeKeyEvent->mMessage == eKeyPress && keyCode == NS_VK_F10) {
       if ((GetModifiersForAccessKey(keyEvent) & ~MODIFIER_CONTROL) == 0) {
+        // If the keyboard event should activate the menubar and will be
+        // sent to a remote process, it should be executed with reply
+        // event from the focused remote process.  Note that if the menubar
+        // is active, the event is already marked as "stop cross
+        // process dispatching".  So, in that case, this won't wait
+        // reply from the remote content.
+        if (nativeKeyEvent->WillBeSentToRemoteProcess()) {
+          nativeKeyEvent->StopImmediatePropagation();
+          nativeKeyEvent->MarkAsWaitingReplyFromRemoteProcess();
+          return NS_OK;
+        }
         // The F10 key just went down by itself or with ctrl pressed.
         // In Windows, both of these activate the menu bar.
         mMenuBarFrame->SetActiveByKeyboard();
         ToggleMenuActiveState();
 
         if (mMenuBarFrame->IsActive()) {
 #ifdef MOZ_WIDGET_GTK
           // In GTK, this also opens the first menu.
--- a/mobile/android/base/java/org/mozilla/gecko/db/BrowserProvider.java
+++ b/mobile/android/base/java/org/mozilla/gecko/db/BrowserProvider.java
@@ -2240,16 +2240,19 @@ public class BrowserProvider extends Sha
         values.putNull(Bookmarks.PARENT);
         values.putNull(Bookmarks.URL);
         values.putNull(Bookmarks.TITLE);
         values.putNull(Bookmarks.DESCRIPTION);
         values.putNull(Bookmarks.KEYWORD);
         values.putNull(Bookmarks.TAGS);
         values.putNull(Bookmarks.FAVICON_ID);
 
+        // Bump the lastModified timestamp for sync to know to update bookmark records.
+        values.put(Bookmarks.DATE_MODIFIED, System.currentTimeMillis());
+
         // Leave space for variables in values.
         final int maxVariableNumber = DBUtils.SQLITE_MAX_VARIABLE_NUMBER - values.size();
 
         for (int chunk = 0; chunk <= bookmarkGUIDs.size() / maxVariableNumber; chunk++) {
             final int chunkStart = chunk * maxVariableNumber;
             int chunkEnd = (chunk + 1) * maxVariableNumber;
             if (chunkEnd > bookmarkGUIDs.size()) {
                 chunkEnd = bookmarkGUIDs.size();
--- a/mobile/android/tests/background/junit4/src/org/mozilla/gecko/db/BrowserProviderBookmarksTest.java
+++ b/mobile/android/tests/background/junit4/src/org/mozilla/gecko/db/BrowserProviderBookmarksTest.java
@@ -31,16 +31,17 @@ import static org.junit.Assert.assertTru
 
 /**
  * Testing direct interactions with bookmarks through BrowserProvider
  */
 @RunWith(TestRunner.class)
 public class BrowserProviderBookmarksTest {
 
     private static final long INVALID_ID = -1;
+    private static final long INVALID_TIMESTAMP = -1;
 
     private ContentProviderClient bookmarksClient;
     private Uri bookmarksTestUri;
     private BrowserProvider provider;
 
     @Before
     public void setUp() throws Exception {
         provider = new BrowserProvider();
@@ -137,16 +138,60 @@ public class BrowserProviderBookmarksTes
                 BrowserContract.Bookmarks.GUID + " = ?",
                 new String[] { "parent" });
 
         // 4 = parent, its two children, mobile root.
         assertEquals(4, changed);
     }
 
     @Test
+    public void testBookmarkFolderLastModifiedOnDeletion() throws RemoteException {
+        final long rootId = getBookmarkIdFromGuid(BrowserContract.Bookmarks.MOBILE_FOLDER_GUID);
+
+        // root
+        // -> sibling
+        // -> parent -- timestamp must change
+        // ---> child-1
+        // ---> child-2 -- delete this one
+
+        final Uri parentUri = insertBookmark("parent", null, "parent", rootId,
+                                             BrowserContract.Bookmarks.TYPE_FOLDER);
+        final Uri siblingUri = insertBookmark("sibling", null, "sibling", rootId,
+                                              BrowserContract.Bookmarks.TYPE_FOLDER);
+
+        final long parentId = Long.parseLong(parentUri.getLastPathSegment());
+        final Uri child1Uri = insertBookmark("child-1", null, "child-1", parentId,
+                                             BrowserContract.Bookmarks.TYPE_FOLDER);
+        final Uri child2Uri = insertBookmark("child-2", null, "child-2", parentId,
+                                             BrowserContract.Bookmarks.TYPE_FOLDER);
+
+        final long parentLastModifiedBeforeDeletion = getLastModified(parentUri);
+        final long siblingLastModifiedBeforeDeletion = getLastModified(siblingUri);
+
+        final long child1LastModifiedBeforeDeletion = getLastModified(child1Uri);
+        final long child2LastModifiedBeforeDeletion = getLastModified(child2Uri);
+
+        bookmarksClient.delete(child2Uri, null, null);
+
+        final long parentLastModifiedAfterDeletion = getLastModified(parentUri);
+        final long siblingLastModifiedAfterDeletion = getLastModified(siblingUri);
+
+        final long child1LastModifiedAfterDeletion = getLastModified(child1Uri);
+        final long child2LastModifiedAfterDeletion = getLastModified(withDeleted(child2Uri));
+
+        // Check last modified timestamp of parent and child-2 is increased.
+        assertTrue(parentLastModifiedAfterDeletion > parentLastModifiedBeforeDeletion);
+        assertTrue(child2LastModifiedAfterDeletion > child2LastModifiedBeforeDeletion);
+
+        // Check last modified timestamp of sibling and child-1 is not changed.
+        assertTrue(siblingLastModifiedBeforeDeletion == siblingLastModifiedAfterDeletion);
+        assertTrue(child1LastModifiedBeforeDeletion == child1LastModifiedAfterDeletion);
+    }
+
+    @Test
     public void testDeleteBookmarkFolder() throws RemoteException {
         final long rootId = getBookmarkIdFromGuid(BrowserContract.Bookmarks.MOBILE_FOLDER_GUID);
 
         // Create a folder.
         final Uri parentUri = insertBookmark("parent", null, "parent", rootId,
                                              BrowserContract.Bookmarks.TYPE_FOLDER);
         final long parentId = Long.parseLong(parentUri.getLastPathSegment());
 
@@ -235,16 +280,36 @@ public class BrowserProviderBookmarksTes
     private Uri testUri(Uri baseUri) {
         return baseUri.buildUpon().appendQueryParameter(BrowserContract.PARAM_IS_TEST, "1").build();
     }
 
     private Uri withDeleted(Uri baseUri) {
         return baseUri.buildUpon().appendQueryParameter(BrowserContract.PARAM_SHOW_DELETED, "true").build();
     }
 
+    private long getLastModified(final Uri uri) throws RemoteException {
+        final Cursor cursor = bookmarksClient.query(uri,
+                                                    new String[] { BrowserContract.Bookmarks.DATE_MODIFIED },
+                                                    null,
+                                                    null,
+                                                    null);
+        assertNotNull(cursor);
+
+        long lastModified = INVALID_TIMESTAMP;
+        try {
+            assertTrue(cursor.moveToFirst());
+            assertEquals(1, cursor.getCount());
+            lastModified = cursor.getLong(cursor.getColumnIndexOrThrow(BrowserContract.Bookmarks.DATE_MODIFIED));
+        } finally {
+            cursor.close();
+        }
+        assertNotEquals(lastModified, INVALID_TIMESTAMP);
+        return lastModified;
+    }
+
     private long getBookmarkIdFromGuid(String guid) throws RemoteException {
         Cursor cursor = bookmarksClient.query(BrowserContract.Bookmarks.CONTENT_URI,
                                               new String[] { BrowserContract.Bookmarks._ID },
                                               BrowserContract.Bookmarks.GUID + " = ?",
                                               new String[] { guid },
                                               null);
         assertNotNull(cursor);
 
--- a/mobile/locales/l10n-changesets.json
+++ b/mobile/locales/l10n-changesets.json
@@ -37,17 +37,18 @@
             "android-api-15", 
             "android-multilocale"
         ], 
         "revision": "default"
     }, 
     "be": {
         "platforms": [
             "android", 
-            "android-api-15"
+            "android-api-15", 
+            "android-multilocale"
         ], 
         "revision": "default"
     }, 
     "bg": {
         "platforms": [
             "android", 
             "android-api-15", 
             "android-multilocale"
@@ -696,17 +697,18 @@
             "android-api-15", 
             "android-multilocale"
         ], 
         "revision": "default"
     }, 
     "zam": {
         "platforms": [
             "android", 
-            "android-api-15"
+            "android-api-15", 
+            "android-multilocale"
         ], 
         "revision": "default"
     }, 
     "zh-CN": {
         "platforms": [
             "android", 
             "android-api-15", 
             "android-multilocale"
--- a/security/manager/ssl/StaticHPKPins.h
+++ b/security/manager/ssl/StaticHPKPins.h
@@ -1144,9 +1144,9 @@ static const TransportSecurityPreload kP
   { "za.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
   { "zh.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
 };
 
 // Pinning Preload List Length = 480;
 
 static const int32_t kUnknownId = -1;
 
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1509207680111000);
+static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1509293772741000);
--- a/security/manager/ssl/nsSTSPreloadList.errors
+++ b/security/manager/ssl/nsSTSPreloadList.errors
@@ -21,16 +21,17 @@ 10seos.com: did not receive HSTS header
 10tacle.io: could not connect to host
 123share.org: could not connect to host
 123test.de: did not receive HSTS header
 123test.es: did not receive HSTS header
 123test.fr: did not receive HSTS header
 126ium.moe: could not connect to host
 127011-networks.ch: could not connect to host
 12vpnchina.com: could not connect to host
+15-10.com: could not connect to host
 163pwd.com: could not connect to host
 16packets.com: could not connect to host
 173vpn.cn: could not connect to host
 188betwarriors.co.uk: could not connect to host
 188trafalgar.ca: did not receive HSTS header
 195gm.com: could not connect to host
 1a-jva.de: could not connect to host
 1atic.com: could not connect to host
@@ -85,16 +86,17 @@ 4azino777.ru: could not connect to host
 4cclothing.com: could not connect to host
 4elements.com: did not receive HSTS header
 4eyes.ch: did not receive HSTS header
 4miners.net: could not connect to host
 4sqsu.eu: could not connect to host
 4w-performers.link: could not connect to host
 50millionablaze.org: could not connect to host
 540.co: did not receive HSTS header
+54bf.com: could not connect to host
 56ct.com: could not connect to host
 60ych.net: did not receive HSTS header
 6120.eu: did not receive HSTS header
 69square.com: could not connect to host
 7kovrikov.ru: did not receive HSTS header
 808.lv: did not receive HSTS header
 83i.net: could not connect to host
 90smthng.com: could not connect to host
@@ -139,17 +141,17 @@ abury.fr: did not receive HSTS header
 abury.me: did not receive HSTS header
 acabadosboston.com: did not receive HSTS header
 academicenterprise.org: could not connect to host
 acbc.ie: max-age too low: 0
 accelerole.com: did not receive HSTS header
 accelight.co.jp: did not receive HSTS header
 accelight.jp: did not receive HSTS header
 access-sofia.org: did not receive HSTS header
-accessacademies.org: max-age too low: 0
+accessacademies.org: could not connect to host
 accountradar.com: could not connect to host
 accounts-p.com: could not connect to host
 accuenergy.com: max-age too low: 0
 acelpb.com: could not connect to host
 acevik.de: could not connect to host
 acgmoon.org: did not receive HSTS header
 acheritage.co.uk: could not connect to host
 acisonline.net: did not receive HSTS header
@@ -224,30 +226,28 @@ ahri.ovh: could not connect to host
 aidanwoods.com: did not receive HSTS header
 aids.gov: did not receive HSTS header
 aiponne.com: could not connect to host
 aircomms.com: did not receive HSTS header
 airlea.com: could not connect to host
 airlinecheckins.com: did not receive HSTS header
 airproto.com: could not connect to host
 aishnair.com: could not connect to host
-aisle3.space: could not connect to host
 aiticon.de: did not receive HSTS header
 aiw-thkoeln.online: could not connect to host
 ajmahal.com: could not connect to host
 ajouin.com: could not connect to host
 aka.my: did not receive HSTS header
 akboy.pw: could not connect to host
 akclinics.org: did not receive HSTS header
 akerek.hu: could not connect to host
 akgundemirbas.com: could not connect to host
 akkadia.cc: could not connect to host
 akombakom.net: did not receive HSTS header
 akostecki.de: could not connect to host
-akoww.de: could not connect to host
 akselimedia.fi: did not receive HSTS header
 aktivist.in: did not receive HSTS header
 al-shami.net: could not connect to host
 aladdin.ie: did not receive HSTS header
 alainwolf.net: could not connect to host
 alanlee.net: could not connect to host
 alanrickmanflipstable.com: could not connect to host
 alariel.de: did not receive HSTS header
@@ -320,17 +320,16 @@ andere-gedanken.net: max-age too low: 10
 anderslind.dk: could not connect to host
 andre-ballensiefen.de: did not receive HSTS header
 andreasbreitenlohner.de: did not receive HSTS header
 andreasfritz-fotografie.de: could not connect to host
 andreastoneman.com: could not connect to host
 andreigec.net: did not receive HSTS header
 andrew.london: did not receive HSTS header
 andrewbroekman.com: could not connect to host
-andrewhowden.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
 andrewregan.me: could not connect to host
 andreypopp.com: could not connect to host
 androidprosmart.com: could not connect to host
 androoz.se: did not receive HSTS header
 andymartin.cc: could not connect to host
@@ -343,16 +342,17 @@ animesharp.com: could not connect to hos
 animurecs.com: did not receive HSTS header
 aniplus.cf: could not connect to host
 aniplus.gq: could not connect to host
 aniplus.ml: could not connect to host
 anitklib.ml: 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
 annabellaw.com: did not receive HSTS header
 anomaly.ws: did not receive HSTS header
 anonymo.co.uk: could not connect to host
 anonymo.uk: did not receive HSTS header
 anonymousstatecollegelulzsec.com: could not connect to host
 anook.com: max-age too low: 0
 another.ch: could not connect to host
 ansdell.info: could not connect to host
@@ -378,16 +378,17 @@ apeasternpower.com: could not connect to
 api.mega.co.nz: could not connect to host
 apibot.de: could not connect to host
 apis.google.com: did not receive HSTS header (error ignored - included regardless)
 apis.world: could not connect to host
 apmg-certified.com: did not receive HSTS header
 apmg-cyber.com: did not receive HSTS header
 apnakliyat.com: did not receive HSTS header
 apolloyl.com: could not connect to host
+aponkral.net: max-age too low: 0
 aponkral.site: could not connect to host
 aponkralsunucu.com: could not connect to host
 aponow.de: did not receive HSTS header
 app-arena.com: did not receive HSTS header
 app.lookout.com: did not receive HSTS header
 app.manilla.com: could not connect to host
 appart.ninja: could not connect to host
 appdb.cc: did not receive HSTS header
@@ -406,17 +407,16 @@ aqilacademy.com.au: could not connect to
 aquilalab.com: could not connect to host
 arabdigitalexpression.org: did not receive HSTS header
 aradulconteaza.ro: could not connect to host
 aran.me.uk: could not connect to host
 arboineuropa.nl: did not receive HSTS header
 arboleda-hurtado.com: could not connect to host
 arbu.eu: max-age too low: 2419200
 arcbit.io: could not connect to host
-architecte-interieur.be: did not receive HSTS header
 ardao.me: could not connect to host
 argennon.xyz: could not connect to host
 arguggi.co.uk: could not connect to host
 ariacreations.net: did not receive HSTS header
 aristilabs.com: did not receive HSTS header
 arlatools.com: could not connect to host
 arlen.se: could not connect to host
 armingrodon.de: could not connect to host
@@ -441,17 +441,16 @@ artistnetwork.nl: did not receive HSTS h
 artspac.es: could not connect to host
 arturkohut.com: could not connect to host
 artyland.ru: could not connect to host
 arvamus.eu: could not connect to host
 arzaroth.com: did not receive HSTS header
 as.se: could not connect to host
 as44222.net: could not connect to host
 as9178.net: could not connect to host
-asafilm.co: did not receive HSTS header
 asahikoji.net: could not connect to host
 asasuou.pw: could not connect to host
 asc16.com: could not connect to host
 ascamso.com: could not connect to host
 aschaefer.net: could not connect to host
 asdpress.cn: could not connect to host
 aserver.co: could not connect to host
 ashlane-cottages.com: could not connect to host
@@ -523,30 +522,31 @@ avepol.cz: did not receive HSTS header
 avepol.eu: did not receive HSTS header
 aviacao.pt: did not receive HSTS header
 avinet.com: max-age too low: 0
 aviodeals.com: could not connect to host
 avqueen.cn: did not receive HSTS header
 avus-automobile.com: did not receive HSTS header
 awanderlustadventure.com: did not receive HSTS header
 awg-mode.de: did not receive HSTS header
-aww.moe: could not connect to host
+aww.moe: did not receive HSTS header
 awxg.com: could not connect to host
 axado.com.br: did not receive HSTS header
 axeny.com: did not receive HSTS header
 ayahuascaadvisor.com: could not connect to host
 ayuru.info: could not connect to host
 az.search.yahoo.com: did not receive HSTS header
 azino777.ru: did not receive HSTS header
 azprep.us: could not connect to host
 b-landia.net: could not connect to host
 b-space.de: did not receive HSTS header
 b2and.com: could not connect to host
 b303.me: did not receive HSTS header
 b3orion.com: max-age too low: 0
+b422edu.com: could not connect to host
 baby-click.de: could not connect to host
 babybee.ie: could not connect to host
 babybic.hu: did not receive HSTS header
 babycs.house: could not connect to host
 babyhouse.xyz: could not connect to host
 babymasaze.cz: did not receive HSTS header
 babysaying.me: could not connect to host
 bacchanallia.com: could not connect to host
@@ -554,16 +554,17 @@ back-bone.nl: did not receive HSTS heade
 backschues.net: did not receive HSTS header
 badcronjob.com: could not connect to host
 badenhard.eu: could not connect to host
 badkamergigant.com: could not connect to host
 badlink.org: could not connect to host
 baff.lu: did not receive HSTS header
 bagiobella.com: max-age too low: 0
 baiduaccount.com: could not connect to host
+bailbondsaffordable.com: could not connect to host
 bair.io: could not connect to host
 bakingstone.com: could not connect to host
 bakkerdesignandbuild.com: did not receive HSTS header
 balcan-underground.net: could not connect to host
 baldwinkoo.com: could not connect to host
 baleares.party: could not connect to host
 balloonphp.com: could not connect to host
 bananabandy.com: could not connect to host
@@ -581,17 +582,16 @@ basicsolutionsus.com: did not receive HS
 basilisk.io: could not connect to host
 bassh.net: did not receive HSTS header
 battleofthegridiron.com: could not connect to host
 baud.ninja: could not connect to host
 baum.ga: did not receive HSTS header
 baumstark.ca: could not connect to host
 baysse.eu: could not connect to host
 bazarstupava.sk: could not connect to host
-bbb1991.me: could not connect to host
 bblovess.cn: could not connect to host
 bbrinck.eu: did not receive HSTS header
 bbwdom.xyz: could not connect to host
 bbwfacesitting.xyz: could not connect to host
 bbwfight.xyz: could not connect to host
 bcbsmagentprofile.com: could not connect to host
 bcchack.com: could not connect to host
 bccx.com: could not connect to host
@@ -600,20 +600,20 @@ bckp.de: could not connect to host
 bcm.com.au: max-age too low: 0
 bcnx.de: max-age too low: 0
 bcsytv.com: could not connect to host
 bcweightlifting.ca: could not connect to host
 bddemir.com: could not connect to host
 bde-epitech.fr: could not connect to host
 bdikaros-network.net: could not connect to host
 be.search.yahoo.com: did not receive HSTS header
-be2cloud.de: could not connect to host
 beach-inspector.com: did not receive HSTS header
 beachi.es: could not connect to host
 beaglewatch.com: could not connect to host
+beanjuice.me: could not connect to host
 beardydave.com: did not receive HSTS header
 beastlog.tk: could not connect to host
 beastowner.com: did not receive HSTS header
 beautyconcept.co: did not receive HSTS header
 beavers.io: could not connect to host
 bebeefy.uk: could not connect to host
 bebesurdoue.com: could not connect to host
 bedabox.com: max-age too low: 0
@@ -633,16 +633,17 @@ belize-firmengruendung.com: could not co
 belltower.io: could not connect to host
 belmontprom.com: could not connect to host
 bemyvictim.com: max-age too low: 2678400
 beneffy.com: did not receive HSTS header
 benjakesjohnson.com: could not connect to host
 benk.press: could not connect to host
 benny003.de: did not receive HSTS header
 benohead.com: did not receive HSTS header
+benwattie.com: did not receive HSTS header
 benzkosmetik.de: did not receive HSTS header
 beourvictim.com: max-age too low: 2678400
 berger.work: could not connect to host
 berlatih.com: could not connect to host
 berlinleaks.com: could not connect to host
 berna.fr: could not connect to host
 berrymark.be: max-age too low: 0
 besixdouze.world: could not connect to host
@@ -676,17 +677,16 @@ bfelob.gov: max-age too low: 86400
 bffm.biz: max-age too low: 0
 bgcparkstad.nl: did not receive HSTS header
 bgmn.net: could not connect to host
 bhatia.at: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118"  data: no]
 bi.search.yahoo.com: did not receive HSTS header
 biblerhymes.com: did not receive HSTS header
 bidon.ca: did not receive HSTS header
 bieberium.de: could not connect to host
-bielsa.me: could not connect to host
 bienenblog.cc: could not connect to host
 bierbringer.at: could not connect to host
 big-black.de: did not receive HSTS header
 bigbbqbrush.bid: could not connect to host
 bigbrownpromotions.com.au: did not receive HSTS header
 bigshinylock.minazo.net: could not connect to host
 biguixhe.net: did not receive HSTS header
 bildiri.ci: did not receive HSTS header
@@ -696,16 +696,17 @@ billin.net: did not receive HSTS header
 billkiss.com: could not connect to host
 billninja.com: did not receive HSTS header
 billrusling.com: could not connect to host
 bimbo.com: did not receive HSTS header
 binaryfigments.com: could not connect to host
 binderapp.net: could not connect to host
 biofam.ru: did not receive HSTS header
 bioknowme.com: did not receive HSTS header
+biomax-mep.com.br: could not connect to host
 bionicspirit.com: could not connect to host
 biophysik-ssl.de: did not receive HSTS header
 birkman.com: did not receive HSTS header
 bisterfeldt.com: did not receive HSTS header
 bit-rapid.com: did not receive HSTS header
 bitbit.org: did not receive HSTS header
 bitchan.it: could not connect to host
 bitcoinprivacy.net: did not receive HSTS header
@@ -717,16 +718,17 @@ bitfactory.ws: could not connect to host
 bitfarm-archiv.com: did not receive HSTS header
 bitfarm-archiv.de: did not receive HSTS header
 bitheus.com: could not connect to host
 bithosting.io: did not receive HSTS header
 bitlish.com: max-age too low: 86400
 bitnet.io: did not receive HSTS header
 bitrage.de: could not connect to host
 bitraum.io: did not receive HSTS header
+bitref.com: did not receive HSTS header
 bitsafe.systems: did not receive HSTS header
 bitvigor.com: could not connect to host
 bivsi.com: could not connect to host
 bizcms.com: did not receive HSTS header
 bizon.sk: did not receive HSTS header
 bkb-skandal.ch: could not connect to host
 bl4ckb0x.com: could not connect to host
 bl4ckb0x.de: could not connect to host
@@ -783,16 +785,17 @@ bodyblog.nl: did not receive HSTS header
 bodybuilding-legends.com: could not connect to host
 bodyweightsolution.com: could not connect to host
 boensou.com: did not receive HSTS header
 bogosity.se: could not connect to host
 bohan.life: could not connect to host
 boiadeirodeberna.com: could not connect to host
 boltdata.io: could not connect to host
 bonapp.restaurant: could not connect to host
+boneko.de: could not connect to host
 bonfi.net: did not receive HSTS header
 bonitabrazilian.co.nz: did not receive HSTS header
 bonop.com: did not receive HSTS header
 bonta.one: could not connect to host
 bookcelerator.com: did not receive HSTS header
 booked.holiday: could not connect to host
 bookofraonlinecasinos.com: did not receive HSTS header
 bookourdjs.com: max-age too low: 0
@@ -892,16 +895,17 @@ buttercoin.com: could not connect to hos
 butterfieldstraining.com: did not receive HSTS header
 buyaccessible.gov: did not receive HSTS header
 buybaby.eu: did not receive HSTS header
 buyfox.de: did not receive HSTS header
 bw81.xyz: could not connect to host
 bwear4all.de: could not connect to host
 by4cqb.cn: could not connect to host
 bydisk.com: could not connect to host
+bynet.cz: could not connect to host
 bypassed.bid: did not receive HSTS header
 bypassed.cc: did not receive HSTS header
 bypassed.club: did not receive HSTS header
 bypassed.date: did not receive HSTS header
 bypassed.download: did not receive HSTS header
 bypassed.faith: did not receive HSTS header
 bypassed.host: did not receive HSTS header
 bypassed.me: did not receive HSTS header
@@ -966,16 +970,17 @@ capecycles.co.za: did not receive HSTS h
 capeyorkfire.com.au: did not receive HSTS header
 capitaltg.com: could not connect to host
 captchatheprize.com: could not connect to host
 captianseb.de: could not connect to host
 captivatedbytabrett.com: could not connect to host
 car-navi.ph: did not receive HSTS header
 carano-service.de: did not receive HSTS header
 caraudio69.cz: could not connect to host
+carck.co.uk: could not connect to host
 carck.uk: could not connect to host
 card-toka.jp: did not receive HSTS header
 cardoni.net: did not receive HSTS header
 cardstream.com: did not receive HSTS header
 cardurl.com: did not receive HSTS header
 caringladies.org: could not connect to host
 carlo.mx: did not receive HSTS header
 carlolly.co.uk: could not connect to host
@@ -1146,16 +1151,17 @@ cloudns.com.au: could not connect to hos
 cloudspeedy.net: could not connect to host
 cloudspotterapp.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
 cloudwalk.io: did not receive HSTS header
 cloverleaf.net: max-age too low: 0
 clowde.in: could not connect to host
+cloxy.com: did not receive HSTS header
 clubmate.rocks: could not connect to host
 clubmix.co.kr: could not connect to host
 cluster.id: did not receive HSTS header
 clustermaze.net: could not connect to host
 clvrwebdesign.com: did not receive HSTS header
 clywedogmaths.co.uk: could not connect to host
 cmc-versand.de: did not receive HSTS header
 cmci.dk: did not receive HSTS header
@@ -1163,17 +1169,16 @@ cmsbattle.com: could not connect to host
 cmscafe.ru: did not receive HSTS header
 cmso-cal.com: could not connect to host
 cn.search.yahoo.com: did not receive HSTS header
 cncn.us: did not receive HSTS header
 cni-certing.it: max-age too low: 0
 cnwage.com: could not connect to host
 cobrasystems.nl: max-age too low: 0
 cocktailfuture.fr: could not connect to host
-cocodemy.com: could not connect to host
 cocolovesdaddy.com: could not connect to host
 codabix.com: did not receive HSTS header
 codabix.de: could not connect to host
 codabix.net: could not connect to host
 code-35.com: could not connect to host
 code-digsite.com: could not connect to host
 code.fm: could not connect to host
 code.google.com: did not receive HSTS header (error ignored - included regardless)
@@ -1256,22 +1261,20 @@ cooxa.com: could not connect to host
 cor-ser.es: could not connect to host
 coralproject.net: did not receive HSTS header
 coralrosado.com.br: did not receive HSTS header
 corderoscleaning.com: did not receive HSTS header
 cordial-restaurant.com: did not receive HSTS header
 core.mx: could not connect to host
 core4system.de: could not connect to host
 corenetworking.de: could not connect to host
-corgi.party: could not connect to host
 corgicloud.com: could not connect to host
 corkyoga.site: could not connect to host
 cormactagging.ie: could not connect to host
 cormilu.com.br: did not receive HSTS header
-corozanu.ro: did not receive HSTS header
 corporateencryption.com: could not connect to host
 correctpaardbatterijnietje.nl: 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
 costow.club: could not connect to host
 count.sh: could not connect to host
 couragewhispers.ca: did not receive HSTS header
@@ -1531,16 +1534,17 @@ destinationbijoux.fr: could not connect 
 destom.be: could not connect to host
 detector.exposed: could not connect to host
 detest.org: could not connect to host
 detutorial.com: max-age too low: 0
 deuxvia.com: could not connect to host
 devafterdark.com: could not connect to host
 devcu.com: could not connect to host
 devcu.net: could not connect to host
+develop.fitness: could not connect to host
 devh.net: could not connect to host
 devincrow.me: could not connect to host
 devmsg.com: did not receive HSTS header
 devnsec.com: could not connect to host
 devnull.team: could not connect to host
 devopps.me: did not receive HSTS header
 devopsconnected.com: could not connect to host
 devtub.com: did not receive HSTS header
@@ -1619,17 +1623,16 @@ doesmycodehavebugs.today: could not conn
 doeswindowssuckforeveryoneorjustme.com: could not connect to host
 dogbox.se: did not receive HSTS header
 dogespeed.ga: could not connect to host
 doggieholic.net: could not connect to host
 dogoodbehappyllc.com: could not connect to host
 dohosting.ru: could not connect to host
 dokan.online: did not receive HSTS header
 doked.io: could not connect to host
-doleta.gov: did not receive HSTS header
 dolevik.com: could not connect to host
 dollarstore24.com: could not connect to host
 dollywiki.co.uk: could not connect to host
 dolphin-cloud.com: could not connect to host
 dolphincorp.co.uk: did not receive HSTS header
 domaine-aigoual-cevennes.com: did not receive HSTS header
 domaris.de: could not connect to host
 domenicocatelli.com: could not connect to host
@@ -1705,17 +1708,16 @@ dubik.su: did not receive HSTS header
 dubrovskiy.net: could not connect to host
 dubrovskiy.pro: could not connect to host
 duerls.de: did not receive HSTS header
 duesee.org: could not connect to host
 dullsir.com: did not receive HSTS header
 dungi.org: could not connect to host
 duongpho.com: did not receive HSTS header
 duskopy.top: could not connect to host
-dutchessuganda.com: did not receive HSTS header
 dutchrank.com: did not receive HSTS header
 duuu.ch: could not connect to host
 dycontrol.de: could not connect to host
 dyktig.as: did not receive HSTS header
 dylanscott.com.au: did not receive HSTS header
 dynamic-innovations.net: could not connect to host
 dynamize.solutions: could not connect to host
 dyrkar.com: did not receive HSTS header
@@ -1724,17 +1726,16 @@ dzlibs.io: could not connect to host
 dzyabchenko.com: could not connect to host
 e-aut.net: could not connect to host
 e-biografias.net: did not receive HSTS header
 e-deca2.org: did not receive HSTS header
 e-isfa.eu: did not receive HSTS header
 e-pokupki.eu: did not receive HSTS header
 e-sa.com: did not receive HSTS header
 e3amn2l.com: could not connect to host
-eagleridgecampground.com: could not connect to host
 earga.sm: could not connect to host
 earlybirdsnacks.com: could not connect to host
 earthrise16.com: could not connect to host
 earvinkayonga.com: did not receive HSTS header
 easez.net: did not receive HSTS header
 easychiller.org: could not connect to host
 easyocm.hu: did not receive HSTS header
 easyplane.it: did not receive HSTS header
@@ -1743,23 +1744,24 @@ eauclairecommerce.com: could not connect
 ebankcbt.com: could not connect to host
 ebecs.com: did not receive HSTS header
 ebiografia.com: did not receive HSTS header
 ebiografias.com.br: did not receive HSTS header
 ebp2p.com: did not receive HSTS header
 ebpglobal.com: did not receive HSTS header
 ebraph.com: could not connect to host
 ebrowz.com: could not connect to host
-ec-hasslau.de: could not connect to host
+ec-hasslau.de: did not receive HSTS header
 ecake.in: could not connect to host
 ecdn.cz: could not connect to host
 ecfs.link: could not connect to host
 ecg.fr: could not connect to host
 echipstore.com: did not receive HSTS header
 echopaper.com: could not connect to host
+ecodigital.social: could not connect to host
 ecole-en-danger.fr: could not connect to host
 ecole-maternelle-saint-joseph.be: could not connect to host
 ecomlane.com: could not connect to host
 ecomparemo.com: did not receive HSTS header
 ecorus.eu: did not receive HSTS header
 edcphenix.tk: could not connect to host
 eddmixpanel.com: did not receive HSTS header
 eddyn.net: did not receive HSTS header
@@ -1822,30 +1824,30 @@ elektronring.com: could not connect to h
 elemenx.com: did not receive HSTS header
 elemprendedor.com.ve: did not receive HSTS header
 elenag.ga: could not connect to host
 elenoon.ir: did not receive HSTS header
 elgacien.de: could not connect to host
 elimdengelen.com: did not receive HSTS header
 elisabeth-kostecki.de: could not connect to host
 elisabethkostecki.de: could not connect to host
-elite-porno.ru: did not receive HSTS header
+elite-box.org: could not connect to host
+elite-porno.ru: could not connect to host
 elitefishtank.com: could not connect to host
 elnutricionista.es: did not receive HSTS header
 eloanpersonal.com: max-age too low: 0
 elohna.ch: did not receive HSTS header
 elonbase.com: could not connect to host
 elpo.xyz: could not connect to host
 elsamakhin.com: could not connect to host
 elsemanario.com: did not receive HSTS header
 elsitar.com: could not connect to host
 email.lookout.com: could not connect to host
 emanatepixels.com: could not connect to host
 emanga.su: did not receive HSTS header
-emanuelemazzotta.com: could not connect to host
 embroidered-stuff.com: could not connect to host
 emeldi-commerce.com: max-age too low: 0
 emilyhorsman.com: could not connect to host
 eminovic.me: could not connect to host
 emjainteractive.com: did not receive HSTS header
 emjimadhu.com: could not connect to host
 emmable.com: could not connect to host
 emnitech.com: could not connect to host
@@ -1881,29 +1883,27 @@ enteente.xyz: could not connect to host
 enterdev.co: did not receive HSTS header
 enterprisecarclub.co.uk: did not receive HSTS header
 entersynapse.com: did not receive HSTS header
 entourneebeetle.com: could not connect to host
 entrepreneur.or.id: did not receive HSTS header
 enum.eu.org: could not connect to host
 enumify.com: could not connect to host
 envygeeks.com: could not connect to host
-envygeeks.io: could not connect to host
 eol34.com: did not receive HSTS header
 epanurse.com: could not connect to host
 ephry.com: could not connect to host
 epichouse.net: could not connect to host
 epicpages.com: could not connect to host
 epoxate.com: could not connect to host
 eq8.net.au: could not connect to host
 eqim.me: could not connect to host
 equate.net.au: did not receive HSTS header
 equatetechnologies.com.au: did not receive HSTS header
 equilibre-yoga-jennifer-will.com: could not connect to host
-erasmusplusrooms.com: did not receive HSTS header
 erawanarifnugroho.com: did not receive HSTS header
 eressea.xyz: could not connect to host
 ericbond.net: could not connect to host
 erichalv.com: could not connect to host
 ericyl.com: could not connect to host
 eridanus.uk: did not receive HSTS header
 erikwalther.eu: could not connect to host
 eriser.fr: could not connect to host
@@ -1917,16 +1917,17 @@ erotische-aanbiedingen.nl: could not con
 errolz.com: could not connect to host
 errors.zenpayroll.com: could not connect to host
 ersindemirtas.com: could not connect to host
 eru.me: did not receive HSTS header
 erwinvanlonden.net: did not receive HSTS header
 esaborit.ddns.net: could not connect to host
 esc.chat: could not connect to host
 escalate.eu: could not connect to host
+escargotbistro.com: could not connect to host
 escotour.com: could not connect to host
 esec.rs: did not receive HSTS header
 esko.bar: could not connect to host
 esln.org: did not receive HSTS header
 esn-ypci.com: could not connect to host
 esocweb.com: could not connect to host
 esoterikerforum.de: did not receive HSTS header
 esp8285.store: could not connect to host
@@ -2029,17 +2030,16 @@ falkp.no: did not receive HSTS header
 fallenangelspirits.uk: could not connect to host
 fame-agency.net: could not connect to host
 familie-sander.rocks: could not connect to host
 familie-sprink.de: could not connect to host
 familie-zimmermann.at: could not connect to host
 famio.cn: could not connect to host
 fantasyfootballpundit.com: did not receive HSTS header
 fanyl.cn: could not connect to host
-farhadexchange.com: did not receive HSTS header
 fashioncare.cz: did not receive HSTS header
 fasset.jp: could not connect to host
 fastcomcorp.com: did not receive HSTS header
 fastcomcorp.net: did not receive HSTS header
 fastdigitizing.com: max-age too low: 300
 fastograph.com: could not connect to host
 fastopen.ml: could not connect to host
 fastworx.com: could not connect to host
@@ -2097,17 +2097,17 @@ firefall.rocks: could not connect to hos
 firemail.io: could not connect to host
 firenza.org: did not receive HSTS header
 fireorbit.de: did not receive HSTS header
 firmenverzeichnis.nu: could not connect to host
 firstdogonthemoon.com.au: did not receive HSTS header
 firstforex.co.uk: did not receive HSTS header
 firstlook.org: did not receive HSTS header
 fish2.me: did not receive HSTS header
-fishlinemedia.com: max-age too low: 0
+fishlinemedia.com: could not connect to host
 fit4medien.de: did not receive HSTS header
 fitbylo.com: did not receive HSTS header
 fitiapp.com: could not connect to host
 fitnesswerk.de: could not connect to host
 fitsw.com: did not receive HSTS header
 five.vn: did not receive HSTS header
 fivestarsitters.com: did not receive HSTS header
 fivezerocreative.com: did not receive HSTS header
@@ -2115,16 +2115,17 @@ fixingdns.com: did not receive HSTS head
 fixtectools.co.za: could not connect to host
 fj.search.yahoo.com: did not receive HSTS header
 fjruiz.es: did not receive HSTS header
 fkcovering.be: could not connect to host
 flags.ninja: could not connect to host
 flamewall.net: could not connect to host
 flareon.net: could not connect to host
 flawcheck.com: did not receive HSTS header
+flazznetworks.com: did not receive HSTS header
 fliexer.com: could not connect to host
 flipkey.com: did not receive HSTS header
 flirchi.com: did not receive HSTS header
 floless.co.uk: did not receive HSTS header
 florafiora.com.br: did not receive HSTS header
 florian-lillpopp.de: max-age too low: 10
 florianlillpopp.de: max-age too low: 10
 floridaescapes.co.uk: did not receive HSTS header
@@ -2189,30 +2190,29 @@ frasys.io: could not connect to host
 frasys.net: could not connect to host
 frau-inge.de: could not connect to host
 fraudempire.com: could not connect to host
 fraurichter.net: could not connect to host
 free.com.tw: did not receive HSTS header
 freeflow.tv: could not connect to host
 freelanced.co.za: could not connect to host
 freelo.cz: did not receive HSTS header
-freematthale.net: could not connect to host
+freematthale.net: did not receive HSTS header
 freenetproject.org: did not receive HSTS header
 freesoftwaredriver.com: did not receive HSTS header
 freethought.org.au: could not connect to host
 freeutopia.org: did not receive HSTS header
 frenzel.dk: could not connect to host
 freqlabs.com: did not receive HSTS header
 freshfind.xyz: could not connect to host
 freshlymind.com: did not receive HSTS header
 frezbo.com: could not connect to host
 frforms.com: did not receive HSTS header
 friendica.ch: could not connect to host
 friendlyfiregameshow.com: could not connect to host
-friendlysiberia.com: could not connect to host
 frimons.com: could not connect to host
 froggstack.de: could not connect to host
 frontisme.nl: could not connect to host
 frontmin.com: did not receive HSTS header
 frost-ci.xyz: could not connect to host
 froxlor.support: max-age too low: 0
 fruitusers.com: could not connect to host
 frumious.fyi: could not connect to host
@@ -2387,17 +2387,17 @@ gipsamsfashion.com: could not connect to
 gipsic.com: did not receive HSTS header
 gis3m.org: did not receive HSTS header
 gistfy.com: could not connect to host
 github.party: did not receive HSTS header
 givemyanswer.com: could not connect to host
 gizzo.sk: could not connect to host
 gl.search.yahoo.com: did not receive HSTS header
 glass.google.com: did not receive HSTS header (error ignored - included regardless)
-glasschmuck-millefiori.de: did not receive HSTS header
+glasschmuck-millefiori.de: could not connect to host
 glentakahashi.com: max-age too low: 0
 glitzmirror.com: could not connect to host
 global-adult-webcams.com: did not receive HSTS header
 globalado.com: could not connect to host
 globalbridge-japan.com: did not receive HSTS header
 globalchat.pk: could not connect to host
 globalexpert.co.nz: could not connect to host
 globalinsights.xyz: could not connect to host
@@ -2434,16 +2434,17 @@ gold24.in: did not receive HSTS header
 goldegg-training.com: did not receive HSTS header
 goldendata.io: could not connect to host
 goldminer.ga: could not connect to host
 goldpros.com: did not receive HSTS header
 golocal-media.de: could not connect to host
 gong8.win: could not connect to host
 gonzalosanchez.mx: did not receive HSTS header
 goodenough.nz: did not receive HSTS header
+goodmengroup.de: could not connect to host
 goodtech.com.br: could not connect to host
 goodwin43.ru: could not connect to host
 google: could not connect to host (error ignored - included regardless)
 google.ax: could not connect to host
 googlemail.com: did not receive HSTS header (error ignored - included regardless)
 googleplex.com: did not receive HSTS header (error ignored - included regardless)
 goolok.com: could not connect to host
 gootlijsten.nl: did not receive HSTS header
@@ -2493,19 +2494,17 @@ gremots.com: could not connect to host
 greplin.com: could not connect to host
 gresb.com: did not receive HSTS header
 gretchelizartistry.com: did not receive HSTS header
 grevesgarten.de: could not connect to host
 greyline.se: could not connect to host
 gribani.com: could not connect to host
 grid2osm.org: could not connect to host
 grigalanzsoftware.com: could not connect to host
-grimm-gastrobedarf.de: did not receive HSTS header
 gripopgriep.net: could not connect to host
-grizzlys.com: could not connect to host
 groenemeijer.frl: max-age too low: 2628000
 groenewoud.run: did not receive HSTS header
 groetzner.net: did not receive HSTS header
 grossmann.gr: could not connect to host
 groupe-cassous.com: did not receive HSTS header
 groups.google.com: did not receive HSTS header (error ignored - included regardless)
 grozip.com: did not receive HSTS header
 gruenprint.de: did not receive HSTS header
@@ -2630,17 +2629,16 @@ hastherebeenamassshooting.today: could n
 hatoko.net: could not connect to host
 haufschild.de: could not connect to host
 haurumcraft.net: could not connect to host
 hausarzt-stader-str.de: did not receive HSTS header
 haveeruexaminer.com: could not connect to host
 haveforeningen-enghaven.dk: did not receive HSTS header
 havenswift-hosting.co.uk: did not receive HSTS header
 hawkeyeinsight.com: max-age too low: 0
-hawksguild.com: did not receive HSTS header
 haxoff.com: could not connect to host
 haxx.hu: did not receive HSTS header
 haydenhill.us: could not connect to host
 hazcod.com: could not connect to host
 hazyrom.net: could not connect to host
 hbdesign.work: could not connect to host
 hcie.pl: could not connect to host
 hcr.io: did not receive HSTS header
@@ -2667,17 +2665,16 @@ heimnetze.org: could not connect to host
 helencrump.co.uk: did not receive HSTS header
 helloworldhost.com: did not receive HSTS header
 helpadmin.net: could not connect to host
 helpium.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118"  data: no]
 helpmebuild.com: did not receive HSTS header
 hemdal.se: could not connect to host
 hencagon.com: could not connect to host
 henriknoerr.com: could not connect to host
-heptner24.de: could not connect to host
 heritagedentistry.ca: did not receive HSTS header
 herrenfahrt.com: did not receive HSTS header
 herzbotschaft.de: did not receive HSTS header
 heutger.net: did not receive HSTS header
 heyguevara.com: could not connect to host
 heywoodtown.co.uk: could not connect to host
 hfi.me: did not receive HSTS header
 hibilog.com: could not connect to host
@@ -2752,16 +2749,17 @@ hotelvictoriaoax-mailing.com: did not re
 hotelvillahermosa-mailing.com: did not receive HSTS header
 hotelvue.nl: could not connect to host
 hoto.us: could not connect to host
 houkago-step.com: did not receive HSTS header
 housemaadiah.org: did not receive HSTS header
 housingstudents.org.uk: could not connect to host
 howrandom.org: could not connect to host
 howtocuremysciatica.com: could not connect to host
+hpac-portal.com: did not receive HSTS header
 hpepub.asia: could not connect to host
 hpepub.com: could not connect to host
 hpepub.org: could not connect to host
 hppub.info: could not connect to host
 hppub.org: could not connect to host
 hppub.site: could not connect to host
 hr-intranet.com: could not connect to host
 hrk.io: could not connect to host
@@ -2831,17 +2829,16 @@ ideadozz.hu: could not connect to host
 ideal-envelopes.co.uk: did not receive HSTS header
 idealmykonos.com: did not receive HSTS header
 ideasmeetingpoint.com: could not connect to host
 ideation-inc.co.jp: could not connect to host
 idecode.net: could not connect to host
 idedr.com: could not connect to host
 identitylabs.uk: could not connect to host
 idgsupply.com: could not connect to host
-idinby.dk: did not receive HSTS header
 idisplay.es: did not receive HSTS header
 idlekernel.com: could not connect to host
 idontexist.me: did not receive HSTS header
 ie.search.yahoo.com: did not receive HSTS header
 iec.pe: could not connect to host
 iemas.azurewebsites.net: did not receive HSTS header
 ierna.com: did not receive HSTS header
 ies-italia.it: did not receive HSTS header
@@ -2956,16 +2953,17 @@ intarweb.ca: could not connect to host
 intel.li: could not connect to host
 intelevo.com: max-age too low: 0
 interference.io: could not connect to host
 interhosts.co.za: could not connect to host
 interim-cto.de: could not connect to host
 interleucina.org: did not receive HSTS header
 interlocal.co.uk: could not connect to host
 interlun.com: could not connect to host
+internect.co.za: 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
 interserved.com: did not receive HSTS header
 intervisteperstrada.com: did not receive HSTS header
 intex.es: max-age too low: 0
 intim-uslugi-kazan.net: could not connect to host
 intimateperrierjouet.com: could not connect to host
@@ -3004,17 +3002,16 @@ ipv6cloud.club: could not connect to hos
 ipv6only.network: could not connect to host
 iqcn.co: could not connect to host
 iqualtech.com: did not receive HSTS header
 ir-saitama.com: could not connect to host
 iranianlawschool.com: could not connect to host
 iraqidinar.org: did not receive HSTS header
 irazimina.ru: did not receive HSTS header
 irccloud.com: did not receive HSTS header
-iready.ro: could not connect to host
 irelandesign.com: did not receive HSTS header
 irisdina.de: could not connect to host
 irmtrudjurke.de: did not receive HSTS header
 irukandjilabs.com: could not connect to host
 is-a-furry.org: did not receive HSTS header
 isabellehogarth.co.uk: could not connect to host
 iscert.org: could not connect to host
 ischool.co.jp: did not receive HSTS header
@@ -3210,23 +3207,23 @@ jsg-technologies.de: did not receive HST
 jslay.net: could not connect to host
 jualautoclave.com: did not receive HSTS header
 jualssh.com: could not connect to host
 julian-kipka.de: did not receive HSTS header
 julido.de: did not receive HSTS header
 jumbox.xyz: could not connect to host
 jumbster.com: max-age too low: 2592000
 jumping-duck.com: could not connect to host
+junaos.com: did not receive HSTS header
 junaos.xyz: did not receive HSTS header
 junge-selbsthilfe.info: could not connect to host
 junglegoat.xyz: did not receive HSTS header
 junjung.me: max-age too low: 0
 junqtion.com: could not connect to host
 jupp0r.de: did not receive HSTS header
-justanothercompany.name: could not connect to host
 justinlemay.com: did not receive HSTS header
 justlikethat.hosting: did not receive HSTS header
 justnaw.co.uk: could not connect to host
 justudin.com: did not receive HSTS header
 justwood.cz: did not receive HSTS header
 jutella.de: did not receive HSTS header
 juvenex.co: could not connect to host
 juwairen.cn: did not receive HSTS header
@@ -3234,17 +3231,16 @@ juxstempel.de: max-age too low: 86400
 jvoice.net: could not connect to host
 jwilsson.me: could not connect to host
 jxm.in: could not connect to host
 jznet.org: could not connect to host
 k-dev.de: could not connect to host
 ka-clan.com: could not connect to host
 kabinapp.com: could not connect to host
 kabuabc.com: did not receive HSTS header
-kabus.org: could not connect to host
 kadioglumakina.com.tr: did not receive HSTS header
 kaela.design: could not connect to host
 kahopoon.net: could not connect to host
 kaisers.de: did not receive HSTS header
 kaiyuewu.com: could not connect to host
 kalami.nl: could not connect to host
 kamcvicit.sk: could not connect to host
 kamikano.com: could not connect to host
@@ -3252,17 +3248,17 @@ kaneo-gmbh.de: did not receive HSTS head
 kaniklani.co.za: could not connect to host
 kany.me: did not receive HSTS header
 kaohub.com: could not connect to host
 kaplatz.is: could not connect to host
 kapucini.si: max-age too low: 0
 kaputt.com: could not connect to host
 karaoketonight.com: could not connect to host
 karhukamera.com: could not connect to host
-karpanhellas.com: did not receive HSTS header
+karpanhellas.com: could not connect to host
 karting34.com: did not receive HSTS header
 katiaetdavid.fr: could not connect to host
 katproxy.al: did not receive HSTS header
 katproxy.online: could not connect to host
 katproxy.site: could not connect to host
 katproxy.tech: could not connect to host
 katproxy.top: did not receive HSTS header
 katzen.me: could not connect to host
@@ -3485,16 +3481,17 @@ launchkey.com: did not receive HSTS head
 lausitzer-widerstand.de: did not receive HSTS header
 laventainnhotel-mailing.com: did not receive HSTS header
 lavine.ch: did not receive HSTS header
 lavito.cz: did not receive HSTS header
 lavval.com: could not connect to host
 lawly.org: could not connect to host
 laxatus.com: could not connect to host
 laxiongames.es: could not connect to host
+lazerus.net: did not receive HSTS header
 lbarrios.es: could not connect to host
 lbrt.xyz: could not connect to host
 ldarby.me.uk: could not connect to host
 leadbook.ru: max-age too low: 604800
 leadership9.com: could not connect to host
 leardev.de: did not receive HSTS header
 learnedovo.com: did not receive HSTS header
 learnfrenchfluently.com: did not receive HSTS header
@@ -3503,16 +3500,17 @@ lebrun.org: could not connect to host
 leddruckalarm.de: did not receive HSTS header
 ledgerscope.net: could not connect to host
 leen.io: did not receive HSTS header
 leermotorrijden.nl: max-age too low: 300
 lefebvristes.com: could not connect to host
 lefebvristes.fr: could not connect to host
 legarage.org: could not connect to host
 leifdreizler.com: could not connect to host
+leiming.co: could not connect to host
 leinir.dk: did not receive HSTS header
 leitner.com.au: did not receive HSTS header
 leiyun.me: did not receive HSTS header
 lellyboi.ml: could not connect to host
 lelongbank.com: did not receive HSTS header
 lemp.io: did not receive HSTS header
 lenagroben.de: could not connect to host
 lenovogaming.com: could not connect to host
@@ -3586,16 +3584,17 @@ lim-light.com: did not receive HSTS head
 limalama.eu: max-age too low: 1
 limeyeti.com: could not connect to host
 limiteddata.co.uk: could not connect to host
 limpido.it: could not connect to host
 lincolnwayflorist.com: could not connect to host
 lindberg.io: did not receive HSTS header
 lingros-test.tk: could not connect to host
 linguaquote.com: did not receive HSTS header
+lingvo-svoboda.ru: could not connect to host
 linhaoyi.com: did not receive HSTS header
 link.ba: could not connect to host
 link2serve.com: did not receive HSTS header
 linmi.cc: did not receive HSTS header
 linno.me: could not connect to host
 linorman1997.me: could not connect to host
 linux.sb: did not receive HSTS header
 linuxandstuff.de: could not connect to host
@@ -3603,17 +3602,16 @@ linuxeyecandy.com: could not connect to 
 linuxfixed.it: could not connect to host
 linuxforyou.com: could not connect to host
 linuxgeek.ro: could not connect to host
 linuxmint.cz: could not connect to host
 linuxmonitoring.net: did not receive HSTS header
 linuxproperties.com: did not receive HSTS header
 liquid.solutions: could not connect to host
 liquorsanthe.in: could not connect to host
-lirion.de: could not connect to host
 lisaco.de: could not connect to host
 lisbongold.com: did not receive HSTS header
 listafirmelor.com: could not connect to host
 listage.ovh: did not receive HSTS header
 litespeed.io: could not connect to host
 little.pw: did not receive HSTS header
 livedemo.io: could not connect to host
 livej.am: could not connect to host
@@ -3642,17 +3640,16 @@ lolidunno.com: could not connect to host
 londoncalling.co: did not receive HSTS header
 londonlanguageexchange.com: could not connect to host
 lonerwolf.com: did not receive HSTS header
 longboarding-ulm.de: could not connect to host
 look-at-my.site: could not connect to host
 lookasik.eu: did not receive HSTS header
 lookout.com: did not receive HSTS header
 looktothestars.org: did not receive HSTS header
-lookyman.net: could not connect to host
 lookzook.com: did not receive HSTS header
 loongsg.xyz: could not connect to host
 lordjevington.co.uk: could not connect to host
 lost.host: did not receive HSTS header
 lostg.com: did not receive HSTS header
 lostinsecurity.com: could not connect to host
 lostinweb.eu: could not connect to host
 lothai.re: did not receive HSTS header
@@ -3768,16 +3765,17 @@ manaboutahor.se: did not receive HSTS he
 manage.zenpayroll.com: did not receive HSTS header
 managemynetsuite.com: did not receive HSTS header
 manantial.mx: did not receive HSTS header
 maniadeprazer.com.br: could not connect to host
 manifestbin.com: did not receive HSTS header
 manitasicily.com: did not receive HSTS header
 manningbrothers.com: did not receive HSTS header
 mansion-note.com: did not receive HSTS header
+manutrol.com.br: could not connect to host
 maomaofuli.vip: could not connect to host
 maple5.com: did not receive HSTS header
 marchagen.nl: did not receive HSTS header
 marcoececilia.it: did not receive HSTS header
 marcofinke.de: could not connect to host
 marcontrol.com: did not receive HSTS header
 marcosteixeira.tk: could not connect to host
 marcschlagenhauf.de: could not connect to host
@@ -3808,18 +3806,19 @@ marshut.net: could not connect to host
 martiert.com: could not connect to host
 martijnvhoof.nl: could not connect to host
 martin-smith.info: could not connect to host
 martinec.co.uk: could not connect to host
 martinestyle.com: could not connect to host
 martineve.com: did not receive HSTS header
 martinp.no: could not connect to host
 marumagic.com: did not receive HSTS header
+mashnew.com: could not connect to host
 masjidtawheed.net: did not receive HSTS header
-maskt.pw: max-age too low: 0
+maskt.pw: could not connect to host
 masterapi.ninja: did not receive HSTS header
 masteringtheterminal.com: did not receive HSTS header
 mastimtibetano.com: could not connect to host
 mastod.life: could not connect to host
 mastodon.direct: could not connect to host
 mastodon.engineering: could not connect to host
 mastodon.my: could not connect to host
 mastodon.pl: could not connect to host
@@ -3860,17 +3859,16 @@ mca2017.org: did not receive HSTS header
 mcard.vn: did not receive HSTS header
 mcc.re: could not connect to host
 mcdonalds.ru: did not receive HSTS header
 mcga.media: could not connect to host
 mclab.su: could not connect to host
 mclist.it: could not connect to host
 mctherealm.net: could not connect to host
 mdfnet.se: did not receive HSTS header
-mdkr.nl: did not receive HSTS header
 mdscomp.net: did not receive HSTS header
 meamod.com: max-age too low: 0
 meat-education.com: could not connect to host
 mecenat-cassous.com: did not receive HSTS header
 mechmk1.me: did not receive HSTS header
 medallia.io: could not connect to host
 mediacru.sh: did not receive HSTS header
 mediafinancelab.org: did not receive HSTS header
@@ -3917,17 +3915,17 @@ meshlab.co: could not connect to host
 mesmoque.com: did not receive HSTS header
 metagrader.com: could not connect to host
 metasyntactic.xyz: could not connect to host
 metebalci.com: did not receive HSTS header
 meteosherbrooke.com: could not connect to host
 meteosky.net: could not connect to host
 metin2blog.de: did not receive HSTS header
 metis.pw: could not connect to host
-metrobriefs.com: could not connect to host
+metronaut.de: could not connect to host
 meuemail.pro: could not connect to host
 mexbt.com: could not connect to host
 mexicanbusinessweb.mx: did not receive HSTS header
 mexicansbook.ru: could not connect to host
 mfcatalin.com: could not connect to host
 mfedderke.com: could not connect to host
 mgdigital.fr: did not receive HSTS header
 mh-bloemen.co.jp: could not connect to host
@@ -3978,16 +3976,17 @@ mikk.cz: could not connect to host
 miku.be: did not receive HSTS header
 miku.hatsune.my: max-age too low: 5184000
 milang.xyz: could not connect to host
 milatrans.pl: did not receive HSTS header
 milcoresonline.com: could not connect to host
 milesgeek.com: did not receive HSTS header
 military-portal.cz: did not receive HSTS header
 mimoderoupa.pt: could not connect to host
+mindcoding.ro: did not receive HSTS header
 mindcraft.ga: could not connect to host
 mindoktor.se: did not receive HSTS header
 minecraftforum.ch: could not connect to host
 minecraftserverz.com: could not connect to host
 minecraftvoter.com: could not connect to host
 mineover.es: could not connect to host
 minh.at: could not connect to host
 mini-piraten.de: did not receive HSTS header
@@ -3997,29 +3996,30 @@ minimvc.com: did not receive HSTS header
 minnesotadata.com: could not connect to host
 minora.io: could not connect to host
 minoris.se: could not connect to host
 miragrow.com: could not connect to host
 mirindadomo.ru: did not receive HSTS header
 mironized.com: did not receive HSTS header
 mirrorx.com: did not receive HSTS header
 misiondelosangeles-mailing.com: did not receive HSTS header
+missoy.me: could not connect to host
 missrain.tw: could not connect to host
 mist.ink: could not connect to host
 mister.hosting: could not connect to host
 misterl.net: did not receive HSTS header
 mita.me: could not connect to host
 mitsu-szene.de: did not receive HSTS header
 mittenhacks.com: could not connect to host
 mivcon.net: could not connect to host
 mizd.at: could not connect to host
 mizi.name: could not connect to host
 mk-dizajn.com: did not receive HSTS header
-mkakh.xyz: did not receive HSTS header
 mkasu.org: did not receive HSTS header
+mlcambiental.com.br: could not connect to host
 mlcdn.co: could not connect to host
 mlp.ee: could not connect to host
 mlpepilepsy.org: could not connect to host
 mmgazhomeloans.com: did not receive HSTS header
 mmmm.com: could not connect to host
 mmt.my: could not connect to host
 mnec.io: could not connect to host
 mnemotiv.com: could not connect to host
@@ -4033,17 +4033,16 @@ mobilekey.co: could not connect to host
 mobilemedics.com: did not receive HSTS header
 mobilethreat.net: could not connect to host
 mobilethreatnetwork.net: could not connect to host
 mobilpass.no: could not connect to host
 mobiwalk.com: could not connect to host
 mobix5.com: did not receive HSTS header
 mocloud.eu: could not connect to host
 mocsuite.club: could not connect to host
-mocurio.com: did not receive HSTS header
 modded-minecraft-server-list.com: could not connect to host
 moddedark.com: could not connect to host
 model9.io: did not receive HSTS header
 modemagazines.co.uk: could not connect to host
 moderatortv.de: did not receive HSTS header
 modydev.club: could not connect to host
 moe4sale.in: did not receive HSTS header
 moebel-nagel.de: did not receive HSTS header
@@ -4052,17 +4051,16 @@ moelord.org: could not connect to host
 moen.io: did not receive HSTS header
 mogry.net: could not connect to host
 moho.kr: could not connect to host
 mohs.es: could not connect to host
 moitur.com: could not connect to host
 mokhtarmial.com: max-age too low: 2592000
 mols.me: could not connect to host
 molun.net: did not receive HSTS header
-momentoscoquetos.es: could not connect to host
 momoka.moe: could not connect to host
 mona.lu: did not receive HSTS header
 monarca.systems: could not connect to host
 monasterialis.eu: could not connect to host
 mondar.io: could not connect to host
 mondopoint.com: did not receive HSTS header
 mondwandler.de: could not connect to host
 moneromerchant.com: could not connect to host
@@ -4125,30 +4123,32 @@ msc-seereisen.net: could not connect to 
 msno.no: did not receive HSTS header
 mszaki.com: did not receive HSTS header
 mt.me.uk: could not connect to host
 mt.search.yahoo.com: did not receive HSTS header
 mtb.wtf: could not connect to host
 mtdn.jp: could not connect to host
 mtg-esport.de: did not receive HSTS header
 mu.search.yahoo.com: did not receive HSTS header
+muchohentai.com: did not receive HSTS header
 mudcrab.us: did not receive HSTS header
 mujadin.se: did not receive HSTS header
 munich-rage.de: could not connect to host
 munkiepus.com: did not receive HSTS header
 munuc.org: did not receive HSTS header
 munzee.com: did not receive HSTS header
 muriburi.land: could not connect to host
 muriburiland.com: could not connect to host
 murodese.org: could not connect to host
 murrayrun.com: could not connect to host
 museminder2.com: could not connect to host
 musewearflipflops.com: could not connect to host
 mushroomandfern.com: could not connect to host
 musikkfondene.no: did not receive HSTS header
+mustardking.me: could not connect to host
 mustika.cf: could not connect to host
 mutamatic.com: could not connect to host
 muzykaprzeszladoplay.pl: did not receive HSTS header
 mvanmarketing.nl: did not receive HSTS header
 mvsecurity.nl: could not connect to host
 mw.search.yahoo.com: did not receive HSTS header
 mwohlfarth.de: could not connect to host
 my-owncloud.com: could not connect to host
@@ -4214,17 +4214,17 @@ naniki.co.uk: did not receive HSTS heade
 nanogeneinc.com: could not connect to host
 nansay.cn: could not connect to host
 nanto.eu: could not connect to host
 narada.com.ua: could not connect to host
 nashira.cz: did not receive HSTS header
 natalia-fadeeva.ru: could not connect to host
 natalia.io: could not connect to host
 natalieandjoshua.com: could not connect to host
-natalt.org: could not connect to host
+natalt.org: did not receive HSTS header
 natanaelys.com: could not connect to host
 nathanmfarrugia.com: did not receive HSTS header
 nationwidevehiclecontracts.co.uk: did not receive HSTS header
 natural-progesterone.net: could not connect to host
 naturecoaster.com: did not receive HSTS header
 naturesystems.cz: max-age too low: 0
 natuurbehangnederland.nl: could not connect to host
 nauck.org: could not connect to host
@@ -4264,17 +4264,16 @@ netbox.cc: could not connect to host
 netherwind.eu: could not connect to host
 netlilo.com: could not connect to host
 netloanusa.com: could not connect to host
 netlocal.ru: could not connect to host
 netmagik.com: did not receive HSTS header
 netprofile.com.au: could not connect to host
 netresourcedesign.com: could not connect to host
 nettefoundation.com: could not connect to host
-netulo.com: could not connect to host
 networx-online.de: could not connect to host
 netzbit.de: could not connect to host
 netzpolitik.org: max-age too low: 2592000
 netztest.at: did not receive HSTS header
 netzvieh.de: could not connect to host
 netzzwerg4u.de: could not connect to host
 neueonlinecasino2016.com: could not connect to host
 neuralgic.net: could not connect to host
@@ -4328,17 +4327,16 @@ niklas.pw: did not receive HSTS header
 niklaslindblad.se: did not receive HSTS header
 ninchisho-online.com: did not receive HSTS header
 ninhs.org: could not connect to host
 nippler.org: did not receive HSTS header
 nippombashi.net: did not receive HSTS header
 nipponcareers.com: did not receive HSTS header
 nixien.fr: could not connect to host
 nixmag.net: did not receive HSTS header
-nkp-media.de: could not connect to host
 nll.fi: could not connect to host
 nmadda.com: did not receive HSTS header
 nmctest.net: could not connect to host
 nmueller.at: could not connect to host
 nnya.cat: could not connect to host
 no-ip.cz: did not receive HSTS header
 no17sifangjie.cc: could not connect to host
 nocallaghan.com: could not connect to host
@@ -4353,16 +4351,17 @@ nolimitsbook.de: did not receive HSTS he
 nolte.work: could not connect to host
 nomorebytes.de: could not connect to host
 nope.website: could not connect to host
 nopex.no: could not connect to host
 nopol.de: could not connect to host
 norandom.com: could not connect to host
 norb.at: could not connect to host
 nordlicht.photography: could not connect to host
+northcutt.com: did not receive HSTS header
 nosecretshop.com: could not connect to host
 notadd.com: did not receive HSTS header
 notarobot.fr: could not connect to host
 notenoughtime.de: could not connect to host
 nothing.net.nz: max-age too low: 7776000
 nottheonion.net: did not receive HSTS header
 nou.si: could not connect to host
 nouvelle-vague-saint-cast.fr: did not receive HSTS header
@@ -4373,17 +4372,16 @@ novatrucking.de: could not connect to ho
 nowak.ninja: did not receive HSTS header
 noworrywp.com: could not connect to host
 nozoe.jp: could not connect to host
 np.search.yahoo.com: did not receive HSTS header
 npol.de: could not connect to host
 nqesh.com: did not receive HSTS header
 nrechn.de: could not connect to host
 nrizzio.me: could not connect to host
-nrnjn.xyz: could not connect to host
 nsweb.solutions: did not receive HSTS header
 ntbs.pro: could not connect to host
 ntse.xyz: could not connect to host
 nu3.at: did not receive HSTS header
 nu3.ch: did not receive HSTS header
 nu3.co.uk: could not connect to host
 nu3.com: did not receive HSTS header
 nu3.de: did not receive HSTS header
@@ -4398,16 +4396,17 @@ null-sec.ru: could not connect to host
 null.cat: could not connect to host
 null.tips: could not connect to host
 nullpoint.at: did not receive HSTS header
 numericacu.com: did not receive HSTS header
 numero-di-telefono.it: could not connect to host
 numista.com: did not receive HSTS header
 nurserybook.co: did not receive HSTS header
 nusatrip-api.com: did not receive HSTS header
+nutricuerpo.com: did not receive HSTS header
 nutritionculture.com: could not connect to host
 nutsandboltsmedia.com: did not receive HSTS header
 nwa.xyz: could not connect to host
 nweb.co.nz: could not connect to host
 nwork.media: could not connect to host
 nyantec.com: did not receive HSTS header
 nycroth.com: did not receive HSTS header
 nyored.com: did not receive HSTS header
@@ -4564,17 +4563,16 @@ otakuworld.de: could not connect to host
 othercode.nl: 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 :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118"  data: no]
 otherstuff.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118"  data: no]
 otichi.com: did not receive HSTS header
 otrsdemo.hu: did not receive HSTS header
 ottospora.nl: could not connect to host
 ourbank.com: did not receive HSTS header
 outdoorproducts.com: did not receive HSTS header
-outetc.com: could not connect to host
 outreachbuddy.com: could not connect to host
 outsider.im: could not connect to host
 outurnate.com: could not connect to host
 ouvirmusica.com.br: did not receive HSTS header
 ovenapp.io: did not receive HSTS header
 overclockers.ge: could not connect to host
 override.io: did not receive HSTS header
 oversight.io: could not connect to host
@@ -4643,17 +4641,17 @@ passumpsicbank.com: did not receive HSTS
 passwd.io: could not connect to host
 passwordbox.com: did not receive HSTS header
 passwordrevelator.net: did not receive HSTS header
 pastaf.com: could not connect to host
 pastdream.xyz: could not connect to host
 paste.linode.com: could not connect to host
 pastebin.linode.com: could not connect to host
 pastenib.com: could not connect to host
-paster.li: did not receive HSTS header
+paster.li: could not connect to host
 pataua.kiwi: did not receive HSTS header
 paternitydnatest.com: could not connect to host
 patientinsight.net: could not connect to host
 patt.us: could not connect to host
 patterson.mp: could not connect to host
 paul-kerebel.pro: could not connect to host
 paulbunyanmls.com: could not connect to host
 paulproell.at: could not connect to host
@@ -4678,17 +4676,17 @@ pchospital.cc: did not receive HSTS head
 pdamsidoarjo.co.id: could not connect to host
 pdevio.com: could not connect to host
 pdf.yt: could not connect to host
 peaceandwool.com: did not receive HSTS header
 peakapp.nl: could not connect to host
 pebblesdemo.com: could not connect to host
 peerherrmann.de: could not connect to host
 peetah.com: max-age too low: 0
-peissen.com: 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 :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118"  data: no]
 pekkapikkarainen.fi: did not receive HSTS header
 pekkarik.ru: could not connect to host
 peliculasaudiolatinoonline.com: could not connect to host
 pengui.uk: could not connect to host
 penguinclientsystem.com: did not receive HSTS header
 pentano.net: could not connect to host
 people-mozilla.org: could not connect to host
 peperiot.com: did not receive HSTS header
@@ -4722,16 +4720,17 @@ petrovsky.pro: could not connect to host
 petsittersservices.com: could not connect to host
 pettsy.com: could not connect to host
 pewboards.com: could not connect to host
 pexieapp.com: did not receive HSTS header
 peytonfarrar.com: did not receive HSTS header
 pflegedienst-gratia.de: max-age too low: 300
 pfo.io: could not connect to host
 pgpm.io: could not connect to host
+pgpmail.cc: could not connect to host
 pgtb.be: did not receive HSTS header
 phalconist.com: did not receive HSTS header
 pharmgkb.org: could not connect to host
 phdsupply.com: did not receive HSTS header
 phillmoore.com: did not receive HSTS header
 phillprice.com: could not connect to host
 philpropertygroup.com: could not connect to host
 phoebe.co.nz: did not receive HSTS header
@@ -4838,16 +4837,17 @@ pony.today: did not receive HSTS header
 poolsandstuff.com: did not receive HSTS header
 poon.tech: could not connect to host
 porno-gif.ru: did not receive HSTS header
 pornstars.me: did not receive HSTS header
 portalplatform.net: could not connect to host
 poshpak.com: max-age too low: 86400
 postback.io: could not connect to host
 postcodewise.co.uk: did not receive HSTS header
+posterspy.com: did not receive HSTS header
 postscheduler.org: could not connect to host
 posylka.de: did not receive HSTS header
 potatoheads.net: could not connect to host
 potbar.com: could not connect to host
 potlytics.com: could not connect to host
 potsky.com: did not receive HSTS header
 poussinooz.fr: could not connect to host
 povitria.net: could not connect to host
@@ -4858,23 +4858,25 @@ powerxequality.com: could not connect to
 ppr-truby.ru: could not connect to host
 ppuu.org: did not receive HSTS header
 ppy3.com: did not receive HSTS header
 pr.search.yahoo.com: did not receive HSTS header
 pr2studio.com: could not connect to host
 practicallabs.com: could not connect to host
 pratinav.xyz: could not connect to host
 prattpokemon.com: could not connect to host
+prc.gov: did not receive HSTS header
 prediksisydney.com: could not connect to host
 preezzie.com: could not connect to host
 prefis.com: did not receive HSTS header
 prefontaine.name: could not connect to host
 prego-shop.de: did not receive HSTS header
 preissler.co.uk: could not connect to host
 prelist.org: did not receive HSTS header
+prenger.co: could not connect to host
 prepandgo-euro.com: could not connect to host
 prescriptiondrugs.com: could not connect to host
 presidentials2016.com: could not connect to host
 press-anime-nenkan.com: did not receive HSTS header
 pressfreedomfoundation.org: did not receive HSTS header
 prettygrouse.com: did not receive HSTS header
 pretzlaff.info: did not receive HSTS header
 preworkout.me: could not connect to host
@@ -4888,27 +4890,29 @@ priolkar.com: did not receive HSTS heade
 privacylabs.io: did not receive HSTS header
 privacyrup.net: could not connect to host
 privytime.com: could not connect to host
 prnt.li: did not receive HSTS header
 pro-zone.com: could not connect to host
 procode.gq: could not connect to host
 prodpad.com: did not receive HSTS header
 production.vn: did not receive HSTS header
+producto8.com: did not receive HSTS header
 profhome-shop.com: did not receive HSTS header
 profi-durchgangsmelder.de: did not receive HSTS header
 profivps.com: could not connect to host
 profundr.com: could not connect to host
 profusion.io: could not connect to host
 progblog.net: could not connect to host
 progress-technologies.com: could not connect to host
 prohostonline.fi: could not connect to host
 proitconsulting.com.au: could not connect to host
 project-sparks.eu: did not receive HSTS header
 projectascension.io: could not connect to host
+projectbenson.com: could not connect to host
 projectmercury.space: could not connect to host
 prok.pw: could not connect to host
 promecon-gmbh.de: did not receive HSTS header
 prontocleaners.co.uk: could not connect to host
 prontolight.com: did not receive HSTS header
 prontomovers.co.uk: could not connect to host
 propactrading.com: could not connect to host
 prosocialmachines.com: could not connect to host
@@ -4975,17 +4979,16 @@ qrlending.com: did not receive HSTS head
 quail.solutions: could not connect to host
 quality1.com.br: did not receive HSTS header
 qualityology.com: did not receive HSTS header
 quanglepro.com: could not connect to host
 quantacloud.ch: could not connect to host
 quantenteranik.eu: could not connect to host
 quantum-cloud.xyz: could not connect to host
 quantumcourse.org: did not receive HSTS header
-quarterfull.com: could not connect to host
 quebecmailbox.com: could not connect to host
 queryplayground.com: could not connect to host
 questsandrewards.com: could not connect to host
 quickpayservice.com: could not connect to host
 quizmemes.org: could not connect to host
 quli.nl: did not receive HSTS header
 quotehex.com: could not connect to host
 quranserver.net: could not connect to host
@@ -5086,21 +5089,20 @@ regenbogenwald.de: did not receive HSTS 
 regenerescence.com: did not receive HSTS header
 reggae-cdmx.com: did not receive HSTS header
 regolithmedia.com: did not receive HSTS header
 rehabthailand.nl: could not connect to host
 reic.me: could not connect to host
 reikiqueen.uk: could not connect to host
 reinaldudras.ee: did not receive HSTS header
 reinaldudrasfamily.ee: did not receive HSTS header
-reisyukaku.org: did not receive HSTS header
+reisyukaku.org: could not connect to host
 reithguard-it.de: did not receive HSTS header
 rejo.in: could not connect to host
 rejuvemedspa.com: did not receive HSTS header
-relax.hn: did not receive HSTS header
 relaxhavefun.com: did not receive HSTS header
 relayawards.com: could not connect to host
 reliable-mail.de: did not receive HSTS header
 relisten.nl: did not receive HSTS header
 rem.pe: could not connect to host
 remedica.fr: could not connect to host
 remedioskaseros.com: did not receive HSTS header
 remedium.de: did not receive HSTS header
@@ -5108,16 +5110,17 @@ rememberthis.co.za: could not connect to
 remitatm.com: did not receive HSTS header
 remodela.com.ve: could not connect to host
 remonttitekniikka.fi: could not connect to host
 remoteham.com: could not connect to host
 rencaijia.com: did not receive HSTS header
 rene-schwarz.com: could not connect to host
 renem.net: max-age too low: 2592000
 renideo.fr: could not connect to host
+renkhosting.com: max-age too low: 0
 renlong.org: did not receive HSTS header
 renrenss.com: could not connect to host
 rentacarcluj.xyz: did not receive HSTS header
 rentbrowsertrain.me: could not connect to host
 rentcarassist.com: could not connect to host
 renteater.com: could not connect to host
 repaxan.com: could not connect to host
 replacemychina.com: could not connect to host
@@ -5145,17 +5148,16 @@ revtut.net: did not receive HSTS header
 rewardstock.com: max-age too low: 0
 rewopit.net: could not connect to host
 rhapsodhy.hu: could not connect to host
 rhdigital.pro: could not connect to host
 rhering.de: could not connect to host
 riaucybersolution.net: did not receive HSTS header
 richiemail.net: did not receive HSTS header
 richmondsunlight.com: did not receive HSTS header
-richmtdriver.com: could not connect to host
 richsiciliano.com: could not connect to host
 richterphilipp.com: could not connect to host
 rid-wan.com: could not connect to host
 rideworks.com: did not receive HSTS header
 ridwan.co: did not receive HSTS header
 riesenmikrobe.de: max-age too low: 86400
 riesenmikroben.at: max-age too low: 86400
 riesenmikroben.de: max-age too low: 86400
@@ -5334,26 +5336,26 @@ schooltrends.co.uk: did not receive HSTS
 schopenhauer-institut.de: did not receive HSTS header
 schreiber-netzwerk.eu: did not receive HSTS header
 schrodinger.io: could not connect to host
 schroettle.com: did not receive HSTS header
 schulterglatzen-altenwalde.de: could not connect to host
 schultzflorists.com: could not connect to host
 schwarzkopfforyou.de: did not receive HSTS header
 schweizerbolzonello.net: could not connect to host
-schwinger.me: could not connect to host
 scicasts.com: max-age too low: 7776000
 scienceathome.org: did not receive HSTS header
 scivillage.com: did not receive HSTS header
 sclgroup.cc: did not receive HSTS header
 scooshonline.co.uk: did not receive HSTS header
 scotbirchfield.com: did not receive HSTS header
 scottdial.com: did not receive HSTS header
 scottferguson.com.au: did not receive HSTS header
 scottgthomas.com: could not connect to host
+scottnicol.co.uk: could not connect to host
 scourt.info: could not connect to host
 scourt.org.ua: could not connect to host
 scrambl.is: could not connect to host
 scramble.io: could not connect to host
 scrambler.in: could not connect to host
 scrapings.net: could not connect to host
 screencaster.io: did not receive HSTS header
 screenresolution.space: could not connect to host
@@ -5381,31 +5383,31 @@ secnet.ga: could not connect to host
 secondary-survivor.com: could not connect to host
 secondary-survivor.help: could not connect to host
 secondary-survivor.net: could not connect to host
 secondarysurvivor.help: could not connect to host
 secondarysurvivorportal.com: could not connect to host
 secondarysurvivorportal.help: could not connect to host
 secondbyte.nl: could not connect to host
 secondspace.ca: could not connect to host
-sectia22.ro: did not receive HSTS header
 section508.gov: did not receive HSTS header
 sectun.com: did not receive HSTS header
 secure-games.us: could not connect to host
 secure.link: did not receive HSTS header
 securechat4.me: could not connect to host
 secureradio.net: could not connect to host
 securesuisse.ch: could not connect to host
 security-carpet.com: could not connect to host
 security-thoughts.org: could not connect to host
 securitybsides.pl: did not receive HSTS header
 securityinet.biz: did not receive HSTS header
 securityinet.net: did not receive HSTS header
 securityinet.org.il: did not receive HSTS header
 securiviera.ch: did not receive HSTS header
+secwall.me: could not connect to host
 sedoexpert.nl: could not connect to host
 sedoexperts.nl: could not connect to host
 sedziapilkarski.pl: did not receive HSTS header
 seedboxers.net: could not connect to host
 seefunk.net: did not receive HSTS header
 seele.ca: could not connect to host
 sehenderson.com: did not receive HSTS header
 seiko-dojo.com: could not connect to host
@@ -5439,17 +5441,17 @@ seon.me: could not connect to host
 seosanantonioinc.com: did not receive HSTS header
 seowarp.net: did not receive HSTS header
 sepalandseed.com: did not receive HSTS header
 seq.tf: did not receive HSTS header
 serathius.ovh: could not connect to host
 serenitycreams.com: did not receive HSTS header
 serfdom.io: did not receive HSTS header
 serized.pw: could not connect to host
-serverangels.co.uk: did not receive HSTS header
+serverangels.co.uk: could not connect to host
 servercode.ca: did not receive HSTS header
 serverdensity.io: did not receive HSTS header
 servergno.me: did not receive HSTS header
 servermonkey.nl: could not connect to host
 seryo.moe: could not connect to host
 seryo.net: could not connect to host
 sethcaplan.com: could not connect to host
 setphaserstostun.org: could not connect to host
@@ -5482,16 +5484,17 @@ shiftplanning.com: did not receive HSTS 
 shiinko.com: could not connect to host
 shindorei.fr: did not receive HSTS header
 shinebijoux.com.br: could not connect to host
 shinju.moe: could not connect to host
 shiona.xyz: could not connect to host
 shipmile.com: did not receive HSTS header
 shipping24h.com: did not receive HSTS header
 shirosaki.org: could not connect to host
+shitsta.in: could not connect to host
 shm-forum.org.uk: could not connect to host
 shocksrv.com: did not receive HSTS header
 shooshosha.com: could not connect to host
 shopherbal.co.za: did not receive HSTS header
 shopontarget.com: did not receive HSTS header
 shoprose.ru: could not connect to host
 shops.neonisi.com: could not connect to host
 showkeeper.tv: did not receive HSTS header
@@ -5504,17 +5507,16 @@ shyrydan.es: could not connect to host
 si.to: could not connect to host
 siammedia.co: could not connect to host
 sianimacion.com: could not connect to host
 sichere-kartenakzeptanz.de: did not receive HSTS header
 siciliadigitale.pro: could not connect to host
 siddhant.me: max-age too low: 0
 siebens.net: could not connect to host
 sifls.com: could not connect to host
-sigsegv.run: could not connect to host
 sijimi.cn: did not receive HSTS header
 sikayetvar.com: did not receive HSTS header
 silaslova-ekb.ru: could not connect to host
 silent.live: could not connect to host
 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
@@ -5586,16 +5588,17 @@ slovoice.org: could not connect to host
 slycurity.de: did not receive HSTS header
 smallcdn.rocks: could not connect to host
 smart-mirror.de: did not receive HSTS header
 smart-ov.nl: could not connect to host
 smartbuyelectric.com: could not connect to host
 smartcleaningcenter.nl: did not receive HSTS header
 smartcoin.com.br: did not receive HSTS header
 smarthomedna.com: did not receive HSTS header
+smartmeal.ru: did not receive HSTS header
 smartofficesandsmarthomes.com: did not receive HSTS header
 smartrak.co.nz: did not receive HSTS header
 smdev.fr: could not connect to host
 smet.us: could not connect to host
 smimea.com: could not connect to host
 smirkingwhorefromhighgarden.pro: could not connect to host
 smkn1lengkong.sch.id: did not receive HSTS header
 smksi2.com: could not connect to host
@@ -5641,16 +5644,17 @@ soljem.com: did not receive HSTS header
 soll-i.ch: did not receive HSTS header
 solosmusic.xyz: could not connect to host
 solsystems.ru: could not connect to host
 solutive.fi: did not receive HSTS header
 somali-derp.com: could not connect to host
 someshit.xyz: could not connect to host
 somethingnew.xyz: could not connect to host
 sonic.network: did not receive HSTS header
+sonicrainboom.rocks: did not receive HSTS header
 soobi.org: did not receive HSTS header
 soondy.com: did not receive HSTS header
 sosaka.ml: could not connect to host
 sosiolog.com: did not receive HSTS header
 sotor.de: did not receive HSTS header
 soucorneteiro.com.br: could not connect to host
 soulema.com: could not connect to host
 soulfulglamour.uk: could not connect to host
@@ -5703,17 +5707,16 @@ spotifyripper.tk: could not connect to h
 spotlightsrule.ddns.net: could not connect to host
 spr.id.au: did not receive HSTS header
 spreadsheets.google.com: did not receive HSTS header (error ignored - included regardless)
 sproutconnections.com: did not receive HSTS header
 sprutech.de: could not connect to host
 sprybear.com: max-age too low: 0
 square.gs: could not connect to host
 squatldf.org: did not receive HSTS header
-squido.ch: could not connect to host
 sqzryang.com: did not receive HSTS header
 srcc.fr: could not connect to host
 srevilak.net: did not receive HSTS header
 srmaximo.com: could not connect to host
 srna.sk: could not connect to host
 srrr.ca: could not connect to host
 srv.so: could not connect to host
 ss.lt: did not receive HSTS header
@@ -5735,16 +5738,17 @@ stadtbauwerk.at: did not receive HSTS he
 staffjoy.com: did not receive HSTS header
 staffjoystaging.com: could not connect to host
 stahl.xyz: could not connect to host
 stalkerhispano.com: max-age too low: 0
 stalkerteam.pl: did not receive HSTS header
 stalschermer.nl: could not connect to host
 standardssuck.org: did not receive HSTS header
 standingmist.com: did not receive HSTS header
+star-killer.net: could not connect to host
 starandshield.com: did not receive HSTS header
 starapple.nl: did not receive HSTS header
 starfeeling.net: could not connect to host
 stargatepartners.com: did not receive HSTS header
 starmusic.ga: did not receive HSTS header
 startpage.info: could not connect to host
 starttraffic.com: did not receive HSTS header
 startuponcloud.com: max-age too low: 2678400
@@ -5804,16 +5808,17 @@ streamingmagazin.de: could not connect t
 streams.dyndns.org: could not connect to host
 strictlynormal.com: could not connect to host
 strictlysudo.com: could not connect to host
 strivephysmed.com: did not receive HSTS header
 stroeercrm.de: could not connect to host
 strongest-privacy.com: could not connect to host
 stuartbaxter.co: could not connect to host
 student-scientist.org: did not receive HSTS header
+studentloans.gov: could not connect to host
 studentresearcher.org: did not receive HSTS header
 studentskydenik.cz: could not connect to host
 studenttravel.cz: did not receive HSTS header
 studinf.xyz: could not connect to host
 studio-panic.com: did not receive HSTS header
 studiozelden.com: did not receive HSTS header
 studybay.com: did not receive HSTS header
 studydrive.net: did not receive HSTS header
@@ -5830,17 +5835,16 @@ subsys.no: did not receive HSTS header
 subtitle.rip: could not connect to host
 sudo.li: did not receive HSTS header
 suian.or.jp: max-age too low: 86400
 suite73.org: could not connect to host
 summitbankofkc.com: did not receive HSTS header
 sumoatm.com: did not receive HSTS header
 sumoscout.de: did not receive HSTS header
 suncountrymarine.com: did not receive HSTS header
-sunflyer.cn: did not receive HSTS header
 sunfulong.me: could not connect to host
 sunnyfruit.ru: could not connect to host
 sunshinepress.org: could not connect to host
 sunyanzi.tk: could not connect to host
 suos.io: could not connect to host
 supcro.com: could not connect to host
 super-erotica.ru: did not receive HSTS header
 super-garciniaslim.com: could not connect to host
@@ -5922,17 +5926,16 @@ tahf.net: did not receive HSTS header
 tailify.com: did not receive HSTS header
 tails.com.ar: did not receive HSTS header
 talado.gr: could not connect to host
 tales-of-interia.de: could not connect to host
 talheim-records.ca: could not connect to host
 talk.google.com: did not receive HSTS header (error ignored - included regardless)
 talkitup.online: did not receive HSTS header
 talklifestyle.nl: 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
 tamex.xyz: could not connect to host
 tandarts-haarlem.nl: did not receive HSTS header
 tangel.me: could not connect to host
 tangibilizing.com: could not connect to host
 tante-bugil.net: could not connect to host
 tanze-jetzt.de: did not receive HSTS header
@@ -5960,27 +5963,27 @@ tc-bonito.de: did not receive HSTS heade
 tc.nz: did not receive HSTS header
 tcao.info: could not connect to host
 tcby45.xyz: could not connect to host
 tcdw.net: did not receive HSTS header
 tcl.ath.cx: did not receive HSTS header
 tcomms.org: max-age too low: 0
 tcp.expert: did not receive HSTS header
 tcwebvn.com: could not connect to host
+tdude.co: could not connect to host
 teachforcanada.ca: did not receive HSTS header
-team-bbd.com: did not receive HSTS header
 team-teasers.com: did not receive HSTS header
 teamblueridge.org: could not connect to host
 teampoint.cz: could not connect to host
 teamsocial.co: did not receive HSTS header
 teamzeus.cz: could not connect to host
 tech-finder.fr: could not connect to host
 tech55i.com: did not receive HSTS header
 techandtux.de: could not connect to host
-techassist.io: did not receive HSTS header
+techassist.io: could not connect to host
 techelements.co: did not receive HSTS header
 techhipster.net: could not connect to host
 techhub.ml: could not connect to host
 techllage.com: could not connect to host
 techloaner.com: could not connect to host
 techmasters.andover.edu: could not connect to host
 techmatehq.com: could not connect to host
 technogroup.cz: did not receive HSTS header
@@ -6045,17 +6048,17 @@ thebigfail.net: could not connect to hos
 thebrightons.co.uk: did not receive HSTS header
 thebrotherswarde.com: could not connect to host
 thecapitalbank.com: did not receive HSTS header
 thecharlestonwaldorf.com: did not receive HSTS header
 theclementinebutchers.com: could not connect to host
 theclubjersey.com: did not receive HSTS header
 thecoffeehouse.xyz: could not connect to host
 theelitebuzz.com: did not receive HSTS header
-theendofzion.com: could not connect to host
+theendofzion.com: did not receive HSTS header
 theescapistswiki.com: could not connect to host
 thefarbeyond.com: could not connect to host
 theflowerbasketonline.com: could not connect to host
 thefootballanalyst.com: did not receive HSTS header
 thefrozenfire.com: did not receive HSTS header
 thefutureharrills.com: could not connect to host
 thegcccoin.com: did not receive HSTS header
 thego2swatking.com: could not connect to host
@@ -6102,17 +6105,16 @@ thisisacompletetest.ga: could not connec
 thisisforager.com: could not connect to host
 thiswebhost.com: did not receive HSTS header
 thomasharvey.me: max-age too low: 0
 thomaskliszowski.fr: did not receive HSTS header
 thomasmeester.nl: did not receive HSTS header
 thomasschweizer.net: could not connect to host
 thorncreek.net: did not receive HSTS header
 thriveapproach.co.uk: did not receive HSTS header
-thriveta.com: did not receive HSTS header
 throughthelookingglasslens.co.uk: could not connect to host
 thumbtack.com: did not receive HSTS header
 thundercampaign.com: could not connect to host
 thusoy.com: did not receive HSTS header
 ti.blog.br: could not connect to host
 tibbitshall.ca: did not receive HSTS header
 tickettoaster.de: max-age too low: 0
 tickopa.co.uk: could not connect to host
@@ -6121,16 +6123,17 @@ ticktock.today: did not receive HSTS hea
 tictactux.de: could not connect to host
 tidmore.us: could not connect to host
 tiendschuurstraat.nl: could not connect to host
 tiensnet.com: did not receive HSTS header
 tiernanx.com: could not connect to host
 tightlineproductions.com: did not receive HSTS header
 tikutiku.pl: could not connect to host
 tildebot.com: could not connect to host
+tiledailyshop.com: could not connect to host
 tiliaze.be: could not connect to host
 tiliaze.biz: could not connect to host
 tiliaze.eu: could not connect to host
 tiliaze.info: could not connect to host
 tiliaze.net: could not connect to host
 tilkah.com.au: could not connect to host
 tillcraft.com: could not connect to host
 timbeilby.com: could not connect to host
@@ -6190,17 +6193,17 @@ tofu.im: could not connect to host
 togelonlinecommunity.com: did not receive HSTS header
 tokenloan.com: could not connect to host
 tokoone.com: did not receive HSTS header
 tokoyo.biz: could not connect to host
 tollmanz.com: did not receive HSTS header
 tolud.com: could not connect to host
 tomeara.net: could not connect to host
 tomevans.io: could not connect to host
-tomharris.tech: did not receive HSTS header
+tomharris.tech: could not connect to host
 tomlankhorst.nl: did not receive HSTS header
 tomli.me: could not connect to host
 tommsy.com: did not receive HSTS header
 tommyads.com: could not connect to host
 tonyfantjr.com: could not connect to host
 tonyw.xyz: could not connect to host
 toomanypillows.com: could not connect to host
 tooolroc.org: could not connect to host
@@ -6323,34 +6326,32 @@ twinkseason.co: could not connect to hos
 twinkseason.co.uk: could not connect to host
 twinkseason.com: could not connect to host
 twinkseason.net: could not connect to host
 twinkseason.org: could not connect to host
 twinkseason.xyz: could not connect to host
 twisata.com: did not receive HSTS header
 twist.party: could not connect to host
 twitter.ax: could not connect to host
-twodadsgames.com: could not connect to host
 twogo.com: did not receive HSTS header
 twolinepassbrewing.com: could not connect to host
 tx041cap.org: did not receive HSTS header
 txclimbers.com: could not connect to host
 txf.pw: could not connect to host
 ty2u.com: did not receive HSTS header
 tylian.net: max-age too low: 0
 typingrevolution.com: did not receive HSTS header
 tyrelius.com: did not receive HSTS header
 tyroproducts.eu: did not receive HSTS header
 tzappa.net: could not connect to host
 u-blox.com: max-age too low: 0
 ua.search.yahoo.com: did not receive HSTS header
 uadp.pw: did not receive HSTS header
 uber.com.au: did not receive HSTS header
 uberfunction.com: did not receive HSTS header
-uberwald.de: could not connect to host
 ubi.gg: could not connect to host
 ubicloud.de: could not connect to host
 ubicv.com: could not connect to host
 ublox.com: did not receive HSTS header
 ubuntuhot.com: did not receive HSTS header
 uega.net: did not receive HSTS header
 ueu.me: could not connect to host
 ufgaming.com: did not receive HSTS header
@@ -6601,34 +6602,33 @@ walkeryoung.ca: could not connect to hos
 wallabag.it: did not receive HSTS header
 wallabag.org: did not receive HSTS header
 wallet.google.com: did not receive HSTS header (error ignored - included regardless)
 wallsblog.dk: could not connect to host
 walnutgaming.co.uk: could not connect to host
 walterlynnmosley.com: did not receive HSTS header
 wan.pp.ua: could not connect to host
 wanban.io: could not connect to host
-wangjun.me: did not receive HSTS header
+wangjun.me: could not connect to host
 wangqiliang.xn--fiqs8s: could not connect to host
-wangzuan168.cc: could not connect to host
+wangzuan168.cc: did not receive HSTS header
 wanybug.cn: could not connect to host
 wapjt.cn: could not connect to host
 wapt.fr: did not receive HSTS header
 warandpeace.xyz: could not connect to host
 warehost.de: did not receive HSTS header
 warhistoryonline.com: max-age too low: 0
 warped.com: did not receive HSTS header
 warrencreative.com: did not receive HSTS header
 warsentech.com: could not connect to host
 washingtonviews.com: did not receive HSTS header
 watchium.com: did not receive HSTS header
 waterforlife.net.au: did not receive HSTS header
 watersportmarkt.net: did not receive HSTS header
 watsonhall.uk: could not connect to host
-wattechweb.com: did not receive HSTS header
 wave.is: could not connect to host
 wavefrontsystemstech.com: could not connect to host
 we-bb.com: could not connect to host
 wear2work.nl: did not receive HSTS header
 weaverhairextensions.nl: could not connect to host
 web-industry.fr: could not connect to host
 web-insider.net: did not receive HSTS header
 web-redacteuren.nl: did not receive HSTS header
@@ -6637,30 +6637,30 @@ web-vision.de: did not receive HSTS head
 web4all.fr: did not receive HSTS header
 web4pro.fr: could not connect to host
 webandwords.com.au: could not connect to host
 webapps.directory: could not connect to host
 webassadors.com: could not connect to host
 webbson.net: could not connect to host
 webchat.domains: did not receive HSTS header
 webdesign-kronberg.de: did not receive HSTS header
-webdesigneauclaire.com: could not connect to host
 webdev.mobi: could not connect to host
 webeconomia.it: did not receive HSTS header
 webelement.sk: did not receive HSTS header
 webhosting4.net: did not receive HSTS header
 webm.to: could not connect to host
 webmail.mayfirst.org: did not receive HSTS header
 webmaniabr.com: did not receive HSTS header
 webmarketingfestival.it: did not receive HSTS header
 webninja.work: could not connect to host
 webnosql.com: could not connect to host
 webperformance.ru: max-age too low: 3600
 webpublica.pt: could not connect to host
 webrebels.org: could not connect to host
+webs4all.ro: could not connect to host
 webstationservice.fr: could not connect to host
 webstellung.com: could not connect to host
 webstory.xyz: could not connect to host
 webswitch.io: could not connect to host
 webtechgadgetry.com: did not receive HSTS header
 webtiles.co.uk: could not connect to host
 webtobesocial.de: could not connect to host
 webuni.hu: did not receive HSTS header
@@ -6688,17 +6688,16 @@ wetofu.top: could not connect to host
 wettbuero.de: did not receive HSTS header
 wetten.eu: did not receive HSTS header
 wettertoertchen.com: could not connect to host
 wetttipps.com: did not receive HSTS header
 wetttipps.de: could not connect to host
 wevahoo.com: could not connect to host
 wevolver.com: did not receive HSTS header
 wewlad.me: could not connect to host
-wf-training-master.appspot.com: could not connect to host (error ignored - included regardless)
 wftda.com: did not receive HSTS header
 whatnext.limited: did not receive HSTS header
 whats.io: could not connect to host
 whatsstalk.me: could not connect to host
 whatsyouroffer.co.uk: did not receive HSTS header
 wheresben.today: could not connect to host
 whisker.network: could not connect to host
 whitehat.id: could not connect to host
@@ -6706,26 +6705,26 @@ whiterabbit.org: did not receive HSTS he
 whiterabbitcakery.com: could not connect to host
 whitestagforge.com: did not receive HSTS header
 whoclicks.net: could not connect to host
 whoisapi.online: could not connect to host
 wholebites.com: did not receive HSTS header
 whoneedstobeprimaried.today: could not connect to host
 whoshotya.de: did not receive HSTS header
 whysuck.com: could not connect to host
+wienergyjobs.com: could not connect to host
 wienholding.at: max-age too low: 0
 wieninternational.at: did not receive HSTS header
 wiire.me: could not connect to host
 wikiclash.info: could not connect to host
 wikimilk.org: could not connect to host
 wikisports.eu: could not connect to host
 wild-emotion-events.de: could not connect to host
 wildbee.org: could not connect to host
 wilf1rst.com: could not connect to host
-wilhelm-nathan.de: could not connect to host
 willcipriano.com: could not connect to host
 william.si: did not receive HSTS header
 williamsapiens.com: could not connect to host
 willosagiede.com: did not receive HSTS header
 winaes.com: did not receive HSTS header
 winclient.cn: could not connect to host
 windowsphoneblog.it: max-age too low: 0
 winebid.com: could not connect to host
@@ -6768,16 +6767,17 @@ wondy.com: could not connect to host
 woodmafia.com.au: max-age too low: 0
 woording.com: could not connect to host
 wootton95.com: could not connect to host
 wooviet.com: could not connect to host
 word-grabber.com: did not receive HSTS header
 woresite.jp: did not receive HSTS header
 work-and-jockel.de: did not receive HSTS header
 workfone.io: did not receive HSTS header
+workingclassmedia.com: could not connect to host
 workpermit.com.vn: could not connect to host
 workwithgo.com: could not connect to host
 worldsbeststory.com: did not receive HSTS header
 worldwhisperer.net: could not connect to host
 worshapp.com: could not connect to host
 wow-travel.eu: could not connect to host
 wowapi.org: could not connect to host
 wowinvasion.com: did not receive HSTS header
@@ -6816,17 +6816,16 @@ www.logentries.com: did not receive HSTS
 www.makeyourlaws.org: could not connect to host
 www.moneybookers.com: did not receive HSTS header
 www.neonisi.com: could not connect to host
 www.paycheckrecords.com: did not receive HSTS header
 www.rme.li: did not receive HSTS header
 www.sandbox.mydigipass.com: could not connect to host
 www.simbolo.co.uk: could not connect to host
 www.surfeasy.com: did not receive HSTS header
-www.viasinc.com: did not receive HSTS header
 www.zenpayroll.com: did not receive HSTS header
 www3.info: did not receive HSTS header
 wxukang.cn: could not connect to host
 wybmabiity.com: max-age too low: 0
 wygluszanie.eu: did not receive HSTS header
 x-power-detox.com: could not connect to host
 x-ripped-hd.com: could not connect to host
 x1616.tk: could not connect to host
@@ -6837,32 +6836,32 @@ xa.search.yahoo.com: did not receive HST
 xandocs.com: could not connect to host
 xavierbarroso.com: could not connect to host
 xbind.io: could not connect to host
 xcoop.me: could not connect to host
 xecure.zone: did not receive HSTS header
 xehoivn.vn: did not receive HSTS header
 xellos.ga: could not connect to host
 xellos.ml: could not connect to host
+xendo.net: max-age too low: 3600
 xenesisziarovky.sk: could not connect to host
 xett.com: did not receive HSTS header
 xf-liam.com: did not receive HSTS header
-xfive.de: did not receive HSTS header
+xfive.de: could not connect to host
 xgusto.com: did not receive HSTS header
 xia100.xyz: could not connect to host
 xiaody.me: could not connect to host
 xiaolvmu.com: could not connect to host
 xiaolvmu.me: could not connect to host
 xiaoxiao.im: could not connect to host
 xiazhanjian.com: could not connect to host
 ximens.me: could not connect to host
 xisa.it: could not connect to host
 xiyu.moe: could not connect to host
 xjoin.de: could not connect to host
-xlii.io: could not connect to host
 xmerak.com: could not connect to host
 xmonk.org: could not connect to host
 xmr.my: did not receive HSTS header
 xn--3lqp21gwna.xn--fiqs8s: could not connect to host
 xn--3lqp21gwna.xn--fiqz9s: could not connect to host
 xn--3lqt7ir4md4tzwa.cn: did not receive HSTS header
 xn--3lqt7ir4md4tzwa.xn--fiqs8s: did not receive HSTS header
 xn--3px.jp: could not connect to host
@@ -6905,16 +6904,17 @@ xtom.email: could not connect to host
 xtream-hosting.com: could not connect to host
 xtream-hosting.de: could not connect to host
 xtream-hosting.eu: could not connect to host
 xtreamhosting.eu: could not connect to host
 xtrim.ru: did not receive HSTS header
 xuexb.com: did not receive HSTS header
 xuwei.de: could not connect to host
 xuyh0120.win: did not receive HSTS header
+xwalck.se: could not connect to host
 xxbase.com: could not connect to host
 xynex.us: could not connect to host
 y-o-w.com: did not receive HSTS header
 yachts-magazine.com: did not receive HSTS header
 yagi2.com: could not connect to host
 yahoo.ax: could not connect to host
 yamamo10.com: could not connect to host
 yameveo.com: did not receive HSTS header
@@ -6993,17 +6993,19 @@ zahyantechnologies.com: could not connec
 zakoncontrol.com: could not connect to host
 zamorano.edu: could not connect to host
 zamos.ru: max-age too low: 0
 zaneweb.org: could not connect to host
 zanthra.com: could not connect to host
 zao.fi: could not connect to host
 zap.yt: could not connect to host
 zarooba.com: could not connect to host
+zary.me: did not receive HSTS header
 zavca.com: did not receive HSTS header
+zberger.com: could not connect to host
 zbigniewgalucki.eu: did not receive HSTS header
 zby.io: could not connect to host
 zcon.nl: could not connect to host
 zdravotnickainformatika.cz: did not receive HSTS header
 zdravotnickasluzba.eu: could not connect to host
 zebrababy.cn: did not receive HSTS header
 zeedroom.be: did not receive HSTS header
 zefiris.org: did not receive HSTS header
@@ -7026,16 +7028,17 @@ zett4.me: could not connect to host
 zeytin.pro: could not connect to host
 zh.search.yahoo.com: did not receive HSTS header
 zh1.li: could not connect to host
 zhangzifan.com: did not receive HSTS header
 zhaojin97.cn: did not receive HSTS header
 zhendingresources.com: max-age too low: 0
 zhh.in: could not connect to host
 zhihua-lai.com: did not receive HSTS header
+zhousiru.com: could not connect to host
 zi0r.com: max-age too low: 1209600
 zicklam.com: could not connect to host
 zigcore.com.br: could not connect to host
 zihao.me: did not receive HSTS header
 zinc-x.com: did not receive HSTS header
 zinenapse.info: could not connect to host
 zippy-download.com: did not receive HSTS header
 zippy-download.de: did not receive HSTS header
@@ -7050,27 +7053,27 @@ zjutv.com: could not connect to host
 zk.gd: did not receive HSTS header
 zkillboard.com: did not receive HSTS header
 zking.ga: could not connect to host
 zmsastro.co.za: did not receive HSTS header
 zmy.im: did not receive HSTS header
 zocken.com: did not receive HSTS header
 zoe.vc: could not connect to host
 zohar.link: could not connect to host
+zolotoy-standart.com.ua: did not receive HSTS header
 zomiac.pp.ua: could not connect to host
 zoneminder.com: did not receive HSTS header
 zoo24.de: did not receive HSTS header
 zoomingin.net: max-age too low: 5184000
 zoommailing.com: did not receive HSTS header
 zorasvobodova.cz: did not receive HSTS header
 zortium.report: could not connect to host
 zoznamrealit.sk: did not receive HSTS header
 zqhong.com: could not connect to host
 ztan.tk: could not connect to host
 ztcaoll222.cn: did not receive HSTS header
 zubel.it: did not receive HSTS header
 zulu7.com: could not connect to host
-zuolan.me: did not receive HSTS header
 zvncloud.com: did not receive HSTS header
 zwollemagazine.nl: did not receive HSTS header
 zyf.pw: could not connect to host
 zymbit.com: did not receive HSTS header
 zync.ca: did not receive HSTS header
--- a/security/manager/ssl/nsSTSPreloadList.inc
+++ b/security/manager/ssl/nsSTSPreloadList.inc
@@ -3,17 +3,17 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /*****************************************************************************/
 /* This is an automatically generated file. If you're not                    */
 /* nsSiteSecurityService.cpp, you shouldn't be #including it.     */
 /*****************************************************************************/
 
 #include <stdint.h>
-const PRTime gPreloadListExpirationTime = INT64_C(1511626870184000);
+const PRTime gPreloadListExpirationTime = INT64_C(1511712963056000);
 
 static const char kSTSHostTable[] = {
   /* "0.me.uk", true */ '0', '.', 'm', 'e', '.', 'u', 'k', '\0',
   /* "007-preisvergleich.de", true */ '0', '0', '7', '-', 'p', 'r', 'e', 'i', 's', 'v', 'e', 'r', 'g', 'l', 'e', 'i', 'c', 'h', '.', 'd', 'e', '\0',
   /* "00f.net", true */ '0', '0', 'f', '.', 'n', 'e', 't', '\0',
   /* "00wbf.com", true */ '0', '0', 'w', 'b', 'f', '.', 'c', 'o', 'm', '\0',
   /* "0100dev.com", true */ '0', '1', '0', '0', 'd', 'e', 'v', '.', 'c', 'o', 'm', '\0',
   /* "0100dev.nl", true */ '0', '1', '0', '0', 'd', 'e', 'v', '.', 'n', 'l', '\0',
@@ -94,17 +94,16 @@ static const char kSTSHostTable[] = {
   /* "12vpn.org", true */ '1', '2', 'v', 'p', 'n', '.', 'o', 'r', 'g', '\0',
   /* "130.ua", true */ '1', '3', '0', '.', 'u', 'a', '\0',
   /* "132kv.ch", true */ '1', '3', '2', 'k', 'v', '.', 'c', 'h', '\0',
   /* "1359826938.rsc.cdn77.org", true */ '1', '3', '5', '9', '8', '2', '6', '9', '3', '8', '.', 'r', 's', 'c', '.', 'c', 'd', 'n', '7', '7', '.', 'o', 'r', 'g', '\0',
   /* "13826145000.com", true */ '1', '3', '8', '2', '6', '1', '4', '5', '0', '0', '0', '.', 'c', 'o', 'm', '\0',
   /* "1464424382.rsc.cdn77.org", true */ '1', '4', '6', '4', '4', '2', '4', '3', '8', '2', '.', 'r', 's', 'c', '.', 'c', 'd', 'n', '7', '7', '.', 'o', 'r', 'g', '\0',
   /* "14it.de", true */ '1', '4', 'i', 't', '.', 'd', 'e', '\0',
   /* "14x3.de", true */ '1', '4', 'x', '3', '.', 'd', 'e', '\0',
-  /* "15-10.com", true */ '1', '5', '-', '1', '0', '.', 'c', 'o', 'm', '\0',
   /* "1536.cf", true */ '1', '5', '3', '6', '.', 'c', 'f', '\0',
   /* "1600esplanade.com", true */ '1', '6', '0', '0', 'e', 's', 'p', 'l', 'a', 'n', 'a', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "16164f.com", true */ '1', '6', '1', '6', '4', 'f', '.', 'c', 'o', 'm', '\0',
   /* "1644091933.rsc.cdn77.org", true */ '1', '6', '4', '4', '0', '9', '1', '9', '3', '3', '.', 'r', 's', 'c', '.', 'c', 'd', 'n', '7', '7', '.', 'o', 'r', 'g', '\0',
   /* "166166.com", true */ '1', '6', '6', '1', '6', '6', '.', 'c', 'o', 'm', '\0',
   /* "16deza.com", true */ '1', '6', 'd', 'e', 'z', 'a', '.', 'c', 'o', 'm', '\0',
   /* "174.net.nz", true */ '1', '7', '4', '.', 'n', 'e', 't', '.', 'n', 'z', '\0',
   /* "1750studios.com", false */ '1', '7', '5', '0', 's', 't', 'u', 'd', 'i', 'o', 's', '.', 'c', 'o', 'm', '\0',
@@ -270,17 +269,16 @@ static const char kSTSHostTable[] = {
   /* "4winds.pt", true */ '4', 'w', 'i', 'n', 'd', 's', '.', 'p', 't', '\0',
   /* "4x.fi", true */ '4', 'x', '.', 'f', 'i', '\0',
   /* "500p.xyz", true */ '5', '0', '0', 'p', '.', 'x', 'y', 'z', '\0',
   /* "507.net", true */ '5', '0', '7', '.', 'n', 'e', 't', '\0',
   /* "50plusnet.nl", true */ '5', '0', 'p', 'l', 'u', 's', 'n', 'e', 't', '.', 'n', 'l', '\0',
   /* "525.info", true */ '5', '2', '5', '.', 'i', 'n', 'f', 'o', '\0',
   /* "52neptune.com", true */ '5', '2', 'n', 'e', 'p', 't', 'u', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "54below.com", true */ '5', '4', 'b', 'e', 'l', 'o', 'w', '.', 'c', 'o', 'm', '\0',
-  /* "54bf.com", true */ '5', '4', 'b', 'f', '.', 'c', 'o', 'm', '\0',
   /* "57aromas.com", true */ '5', '7', 'a', 'r', 'o', 'm', 'a', 's', '.', 'c', 'o', 'm', '\0',
   /* "5apps.com", true */ '5', 'a', 'p', 'p', 's', '.', 'c', 'o', 'm', '\0',
   /* "5c1fd0f31022cbc40af9f785847baaf9.space", true */ '5', 'c', '1', 'f', 'd', '0', 'f', '3', '1', '0', '2', '2', 'c', 'b', 'c', '4', '0', 'a', 'f', '9', 'f', '7', '8', '5', '8', '4', '7', 'b', 'a', 'a', 'f', '9', '.', 's', 'p', 'a', 'c', 'e', '\0',
   /* "5h0r7.com", true */ '5', 'h', '0', 'r', '7', '.', 'c', 'o', 'm', '\0',
   /* "646.io", false */ '6', '4', '6', '.', 'i', 'o', '\0',
   /* "64616e.xyz", true */ '6', '4', '6', '1', '6', 'e', '.', 'x', 'y', 'z', '\0',
   /* "6541166.com", true */ '6', '5', '4', '1', '1', '6', '6', '.', 'c', 'o', 'm', '\0',
   /* "6542277.com", true */ '6', '5', '4', '2', '2', '7', '7', '.', 'c', 'o', 'm', '\0',
@@ -719,16 +717,17 @@ static const char kSTSHostTable[] = {
   /* "airicy.com", true */ 'a', 'i', 'r', 'i', 'c', 'y', '.', 'c', 'o', 'm', '\0',
   /* "airmail.cc", true */ 'a', 'i', 'r', 'm', 'a', 'i', 'l', '.', 'c', 'c', '\0',
   /* "airnow.gov", true */ 'a', 'i', 'r', 'n', 'o', 'w', '.', 'g', 'o', 'v', '\0',
   /* "airpbx.com", true */ 'a', 'i', 'r', 'p', 'b', 'x', '.', 'c', 'o', 'm', '\0',
   /* "airplayradio.nl", true */ 'a', 'i', 'r', 'p', 'l', 'a', 'y', 'r', 'a', 'd', 'i', 'o', '.', 'n', 'l', '\0',
   /* "airpurifierproductsonline.com", true */ 'a', 'i', 'r', 'p', 'u', 'r', 'i', 'f', 'i', 'e', 'r', 'p', 'r', 'o', 'd', 'u', 'c', 't', 's', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "airsoft.ch", true */ 'a', 'i', 'r', 's', 'o', 'f', 't', '.', 'c', 'h', '\0',
   /* "airvuz.com", true */ 'a', 'i', 'r', 'v', 'u', 'z', '.', 'c', 'o', 'm', '\0',
+  /* "aisle3.space", true */ 'a', 'i', 's', 'l', 'e', '3', '.', 's', 'p', 'a', 'c', 'e', '\0',
   /* "aistockcharts.com", true */ 'a', 'i', 's', 't', 'o', 'c', 'k', 'c', 'h', 'a', 'r', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "aiticon.com", true */ 'a', 'i', 't', 'i', 'c', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "aitosoftware.com", true */ 'a', 'i', 't', 'o', 's', 'o', 'f', 't', 'w', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "aiutodomestico.ch", true */ 'a', 'i', 'u', 't', 'o', 'd', 'o', 'm', 'e', 's', 't', 'i', 'c', 'o', '.', 'c', 'h', '\0',
   /* "aivd.lol", true */ 'a', 'i', 'v', 'd', '.', 'l', 'o', 'l', '\0',
   /* "aiwdirect.com", true */ 'a', 'i', 'w', 'd', 'i', 'r', 'e', 'c', 't', '.', 'c', 'o', 'm', '\0',
   /* "aixxe.net", true */ 'a', 'i', 'x', 'x', 'e', '.', 'n', 'e', 't', '\0',
   /* "ajarope.com", true */ 'a', 'j', 'a', 'r', 'o', 'p', 'e', '.', 'c', 'o', 'm', '\0',
@@ -742,16 +741,17 @@ static const char kSTSHostTable[] = {
   /* "akdigitalegesellschaft.de", false */ 'a', 'k', 'd', 'i', 'g', 'i', 't', 'a', 'l', 'e', 'g', 'e', 's', 'e', 'l', 'l', 's', 'c', 'h', 'a', 'f', 't', '.', 'd', 'e', '\0',
   /* "akelius.de", false */ 'a', 'k', 'e', 'l', 'i', 'u', 's', '.', 'd', 'e', '\0',
   /* "akhilindurti.com", false */ 'a', 'k', 'h', 'i', 'l', 'i', 'n', 'd', 'u', 'r', 't', 'i', '.', 'c', 'o', 'm', '\0',
   /* "akhras.at", true */ 'a', 'k', 'h', 'r', 'a', 's', '.', 'a', 't', '\0',
   /* "akihito.com", true */ 'a', 'k', 'i', 'h', 'i', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "akita-boutique.com", true */ 'a', 'k', 'i', 't', 'a', '-', 'b', 'o', 'u', 't', 'i', 'q', 'u', 'e', '.', 'c', 'o', 'm', '\0',
   /* "akita-stream.com", true */ 'a', 'k', 'i', 't', 'a', '-', 's', 't', 'r', 'e', 'a', 'm', '.', 'c', 'o', 'm', '\0',
   /* "akovana.com", true */ 'a', 'k', 'o', 'v', 'a', 'n', 'a', '.', 'c', 'o', 'm', '\0',
+  /* "akoww.de", true */ 'a', 'k', 'o', 'w', 'w', '.', 'd', 'e', '\0',
   /* "akoya.fi", true */ 'a', 'k', 'o', 'y', 'a', '.', 'f', 'i', '\0',
   /* "akpwebdesign.com", true */ 'a', 'k', 'p', 'w', 'e', 'b', 'd', 'e', 's', 'i', 'g', 'n', '.', 'c', 'o', 'm', '\0',
   /* "akr.io", true */ 'a', 'k', 'r', '.', 'i', 'o', '\0',
   /* "akropolis-ravensburg.de", true */ 'a', 'k', 'r', 'o', 'p', 'o', 'l', 'i', 's', '-', 'r', 'a', 'v', 'e', 'n', 's', 'b', 'u', 'r', 'g', '.', 'd', 'e', '\0',
   /* "akselinurmio.fi", true */ 'a', 'k', 's', 'e', 'l', 'i', 'n', 'u', 'r', 'm', 'i', 'o', '.', 'f', 'i', '\0',
   /* "akstudentsfirst.org", true */ 'a', 'k', 's', 't', 'u', 'd', 'e', 'n', 't', 's', 'f', 'i', 'r', 's', 't', '.', 'o', 'r', 'g', '\0',
   /* "aktiv-naturheilmittel.at", true */ 'a', 'k', 't', 'i', 'v', '-', 'n', 'a', 't', 'u', 'r', 'h', 'e', 'i', 'l', 'm', 'i', 't', 't', 'e', 'l', '.', 'a', 't', '\0',
   /* "aktiv-naturheilmittel.ch", true */ 'a', 'k', 't', 'i', 'v', '-', 'n', 'a', 't', 'u', 'r', 'h', 'e', 'i', 'l', 'm', 'i', 't', 't', 'e', 'l', '.', 'c', 'h', '\0',
@@ -1054,16 +1054,17 @@ static const char kSTSHostTable[] = {
   /* "andreaskrasa.com", true */ 'a', 'n', 'd', 'r', 'e', 'a', 's', 'k', 'r', 'a', 's', 'a', '.', 'c', 'o', 'm', '\0',
   /* "andreasolsson.se", true */ 'a', 'n', 'd', 'r', 'e', 'a', 's', 'o', 'l', 's', 's', 'o', 'n', '.', 's', 'e', '\0',
   /* "andrehansen.de", true */ 'a', 'n', 'd', 'r', 'e', 'h', 'a', 'n', 's', 'e', 'n', '.', 'd', 'e', '\0',
   /* "andrepicard.de", true */ 'a', 'n', 'd', 'r', 'e', 'p', 'i', 'c', 'a', 'r', 'd', '.', 'd', 'e', '\0',
   /* "andrerose.ca", true */ 'a', 'n', 'd', 'r', 'e', 'r', 'o', 's', 'e', '.', 'c', 'a', '\0',
   /* "andrespaz.com", true */ 'a', 'n', 'd', 'r', 'e', 's', 'p', 'a', 'z', '.', 'c', 'o', 'm', '\0',
   /* "andreundnina.de", true */ 'a', 'n', 'd', 'r', 'e', 'u', 'n', 'd', 'n', 'i', 'n', 'a', '.', 'd', 'e', '\0',
   /* "andrewdaws.tv", true */ 'a', 'n', 'd', 'r', 'e', 'w', 'd', 'a', 'w', 's', '.', 't', 'v', '\0',
+  /* "andrewhowden.com", true */ 'a', 'n', 'd', 'r', 'e', 'w', 'h', 'o', 'w', 'd', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "andrewimeson.com", true */ 'a', 'n', 'd', 'r', 'e', 'w', 'i', 'm', 'e', 's', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "andrewin.ru", true */ 'a', 'n', 'd', 'r', 'e', 'w', 'i', 'n', '.', 'r', 'u', '\0',
   /* "andrewrgoss.com", true */ 'a', 'n', 'd', 'r', 'e', 'w', 'r', 'g', 'o', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "andrewsun.com", true */ 'a', 'n', 'd', 'r', 'e', 'w', 's', 'u', 'n', '.', 'c', 'o', 'm', '\0',
   /* "andrewtebert.com", true */ 'a', 'n', 'd', 'r', 'e', 'w', 't', 'e', 'b', 'e', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "andrewthelott.net", true */ 'a', 'n', 'd', 'r', 'e', 'w', 't', 'h', 'e', 'l', 'o', 't', 't', '.', 'n', 'e', 't', '\0',
   /* "andrewvoce.com", true */ 'a', 'n', 'd', 'r', 'e', 'w', 'v', 'o', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "andrewx.net", true */ 'a', 'n', 'd', 'r', 'e', 'w', 'x', '.', 'n', 'e', 't', '\0',
@@ -1118,17 +1119,16 @@ static const char kSTSHostTable[] = {
   /* "anita-mukorom.hu", true */ 'a', 'n', 'i', 't', 'a', '-', 'm', 'u', 'k', 'o', 'r', 'o', 'm', '.', 'h', 'u', '\0',
   /* "anitaalbersen.nl", true */ 'a', 'n', 'i', 't', 'a', 'a', 'l', 'b', 'e', 'r', 's', 'e', 'n', '.', 'n', 'l', '\0',
   /* "anitube-nocookie.ch", true */ 'a', 'n', 'i', 't', 'u', 'b', 'e', '-', 'n', 'o', 'c', 'o', 'o', 'k', 'i', 'e', '.', 'c', 'h', '\0',
   /* "anitube.ch", true */ 'a', 'n', 'i', 't', 'u', 'b', 'e', '.', 'c', 'h', '\0',
   /* "anivar.net", true */ 'a', 'n', 'i', 'v', 'a', 'r', '.', 'n', 'e', 't', '\0',
   /* "ankarakart.com.tr", true */ 'a', 'n', 'k', 'a', 'r', 'a', 'k', 'a', 'r', 't', '.', 'c', 'o', 'm', '.', 't', 'r', '\0',
   /* "ankaraprofesyonelwebtasarim.com", true */ 'a', 'n', 'k', 'a', 'r', 'a', 'p', 'r', 'o', 'f', 'e', 's', 'y', 'o', 'n', 'e', 'l', 'w', 'e', 'b', 't', 'a', 's', 'a', 'r', 'i', 'm', '.', 'c', 'o', 'm', '\0',
   /* "ankarauzmanlarnakliyat.com", true */ 'a', 'n', 'k', 'a', 'r', 'a', 'u', 'z', 'm', 'a', 'n', 'l', 'a', 'r', 'n', 'a', 'k', 'l', 'i', 'y', 'a', 't', '.', 'c', 'o', 'm', '\0',
-  /* "ankarayilmaznakliyat.com", true */ 'a', 'n', 'k', 'a', 'r', 'a', 'y', 'i', 'l', 'm', 'a', 'z', 'n', 'a', 'k', 'l', 'i', 'y', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "ankarayucelnakliyat.com", true */ 'a', 'n', 'k', 'a', 'r', 'a', 'y', 'u', 'c', 'e', 'l', 'n', 'a', 'k', 'l', 'i', 'y', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "ankitha.in", true */ 'a', 'n', 'k', 'i', 't', 'h', 'a', '.', 'i', 'n', '\0',
   /* "ankiweb.net", true */ 'a', 'n', 'k', 'i', 'w', 'e', 'b', '.', 'n', 'e', 't', '\0',
   /* "anna.info", true */ 'a', 'n', 'n', 'a', '.', 'i', 'n', 'f', 'o', '\0',
   /* "annahmeschluss.de", true */ 'a', 'n', 'n', 'a', 'h', 'm', 'e', 's', 'c', 'h', 'l', 'u', 's', 's', '.', 'd', 'e', '\0',
   /* "annarokina.com", true */ 'a', 'n', 'n', 'a', 'r', 'o', 'k', 'i', 'n', 'a', '.', 'c', 'o', 'm', '\0',
   /* "annasvapor.se", true */ 'a', 'n', 'n', 'a', 's', 'v', 'a', 'p', 'o', 'r', '.', 's', 'e', '\0',
   /* "annejan.com", true */ 'a', 'n', 'n', 'e', 'j', 'a', 'n', '.', 'c', 'o', 'm', '\0',
@@ -1236,17 +1236,16 @@ static const char kSTSHostTable[] = {
   /* "apis.google.com", true */ 'a', 'p', 'i', 's', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "apk4fun.com", true */ 'a', 'p', 'k', '4', 'f', 'u', 'n', '.', 'c', 'o', 'm', '\0',
   /* "aplikaceproandroid.cz", true */ 'a', 'p', 'l', 'i', 'k', 'a', 'c', 'e', 'p', 'r', 'o', 'a', 'n', 'd', 'r', 'o', 'i', 'd', '.', 'c', 'z', '\0',
   /* "aplpackaging.co.uk", true */ 'a', 'p', 'l', 'p', 'a', 'c', 'k', 'a', 'g', 'i', 'n', 'g', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "aplu.fr", true */ 'a', 'p', 'l', 'u', '.', 'f', 'r', '\0',
   /* "apn-einstellungen.de", true */ 'a', 'p', 'n', '-', 'e', 'i', 'n', 's', 't', 'e', 'l', 'l', 'u', 'n', 'g', 'e', 'n', '.', 'd', 'e', '\0',
   /* "apoil.org", true */ 'a', 'p', 'o', 'i', 'l', '.', 'o', 'r', 'g', '\0',
   /* "apoly.de", true */ 'a', 'p', 'o', 'l', 'y', '.', 'd', 'e', '\0',
-  /* "aponkral.net", true */ 'a', 'p', 'o', 'n', 'k', 'r', 'a', 'l', '.', 'n', 'e', 't', '\0',
   /* "aposke.com", true */ 'a', 'p', 'o', 's', 'k', 'e', '.', 'c', 'o', 'm', '\0',
   /* "aposke.net", true */ 'a', 'p', 'o', 's', 'k', 'e', '.', 'n', 'e', 't', '\0',
   /* "aposke.org", true */ 'a', 'p', 'o', 's', 'k', 'e', '.', 'o', 'r', 'g', '\0',
   /* "apothes.is", true */ 'a', 'p', 'o', 't', 'h', 'e', 's', '.', 'i', 's', '\0',
   /* "app-at.work", true */ 'a', 'p', 'p', '-', 'a', 't', '.', 'w', 'o', 'r', 'k', '\0',
   /* "app.recurly.com", true */ 'a', 'p', 'p', '.', 'r', 'e', 'c', 'u', 'r', 'l', 'y', '.', 'c', 'o', 'm', '\0',
   /* "app.simpletax.ca", true */ 'a', 'p', 'p', '.', 's', 'i', 'm', 'p', 'l', 'e', 't', 'a', 'x', '.', 'c', 'a', '\0',
   /* "app.yinxiang.com", false */ 'a', 'p', 'p', '.', 'y', 'i', 'n', 'x', 'i', 'a', 'n', 'g', '.', 'c', 'o', 'm', '\0',
@@ -1320,16 +1319,17 @@ static const char kSTSHostTable[] = {
   /* "arbitrarion.com", true */ 'a', 'r', 'b', 'i', 't', 'r', 'a', 'r', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "arbitrary.ch", true */ 'a', 'r', 'b', 'i', 't', 'r', 'a', 'r', 'y', '.', 'c', 'h', '\0',
   /* "arboworks.com", true */ 'a', 'r', 'b', 'o', 'w', 'o', 'r', 'k', 's', '.', 'c', 'o', 'm', '\0',
   /* "arcadiaeng.com", true */ 'a', 'r', 'c', 'a', 'd', 'i', 'a', 'e', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "arcaik.net", true */ 'a', 'r', 'c', 'a', 'i', 'k', '.', 'n', 'e', 't', '\0',
   /* "archii.ca", true */ 'a', 'r', 'c', 'h', 'i', 'i', '.', 'c', 'a', '\0',
   /* "archimedicx.com", true */ 'a', 'r', 'c', 'h', 'i', 'm', 'e', 'd', 'i', 'c', 'x', '.', 'c', 'o', 'm', '\0',
   /* "architectdirect.nl", true */ 'a', 'r', 'c', 'h', 'i', 't', 'e', 'c', 't', 'd', 'i', 'r', 'e', 'c', 't', '.', 'n', 'l', '\0',
+  /* "architecte-interieur.be", true */ 'a', 'r', 'c', 'h', 'i', 't', 'e', 'c', 't', 'e', '-', 'i', 'n', 't', 'e', 'r', 'i', 'e', 'u', 'r', '.', 'b', 'e', '\0',
   /* "archivesdelavieordinaire.ch", true */ 'a', 'r', 'c', 'h', 'i', 'v', 'e', 's', 'd', 'e', 'l', 'a', 'v', 'i', 'e', 'o', 'r', 'd', 'i', 'n', 'a', 'i', 'r', 'e', '.', 'c', 'h', '\0',
   /* "archlinux.de", true */ 'a', 'r', 'c', 'h', 'l', 'i', 'n', 'u', 'x', '.', 'd', 'e', '\0',
   /* "archlinux.org", true */ 'a', 'r', 'c', 'h', 'l', 'i', 'n', 'u', 'x', '.', 'o', 'r', 'g', '\0',
   /* "archoit.org", false */ 'a', 'r', 'c', 'h', 'o', 'i', 't', '.', 'o', 'r', 'g', '\0',
   /* "arckr.com", true */ 'a', 'r', 'c', 'k', 'r', '.', 'c', 'o', 'm', '\0',
   /* "arctic.gov", true */ 'a', 'r', 'c', 't', 'i', 'c', '.', 'g', 'o', 'v', '\0',
   /* "arcueil-cachan.fr", true */ 'a', 'r', 'c', 'u', 'e', 'i', 'l', '-', 'c', 'a', 'c', 'h', 'a', 'n', '.', 'f', 'r', '\0',
   /* "arcusnova.de", true */ 'a', 'r', 'c', 'u', 's', 'n', 'o', 'v', 'a', '.', 'd', 'e', '\0',
@@ -1431,16 +1431,17 @@ static const char kSTSHostTable[] = {
   /* "arw.me", true */ 'a', 'r', 'w', '.', 'm', 'e', '\0',
   /* "aryan-nation.com", true */ 'a', 'r', 'y', 'a', 'n', '-', 'n', 'a', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "aryasenna.net", true */ 'a', 'r', 'y', 'a', 's', 'e', 'n', 'n', 'a', '.', 'n', 'e', 't', '\0',
   /* "arzid.com", true */ 'a', 'r', 'z', 'i', 'd', '.', 'c', 'o', 'm', '\0',
   /* "as200753.com", true */ 'a', 's', '2', '0', '0', '7', '5', '3', '.', 'c', 'o', 'm', '\0',
   /* "as200753.net", true */ 'a', 's', '2', '0', '0', '7', '5', '3', '.', 'n', 'e', 't', '\0',
   /* "asadatec.de", true */ 'a', 's', 'a', 'd', 'a', 't', 'e', 'c', '.', 'd', 'e', '\0',
   /* "asadzulfahri.com", true */ 'a', 's', 'a', 'd', 'z', 'u', 'l', 'f', 'a', 'h', 'r', 'i', '.', 'c', 'o', 'm', '\0',
+  /* "asafilm.co", true */ 'a', 's', 'a', 'f', 'i', 'l', 'm', '.', 'c', 'o', '\0',
   /* "asafomba.com", true */ 'a', 's', 'a', 'f', 'o', 'm', 'b', 'a', '.', 'c', 'o', 'm', '\0',
   /* "asana.studio", true */ 'a', 's', 'a', 'n', 'a', '.', 's', 't', 'u', 'd', 'i', 'o', '\0',
   /* "asandu.eu", true */ 'a', 's', 'a', 'n', 'd', 'u', '.', 'e', 'u', '\0',
   /* "asato-jewelry.com", true */ 'a', 's', 'a', 't', 'o', '-', 'j', 'e', 'w', 'e', 'l', 'r', 'y', '.', 'c', 'o', 'm', '\0',
   /* "asbito.de", true */ 'a', 's', 'b', 'i', 't', 'o', '.', 'd', 'e', '\0',
   /* "ascension.run", true */ 'a', 's', 'c', 'e', 'n', 's', 'i', 'o', 'n', '.', 'r', 'u', 'n', '\0',
   /* "ascgathering.com", true */ 'a', 's', 'c', 'g', 'a', 't', 'h', 'e', 'r', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "ascii.moe", true */ 'a', 's', 'c', 'i', 'i', '.', 'm', 'o', 'e', '\0',
@@ -1711,17 +1712,16 @@ static const char kSTSHostTable[] = {
   /* "azzag.co.uk", true */ 'a', 'z', 'z', 'a', 'g', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "azzorti.com", true */ 'a', 'z', 'z', 'o', 'r', 't', 'i', '.', 'c', 'o', 'm', '\0',
   /* "b-b-law.com", true */ 'b', '-', 'b', '-', 'l', 'a', 'w', '.', 'c', 'o', 'm', '\0',
   /* "b-pi.duckdns.org", true */ 'b', '-', 'p', 'i', '.', 'd', 'u', 'c', 'k', 'd', 'n', 's', '.', 'o', 'r', 'g', '\0',
   /* "b-rickroll-e.pw", true */ 'b', '-', 'r', 'i', 'c', 'k', 'r', 'o', 'l', 'l', '-', 'e', '.', 'p', 'w', '\0',
   /* "b-root-force.de", true */ 'b', '-', 'r', 'o', 'o', 't', '-', 'f', 'o', 'r', 'c', 'e', '.', 'd', 'e', '\0',
   /* "b1c1l1.com", true */ 'b', '1', 'c', '1', 'l', '1', '.', 'c', 'o', 'm', '\0',
   /* "b2bmuzikbank.com", true */ 'b', '2', 'b', 'm', 'u', 'z', 'i', 'k', 'b', 'a', 'n', 'k', '.', 'c', 'o', 'm', '\0',
-  /* "b422edu.com", true */ 'b', '4', '2', '2', 'e', 'd', 'u', '.', 'c', 'o', 'm', '\0',
   /* "b64.club", true */ 'b', '6', '4', '.', 'c', 'l', 'u', 'b', '\0',
   /* "baalsworld.de", true */ 'b', 'a', 'a', 'l', 's', 'w', 'o', 'r', 'l', 'd', '.', 'd', 'e', '\0',
   /* "baas-becking.biology.utah.edu", true */ 'b', 'a', 'a', 's', '-', 'b', 'e', 'c', 'k', 'i', 'n', 'g', '.', 'b', 'i', 'o', 'l', 'o', 'g', 'y', '.', 'u', 't', 'a', 'h', '.', 'e', 'd', 'u', '\0',
   /* "babacasino.net", true */ 'b', 'a', 'b', 'a', 'c', 'a', 's', 'i', 'n', 'o', '.', 'n', 'e', 't', '\0',
   /* "babak.de", false */ 'b', 'a', 'b', 'a', 'k', '.', 'd', 'e', '\0',
   /* "babarkata.com", true */ 'b', 'a', 'b', 'a', 'r', 'k', 'a', 't', 'a', '.', 'c', 'o', 'm', '\0',
   /* "babelfisch.eu", true */ 'b', 'a', 'b', 'e', 'l', 'f', 'i', 's', 'c', 'h', '.', 'e', 'u', '\0',
   /* "babettelandmesser.de", true */ 'b', 'a', 'b', 'e', 't', 't', 'e', 'l', 'a', 'n', 'd', 'm', 'e', 's', 's', 'e', 'r', '.', 'd', 'e', '\0',
@@ -1761,17 +1761,16 @@ static const char kSTSHostTable[] = {
   /* "baer.one", false */ 'b', 'a', 'e', 'r', '.', 'o', 'n', 'e', '\0',
   /* "baffinlee.com", true */ 'b', 'a', 'f', 'f', 'i', 'n', 'l', 'e', 'e', '.', 'c', 'o', 'm', '\0',
   /* "bagelsbakery.com", false */ 'b', 'a', 'g', 'e', 'l', 's', 'b', 'a', 'k', 'e', 'r', 'y', '.', 'c', 'o', 'm', '\0',
   /* "baggy.me.uk", true */ 'b', 'a', 'g', 'g', 'y', '.', 'm', 'e', '.', 'u', 'k', '\0',
   /* "bagheera.me.uk", true */ 'b', 'a', 'g', 'h', 'e', 'e', 'r', 'a', '.', 'm', 'e', '.', 'u', 'k', '\0',
   /* "bah.im", false */ 'b', 'a', 'h', '.', 'i', 'm', '\0',
   /* "baifubao.com", true */ 'b', 'a', 'i', 'f', 'u', 'b', 'a', 'o', '.', 'c', 'o', 'm', '\0',
   /* "baiker.info", true */ 'b', 'a', 'i', 'k', 'e', 'r', '.', 'i', 'n', 'f', 'o', '\0',
-  /* "bailbondsaffordable.com", true */ 'b', 'a', 'i', 'l', 'b', 'o', 'n', 'd', 's', 'a', 'f', 'f', 'o', 'r', 'd', 'a', 'b', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "baileebee.com", true */ 'b', 'a', 'i', 'l', 'e', 'e', 'b', 'e', 'e', '.', 'c', 'o', 'm', '\0',
   /* "baitulongbaycruises.com", true */ 'b', 'a', 'i', 't', 'u', 'l', 'o', 'n', 'g', 'b', 'a', 'y', 'c', 'r', 'u', 'i', 's', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "baiyangliu.com", true */ 'b', 'a', 'i', 'y', 'a', 'n', 'g', 'l', 'i', 'u', '.', 'c', 'o', 'm', '\0',
   /* "bajic.ch", true */ 'b', 'a', 'j', 'i', 'c', '.', 'c', 'h', '\0',
   /* "baka.network", true */ 'b', 'a', 'k', 'a', '.', 'n', 'e', 't', 'w', 'o', 'r', 'k', '\0',
   /* "bakabt.info", true */ 'b', 'a', 'k', 'a', 'b', 't', '.', 'i', 'n', 'f', 'o', '\0',
   /* "bakaproxy.moe", true */ 'b', 'a', 'k', 'a', 'p', 'r', 'o', 'x', 'y', '.', 'm', 'o', 'e', '\0',
   /* "bakaweb.fr", true */ 'b', 'a', 'k', 'a', 'w', 'e', 'b', '.', 'f', 'r', '\0',
@@ -1899,16 +1898,17 @@ static const char kSTSHostTable[] = {
   /* "baywatch.io", true */ 'b', 'a', 'y', 'w', 'a', 't', 'c', 'h', '.', 'i', 'o', '\0',
   /* "bazdell.com", false */ 'b', 'a', 'z', 'd', 'e', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "bazisszoftver.hu", true */ 'b', 'a', 'z', 'i', 's', 's', 'z', 'o', 'f', 't', 'v', 'e', 'r', '.', 'h', 'u', '\0',
   /* "bazos.at", true */ 'b', 'a', 'z', 'o', 's', '.', 'a', 't', '\0',
   /* "bazos.cz", true */ 'b', 'a', 'z', 'o', 's', '.', 'c', 'z', '\0',
   /* "bazos.sk", true */ 'b', 'a', 'z', 'o', 's', '.', 's', 'k', '\0',
   /* "bazziergraphik.com", true */ 'b', 'a', 'z', 'z', 'i', 'e', 'r', 'g', 'r', 'a', 'p', 'h', 'i', 'k', '.', 'c', 'o', 'm', '\0',
   /* "bb-shiokaze.jp", true */ 'b', 'b', '-', 's', 'h', 'i', 'o', 'k', 'a', 'z', 'e', '.', 'j', 'p', '\0',
+  /* "bbb1991.me", true */ 'b', 'b', 'b', '1', '9', '9', '1', '.', 'm', 'e', '\0',
   /* "bbdos.ru", true */ 'b', 'b', 'd', 'o', 's', '.', 'r', 'u', '\0',
   /* "bbgeschenke.ch", true */ 'b', 'b', 'g', 'e', 's', 'c', 'h', 'e', 'n', 'k', 'e', '.', 'c', 'h', '\0',
   /* "bbimarketing.com", true */ 'b', 'b', 'i', 'm', 'a', 'r', 'k', 'e', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "bbkworldwide.jp", true */ 'b', 'b', 'k', 'w', 'o', 'r', 'l', 'd', 'w', 'i', 'd', 'e', '.', 'j', 'p', '\0',
   /* "bblove.me", true */ 'b', 'b', 'l', 'o', 'v', 'e', '.', 'm', 'e', '\0',
   /* "bbnx.net", true */ 'b', 'b', 'n', 'x', '.', 'n', 'e', 't', '\0',
   /* "bbuio.com", true */ 'b', 'b', 'u', 'i', 'o', '.', 'c', 'o', 'm', '\0',
   /* "bbw-wrestling.com", true */ 'b', 'b', 'w', '-', 'w', 'r', 'e', 's', 't', 'l', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
@@ -1930,20 +1930,20 @@ static const char kSTSHostTable[] = {
   /* "bcswampcabins.com", true */ 'b', 'c', 's', 'w', 'a', 'm', 'p', 'c', 'a', 'b', 'i', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "bcvps.com", true */ 'b', 'c', 'v', 'p', 's', '.', 'c', 'o', 'm', '\0',
   /* "bdd.fi", true */ 'b', 'd', 'd', '.', 'f', 'i', '\0',
   /* "bdsmxxxpics.com", true */ 'b', 'd', 's', 'm', 'x', 'x', 'x', 'p', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "bdvg.org", true */ 'b', 'd', 'v', 'g', '.', 'o', 'r', 'g', '\0',
   /* "be-ka-tec.de", true */ 'b', 'e', '-', 'k', 'a', '-', 't', 'e', 'c', '.', 'd', 'e', '\0',
   /* "be-real.life", true */ 'b', 'e', '-', 'r', 'e', 'a', 'l', '.', 'l', 'i', 'f', 'e', '\0',
   /* "be-webdesign.com", true */ 'b', 'e', '-', 'w', 'e', 'b', 'd', 'e', 's', 'i', 'g', 'n', '.', 'c', 'o', 'm', '\0',
+  /* "be2cloud.de", true */ 'b', 'e', '2', 'c', 'l', 'o', 'u', 'd', '.', 'd', 'e', '\0',
   /* "beadare.com", true */ 'b', 'e', 'a', 'd', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "beagreenbean.co.uk", true */ 'b', 'e', 'a', 'g', 'r', 'e', 'e', 'n', 'b', 'e', 'a', 'n', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "beamitapp.com", true */ 'b', 'e', 'a', 'm', 'i', 't', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
-  /* "beanjuice.me", true */ 'b', 'e', 'a', 'n', 'j', 'u', 'i', 'c', 'e', '.', 'm', 'e', '\0',
   /* "beans-one.com", false */ 'b', 'e', 'a', 'n', 's', '-', 'o', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "beanworks.ca", true */ 'b', 'e', 'a', 'n', 'w', 'o', 'r', 'k', 's', '.', 'c', 'a', '\0',
   /* "bearden.io", true */ 'b', 'e', 'a', 'r', 'd', 'e', 'n', '.', 'i', 'o', '\0',
   /* "beasel.biz", true */ 'b', 'e', 'a', 's', 'e', 'l', '.', 'b', 'i', 'z', '\0',
   /* "beastowner.li", true */ 'b', 'e', 'a', 's', 't', 'o', 'w', 'n', 'e', 'r', '.', 'l', 'i', '\0',
   /* "beatnikbreaks.com", true */ 'b', 'e', 'a', 't', 'n', 'i', 'k', 'b', 'r', 'e', 'a', 'k', 's', '.', 'c', 'o', 'm', '\0',
   /* "beauty-italy.ru", true */ 'b', 'e', 'a', 'u', 't', 'y', '-', 'i', 't', 'a', 'l', 'y', '.', 'r', 'u', '\0',
   /* "beauty24.de", true */ 'b', 'e', 'a', 'u', 't', 'y', '2', '4', '.', 'd', 'e', '\0',
@@ -2053,17 +2053,16 @@ static const char kSTSHostTable[] = {
   /* "bennink.me", true */ 'b', 'e', 'n', 'n', 'i', 'n', 'k', '.', 'm', 'e', '\0',
   /* "benno.frl", true */ 'b', 'e', 'n', 'n', 'o', '.', 'f', 'r', 'l', '\0',
   /* "bennythink.com", true */ 'b', 'e', 'n', 'n', 'y', 't', 'h', 'i', 'n', 'k', '.', 'c', 'o', 'm', '\0',
   /* "benschnarr.com", true */ 'b', 'e', 'n', 's', 'c', 'h', 'n', 'a', 'r', 'r', '.', 'c', 'o', 'm', '\0',
   /* "benscobie.com", true */ 'b', 'e', 'n', 's', 'c', 'o', 'b', 'i', 'e', '.', 'c', 'o', 'm', '\0',
   /* "bentertain.de", true */ 'b', 'e', 'n', 't', 'e', 'r', 't', 'a', 'i', 'n', '.', 'd', 'e', '\0',
   /* "bentley.link", true */ 'b', 'e', 'n', 't', 'l', 'e', 'y', '.', 'l', 'i', 'n', 'k', '\0',
   /* "bentrask.com", true */ 'b', 'e', 'n', 't', 'r', 'a', 's', 'k', '.', 'c', 'o', 'm', '\0',
-  /* "benwattie.com", true */ 'b', 'e', 'n', 'w', 'a', 't', 't', 'i', 'e', '.', 'c', 'o', 'm', '\0',
   /* "benzou-space.com", true */ 'b', 'e', 'n', 'z', 'o', 'u', '-', 's', 'p', 'a', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "beoordelingen.be", true */ 'b', 'e', 'o', 'o', 'r', 'd', 'e', 'l', 'i', 'n', 'g', 'e', 'n', '.', 'b', 'e', '\0',
   /* "bep362.vn", true */ 'b', 'e', 'p', '3', '6', '2', '.', 'v', 'n', '\0',
   /* "beranovi.com", true */ 'b', 'e', 'r', 'a', 'n', 'o', 'v', 'i', '.', 'c', 'o', 'm', '\0',
   /* "berasavocate.com", true */ 'b', 'e', 'r', 'a', 's', 'a', 'v', 'o', 'c', 'a', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "berdu.id", true */ 'b', 'e', 'r', 'd', 'u', '.', 'i', 'd', '\0',
   /* "bergenhave.nl", true */ 'b', 'e', 'r', 'g', 'e', 'n', 'h', 'a', 'v', 'e', '.', 'n', 'l', '\0',
   /* "bergland-seefeld.at", true */ 'b', 'e', 'r', 'g', 'l', 'a', 'n', 'd', '-', 's', 'e', 'e', 'f', 'e', 'l', 'd', '.', 'a', 't', '\0',
@@ -2184,16 +2183,17 @@ static const char kSTSHostTable[] = {
   /* "bicha.net", true */ 'b', 'i', 'c', 'h', 'a', '.', 'n', 'e', 't', '\0',
   /* "bichines.es", true */ 'b', 'i', 'c', 'h', 'i', 'n', 'e', 's', '.', 'e', 's', '\0',
   /* "bichonmaltes.com.br", true */ 'b', 'i', 'c', 'h', 'o', 'n', 'm', 'a', 'l', 't', 'e', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "bicranial.io", true */ 'b', 'i', 'c', 'r', 'a', 'n', 'i', 'a', 'l', '.', 'i', 'o', '\0',
   /* "bicycle-events.com", true */ 'b', 'i', 'c', 'y', 'c', 'l', 'e', '-', 'e', 'v', 'e', 'n', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "biddl.com", true */ 'b', 'i', 'd', 'd', 'l', '.', 'c', 'o', 'm', '\0',
   /* "bie.edu", true */ 'b', 'i', 'e', '.', 'e', 'd', 'u', '\0',
   /* "biegner-technik.de", true */ 'b', 'i', 'e', 'g', 'n', 'e', 'r', '-', 't', 'e', 'c', 'h', 'n', 'i', 'k', '.', 'd', 'e', '\0',
+  /* "bielsa.me", true */ 'b', 'i', 'e', 'l', 's', 'a', '.', 'm', 'e', '\0',
   /* "bien-etre-sante.info", true */ 'b', 'i', 'e', 'n', '-', 'e', 't', 'r', 'e', '-', 's', 'a', 'n', 't', 'e', '.', 'i', 'n', 'f', 'o', '\0',
   /* "bienici.com", true */ 'b', 'i', 'e', 'n', 'i', 'c', 'i', '.', 'c', 'o', 'm', '\0',
   /* "bienoubien.org", true */ 'b', 'i', 'e', 'n', 'o', 'u', 'b', 'i', 'e', 'n', '.', 'o', 'r', 'g', '\0',
   /* "biensenvue.com", true */ 'b', 'i', 'e', 'n', 's', 'e', 'n', 'v', 'u', 'e', '.', 'c', 'o', 'm', '\0',
   /* "bierbaumer.net", true */ 'b', 'i', 'e', 'r', 'b', 'a', 'u', 'm', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "biergaizi.info", true */ 'b', 'i', 'e', 'r', 'g', 'a', 'i', 'z', 'i', '.', 'i', 'n', 'f', 'o', '\0',
   /* "bierochs.org", true */ 'b', 'i', 'e', 'r', 'o', 'c', 'h', 's', '.', 'o', 'r', 'g', '\0',
   /* "bieser.ch", true */ 'b', 'i', 'e', 's', 'e', 'r', '.', 'c', 'h', '\0',
@@ -2246,17 +2246,16 @@ static const char kSTSHostTable[] = {
   /* "binsp.net", true */ 'b', 'i', 'n', 's', 'p', '.', 'n', 'e', 't', '\0',
   /* "biocrafting.net", true */ 'b', 'i', 'o', 'c', 'r', 'a', 'f', 't', 'i', 'n', 'g', '.', 'n', 'e', 't', '\0',
   /* "biodieseldata.com", true */ 'b', 'i', 'o', 'd', 'i', 'e', 's', 'e', 'l', 'd', 'a', 't', 'a', '.', 'c', 'o', 'm', '\0',
   /* "bioemsan.cz", true */ 'b', 'i', 'o', 'e', 'm', 's', 'a', 'n', '.', 'c', 'z', '\0',
   /* "biogeniq.ca", true */ 'b', 'i', 'o', 'g', 'e', 'n', 'i', 'q', '.', 'c', 'a', '\0',
   /* "biohappiness.com", true */ 'b', 'i', 'o', 'h', 'a', 'p', 'p', 'i', 'n', 'e', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "biointelligence-explosion.com", true */ 'b', 'i', 'o', 'i', 'n', 't', 'e', 'l', 'l', 'i', 'g', 'e', 'n', 'c', 'e', '-', 'e', 'x', 'p', 'l', 'o', 's', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "biolindo.com", false */ 'b', 'i', 'o', 'l', 'i', 'n', 'd', 'o', '.', 'c', 'o', 'm', '\0',
-  /* "biomax-mep.com.br", true */ 'b', 'i', 'o', 'm', 'a', 'x', '-', 'm', 'e', 'p', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "biometrics.es", true */ 'b', 'i', 'o', 'm', 'e', 't', 'r', 'i', 'c', 's', '.', 'e', 's', '\0',
   /* "biopreferred.gov", true */ 'b', 'i', 'o', 'p', 'r', 'e', 'f', 'e', 'r', 'r', 'e', 'd', '.', 'g', 'o', 'v', '\0',
   /* "biopsychiatry.com", true */ 'b', 'i', 'o', 'p', 's', 'y', 'c', 'h', 'i', 'a', 't', 'r', 'y', '.', 'c', 'o', 'm', '\0',
   /* "biosafe.ch", true */ 'b', 'i', 'o', 's', 'a', 'f', 'e', '.', 'c', 'h', '\0',
   /* "biosbits.org", true */ 'b', 'i', 'o', 's', 'b', 'i', 't', 's', '.', 'o', 'r', 'g', '\0',
   /* "bioshine.com.sg", true */ 'b', 'i', 'o', 's', 'h', 'i', 'n', 'e', '.', 'c', 'o', 'm', '.', 's', 'g', '\0',
   /* "bioshome.de", true */ 'b', 'i', 'o', 's', 'h', 'o', 'm', 'e', '.', 'd', 'e', '\0',
   /* "biosignalanalytics.com", true */ 'b', 'i', 'o', 's', 'i', 'g', 'n', 'a', 'l', 'a', 'n', 'a', 'l', 'y', 't', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
@@ -2327,17 +2326,16 @@ static const char kSTSHostTable[] = {
   /* "bitmex.com", true */ 'b', 'i', 't', 'm', 'e', 'x', '.', 'c', 'o', 'm', '\0',
   /* "bitminter.com", true */ 'b', 'i', 't', 'm', 'i', 'n', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "bitmoe.com", true */ 'b', 'i', 't', 'm', 'o', 'e', '.', 'c', 'o', 'm', '\0',
   /* "bitmon.net", true */ 'b', 'i', 't', 'm', 'o', 'n', '.', 'n', 'e', 't', '\0',
   /* "bitok.com", true */ 'b', 'i', 't', 'o', 'k', '.', 'c', 'o', 'm', '\0',
   /* "bitplay.space", true */ 'b', 'i', 't', 'p', 'l', 'a', 'y', '.', 's', 'p', 'a', 'c', 'e', '\0',
   /* "bitpod.de", true */ 'b', 'i', 't', 'p', 'o', 'd', '.', 'd', 'e', '\0',
   /* "bitpumpe.net", true */ 'b', 'i', 't', 'p', 'u', 'm', 'p', 'e', '.', 'n', 'e', 't', '\0',
-  /* "bitref.com", true */ 'b', 'i', 't', 'r', 'e', 'f', '.', 'c', 'o', 'm', '\0',
   /* "bitrush.nl", true */ 'b', 'i', 't', 'r', 'u', 's', 'h', '.', 'n', 'l', '\0',
   /* "bitsafe.com.my", true */ 'b', 'i', 't', 's', 'a', 'f', 'e', '.', 'c', 'o', 'm', '.', 'm', 'y', '\0',
   /* "bitsensor.io", true */ 'b', 'i', 't', 's', 'e', 'n', 's', 'o', 'r', '.', 'i', 'o', '\0',
   /* "bitshaker.net", true */ 'b', 'i', 't', 's', 'h', 'a', 'k', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "bitskins.co", true */ 'b', 'i', 't', 's', 'k', 'i', 'n', 's', '.', 'c', 'o', '\0',
   /* "bitskrieg.net", true */ 'b', 'i', 't', 's', 'k', 'r', 'i', 'e', 'g', '.', 'n', 'e', 't', '\0',
   /* "bitstorm.nl", true */ 'b', 'i', 't', 's', 't', 'o', 'r', 'm', '.', 'n', 'l', '\0',
   /* "bitstorm.org", true */ 'b', 'i', 't', 's', 't', 'o', 'r', 'm', '.', 'o', 'r', 'g', '\0',
@@ -2538,17 +2536,16 @@ static const char kSTSHostTable[] = {
   /* "bollywood.uno", true */ 'b', 'o', 'l', 'l', 'y', 'w', 'o', 'o', 'd', '.', 'u', 'n', 'o', '\0',
   /* "bolt.cm", false */ 'b', 'o', 'l', 't', '.', 'c', 'm', '\0',
   /* "bolwerk.com.br", true */ 'b', 'o', 'l', 'w', 'e', 'r', 'k', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "bombsquad.studio", true */ 'b', 'o', 'm', 'b', 's', 'q', 'u', 'a', 'd', '.', 's', 't', 'u', 'd', 'i', 'o', '\0',
   /* "bondagefetishstore.com", true */ 'b', 'o', 'n', 'd', 'a', 'g', 'e', 'f', 'e', 't', 'i', 's', 'h', 's', 't', 'o', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "bondoer.fr", true */ 'b', 'o', 'n', 'd', 'o', 'e', 'r', '.', 'f', 'r', '\0',
   /* "bondpro.gov", true */ 'b', 'o', 'n', 'd', 'p', 'r', 'o', '.', 'g', 'o', 'v', '\0',
   /* "bondskampeerder.nl", true */ 'b', 'o', 'n', 'd', 's', 'k', 'a', 'm', 'p', 'e', 'e', 'r', 'd', 'e', 'r', '.', 'n', 'l', '\0',
-  /* "boneko.de", true */ 'b', 'o', 'n', 'e', 'k', 'o', '.', 'd', 'e', '\0',
   /* "bonifacius.be", true */ 'b', 'o', 'n', 'i', 'f', 'a', 'c', 'i', 'u', 's', '.', 'b', 'e', '\0',
   /* "bonigo.de", false */ 'b', 'o', 'n', 'i', 'g', 'o', '.', 'd', 'e', '\0',
   /* "bonnebouffe.fr", true */ 'b', 'o', 'n', 'n', 'e', 'b', 'o', 'u', 'f', 'f', 'e', '.', 'f', 'r', '\0',
   /* "bonnsustainabilityportal.de", true */ 'b', 'o', 'n', 'n', 's', 'u', 's', 't', 'a', 'i', 'n', 'a', 'b', 'i', 'l', 'i', 't', 'y', 'p', 'o', 'r', 't', 'a', 'l', '.', 'd', 'e', '\0',
   /* "bonnyprints.at", true */ 'b', 'o', 'n', 'n', 'y', 'p', 'r', 'i', 'n', 't', 's', '.', 'a', 't', '\0',
   /* "bonnyprints.ch", true */ 'b', 'o', 'n', 'n', 'y', 'p', 'r', 'i', 'n', 't', 's', '.', 'c', 'h', '\0',
   /* "bonnyprints.es", true */ 'b', 'o', 'n', 'n', 'y', 'p', 'r', 'i', 'n', 't', 's', '.', 'e', 's', '\0',
   /* "bonnyprints.fr", true */ 'b', 'o', 'n', 'n', 'y', 'p', 'r', 'i', 'n', 't', 's', '.', 'f', 'r', '\0',
@@ -2916,17 +2913,16 @@ static const char kSTSHostTable[] = {
   /* "bx-n.de", true */ 'b', 'x', '-', 'n', '.', 'd', 'e', '\0',
   /* "bxdev.me", true */ 'b', 'x', 'd', 'e', 'v', '.', 'm', 'e', '\0',
   /* "bxp40.at", true */ 'b', 'x', 'p', '4', '0', '.', 'a', 't', '\0',
   /* "by77.com", true */ 'b', 'y', '7', '7', '.', 'c', 'o', 'm', '\0',
   /* "by777.com", true */ 'b', 'y', '7', '7', '7', '.', 'c', 'o', 'm', '\0',
   /* "bygningsregistrering.dk", true */ 'b', 'y', 'g', 'n', 'i', 'n', 'g', 's', 'r', 'e', 'g', 'i', 's', 't', 'r', 'e', 'r', 'i', 'n', 'g', '.', 'd', 'k', '\0',
   /* "bymark.co", true */ 'b', 'y', 'm', 'a', 'r', 'k', '.', 'c', 'o', '\0',
   /* "bymike.co", true */ 'b', 'y', 'm', 'i', 'k', 'e', '.', 'c', 'o', '\0',
-  /* "bynet.cz", true */ 'b', 'y', 'n', 'e', 't', '.', 'c', 'z', '\0',
   /* "bynumlaw.net", true */ 'b', 'y', 'n', 'u', 'm', 'l', 'a', 'w', '.', 'n', 'e', 't', '\0',
   /* "bypass.kr", true */ 'b', 'y', 'p', 'a', 's', 's', '.', 'k', 'r', '\0',
   /* "byrko.cz", true */ 'b', 'y', 'r', 'k', 'o', '.', 'c', 'z', '\0',
   /* "byrko.sk", true */ 'b', 'y', 'r', 'k', 'o', '.', 's', 'k', '\0',
   /* "byronr.com", true */ 'b', 'y', 'r', 'o', 'n', 'r', '.', 'c', 'o', 'm', '\0',
   /* "byronwade.com", true */ 'b', 'y', 'r', 'o', 'n', 'w', 'a', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "byrtz.de", true */ 'b', 'y', 'r', 't', 'z', '.', 'd', 'e', '\0',
   /* "byte-time.com", true */ 'b', 'y', 't', 'e', '-', 't', 'i', 'm', 'e', '.', 'c', 'o', 'm', '\0',
@@ -3117,17 +3113,16 @@ static const char kSTSHostTable[] = {
   /* "carauctionscarolina.com", true */ 'c', 'a', 'r', 'a', 'u', 'c', 't', 'i', 'o', 'n', 's', 'c', 'a', 'r', 'o', 'l', 'i', 'n', 'a', '.', 'c', 'o', 'm', '\0',
   /* "carauctionsgeorgia.com", true */ 'c', 'a', 'r', 'a', 'u', 'c', 't', 'i', 'o', 'n', 's', 'g', 'e', 'o', 'r', 'g', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "carauctionsillinois.com", true */ 'c', 'a', 'r', 'a', 'u', 'c', 't', 'i', 'o', 'n', 's', 'i', 'l', 'l', 'i', 'n', 'o', 'i', 's', '.', 'c', 'o', 'm', '\0',
   /* "carbon-designz.com", true */ 'c', 'a', 'r', 'b', 'o', 'n', '-', 'd', 'e', 's', 'i', 'g', 'n', 'z', '.', 'c', 'o', 'm', '\0',
   /* "carbon12.org", true */ 'c', 'a', 'r', 'b', 'o', 'n', '1', '2', '.', 'o', 'r', 'g', '\0',
   /* "carbon12.software", true */ 'c', 'a', 'r', 'b', 'o', 'n', '1', '2', '.', 's', 'o', 'f', 't', 'w', 'a', 'r', 'e', '\0',
   /* "carboneselectricosnettosl.info", true */ 'c', 'a', 'r', 'b', 'o', 'n', 'e', 's', 'e', 'l', 'e', 'c', 't', 'r', 'i', 'c', 'o', 's', 'n', 'e', 't', 't', 'o', 's', 'l', '.', 'i', 'n', 'f', 'o', '\0',
   /* "carbonmade.com", false */ 'c', 'a', 'r', 'b', 'o', 'n', 'm', 'a', 'd', 'e', '.', 'c', 'o', 'm', '\0',
-  /* "carck.co.uk", true */ 'c', 'a', 'r', 'c', 'k', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "carddreams.be", true */ 'c', 'a', 'r', 'd', 'd', 'r', 'e', 'a', 'm', 's', '.', 'b', 'e', '\0',
   /* "carddreams.de", true */ 'c', 'a', 'r', 'd', 'd', 'r', 'e', 'a', 'm', 's', '.', 'd', 'e', '\0',
   /* "carddreams.es", true */ 'c', 'a', 'r', 'd', 'd', 'r', 'e', 'a', 'm', 's', '.', 'e', 's', '\0',
   /* "carddreams.nl", true */ 'c', 'a', 'r', 'd', 'd', 'r', 'e', 'a', 'm', 's', '.', 'n', 'l', '\0',
   /* "cardloan-manual.net", true */ 'c', 'a', 'r', 'd', 'l', 'o', 'a', 'n', '-', 'm', 'a', 'n', 'u', 'a', 'l', '.', 'n', 'e', 't', '\0',
   /* "cardranking.jp", true */ 'c', 'a', 'r', 'd', 'r', 'a', 'n', 'k', 'i', 'n', 'g', '.', 'j', 'p', '\0',
   /* "cardrecovery.fr", true */ 'c', 'a', 'r', 'd', 'r', 'e', 'c', 'o', 'v', 'e', 'r', 'y', '.', 'f', 'r', '\0',
   /* "cardse.net", true */ 'c', 'a', 'r', 'd', 's', 'e', '.', 'n', 'e', 't', '\0',
@@ -3755,17 +3750,16 @@ static const char kSTSHostTable[] = {
   /* "cloudspace-analytics.com", true */ 'c', 'l', 'o', 'u', 'd', 's', 'p', 'a', 'c', 'e', '-', 'a', 'n', 'a', 'l', 'y', 't', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "cloudteam.de", true */ 'c', 'l', 'o', 'u', 'd', 't', 'e', 'a', 'm', '.', 'd', 'e', '\0',
   /* "cloudup.com", true */ 'c', 'l', 'o', 'u', 'd', 'u', 'p', '.', 'c', 'o', 'm', '\0',
   /* "cloudwarez.xyz", true */ 'c', 'l', 'o', 'u', 'd', 'w', 'a', 'r', 'e', 'z', '.', 'x', 'y', 'z', '\0',
   /* "clounix.online", true */ 'c', 'l', 'o', 'u', 'n', 'i', 'x', '.', 'o', 'n', 'l', 'i', 'n', 'e', '\0',
   /* "clouz.de", true */ 'c', 'l', 'o', 'u', 'z', '.', 'd', 'e', '\0',
   /* "clovissantos.com", true */ 'c', 'l', 'o', 'v', 'i', 's', 's', 'a', 'n', 't', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "clownish.co.il", true */ 'c', 'l', 'o', 'w', 'n', 'i', 's', 'h', '.', 'c', 'o', '.', 'i', 'l', '\0',
-  /* "cloxy.com", true */ 'c', 'l', 'o', 'x', 'y', '.', 'c', 'o', 'm', '\0',
   /* "clr3.com", true */ 'c', 'l', 'r', '3', '.', 'c', 'o', 'm', '\0',
   /* "clsimage.com", true */ 'c', 'l', 's', 'i', 'm', 'a', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "clsimplex.com", true */ 'c', 'l', 's', 'i', 'm', 'p', 'l', 'e', 'x', '.', 'c', 'o', 'm', '\0',
   /* "clu-in.org", true */ 'c', 'l', 'u', '-', 'i', 'n', '.', 'o', 'r', 'g', '\0',
   /* "club-is.ru", true */ 'c', 'l', 'u', 'b', '-', 'i', 's', '.', 'r', 'u', '\0',
   /* "clubdeslecteurs.net", true */ 'c', 'l', 'u', 'b', 'd', 'e', 's', 'l', 'e', 'c', 't', 'e', 'u', 'r', 's', '.', 'n', 'e', 't', '\0',
   /* "clubempleos.com", true */ 'c', 'l', 'u', 'b', 'e', 'm', 'p', 'l', 'e', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "clubeohara.com", true */ 'c', 'l', 'u', 'b', 'e', 'o', 'h', 'a', 'r', 'a', '.', 'c', 'o', 'm', '\0',
@@ -3815,16 +3809,17 @@ static const char kSTSHostTable[] = {
   /* "cocinoyo.com", true */ 'c', 'o', 'c', 'i', 'n', 'o', 'y', 'o', '.', 'c', 'o', 'm', '\0',
   /* "cock.li", true */ 'c', 'o', 'c', 'k', '.', 'l', 'i', '\0',
   /* "cockedey.in", true */ 'c', 'o', 'c', 'k', 'e', 'd', 'e', 'y', '.', 'i', 'n', '\0',
   /* "cocker.cc", false */ 'c', 'o', 'c', 'k', 'e', 'r', '.', 'c', 'c', '\0',
   /* "cockerspanielamericano.com.br", true */ 'c', 'o', 'c', 'k', 'e', 'r', 's', 'p', 'a', 'n', 'i', 'e', 'l', 'a', 'm', 'e', 'r', 'i', 'c', 'a', 'n', 'o', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "cockerspanielingles.com.br", true */ 'c', 'o', 'c', 'k', 'e', 'r', 's', 'p', 'a', 'n', 'i', 'e', 'l', 'i', 'n', 'g', 'l', 'e', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "cocoaheads.at", false */ 'c', 'o', 'c', 'o', 'a', 'h', 'e', 'a', 'd', 's', '.', 'a', 't', '\0',
   /* "cocoamexico.com", true */ 'c', 'o', 'c', 'o', 'a', 'm', 'e', 'x', 'i', 'c', 'o', '.', 'c', 'o', 'm', '\0',
+  /* "cocodemy.com", true */ 'c', 'o', 'c', 'o', 'd', 'e', 'm', 'y', '.', 'c', 'o', 'm', '\0',
   /* "coconutoil24.com", true */ 'c', 'o', 'c', 'o', 'n', 'u', 't', 'o', 'i', 'l', '2', '4', '.', 'c', 'o', 'm', '\0',
   /* "code-golf.io", true */ 'c', 'o', 'd', 'e', '-', 'g', 'o', 'l', 'f', '.', 'i', 'o', '\0',
   /* "code-poets.co.uk", true */ 'c', 'o', 'd', 'e', '-', 'p', 'o', 'e', 't', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "code-well.com", true */ 'c', 'o', 'd', 'e', '-', 'w', 'e', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "code.facebook.com", false */ 'c', 'o', 'd', 'e', '.', 'f', 'a', 'c', 'e', 'b', 'o', 'o', 'k', '.', 'c', 'o', 'm', '\0',
   /* "code.google.com", true */ 'c', 'o', 'd', 'e', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "code.taxi", true */ 'c', 'o', 'd', 'e', '.', 't', 'a', 'x', 'i', '\0',
   /* "code67.com", true */ 'c', 'o', 'd', 'e', '6', '7', '.', 'c', 'o', 'm', '\0',
@@ -4090,24 +4085,26 @@ static const char kSTSHostTable[] = {
   /* "coredump.gr", true */ 'c', 'o', 'r', 'e', 'd', 'u', 'm', 'p', '.', 'g', 'r', '\0',
   /* "coreinfrastructure.org", true */ 'c', 'o', 'r', 'e', 'i', 'n', 'f', 'r', 'a', 's', 't', 'r', 'u', 'c', 't', 'u', 'r', 'e', '.', 'o', 'r', 'g', '\0',
   /* "coreless-stretchfilm.com", true */ 'c', 'o', 'r', 'e', 'l', 'e', 's', 's', '-', 's', 't', 'r', 'e', 't', 'c', 'h', 'f', 'i', 'l', 'm', '.', 'c', 'o', 'm', '\0',
   /* "corepartners.com.ua", true */ 'c', 'o', 'r', 'e', 'p', 'a', 'r', 't', 'n', 'e', 'r', 's', '.', 'c', 'o', 'm', '.', 'u', 'a', '\0',
   /* "coresolutions.ca", true */ 'c', 'o', 'r', 'e', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'c', 'a', '\0',
   /* "coreum.ca", true */ 'c', 'o', 'r', 'e', 'u', 'm', '.', 'c', 'a', '\0',
   /* "corex.io", true */ 'c', 'o', 'r', 'e', 'x', '.', 'i', 'o', '\0',
   /* "coreyjmahler.com", true */ 'c', 'o', 'r', 'e', 'y', 'j', 'm', 'a', 'h', 'l', 'e', 'r', '.', 'c', 'o', 'm', '\0',
+  /* "corgi.party", true */ 'c', 'o', 'r', 'g', 'i', '.', 'p', 'a', 'r', 't', 'y', '\0',
   /* "coribi.com", true */ 'c', 'o', 'r', 'i', 'b', 'i', '.', 'c', 'o', 'm', '\0',
   /* "corinnanese.de", true */ 'c', 'o', 'r', 'i', 'n', 'n', 'a', 'n', 'e', 's', 'e', '.', 'd', 'e', '\0',
   /* "corisu.co", true */ 'c', 'o', 'r', 'i', 's', 'u', '.', 'c', 'o', '\0',
   /* "cornercircle.co.uk", true */ 'c', 'o', 'r', 'n', 'e', 'r', 'c', 'i', 'r', 'c', 'l', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "corniche.com", true */ 'c', 'o', 'r', 'n', 'i', 'c', 'h', 'e', '.', 'c', 'o', 'm', '\0',
   /* "cornishcamels.com", true */ 'c', 'o', 'r', 'n', 'i', 's', 'h', 'c', 'a', 'm', 'e', 'l', 's', '.', 'c', 'o', 'm', '\0',
   /* "cornodo.com", true */ 'c', 'o', 'r', 'n', 'o', 'd', 'o', '.', 'c', 'o', 'm', '\0',
   /* "corona-academy.com", true */ 'c', 'o', 'r', 'o', 'n', 'a', '-', 'a', 'c', 'a', 'd', 'e', 'm', 'y', '.', 'c', 'o', 'm', '\0',
+  /* "corozanu.ro", true */ 'c', 'o', 'r', 'o', 'z', 'a', 'n', 'u', '.', 'r', 'o', '\0',
   /* "corpfin.net", true */ 'c', 'o', 'r', 'p', 'f', 'i', 'n', '.', 'n', 'e', 't', '\0',
   /* "corporateinfluencers.com", true */ 'c', 'o', 'r', 'p', 'o', 'r', 'a', 't', 'e', 'i', 'n', 'f', 'l', 'u', 'e', 'n', 'c', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "corporatesubscriptions.com.au", true */ 'c', 'o', 'r', 'p', 'o', 'r', 'a', 't', 'e', 's', 'u', 'b', 's', 'c', 'r', 'i', 'p', 't', 'i', 'o', 'n', 's', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "correct.horse", true */ 'c', 'o', 'r', 'r', 'e', 'c', 't', '.', 'h', 'o', 'r', 's', 'e', '\0',
   /* "corrupted.io", true */ 'c', 'o', 'r', 'r', 'u', 'p', 't', 'e', 'd', '.', 'i', 'o', '\0',
   /* "corsa-b.uk", true */ 'c', 'o', 'r', 's', 'a', '-', 'b', '.', 'u', 'k', '\0',
   /* "cortexitrecruitment.com", true */ 'c', 'o', 'r', 't', 'e', 'x', 'i', 't', 'r', 'e', 'c', 'r', 'u', 'i', 't', 'm', 'e', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "cortisolsupplement.com", true */ 'c', 'o', 'r', 't', 'i', 's', 'o', 'l', 's', 'u', 'p', 'p', 'l', 'e', 'm', 'e', 'n', 't', '.', 'c', 'o', 'm', '\0',
@@ -4942,17 +4939,16 @@ static const char kSTSHostTable[] = {
   /* "dev-tek.de", true */ 'd', 'e', 'v', '-', 't', 'e', 'k', '.', 'd', 'e', '\0',
   /* "devb.nl", true */ 'd', 'e', 'v', 'b', '.', 'n', 'l', '\0',
   /* "devct.cz", true */ 'd', 'e', 'v', 'c', 't', '.', 'c', 'z', '\0',
   /* "devdesco.com", true */ 'd', 'e', 'v', 'd', 'e', 's', 'c', 'o', '.', 'c', 'o', 'm', '\0',
   /* "devdom.io", true */ 'd', 'e', 'v', 'd', 'o', 'm', '.', 'i', 'o', '\0',
   /* "devdoodle.net", true */ 'd', 'e', 'v', 'd', 'o', 'o', 'd', 'l', 'e', '.', 'n', 'e', 't', '\0',
   /* "devel.cz", true */ 'd', 'e', 'v', 'e', 'l', '.', 'c', 'z', '\0',
   /* "develop.cool", true */ 'd', 'e', 'v', 'e', 'l', 'o', 'p', '.', 'c', 'o', 'o', 'l', '\0',
-  /* "develop.fitness", true */ 'd', 'e', 'v', 'e', 'l', 'o', 'p', '.', 'f', 'i', 't', 'n', 'e', 's', 's', '\0',
   /* "developer.mydigipass.com", false */ 'd', 'e', 'v', 'e', 'l', 'o', 'p', 'e', 'r', '.', 'm', 'y', 'd', 'i', 'g', 'i', 'p', 'a', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "developerfair.com", true */ 'd', 'e', 'v', 'e', 'l', 'o', 'p', 'e', 'r', 'f', 'a', 'i', 'r', '.', 'c', 'o', 'm', '\0',
   /* "developers.facebook.com", false */ 'd', 'e', 'v', 'e', 'l', 'o', 'p', 'e', 'r', 's', '.', 'f', 'a', 'c', 'e', 'b', 'o', 'o', 'k', '.', 'c', 'o', 'm', '\0',
   /* "developfx.com", true */ 'd', 'e', 'v', 'e', 'l', 'o', 'p', 'f', 'x', '.', 'c', 'o', 'm', '\0',
   /* "developmentaid.org", true */ 'd', 'e', 'v', 'e', 'l', 'o', 'p', 'm', 'e', 'n', 't', 'a', 'i', 'd', '.', 'o', 'r', 'g', '\0',
   /* "developmentsites.melbourne", true */ 'd', 'e', 'v', 'e', 'l', 'o', 'p', 'm', 'e', 'n', 't', 's', 'i', 't', 'e', 's', '.', 'm', 'e', 'l', 'b', 'o', 'u', 'r', 'n', 'e', '\0',
   /* "develux.com", true */ 'd', 'e', 'v', 'e', 'l', 'u', 'x', '.', 'c', 'o', 'm', '\0',
   /* "develux.net", true */ 'd', 'e', 'v', 'e', 'l', 'u', 'x', '.', 'n', 'e', 't', '\0',
@@ -5266,16 +5262,17 @@ static const char kSTSHostTable[] = {
   /* "dogmap.jp", true */ 'd', 'o', 'g', 'm', 'a', 'p', '.', 'j', 'p', '\0',
   /* "dognlife.com", true */ 'd', 'o', 'g', 'n', 'l', 'i', 'f', 'e', '.', 'c', 'o', 'm', '\0',
   /* "dohanews.co", true */ 'd', 'o', 'h', 'a', 'n', 'e', 'w', 's', '.', 'c', 'o', '\0',
   /* "dokelio-idf.fr", true */ 'd', 'o', 'k', 'e', 'l', 'i', 'o', '-', 'i', 'd', 'f', '.', 'f', 'r', '\0',
   /* "doku-gilde.de", true */ 'd', 'o', 'k', 'u', '-', 'g', 'i', 'l', 'd', 'e', '.', 'd', 'e', '\0',
   /* "dokuboard.com", true */ 'd', 'o', 'k', 'u', 'b', 'o', 'a', 'r', 'd', '.', 'c', 'o', 'm', '\0',
   /* "dokuraum.de", true */ 'd', 'o', 'k', 'u', 'r', 'a', 'u', 'm', '.', 'd', 'e', '\0',
   /* "dolarcanadense.com.br", true */ 'd', 'o', 'l', 'a', 'r', 'c', 'a', 'n', 'a', 'd', 'e', 'n', 's', 'e', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
+  /* "doleta.gov", true */ 'd', 'o', 'l', 'e', 't', 'a', '.', 'g', 'o', 'v', '\0',
   /* "doli.se", true */ 'd', 'o', 'l', 'i', '.', 's', 'e', '\0',
   /* "dolice.net", true */ 'd', 'o', 'l', 'i', 'c', 'e', '.', 'n', 'e', 't', '\0',
   /* "dollemore.com", true */ 'd', 'o', 'l', 'l', 'e', 'm', 'o', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "dolorism.com", true */ 'd', 'o', 'l', 'o', 'r', 'i', 's', 'm', '.', 'c', 'o', 'm', '\0',
   /* "dolphin-hosting.com", true */ 'd', 'o', 'l', 'p', 'h', 'i', 'n', '-', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "dolphin-it.de", true */ 'd', 'o', 'l', 'p', 'h', 'i', 'n', '-', 'i', 't', '.', 'd', 'e', '\0',
   /* "dolphinswithlasers.com", true */ 'd', 'o', 'l', 'p', 'h', 'i', 'n', 's', 'w', 'i', 't', 'h', 'l', 'a', 's', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "dom-medicina.ru", true */ 'd', 'o', 'm', '-', 'm', 'e', 'd', 'i', 'c', 'i', 'n', 'a', '.', 'r', 'u', '\0',
@@ -5516,16 +5513,17 @@ static const char kSTSHostTable[] = {
   /* "duoluodeyu.com", true */ 'd', 'u', 'o', 'l', 'u', 'o', 'd', 'e', 'y', 'u', '.', 'c', 'o', 'm', '\0',
   /* "dupree.co", true */ 'd', 'u', 'p', 'r', 'e', 'e', '.', 'c', 'o', '\0',
   /* "durangoenergyllc.com", true */ 'd', 'u', 'r', 'a', 'n', 'g', 'o', 'e', 'n', 'e', 'r', 'g', 'y', 'l', 'l', 'c', '.', 'c', 'o', 'm', '\0',
   /* "duria.de", true */ 'd', 'u', 'r', 'i', 'a', '.', 'd', 'e', '\0',
   /* "durys.be", true */ 'd', 'u', 'r', 'y', 's', '.', 'b', 'e', '\0',
   /* "dustri.org", true */ 'd', 'u', 's', 't', 'r', 'i', '.', 'o', 'r', 'g', '\0',
   /* "dustygroove.com", true */ 'd', 'u', 's', 't', 'y', 'g', 'r', 'o', 'o', 'v', 'e', '.', 'c', 'o', 'm', '\0',
   /* "dutch1.nl", true */ 'd', 'u', 't', 'c', 'h', '1', '.', 'n', 'l', '\0',
+  /* "dutchessuganda.com", true */ 'd', 'u', 't', 'c', 'h', 'e', 's', 's', 'u', 'g', 'a', 'n', 'd', 'a', '.', 'c', 'o', 'm', '\0',
   /* "dutchrank.nl", true */ 'd', 'u', 't', 'c', 'h', 'r', 'a', 'n', 'k', '.', 'n', 'l', '\0',
   /* "dutchwanderers.nl", true */ 'd', 'u', 't', 'c', 'h', 'w', 'a', 'n', 'd', 'e', 'r', 'e', 'r', 's', '.', 'n', 'l', '\0',
   /* "dutchweballiance.nl", true */ 'd', 'u', 't', 'c', 'h', 'w', 'e', 'b', 'a', 'l', 'l', 'i', 'a', 'n', 'c', 'e', '.', 'n', 'l', '\0',
   /* "dutyfreeonboard.com", true */ 'd', 'u', 't', 'y', 'f', 'r', 'e', 'e', 'o', 'n', 'b', 'o', 'a', 'r', 'd', '.', 'c', 'o', 'm', '\0',
   /* "dvbris.co.uk", true */ 'd', 'v', 'b', 'r', 'i', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "dvbris.com", true */ 'd', 'v', 'b', 'r', 'i', 's', '.', 'c', 'o', 'm', '\0',
   /* "dvorupotocnych.sk", true */ 'd', 'v', 'o', 'r', 'u', 'p', 'o', 't', 'o', 'c', 'n', 'y', 'c', 'h', '.', 's', 'k', '\0',
   /* "dvotx.org", true */ 'd', 'v', 'o', 't', 'x', '.', 'o', 'r', 'g', '\0',
@@ -5584,16 +5582,17 @@ static const char kSTSHostTable[] = {
   /* "e11even.nl", true */ 'e', '1', '1', 'e', 'v', 'e', 'n', '.', 'n', 'l', '\0',
   /* "e30gruppe.com", true */ 'e', '3', '0', 'g', 'r', 'u', 'p', 'p', 'e', '.', 'c', 'o', 'm', '\0',
   /* "e3kids.com", true */ 'e', '3', 'k', 'i', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "e5tv.hu", true */ 'e', '5', 't', 'v', '.', 'h', 'u', '\0',
   /* "e7d.io", true */ 'e', '7', 'd', '.', 'i', 'o', '\0',
   /* "ead-italia.it", true */ 'e', 'a', 'd', '-', 'i', 't', 'a', 'l', 'i', 'a', '.', 'i', 't', '\0',
   /* "eagle-aluminum.com", true */ 'e', 'a', 'g', 'l', 'e', '-', 'a', 'l', 'u', 'm', 'i', 'n', 'u', 'm', '.', 'c', 'o', 'm', '\0',
   /* "eagle-yard.de", true */ 'e', 'a', 'g', 'l', 'e', '-', 'y', 'a', 'r', 'd', '.', 'd', 'e', '\0',
+  /* "eagleridgecampground.com", true */ 'e', 'a', 'g', 'l', 'e', 'r', 'i', 'd', 'g', 'e', 'c', 'a', 'm', 'p', 'g', 'r', 'o', 'u', 'n', 'd', '.', 'c', 'o', 'm', '\0',
   /* "eaglesecurity.com", true */ 'e', 'a', 'g', 'l', 'e', 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "eagletechz.com.br", true */ 'e', 'a', 'g', 'l', 'e', 't', 'e', 'c', 'h', 'z', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "eagleyecs.com", true */ 'e', 'a', 'g', 'l', 'e', 'y', 'e', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "ealev.de", true */ 'e', 'a', 'l', 'e', 'v', '.', 'd', 'e', '\0',
   /* "eam-gmbh.com", true */ 'e', 'a', 'm', '-', 'g', 'm', 'b', 'h', '.', 'c', 'o', 'm', '\0',
   /* "eames-clayton.us", true */ 'e', 'a', 'm', 'e', 's', '-', 'c', 'l', 'a', 'y', 't', 'o', 'n', '.', 'u', 's', '\0',
   /* "earl.org.uk", true */ 'e', 'a', 'r', 'l', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "earlyyearshub.com", true */ 'e', 'a', 'r', 'l', 'y', 'y', 'e', 'a', 'r', 's', 'h', 'u', 'b', '.', 'c', 'o', 'm', '\0',
@@ -5652,17 +5651,16 @@ static const char kSTSHostTable[] = {
   /* "echosixmonkey.com", true */ 'e', 'c', 'h', 'o', 's', 'i', 'x', 'm', 'o', 'n', 'k', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "echosystem.fr", true */ 'e', 'c', 'h', 'o', 's', 'y', 's', 't', 'e', 'm', '.', 'f', 'r', '\0',
   /* "eckel.co", true */ 'e', 'c', 'k', 'e', 'l', '.', 'c', 'o', '\0',
   /* "eckro.com", true */ 'e', 'c', 'k', 'r', 'o', '.', 'c', 'o', 'm', '\0',
   /* "eclipse.ws", true */ 'e', 'c', 'l', 'i', 'p', 's', 'e', '.', 'w', 's', '\0',
   /* "ecnetworker.com", true */ 'e', 'c', 'n', 'e', 't', 'w', 'o', 'r', 'k', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "ecoccinelles.ch", true */ 'e', 'c', 'o', 'c', 'c', 'i', 'n', 'e', 'l', 'l', 'e', 's', '.', 'c', 'h', '\0',
   /* "ecoccinelles.com", true */ 'e', 'c', 'o', 'c', 'c', 'i', 'n', 'e', 'l', 'l', 'e', 's', '.', 'c', 'o', 'm', '\0',
-  /* "ecodigital.social", true */ 'e', 'c', 'o', 'd', 'i', 'g', 'i', 't', 'a', 'l', '.', 's', 'o', 'c', 'i', 'a', 'l', '\0',
   /* "ecogen.com.au", true */ 'e', 'c', 'o', 'g', 'e', 'n', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "ecogen.net.au", true */ 'e', 'c', 'o', 'g', 'e', 'n', '.', 'n', 'e', 't', '.', 'a', 'u', '\0',
   /* "ecolala.my", true */ 'e', 'c', 'o', 'l', 'a', 'l', 'a', '.', 'm', 'y', '\0',
   /* "ecole-attalens.ch", true */ 'e', 'c', 'o', 'l', 'e', '-', 'a', 't', 't', 'a', 'l', 'e', 'n', 's', '.', 'c', 'h', '\0',
   /* "ecolesrec.ch", true */ 'e', 'c', 'o', 'l', 'e', 's', 'r', 'e', 'c', '.', 'c', 'h', '\0',
   /* "ecology-21.ru", true */ 'e', 'c', 'o', 'l', 'o', 'g', 'y', '-', '2', '1', '.', 'r', 'u', '\0',
   /* "ecompen.co.za", true */ 'e', 'c', 'o', 'm', 'p', 'e', 'n', '.', 'c', 'o', '.', 'z', 'a', '\0',
   /* "econativa.pt", true */ 'e', 'c', 'o', 'n', 'a', 't', 'i', 'v', 'a', '.', 'p', 't', '\0',
@@ -5851,17 +5849,16 @@ static const char kSTSHostTable[] = {
   /* "elhall.ru", true */ 'e', 'l', 'h', 'a', 'l', 'l', '.', 'r', 'u', '\0',
   /* "eligible.com", true */ 'e', 'l', 'i', 'g', 'i', 'b', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "eligibleapi.com", true */ 'e', 'l', 'i', 'g', 'i', 'b', 'l', 'e', 'a', 'p', 'i', '.', 'c', 'o', 'm', '\0',
   /* "eligrey.com", true */ 'e', 'l', 'i', 'g', 'r', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "eliolita.com", true */ 'e', 'l', 'i', 'o', 'l', 'i', 't', 'a', '.', 'c', 'o', 'm', '\0',
   /* "eliott.be", false */ 'e', 'l', 'i', 'o', 't', 't', '.', 'b', 'e', '\0',
   /* "elisa.ee", false */ 'e', 'l', 'i', 's', 'a', '.', 'e', 'e', '\0',
   /* "elisabeth-strunz.de", true */ 'e', 'l', 'i', 's', 'a', 'b', 'e', 't', 'h', '-', 's', 't', 'r', 'u', 'n', 'z', '.', 'd', 'e', '\0',
-  /* "elite-box.org", true */ 'e', 'l', 'i', 't', 'e', '-', 'b', 'o', 'x', '.', 'o', 'r', 'g', '\0',
   /* "elite12.de", true */ 'e', 'l', 'i', 't', 'e', '1', '2', '.', 'd', 'e', '\0',
   /* "elitecovering.fr", true */ 'e', 'l', 'i', 't', 'e', 'c', 'o', 'v', 'e', 'r', 'i', 'n', 'g', '.', 'f', 'r', '\0',
   /* "elitegameservers.net", true */ 'e', 'l', 'i', 't', 'e', 'g', 'a', 'm', 'e', 's', 'e', 'r', 'v', 'e', 'r', 's', '.', 'n', 'e', 't', '\0',
   /* "elitehosting.de", true */ 'e', 'l', 'i', 't', 'e', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'd', 'e', '\0',
   /* "elizabethbuitrago.com", true */ 'e', 'l', 'i', 'z', 'a', 'b', 'e', 't', 'h', 'b', 'u', 'i', 't', 'r', 'a', 'g', 'o', '.', 'c', 'o', 'm', '\0',
   /* "elizabethgreenfield.com", true */ 'e', 'l', 'i', 'z', 'a', 'b', 'e', 't', 'h', 'g', 'r', 'e', 'e', 'n', 'f', 'i', 'e', 'l', 'd', '.', 'c', 'o', 'm', '\0',
   /* "ella-kwikmed.com", false */ 'e', 'l', 'l', 'a', '-', 'k', 'w', 'i', 'k', 'm', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "ellak.gr", true */ 'e', 'l', 'l', 'a', 'k', '.', 'g', 'r', '\0',
@@ -5888,16 +5885,17 @@ static const char kSTSHostTable[] = {
   /* "elytronsecurity.com", true */ 'e', 'l', 'y', 't', 'r', 'o', 'n', 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "em-biotek.cz", true */ 'e', 'm', '-', 'b', 'i', 'o', 't', 'e', 'k', '.', 'c', 'z', '\0',
   /* "email2rss.net", true */ 'e', 'm', 'a', 'i', 'l', '2', 'r', 's', 's', '.', 'n', 'e', 't', '\0',
   /* "emailfuermich.de", true */ 'e', 'm', 'a', 'i', 'l', 'f', 'u', 'e', 'r', 'm', 'i', 'c', 'h', '.', 'd', 'e', '\0',
   /* "emailhunter.co", true */ 'e', 'm', 'a', 'i', 'l', 'h', 'u', 'n', 't', 'e', 'r', '.', 'c', 'o', '\0',
   /* "emailprivacytester.com", true */ 'e', 'm', 'a', 'i', 'l', 'p', 'r', 'i', 'v', 'a', 'c', 'y', 't', 'e', 's', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "emaily.eu", true */ 'e', 'm', 'a', 'i', 'l', 'y', '.', 'e', 'u', '\0',
   /* "emanuelduss.ch", true */ 'e', 'm', 'a', 'n', 'u', 'e', 'l', 'd', 'u', 's', 's', '.', 'c', 'h', '\0',
+  /* "emanuelemazzotta.com", true */ 'e', 'm', 'a', 'n', 'u', 'e', 'l', 'e', 'm', 'a', 'z', 'z', 'o', 't', 't', 'a', '.', 'c', 'o', 'm', '\0',
   /* "emavok.eu", true */ 'e', 'm', 'a', 'v', 'o', 'k', '.', 'e', 'u', '\0',
   /* "embellir-aroma.com", true */ 'e', 'm', 'b', 'e', 'l', 'l', 'i', 'r', '-', 'a', 'r', 'o', 'm', 'a', '.', 'c', 'o', 'm', '\0',
   /* "embellir-kyujin.com", true */ 'e', 'm', 'b', 'e', 'l', 'l', 'i', 'r', '-', 'k', 'y', 'u', 'j', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "embraceni.org", true */ 'e', 'm', 'b', 'r', 'a', 'c', 'e', 'n', 'i', '.', 'o', 'r', 'g', '\0',
   /* "embracethedarkness.co.uk", true */ 'e', 'm', 'b', 'r', 'a', 'c', 'e', 't', 'h', 'e', 'd', 'a', 'r', 'k', 'n', 'e', 's', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "embroideryexpress.co.uk", true */ 'e', 'm', 'b', 'r', 'o', 'i', 'd', 'e', 'r', 'y', 'e', 'x', 'p', 'r', 'e', 's', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "emero.de", true */ 'e', 'm', 'e', 'r', 'o', '.', 'd', 'e', '\0',
   /* "emesolutions.net", true */ 'e', 'm', 'e', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'n', 'e', 't', '\0',
@@ -6011,48 +6009,50 @@ static const char kSTSHostTable[] = {
   /* "entryboss.cc", true */ 'e', 'n', 't', 'r', 'y', 'b', 'o', 's', 's', '.', 'c', 'c', '\0',
   /* "entrypoint.sh", true */ 'e', 'n', 't', 'r', 'y', 'p', 'o', 'i', 'n', 't', '.', 's', 'h', '\0',
   /* "enuchi.jp", true */ 'e', 'n', 'u', 'c', 'h', 'i', '.', 'j', 'p', '\0',
   /* "envant.co.uk", true */ 'e', 'n', 'v', 'a', 'n', 't', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "envelope.co.nz", true */ 'e', 'n', 'v', 'e', 'l', 'o', 'p', 'e', '.', 'c', 'o', '.', 'n', 'z', '\0',
   /* "enveloppenopmaat.nl", true */ 'e', 'n', 'v', 'e', 'l', 'o', 'p', 'p', 'e', 'n', 'o', 'p', 'm', 'a', 'a', 't', '.', 'n', 'l', '\0',
   /* "enviam.de", true */ 'e', 'n', 'v', 'i', 'a', 'm', '.', 'd', 'e', '\0',
   /* "enviroprobasements.com", true */ 'e', 'n', 'v', 'i', 'r', 'o', 'p', 'r', 'o', 'b', 'a', 's', 'e', 'm', 'e', 'n', 't', 's', '.', 'c', 'o', 'm', '\0',
+  /* "envygeeks.io", true */ 'e', 'n', 'v', 'y', 'g', 'e', 'e', 'k', 's', '.', 'i', 'o', '\0',
   /* "eocservices.co.uk", true */ 'e', 'o', 'c', 's', 'e', 'r', 'v', 'i', 'c', 'e', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "eoldb.org", true */ 'e', 'o', 'l', 'd', 'b', '.', 'o', 'r', 'g', '\0',
   /* "eopugetsound.org", false */ 'e', 'o', 'p', 'u', 'g', 'e', 't', 's', 'o', 'u', 'n', 'd', '.', 'o', 'r', 'g', '\0',
   /* "epay.bg", true */ 'e', 'p', 'a', 'y', '.', 'b', 'g', '\0',
   /* "epaygateway.net", true */ 'e', 'p', 'a', 'y', 'g', 'a', 't', 'e', 'w', 'a', 'y', '.', 'n', 'e', 't', '\0',
   /* "epicenter.work", true */ 'e', 'p', 'i', 'c', 'e', 'n', 't', 'e', 'r', '.', 'w', 'o', 'r', 'k', '\0',
   /* "epicenter.works", true */ 'e', 'p', 'i', 'c', 'e', 'n', 't', 'e', 'r', '.', 'w', 'o', 'r', 'k', 's', '\0',
   /* "epicentre.works", true */ 'e', 'p', 'i', 'c', 'e', 'n', 't', 'r', 'e', '.', 'w', 'o', 'r', 'k', 's', '\0',
   /* "epickitty.co.uk", true */ 'e', 'p', 'i', 'c', 'k', 'i', 't', 't', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "epicmc.games", true */ 'e', 'p', 'i', 'c', 'm', 'c', '.', 'g', 'a', 'm', 'e', 's', '\0',
   /* "epicsecure.de", true */ 'e', 'p', 'i', 'c', 's', 'e', 'c', 'u', 'r', 'e', '.', 'd', 'e', '\0',
   /* "epicsoft.de", true */ 'e', 'p', 'i', 'c', 's', 'o', 'f', 't', '.', 'd', 'e', '\0',
   /* "epicwalnutcreek.com", true */ 'e', 'p', 'i', 'c', 'w', 'a', 'l', 'n', 'u', 't', 'c', 'r', 'e', 'e', 'k', '.', 'c', 'o', 'm', '\0',
   /* "epizentrum.work", true */ 'e', 'p', 'i', 'z', 'e', 'n', 't', 'r', 'u', 'm', '.', 'w', 'o', 'r', 'k', '\0',
   /* "epizentrum.works", true */ 'e', 'p', 'i', 'z', 'e', 'n', 't', 'r', 'u', 'm', '.', 'w', 'o', 'r', 'k', 's', '\0',
-  /* "epoch.com", false */ 'e', 'p', 'o', 'c', 'h', '.', 'c', 'o', 'm', '\0',
+  /* "epoch.com", true */ 'e', 'p', 'o', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "epolitiker.com", true */ 'e', 'p', 'o', 'l', 'i', 't', 'i', 'k', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "epostplus.li", true */ 'e', 'p', 'o', 's', 't', 'p', 'l', 'u', 's', '.', 'l', 'i', '\0',
   /* "eprofitacademy.com", true */ 'e', 'p', 'r', 'o', 'f', 'i', 't', 'a', 'c', 'a', 'd', 'e', 'm', 'y', '.', 'c', 'o', 'm', '\0',
   /* "epsilon.dk", true */ 'e', 'p', 's', 'i', 'l', 'o', 'n', '.', 'd', 'k', '\0',
   /* "epsorting.cz", true */ 'e', 'p', 's', 'o', 'r', 't', 'i', 'n', 'g', '.', 'c', 'z', '\0',
   /* "epublibre.org", true */ 'e', 'p', 'u', 'b', 'l', 'i', 'b', 'r', 'e', '.', 'o', 'r', 'g', '\0',
   /* "eq-serve.com", true */ 'e', 'q', '-', 's', 'e', 'r', 'v', 'e', '.', 'c', 'o', 'm', '\0',
   /* "eqorg.com", true */ 'e', 'q', 'o', 'r', 'g', '.', 'c', 'o', 'm', '\0',
   /* "equalcloud.com", true */ 'e', 'q', 'u', 'a', 'l', 'c', 'l', 'o', 'u', 'd', '.', 'c', 'o', 'm', '\0',
   /* "equalparts.eu", true */ 'e', 'q', 'u', 'a', 'l', 'p', 'a', 'r', 't', 's', '.', 'e', 'u', '\0',
   /* "equidam.com", true */ 'e', 'q', 'u', 'i', 'd', 'a', 'm', '.', 'c', 'o', 'm', '\0',
   /* "equipedefrance.tv", true */ 'e', 'q', 'u', 'i', 'p', 'e', 'd', 'e', 'f', 'r', 'a', 'n', 'c', 'e', '.', 't', 'v', '\0',
   /* "equipsupply.com", true */ 'e', 'q', 'u', 'i', 'p', 's', 'u', 'p', 'p', 'l', 'y', '.', 'c', 'o', 'm', '\0',
   /* "equitee.co", true */ 'e', 'q', 'u', 'i', 't', 'e', 'e', '.', 'c', 'o', '\0',
   /* "er.tl", true */ 'e', 'r', '.', 't', 'l', '\0',
   /* "erad.fr", true */ 'e', 'r', 'a', 'd', '.', 'f', 'r', '\0',
+  /* "erasmusplusrooms.com", true */ 'e', 'r', 'a', 's', 'm', 'u', 's', 'p', 'l', 'u', 's', 'r', 'o', 'o', 'm', 's', '.', 'c', 'o', 'm', '\0',
   /* "erdethamburgeronsdag.no", true */ 'e', 'r', 'd', 'e', 't', 'h', 'a', 'm', 'b', 'u', 'r', 'g', 'e', 'r', 'o', 'n', 's', 'd', 'a', 'g', '.', 'n', 'o', '\0',
   /* "erepublik-deutschland.de", true */ 'e', 'r', 'e', 'p', 'u', 'b', 'l', 'i', 'k', '-', 'd', 'e', 'u', 't', 's', 'c', 'h', 'l', 'a', 'n', 'd', '.', 'd', 'e', '\0',
   /* "erethon.com", true */ 'e', 'r', 'e', 't', 'h', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "ergo-open.de", true */ 'e', 'r', 'g', 'o', '-', 'o', 'p', 'e', 'n', '.', 'd', 'e', '\0',
   /* "ergorium.com", true */ 'e', 'r', 'g', 'o', 'r', 'i', 'u', 'm', '.', 'c', 'o', 'm', '\0',
   /* "ergorium.eu", true */ 'e', 'r', 'g', 'o', 'r', 'i', 'u', 'm', '.', 'e', 'u', '\0',
   /* "ericabrahamsen.net", true */ 'e', 'r', 'i', 'c', 'a', 'b', 'r', 'a', 'h', 'a', 'm', 's', 'e', 'n', '.', 'n', 'e', 't', '\0',
   /* "ericairwin.com", true */ 'e', 'r', 'i', 'c', 'a', 'i', 'r', 'w', 'i', 'n', '.', 'c', 'o', 'm', '\0',
@@ -6099,17 +6099,16 @@ static const char kSTSHostTable[] = {
   /* "es-geenen.de", true */ 'e', 's', '-', 'g', 'e', 'e', 'n', 'e', 'n', '.', 'd', 'e', '\0',
   /* "es.search.yahoo.com", false */ 'e', 's', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "esafar.cz", true */ 'e', 's', 'a', 'f', 'a', 'r', '.', 'c', 'z', '\0',
   /* "esample.info", true */ 'e', 's', 'a', 'm', 'p', 'l', 'e', '.', 'i', 'n', 'f', 'o', '\0',
   /* "esball888.net", true */ 'e', 's', 'b', 'a', 'l', 'l', '8', '8', '8', '.', 'n', 'e', 't', '\0',
   /* "escael.org", true */ 'e', 's', 'c', 'a', 'e', 'l', '.', 'o', 'r', 'g', '\0',
   /* "escapees.com", true */ 'e', 's', 'c', 'a', 'p', 'e', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "escapeplaza.de", true */ 'e', 's', 'c', 'a', 'p', 'e', 'p', 'l', 'a', 'z', 'a', '.', 'd', 'e', '\0',
-  /* "escargotbistro.com", true */ 'e', 's', 'c', 'a', 'r', 'g', 'o', 't', 'b', 'i', 's', 't', 'r', 'o', '.', 'c', 'o', 'm', '\0',
   /* "escavador.com", true */ 'e', 's', 'c', 'a', 'v', 'a', 'd', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "esclear.de", true */ 'e', 's', 'c', 'l', 'e', 'a', 'r', '.', 'd', 'e', '\0',
   /* "escolaengenharia.com.br", true */ 'e', 's', 'c', 'o', 'l', 'a', 'e', 'n', 'g', 'e', 'n', 'h', 'a', 'r', 'i', 'a', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "escortmantra.com", true */ 'e', 's', 'c', 'o', 'r', 't', 'm', 'a', 'n', 't', 'r', 'a', '.', 'c', 'o', 'm', '\0',
   /* "escritoriodearte.com", false */ 'e', 's', 'c', 'r', 'i', 't', 'o', 'r', 'i', 'o', 'd', 'e', 'a', 'r', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "escxtra.com", true */ 'e', 's', 'c', 'x', 't', 'r', 'a', '.', 'c', 'o', 'm', '\0',
   /* "escyr.top", true */ 'e', 's', 'c', 'y', 'r', '.', 't', 'o', 'p', '\0',
   /* "esdenera.com", true */ 'e', 's', 'd', 'e', 'n', 'e', 'r', 'a', '.', 'c', 'o', 'm', '\0',
@@ -6472,16 +6471,17 @@ static const char kSTSHostTable[] = {
   /* "fanz.pro", true */ 'f', 'a', 'n', 'z', '.', 'p', 'r', 'o', '\0',
   /* "fap.no", true */ 'f', 'a', 'p', '.', 'n', 'o', '\0',
   /* "faq.ie", true */ 'f', 'a', 'q', '.', 'i', 'e', '\0',
   /* "faq.lookout.com", false */ 'f', 'a', 'q', '.', 'l', 'o', 'o', 'k', 'o', 'u', 't', '.', 'c', 'o', 'm', '\0',
   /* "fara.gov", true */ 'f', 'a', 'r', 'a', '.', 'g', 'o', 'v', '\0',
   /* "faretravel.co.uk", true */ 'f', 'a', 'r', 'e', 't', 'r', 'a', 'v', 'e', 'l', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "farfetchos.com", true */ 'f', 'a', 'r', 'f', 'e', 't', 'c', 'h', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "fargtorget.se", true */ 'f', 'a', 'r', 'g', 't', 'o', 'r', 'g', 'e', 't', '.', 's', 'e', '\0',
+  /* "farhadexchange.com", true */ 'f', 'a', 'r', 'h', 'a', 'd', 'e', 'x', 'c', 'h', 'a', 'n', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "farhood.org", true */ 'f', 'a', 'r', 'h', 'o', 'o', 'd', '.', 'o', 'r', 'g', '\0',
   /* "farmacia.pt", true */ 'f', 'a', 'r', 'm', 'a', 'c', 'i', 'a', '.', 'p', 't', '\0',
   /* "farmacialaboratorio.it", true */ 'f', 'a', 'r', 'm', 'a', 'c', 'i', 'a', 'l', 'a', 'b', 'o', 'r', 'a', 't', 'o', 'r', 'i', 'o', '.', 'i', 't', '\0',
   /* "farmer.dating", true */ 'f', 'a', 'r', 'm', 'e', 'r', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "farmkazuto.com", true */ 'f', 'a', 'r', 'm', 'k', 'a', 'z', 'u', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "faroes.net", true */ 'f', 'a', 'r', 'o', 'e', 's', '.', 'n', 'e', 't', '\0',
   /* "faroes.org", true */ 'f', 'a', 'r', 'o', 'e', 's', '.', 'o', 'r', 'g', '\0',
   /* "farsil.eu", true */ 'f', 'a', 'r', 's', 'i', 'l', '.', 'e', 'u', '\0',
@@ -6774,17 +6774,16 @@ static const char kSTSHostTable[] = {
   /* "flashback.org", true */ 'f', 'l', 'a', 's', 'h', 'b', 'a', 'c', 'k', '.', 'o', 'r', 'g', '\0',
   /* "flashgot.net", true */ 'f', 'l', 'a', 's', 'h', 'g', 'o', 't', '.', 'n', 'e', 't', '\0',
   /* "flat.io", true */ 'f', 'l', 'a', 't', '.', 'i', 'o', '\0',
   /* "flatbellyreview.com", true */ 'f', 'l', 'a', 't', 'b', 'e', 'l', 'l', 'y', 'r', 'e', 'v', 'i', 'e', 'w', '.', 'c', 'o', 'm', '\0',
   /* "flatpackmates.co.uk", true */ 'f', 'l', 'a', 't', 'p', 'a', 'c', 'k', 'm', 'a', 't', 'e', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "flauschig.net", true */ 'f', 'l', 'a', 'u', 's', 'c', 'h', 'i', 'g', '.', 'n', 'e', 't', '\0',
   /* "flavr.be", true */ 'f', 'l', 'a', 'v', 'r', '.', 'b', 'e', '\0',
   /* "flawlesscowboy.xyz", true */ 'f', 'l', 'a', 'w', 'l', 'e', 's', 's', 'c', 'o', 'w', 'b', 'o', 'y', '.', 'x', 'y', 'z', '\0',
-  /* "flazznetworks.com", false */ 'f', 'l', 'a', 'z', 'z', 'n', 'e', 't', 'w', 'o', 'r', 'k', 's', '.', 'c', 'o', 'm', '\0',
   /* "fleep.io", true */ 'f', 'l', 'e', 'e', 'p', '.', 'i', 'o', '\0',
   /* "fleetssl.com", true */ 'f', 'l', 'e', 'e', 't', 's', 's', 'l', '.', 'c', 'o', 'm', '\0',
   /* "fleisch.club", true */ 'f', 'l', 'e', 'i', 's', 'c', 'h', '.', 'c', 'l', 'u', 'b', '\0',
   /* "fletchto99.com", true */ 'f', 'l', 'e', 't', 'c', 'h', 't', 'o', '9', '9', '.', 'c', 'o', 'm', '\0',
   /* "fleurette.me", true */ 'f', 'l', 'e', 'u', 'r', 'e', 't', 't', 'e', '.', 'm', 'e', '\0',
   /* "flexapplications.se", true */ 'f', 'l', 'e', 'x', 'a', 'p', 'p', 'l', 'i', 'c', 'a', 't', 'i', 'o', 'n', 's', '.', 's', 'e', '\0',
   /* "fleximus.org", false */ 'f', 'l', 'e', 'x', 'i', 'm', 'u', 's', '.', 'o', 'r', 'g', '\0',
   /* "flexinvesting.fi", true */ 'f', 'l', 'e', 'x', 'i', 'n', 'v', 'e', 's', 't', 'i', 'n', 'g', '.', 'f', 'i', '\0',
@@ -7090,16 +7089,17 @@ static const char kSTSHostTable[] = {
   /* "fretscha.com", true */ 'f', 'r', 'e', 't', 's', 'c', 'h', 'a', '.', 'c', 'o', 'm', '\0',
   /* "fretworksec.com", true */ 'f', 'r', 'e', 't', 'w', 'o', 'r', 'k', 's', 'e', 'c', '.', 'c', 'o', 'm', '\0',
   /* "frickelboxx.de", true */ 'f', 'r', 'i', 'c', 'k', 'e', 'l', 'b', 'o', 'x', 'x', '.', 'd', 'e', '\0',
   /* "frickenate.com", true */ 'f', 'r', 'i', 'c', 'k', 'e', 'n', 'a', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "fridolinka.cz", true */ 'f', 'r', 'i', 'd', 'o', 'l', 'i', 'n', 'k', 'a', '.', 'c', 'z', '\0',
   /* "friedhelm-wolf.de", true */ 'f', 'r', 'i', 'e', 'd', 'h', 'e', 'l', 'm', '-', 'w', 'o', 'l', 'f', '.', 'd', 'e', '\0',
   /* "friedrich-foto-art.de", true */ 'f', 'r', 'i', 'e', 'd', 'r', 'i', 'c', 'h', '-', 'f', 'o', 't', 'o', '-', 'a', 'r', 't', '.', 'd', 'e', '\0',
   /* "friedsamphotography.com", true */ 'f', 'r', 'i', 'e', 'd', 's', 'a', 'm', 'p', 'h', 'o', 't', 'o', 'g', 'r', 'a', 'p', 'h', 'y', '.', 'c', 'o', 'm', '\0',
+  /* "friendlysiberia.com", true */ 'f', 'r', 'i', 'e', 'n', 'd', 'l', 'y', 's', 'i', 'b', 'e', 'r', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "friends-of-naz.com", true */ 'f', 'r', 'i', 'e', 'n', 'd', 's', '-', 'o', 'f', '-', 'n', 'a', 'z', '.', 'c', 'o', 'm', '\0',
   /* "friends24.cz", true */ 'f', 'r', 'i', 'e', 'n', 'd', 's', '2', '4', '.', 'c', 'z', '\0',
   /* "friendship-quotes.co.uk", true */ 'f', 'r', 'i', 'e', 'n', 'd', 's', 'h', 'i', 'p', '-', 'q', 'u', 'o', 't', 'e', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "friet.org", true */ 'f', 'r', 'i', 'e', 't', '.', 'o', 'r', 'g', '\0',
   /* "frigi.ch", true */ 'f', 'r', 'i', 'g', 'i', '.', 'c', 'h', '\0',
   /* "frigolit.net", true */ 'f', 'r', 'i', 'g', 'o', 'l', 'i', 't', '.', 'n', 'e', 't', '\0',
   /* "frillip.com", true */ 'f', 'r', 'i', 'l', 'l', 'i', 'p', '.', 'c', 'o', 'm', '\0',
   /* "frinkiac.com", true */ 'f', 'r', 'i', 'n', 'k', 'i', 'a', 'c', '.', 'c', 'o', 'm', '\0',
@@ -7707,17 +7707,16 @@ static const char kSTSHostTable[] = {
   /* "gomiblog.com", true */ 'g', 'o', 'm', 'i', 'b', 'l', 'o', 'g', '.', 'c', 'o', 'm', '\0',
   /* "gondawa.com", true */ 'g', 'o', 'n', 'd', 'a', 'w', 'a', '.', 'c', 'o', 'm', '\0',
   /* "gongjianwei.com", false */ 'g', 'o', 'n', 'g', 'j', 'i', 'a', 'n', 'w', 'e', 'i', '.', 'c', 'o', 'm', '\0',
   /* "gongjuhao.com", true */ 'g', 'o', 'n', 'g', 'j', 'u', 'h', 'a', 'o', '.', 'c', 'o', 'm', '\0',
   /* "gonkar.com", true */ 'g', 'o', 'n', 'k', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "goo.gl", true */ 'g', 'o', 'o', '.', 'g', 'l', '\0',
   /* "good-tips.pro", true */ 'g', 'o', 'o', 'd', '-', 't', 'i', 'p', 's', '.', 'p', 'r', 'o', '\0',
   /* "goodfurday.ca", true */ 'g', 'o', 'o', 'd', 'f', 'u', 'r', 'd', 'a', 'y', '.', 'c', 'a', '\0',
-  /* "goodmengroup.de", true */ 'g', 'o', 'o', 'd', 'm', 'e', 'n', 'g', 'r', 'o', 'u', 'p', '.', 'd', 'e', '\0',
   /* "google", true */ 'g', 'o', 'o', 'g', 'l', 'e', '\0',
   /* "google-analytics.com", true */ 'g', 'o', 'o', 'g', 'l', 'e', '-', 'a', 'n', 'a', 'l', 'y', 't', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "googleandroid.cz", true */ 'g', 'o', 'o', 'g', 'l', 'e', 'a', 'n', 'd', 'r', 'o', 'i', 'd', '.', 'c', 'z', '\0',
   /* "googlemail.com", false */ 'g', 'o', 'o', 'g', 'l', 'e', 'm', 'a', 'i', 'l', '.', 'c', 'o', 'm', '\0',
   /* "googleplex.com", true */ 'g', 'o', 'o', 'g', 'l', 'e', 'p', 'l', 'e', 'x', '.', 'c', 'o', 'm', '\0',
   /* "googlesource.com", true */ 'g', 'o', 'o', 'g', 'l', 'e', 's', 'o', 'u', 'r', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "googley.fr", true */ 'g', 'o', 'o', 'g', 'l', 'e', 'y', '.', 'f', 'r', '\0',
   /* "goombi.fr", true */ 'g', 'o', 'o', 'm', 'b', 'i', '.', 'f', 'r', '\0',
@@ -7876,18 +7875,20 @@ static const char kSTSHostTable[] = {
   /* "griegfoundation.no", true */ 'g', 'r', 'i', 'e', 'g', 'f', 'o', 'u', 'n', 'd', 'a', 't', 'i', 'o', 'n', '.', 'n', 'o', '\0',
   /* "grieglogistics.no", true */ 'g', 'r', 'i', 'e', 'g', 'l', 'o', 'g', 'i', 's', 't', 'i', 'c', 's', '.', 'n', 'o', '\0',
   /* "griegshipbrokers.com", true */ 'g', 'r', 'i', 'e', 'g', 's', 'h', 'i', 'p', 'b', 'r', 'o', 'k', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "griegshipbrokers.no", true */ 'g', 'r', 'i', 'e', 'g', 's', 'h', 'i', 'p', 'b', 'r', 'o', 'k', 'e', 'r', 's', '.', 'n', 'o', '\0',
   /* "griesser2.de", true */ 'g', 'r', 'i', 'e', 's', 's', 'e', 'r', '2', '.', 'd', 'e', '\0',
   /* "grillinfools.com", true */ 'g', 'r', 'i', 'l', 'l', 'i', 'n', 'f', 'o', 'o', 'l', 's', '.', 'c', 'o', 'm', '\0',
   /* "grillteller42.de", true */ 'g', 'r', 'i', 'l', 'l', 't', 'e', 'l', 'l', 'e', 'r', '4', '2', '.', 'd', 'e', '\0',
   /* "grimcalc.com", true */ 'g', 'r', 'i', 'm', 'c', 'a', 'l', 'c', '.', 'c', 'o', 'm', '\0',
+  /* "grimm-gastrobedarf.de", true */ 'g', 'r', 'i', 'm', 'm', '-', 'g', 'a', 's', 't', 'r', 'o', 'b', 'e', 'd', 'a', 'r', 'f', '.', 'd', 'e', '\0',
   /* "grimneko.de", true */ 'g', 'r', 'i', 'm', 'n', 'e', 'k', 'o', '.', 'd', 'e', '\0',
   /* "gritte.ch", true */ 'g', 'r', 'i', 't', 't', 'e', '.', 'c', 'h', '\0',
+  /* "grizzlys.com", true */ 'g', 'r', 'i', 'z', 'z', 'l', 'y', 's', '.', 'c', 'o', 'm', '\0',
   /* "groben-itsolutions.de", true */ 'g', 'r', 'o', 'b', 'e', 'n', '-', 'i', 't', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'd', 'e', '\0',
   /* "grocock.me.uk", true */ 'g', 'r', 'o', 'c', 'o', 'c', 'k', '.', 'm', 'e', '.', 'u', 'k', '\0',
   /* "groenaquasolutions.nl", true */ 'g', 'r', 'o', 'e', 'n', 'a', 'q', 'u', 'a', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'n', 'l', '\0',
   /* "groepjam-usedcars.be", true */ 'g', 'r', 'o', 'e', 'p', 'j', 'a', 'm', '-', 'u', 's', 'e', 'd', 'c', 'a', 'r', 's', '.', 'b', 'e', '\0',
   /* "grog.pw", true */ 'g', 'r', 'o', 'g', '.', 'p', 'w', '\0',
   /* "grokker.com", true */ 'g', 'r', 'o', 'k', 'k', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "grondius.com", true */ 'g', 'r', 'o', 'n', 'd', 'i', 'u', 's', '.', 'c', 'o', 'm', '\0',
   /* "groovydisk.com", true */ 'g', 'r', 'o', 'o', 'v', 'y', 'd', 'i', 's', 'k', '.', 'c', 'o', 'm', '\0',
@@ -8193,16 +8194,17 @@ static const char kSTSHostTable[] = {
   /* "havefunbiking.com", true */ 'h', 'a', 'v', 'e', 'f', 'u', 'n', 'b', 'i', 'k', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "haveibeenpwned.com", true */ 'h', 'a', 'v', 'e', 'i', 'b', 'e', 'e', 'n', 'p', 'w', 'n', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "havellab.de", true */ 'h', 'a', 'v', 'e', 'l', 'l', 'a', 'b', '.', 'd', 'e', '\0',
   /* "havelland-obstler.de", true */ 'h', 'a', 'v', 'e', 'l', 'l', 'a', 'n', 'd', '-', 'o', 'b', 's', 't', 'l', 'e', 'r', '.', 'd', 'e', '\0',
   /* "haven-moon.com", true */ 'h', 'a', 'v', 'e', 'n', '-', 'm', 'o', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "havenmoon.com", true */ 'h', 'a', 'v', 'e', 'n', 'm', 'o', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "hawaya.com", true */ 'h', 'a', 'w', 'a', 'y', 'a', '.', 'c', 'o', 'm', '\0',
   /* "hawk-la.com", true */ 'h', 'a', 'w', 'k', '-', 'l', 'a', '.', 'c', 'o', 'm', '\0',
+  /* "hawksguild.com", true */ 'h', 'a', 'w', 'k', 's', 'g', 'u', 'i', 'l', 'd', '.', 'c', 'o', 'm', '\0',
   /* "hawthornharpist.com", true */ 'h', 'a', 'w', 't', 'h', 'o', 'r', 'n', 'h', 'a', 'r', 'p', 'i', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "haxdroid.com", true */ 'h', 'a', 'x', 'd', 'r', 'o', 'i', 'd', '.', 'c', 'o', 'm', '\0',
   /* "haxo.nl", false */ 'h', 'a', 'x', 'o', '.', 'n', 'l', '\0',
   /* "haxon.me", true */ 'h', 'a', 'x', 'o', 'n', '.', 'm', 'e', '\0',
   /* "hayai.space", true */ 'h', 'a', 'y', 'a', 'i', '.', 's', 'p', 'a', 'c', 'e', '\0',
   /* "hayashi-rin.net", true */ 'h', 'a', 'y', 'a', 's', 'h', 'i', '-', 'r', 'i', 'n', '.', 'n', 'e', 't', '\0',
   /* "hayfordoleary.com", true */ 'h', 'a', 'y', 'f', 'o', 'r', 'd', 'o', 'l', 'e', 'a', 'r', 'y', '.', 'c', 'o', 'm', '\0',
   /* "haynes-davis.com", true */ 'h', 'a', 'y', 'n', 'e', 's', '-', 'd', 'a', 'v', 'i', 's', '.', 'c', 'o', 'm', '\0',
@@ -8340,16 +8342,17 @@ static const char kSTSHostTable[] = {
   /* "hentai.design", true */ 'h', 'e', 'n', 't', 'a', 'i', '.', 'd', 'e', 's', 'i', 'g', 'n', '\0',
   /* "hentaimaster.net", true */ 'h', 'e', 'n', 't', 'a', 'i', 'm', 'a', 's', 't', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "hentschke-bau.de", true */ 'h', 'e', 'n', 't', 's', 'c', 'h', 'k', 'e', '-', 'b', 'a', 'u', '.', 'd', 'e', '\0',
   /* "hentschke-betonfertigteilwerk.de", true */ 'h', 'e', 'n', 't', 's', 'c', 'h', 'k', 'e', '-', 'b', 'e', 't', 'o', 'n', 'f', 'e', 'r', 't', 'i', 'g', 't', 'e', 'i', 'l', 'w', 'e', 'r', 'k', '.', 'd', 'e', '\0',
   /* "hentschke-invest.de", true */ 'h', 'e', 'n', 't', 's', 'c', 'h', 'k', 'e', '-', 'i', 'n', 'v', 'e', 's', 't', '.', 'd', 'e', '\0',
   /* "heppler.net", true */ 'h', 'e', 'p', 'p', 'l', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "heptafrogs.de", true */ 'h', 'e', 'p', 't', 'a', 'f', 'r', 'o', 'g', 's', '.', 'd', 'e', '\0',
   /* "hepteract.us", true */ 'h', 'e', 'p', 't', 'e', 'r', 'a', 'c', 't', '.', 'u', 's', '\0',
+  /* "heptner24.de", true */ 'h', 'e', 'p', 't', 'n', 'e', 'r', '2', '4', '.', 'd', 'e', '\0',
   /* "her25.com", true */ 'h', 'e', 'r', '2', '5', '.', 'c', 'o', 'm', '\0',
   /* "herbandpat.org", true */ 'h', 'e', 'r', 'b', 'a', 'n', 'd', 'p', 'a', 't', '.', 'o', 'r', 'g', '\0',
   /* "herbert.io", true */ 'h', 'e', 'r', 'b', 'e', 'r', 't', '.', 'i', 'o', '\0',
   /* "herbertmouwen.nl", true */ 'h', 'e', 'r', 'b', 'e', 'r', 't', 'm', 'o', 'u', 'w', 'e', 'n', '.', 'n', 'l', '\0',
   /* "herbweb.net", true */ 'h', 'e', 'r', 'b', 'w', 'e', 'b', '.', 'n', 'e', 't', '\0',
   /* "herbweb.org", true */ 'h', 'e', 'r', 'b', 'w', 'e', 'b', '.', 'o', 'r', 'g', '\0',
   /* "herculex.fi", true */ 'h', 'e', 'r', 'c', 'u', 'l', 'e', 'x', '.', 'f', 'i', '\0',
   /* "herds.eu", true */ 'h', 'e', 'r', 'd', 's', '.', 'e', 'u', '\0',
@@ -8623,17 +8626,16 @@ static const char kSTSHostTable[] = {
   /* "howsmyssl.com", true */ 'h', 'o', 'w', 's', 'm', 'y', 's', 's', 'l', '.', 'c', 'o', 'm', '\0',
   /* "howsmytls.com", true */ 'h', 'o', 'w', 's', 'm', 'y', 't', 'l', 's', '.', 'c', 'o', 'm', '\0',
   /* "howsyourhealth.org", true */ 'h', 'o', 'w', 's', 'y', 'o', 'u', 'r', 'h', 'e', 'a', 'l', 't', 'h', '.', 'o', 'r', 'g', '\0',
   /* "howtofreelance.com", true */ 'h', 'o', 'w', 't', 'o', 'f', 'r', 'e', 'e', 'l', 'a', 'n', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "howtogeek.com", true */ 'h', 'o', 'w', 't', 'o', 'g', 'e', 'e', 'k', '.', 'c', 'o', 'm', '\0',
   /* "howtolaser.com", true */ 'h', 'o', 'w', 't', 'o', 'l', 'a', 's', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "hozana.si", false */ 'h', 'o', 'z', 'a', 'n', 'a', '.', 's', 'i', '\0',
   /* "hp-work.net", true */ 'h', 'p', '-', 'w', 'o', 'r', 'k', '.', 'n', 'e', 't', '\0',
-  /* "hpac-portal.com", true */ 'h', 'p', 'a', 'c', '-', 'p', 'o', 'r', 't', 'a', 'l', '.', 'c', 'o', 'm', '\0',
   /* "hpbn.co", true */ 'h', 'p', 'b', 'n', '.', 'c', 'o', '\0',
   /* "hpisavageforum.com", true */ 'h', 'p', 'i', 's', 'a', 'v', 'a', 'g', 'e', 'f', 'o', 'r', 'u', 'm', '.', 'c', 'o', 'm', '\0',
   /* "hpkp-faq.de", true */ 'h', 'p', 'k', 'p', '-', 'f', 'a', 'q', '.', 'd', 'e', '\0',
   /* "hqhost.net", false */ 'h', 'q', 'h', 'o', 's', 't', '.', 'n', 'e', 't', '\0',
   /* "hr98.tk", true */ 'h', 'r', '9', '8', '.', 't', 'k', '\0',
   /* "hrabogados.com", true */ 'h', 'r', 'a', 'b', 'o', 'g', 'a', 'd', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "hrackydomino.cz", true */ 'h', 'r', 'a', 'c', 'k', 'y', 'd', 'o', 'm', 'i', 'n', 'o', '.', 'c', 'z', '\0',
   /* "hraesvelg.net", true */ 'h', 'r', 'a', 'e', 's', 'v', 'e', 'l', 'g', '.', 'n', 'e', 't', '\0',
@@ -8857,16 +8859,17 @@ static const char kSTSHostTable[] = {
   /* "idensys.nl", true */ 'i', 'd', 'e', 'n', 's', 'y', 's', '.', 'n', 'l', '\0',
   /* "identifyme.net", true */ 'i', 'd', 'e', 'n', 't', 'i', 'f', 'y', 'm', 'e', '.', 'n', 'e', 't', '\0',
   /* "identity-hash.online", true */ 'i', 'd', 'e', 'n', 't', 'i', 't', 'y', '-', 'h', 'a', 's', 'h', '.', 'o', 'n', 'l', 'i', 'n', 'e', '\0',
   /* "identitytheft.gov", true */ 'i', 'd', 'e', 'n', 't', 'i', 't', 'y', 't', 'h', 'e', 'f', 't', '.', 'g', 'o', 'v', '\0',
   /* "idexxpublicationportal.com", true */ 'i', 'd', 'e', 'x', 'x', 'p', 'u', 'b', 'l', 'i', 'c', 'a', 't', 'i', 'o', 'n', 'p', 'o', 'r', 't', 'a', 'l', '.', 'c', 'o', 'm', '\0',
   /* "idgard.de", true */ 'i', 'd', 'g', 'a', 'r', 'd', '.', 'd', 'e', '\0',
   /* "idhosts.co.id", true */ 'i', 'd', 'h', 'o', 's', 't', 's', '.', 'c', 'o', '.', 'i', 'd', '\0',
   /* "idid.tk", true */ 'i', 'd', 'i', 'd', '.', 't', 'k', '\0',
+  /* "idinby.dk", true */ 'i', 'd', 'i', 'n', 'b', 'y', '.', 'd', 'k', '\0',
   /* "idiopolis.org", true */ 'i', 'd', 'i', 'o', 'p', 'o', 'l', 'i', 's', '.', 'o', 'r', 'g', '\0',
   /* "idmanagement.gov", true */ 'i', 'd', 'm', 'a', 'n', 'a', 'g', 'e', 'm', 'e', 'n', 't', '.', 'g', 'o', 'v', '\0',
   /* "idmobile.co.uk", true */ 'i', 'd', 'm', 'o', 'b', 'i', 'l', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "idndx.com", true */ 'i', 'd', 'n', 'd', 'x', '.', 'c', 'o', 'm', '\0',
   /* "idoc24.com", true */ 'i', 'd', 'o', 'c', '2', '4', '.', 'c', 'o', 'm', '\0',
   /* "idol-bikes.ru", true */ 'i', 'd', 'o', 'l', '-', 'b', 'i', 'k', 'e', 's', '.', 'r', 'u', '\0',
   /* "idolf.dk", true */ 'i', 'd', 'o', 'l', 'f', '.', 'd', 'k', '\0',
   /* "idontplaydarts.com", true */ 'i', 'd', 'o', 'n', 't', 'p', 'l', 'a', 'y', 'd', 'a', 'r', 't', 's', '.', 'c', 'o', 'm', '\0',
@@ -9196,17 +9199,16 @@ static const char kSTSHostTable[] = {
   /* "interfug.de", true */ 'i', 'n', 't', 'e', 'r', 'f', 'u', 'g', '.', 'd', 'e', '\0',
   /* "interiordesignsconcept.com", true */ 'i', 'n', 't', 'e', 'r', 'i', 'o', 'r', 'd', 'e', 's', 'i', 'g', 'n', 's', 'c', 'o', 'n', 'c', 'e', 'p', 't', '.', 'c', 'o', 'm', '\0',
   /* "interisaudit.com", true */ 'i', 'n', 't', 'e', 'r', 'i', 's', 'a', 'u', 'd', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "intermedinet.nl", true */ 'i', 'n', 't', 'e', 'r', 'm', 'e', 'd', 'i', 'n', 'e', 't', '.', 'n', 'l', '\0',
   /* "internaldh.com", true */ 'i', 'n', 't', 'e', 'r', 'n', 'a', 'l', 'd', 'h', '.', 'c', 'o', 'm', '\0',
   /* "international-arbitration-attorney.com", true */ 'i', 'n', 't', 'e', 'r', 'n', 'a', 't', 'i', 'o', 'n', 'a', 'l', '-', 'a', 'r', 'b', 'i', 't', 'r', 'a', 't', 'i', 'o', 'n', '-', 'a', 't', 't', 'o', 'r', 'n', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "internationalfashionjobs.com", true */ 'i', 'n', 't', 'e', 'r', 'n', 'a', 't', 'i', 'o', 'n', 'a', 'l', 'f', 'a', 's', 'h', 'i', 'o', 'n', 'j', 'o', 'b', 's', '.', 'c', 'o', 'm', '\0',
   /* "internaut.co.za", true */ 'i', 'n', 't', 'e', 'r', 'n', 'a', 'u', 't', '.', 'c', 'o', '.', 'z', 'a', '\0',
-  /* "internect.co.za", true */ 'i', 'n', 't', 'e', 'r', 'n', 'e', 'c', 't', '.', 'c', 'o', '.', 'z', 'a', '\0',
   /* "internet-pornografie.de", true */ 'i', 'n', 't', 'e', 'r', 'n', 'e', 't', '-', 'p', 'o', 'r', 'n', 'o', 'g', 'r', 'a', 'f', 'i', 'e', '.', 'd', 'e', '\0',
   /* "internetaanbieders.eu", true */ 'i', 'n', 't', 'e', 'r', 'n', 'e', 't', 'a', 'a', 'n', 'b', 'i', 'e', 'd', 'e', 'r', 's', '.', 'e', 'u', '\0',
   /* "internetbank.swedbank.se", true */ 'i', 'n', 't', 'e', 'r', 'n', 'e', 't', 'b', 'a', 'n', 'k', '.', 's', 'w', 'e', 'd', 'b', 'a', 'n', 'k', '.', 's', 'e', '\0',
   /* "internetbugbounty.org", true */ 'i', 'n', 't', 'e', 'r', 'n', 'e', 't', 'b', 'u', 'g', 'b', 'o', 'u', 'n', 't', 'y', '.', 'o', 'r', 'g', '\0',
   /* "internetcom.jp", true */ 'i', 'n', 't', 'e', 'r', 'n', 'e', 't', 'c', 'o', 'm', '.', 'j', 'p', '\0',
   /* "internethealthreport.org", true */ 'i', 'n', 't', 'e', 'r', 'n', 'e', 't', 'h', 'e', 'a', 'l', 't', 'h', 'r', 'e', 'p', 'o', 'r', 't', '.', 'o', 'r', 'g', '\0',
   /* "internethering.de", true */ 'i', 'n', 't', 'e', 'r', 'n', 'e', 't', 'h', 'e', 'r', 'i', 'n', 'g', '.', 'd', 'e', '\0',
   /* "internetofdon.gs", true */ 'i', 'n', 't', 'e', 'r', 'n', 'e', 't', 'o', 'f', 'd', 'o', 'n', '.', 'g', 's', '\0',
@@ -9307,16 +9309,17 @@ static const char kSTSHostTable[] = {
   /* "ipv6.watch", true */ 'i', 'p', 'v', '6', '.', 'w', 'a', 't', 'c', 'h', '\0',
   /* "ipv6vpn.net", true */ 'i', 'p', 'v', '6', 'v', 'p', 'n', '.', 'n', 'e', 't', '\0',
   /* "ipvsec.nl", true */ 'i', 'p', 'v', 's', 'e', 'c', '.', 'n', 'l', '\0',
   /* "iqboxy.com", true */ 'i', 'q', 'b', 'o', 'x', 'y', '.', 'c', 'o', 'm', '\0',
   /* "iqsmn.org", true */ 'i', 'q', 's', 'm', 'n', '.', 'o', 'r', 'g', '\0',
   /* "iranianholiday.com", true */ 'i', 'r', 'a', 'n', 'i', 'a', 'n', 'h', 'o', 'l', 'i', 'd', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "irc-results.com", true */ 'i', 'r', 'c', '-', 'r', 'e', 's', 'u', 'l', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "ircmett.de", true */ 'i', 'r', 'c', 'm', 'e', 't', 't', '.', 'd', 'e', '\0',
+  /* "iready.ro", true */ 'i', 'r', 'e', 'a', 'd', 'y', '.', 'r', 'o', '\0',
   /* "ireef.tv", true */ 'i', 'r', 'e', 'e', 'f', '.', 't', 'v', '\0',
   /* "irenekauer.com", true */ 'i', 'r', 'e', 'n', 'e', 'k', 'a', 'u', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "irf2.pl", true */ 'i', 'r', 'f', '2', '.', 'p', 'l', '\0',
   /* "irgit.pl", true */ 'i', 'r', 'g', 'i', 't', '.', 'p', 'l', '\0',
   /* "iridiumbrowser.de", true */ 'i', 'r', 'i', 'd', 'i', 'u', 'm', 'b', 'r', 'o', 'w', 's', 'e', 'r', '.', 'd', 'e', '\0',
   /* "iridiumflare.de", true */ 'i', 'r', 'i', 'd', 'i', 'u', 'm', 'f', 'l', 'a', 'r', 'e', '.', 'd', 'e', '\0',
   /* "irinkeby.nu", true */ 'i', 'r', 'i', 'n', 'k', 'e', 'b', 'y', '.', 'n', 'u', '\0',
   /* "iriomote.com", true */ 'i', 'r', 'i', 'o', 'm', 'o', 't', 'e', '.', 'c', 'o', 'm', '\0',
@@ -9972,29 +9975,29 @@ static const char kSTSHostTable[] = {
   /* "julienpaterne.com", true */ 'j', 'u', 'l', 'i', 'e', 'n', 'p', 'a', 't', 'e', 'r', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "julientartarin.com", true */ 'j', 'u', 'l', 'i', 'e', 'n', 't', 'a', 'r', 't', 'a', 'r', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "julio.jamil.nom.br", true */ 'j', 'u', 'l', 'i', 'o', '.', 'j', 'a', 'm', 'i', 'l', '.', 'n', 'o', 'm', '.', 'b', 'r', '\0',
   /* "juls.cloud", true */ 'j', 'u', 'l', 's', '.', 'c', 'l', 'o', 'u', 'd', '\0',
   /* "jultube.de", true */ 'j', 'u', 'l', 't', 'u', 'b', 'e', '.', 'd', 'e', '\0',
   /* "jumba.com.au", true */ 'j', 'u', 'm', 'b', 'a', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "jump.bg", false */ 'j', 'u', 'm', 'p', '.', 'b', 'g', '\0',
   /* "jump.wtf", true */ 'j', 'u', 'm', 'p', '.', 'w', 't', 'f', '\0',
-  /* "junaos.com", true */ 'j', 'u', 'n', 'a', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "junethack.net", true */ 'j', 'u', 'n', 'e', 't', 'h', 'a', 'c', 'k', '.', 'n', 'e', 't', '\0',
   /* "jungaa.fr", true */ 'j', 'u', 'n', 'g', 'a', 'a', '.', 'f', 'r', '\0',
   /* "jungesforumkonstanz.de", true */ 'j', 'u', 'n', 'g', 'e', 's', 'f', 'o', 'r', 'u', 'm', 'k', 'o', 'n', 's', 't', 'a', 'n', 'z', '.', 'd', 'e', '\0',
   /* "junglist.org", true */ 'j', 'u', 'n', 'g', 'l', 'i', 's', 't', '.', 'o', 'r', 'g', '\0',
   /* "juni.io", true */ 'j', 'u', 'n', 'i', '.', 'i', 'o', '\0',
   /* "juniwalk.cz", true */ 'j', 'u', 'n', 'i', 'w', 'a', 'l', 'k', '.', 'c', 'z', '\0',
   /* "junkdrome.org", true */ 'j', 'u', 'n', 'k', 'd', 'r', 'o', 'm', 'e', '.', 'o', 'r', 'g', '\0',
   /* "jurassicbarkharrogate.co.uk", true */ 'j', 'u', 'r', 'a', 's', 's', 'i', 'c', 'b', 'a', 'r', 'k', 'h', 'a', 'r', 'r', 'o', 'g', 'a', 't', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "juristas.com.br", true */ 'j', 'u', 'r', 'i', 's', 't', 'a', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "jurko.cz", true */ 'j', 'u', 'r', 'k', 'o', '.', 'c', 'z', '\0',
   /* "jurriaan.ninja", true */ 'j', 'u', 'r', 'r', 'i', 'a', 'a', 'n', '.', 'n', 'i', 'n', 'j', 'a', '\0',
   /* "just-a-clanpage.de", true */ 'j', 'u', 's', 't', '-', 'a', '-', 'c', 'l', 'a', 'n', 'p', 'a', 'g', 'e', '.', 'd', 'e', '\0',
+  /* "justanothercompany.name", true */ 'j', 'u', 's', 't', 'a', 'n', 'o', 't', 'h', 'e', 'r', 'c', 'o', 'm', 'p', 'a', 'n', 'y', '.', 'n', 'a', 'm', 'e', '\0',
   /* "justboom.co", true */ 'j', 'u', 's', 't', 'b', 'o', 'o', 'm', '.', 'c', 'o', '\0',
   /* "justchunks.net", true */ 'j', 'u', 's', 't', 'c', 'h', 'u', 'n', 'k', 's', '.', 'n', 'e', 't', '\0',
   /* "justgalak.com", true */ 'j', 'u', 's', 't', 'g', 'a', 'l', 'a', 'k', '.', 'c', 'o', 'm', '\0',
   /* "justice4assange.com", true */ 'j', 'u', 's', 't', 'i', 'c', 'e', '4', 'a', 's', 's', 'a', 'n', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "justiceforfathers.com", true */ 'j', 'u', 's', 't', 'i', 'c', 'e', 'f', 'o', 'r', 'f', 'a', 't', 'h', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "justinellingwood.com", true */ 'j', 'u', 's', 't', 'i', 'n', 'e', 'l', 'l', 'i', 'n', 'g', 'w', 'o', 'o', 'd', '.', 'c', 'o', 'm', '\0',
   /* "justinharrison.ca", true */ 'j', 'u', 's', 't', 'i', 'n', 'h', 'a', 'r', 'r', 'i', 's', 'o', 'n', '.', 'c', 'a', '\0',
   /* "justinho.com", true */ 'j', 'u', 's', 't', 'i', 'n', 'h', 'o', '.', 'c', 'o', 'm', '\0',
@@ -10026,16 +10029,17 @@ static const char kSTSHostTable[] = {
   /* "k9swx.com", true */ 'k', '9', 's', 'w', 'x', '.', 'c', 'o', 'm', '\0',
   /* "kaangenc.me", true */ 'k', 'a', 'a', 'n', 'g', 'e', 'n', 'c', '.', 'm', 'e', '\0',
   /* "kaasbijwijn.nl", true */ 'k', 'a', 'a', 's', 'b', 'i', 'j', 'w', 'i', 'j', 'n', '.', 'n', 'l', '\0',
   /* "kab-s.de", true */ 'k', 'a', 'b', '-', 's', '.', 'd', 'e', '\0',
   /* "kabat-fans.cz", true */ 'k', 'a', 'b', 'a', 't', '-', 'f', 'a', 'n', 's', '.', 'c', 'z', '\0',
   /* "kabeuchi.com", true */ 'k', 'a', 'b', 'e', 'u', 'c', 'h', 'i', '.', 'c', 'o', 'm', '\0',
   /* "kaboom.pw", true */ 'k', 'a', 'b', 'o', 'o', 'm', '.', 'p', 'w', '\0',
   /* "kabu-abc.com", true */ 'k', 'a', 'b', 'u', '-', 'a', 'b', 'c', '.', 'c', 'o', 'm', '\0',
+  /* "kabus.org", true */ 'k', 'a', 'b', 'u', 's', '.', 'o', 'r', 'g', '\0',
   /* "kachlikova2.cz", true */ 'k', 'a', 'c', 'h', 'l', 'i', 'k', 'o', 'v', 'a', '2', '.', 'c', 'z', '\0',
   /* "kack.website", true */ 'k', 'a', 'c', 'k', '.', 'w', 'e', 'b', 's', 'i', 't', 'e', '\0',
   /* "kackscharf.de", true */ 'k', 'a', 'c', 'k', 's', 'c', 'h', 'a', 'r', 'f', '.', 'd', 'e', '\0',
   /* "kadmec.com", true */ 'k', 'a', 'd', 'm', 'e', 'c', '.', 'c', 'o', 'm', '\0',
   /* "kaffeekrone.de", true */ 'k', 'a', 'f', 'f', 'e', 'e', 'k', 'r', 'o', 'n', 'e', '.', 'd', 'e', '\0',
   /* "kafoom.de", true */ 'k', 'a', 'f', 'o', 'o', 'm', '.', 'd', 'e', '\0',
   /* "kaheim.de", false */ 'k', 'a', 'h', 'e', 'i', 'm', '.', 'd', 'e', '\0',
   /* "kaigojj.com", true */ 'k', 'a', 'i', 'g', 'o', 'j', 'j', '.', 'c', 'o', 'm', '\0',
@@ -10884,17 +10888,16 @@ static const char kSTSHostTable[] = {
   /* "law-peters.de", true */ 'l', 'a', 'w', '-', 'p', 'e', 't', 'e', 'r', 's', '.', 'd', 'e', '\0',
   /* "lawformt.com", true */ 'l', 'a', 'w', 'f', 'o', 'r', 'm', 't', '.', 'c', 'o', 'm', '\0',
   /* "lawnuk.com", true */ 'l', 'a', 'w', 'n', 'u', 'k', '.', 'c', 'o', 'm', '\0',
   /* "lawrence-institute.com", true */ 'l', 'a', 'w', 'r', 'e', 'n', 'c', 'e', '-', 'i', 'n', 's', 't', 'i', 't', 'u', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "lawrencemurgatroyd.com", true */ 'l', 'a', 'w', 'r', 'e', 'n', 'c', 'e', 'm', 'u', 'r', 'g', 'a', 't', 'r', 'o', 'y', 'd', '.', 'c', 'o', 'm', '\0',
   /* "layer8.tk", true */ 'l', 'a', 'y', 'e', 'r', '8', '.', 't', 'k', '\0',
   /* "laylo.nl", true */ 'l', 'a', 'y', 'l', 'o', '.', 'n', 'l', '\0',
   /* "layoutsatzunddruck.de", true */ 'l', 'a', 'y', 'o', 'u', 't', 's', 'a', 't', 'z', 'u', 'n', 'd', 'd', 'r', 'u', 'c', 'k', '.', 'd', 'e', '\0',
-  /* "lazerus.net", true */ 'l', 'a', 'z', 'e', 'r', 'u', 's', '.', 'n', 'e', 't', '\0',
   /* "lazowik.pl", true */ 'l', 'a', 'z', 'o', 'w', 'i', 'k', '.', 'p', 'l', '\0',
   /* "lazurit.com", true */ 'l', 'a', 'z', 'u', 'r', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "lb-toner.de", true */ 'l', 'b', '-', 't', 'o', 'n', 'e', 'r', '.', 'd', 'e', '\0',
   /* "lbayer.com", true */ 'l', 'b', 'a', 'y', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "lbihrhelpdesk.com", true */ 'l', 'b', 'i', 'h', 'r', 'h', 'e', 'l', 'p', 'd', 'e', 's', 'k', '.', 'c', 'o', 'm', '\0',
   /* "lbs-logics.com", true */ 'l', 'b', 's', '-', 'l', 'o', 'g', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "lca-pv.de", true */ 'l', 'c', 'a', '-', 'p', 'v', '.', 'd', 'e', '\0',
   /* "lcti.biz", true */ 'l', 'c', 't', 'i', '.', 'b', 'i', 'z', '\0',
@@ -10983,17 +10986,16 @@ static const char kSTSHostTable[] = {
   /* "legymnase.eu", true */ 'l', 'e', 'g', 'y', 'm', 'n', 'a', 's', 'e', '.', 'e', 'u', '\0',
   /* "lehighmathcircle.org", true */ 'l', 'e', 'h', 'i', 'g', 'h', 'm', 'a', 't', 'h', 'c', 'i', 'r', 'c', 'l', 'e', '.', 'o', 'r', 'g', '\0',
   /* "lehtinen.xyz", true */ 'l', 'e', 'h', 't', 'i', 'n', 'e', 'n', '.', 'x', 'y', 'z', '\0',
   /* "leibniz-remscheid.de", false */ 'l', 'e', 'i', 'b', 'n', 'i', 'z', '-', 'r', 'e', 'm', 's', 'c', 'h', 'e', 'i', 'd', '.', 'd', 'e', '\0',
   /* "leigh.life", true */ 'l', 'e', 'i', 'g', 'h', '.', 'l', 'i', 'f', 'e', '\0',
   /* "leighneithardt.com", true */ 'l', 'e', 'i', 'g', 'h', 'n', 'e', 'i', 't', 'h', 'a', 'r', 'd', 't', '.', 'c', 'o', 'm', '\0',
   /* "leilautourdumon.de", true */ 'l', 'e', 'i', 'l', 'a', 'u', 't', 'o', 'u', 'r', 'd', 'u', 'm', 'o', 'n', '.', 'd', 'e', '\0',
   /* "leilonorte.com", true */ 'l', 'e', 'i', 'l', 'o', 'n', 'o', 'r', 't', 'e', '.', 'c', 'o', 'm', '\0',
-  /* "leiming.co", true */ 'l', 'e', 'i', 'm', 'i', 'n', 'g', '.', 'c', 'o', '\0',
   /* "leipzig.photo", true */ 'l', 'e', 'i', 'p', 'z', 'i', 'g', '.', 'p', 'h', 'o', 't', 'o', '\0',
   /* "leisure-blog.com", true */ 'l', 'e', 'i', 's', 'u', 'r', 'e', '-', 'b', 'l', 'o', 'g', '.', 'c', 'o', 'm', '\0',
   /* "lel.ovh", true */ 'l', 'e', 'l', '.', 'o', 'v', 'h', '\0',
   /* "lelubre.info", true */ 'l', 'e', 'l', 'u', 'b', 'r', 'e', '.', 'i', 'n', 'f', 'o', '\0',
   /* "lemarcheelagrandeguerra.it", true */ 'l', 'e', 'm', 'a', 'r', 'c', 'h', 'e', 'e', 'l', 'a', 'g', 'r', 'a', 'n', 'd', 'e', 'g', 'u', 'e', 'r', 'r', 'a', '.', 'i', 't', '\0',
   /* "lemoine.at", true */ 'l', 'e', 'm', 'o', 'i', 'n', 'e', '.', 'a', 't', '\0',
   /* "lemon.co", true */ 'l', 'e', 'm', 'o', 'n', '.', 'c', 'o', '\0',
   /* "lemondrops.xyz", true */ 'l', 'e', 'm', 'o', 'n', 'd', 'r', 'o', 'p', 's', '.', 'x', 'y', 'z', '\0',
@@ -11176,17 +11178,16 @@ static const char kSTSHostTable[] = {
   /* "lindon.pw", true */ 'l', 'i', 'n', 'd', 'o', 'n', '.', 'p', 'w', '\0',
   /* "lindskogen.se", true */ 'l', 'i', 'n', 'd', 's', 'k', 'o', 'g', 'e', 'n', '.', 's', 'e', '\0',
   /* "lindy.co", true */ 'l', 'i', 'n', 'd', 'y', '.', 'c', 'o', '\0',
   /* "lingerie.com.br", true */ 'l', 'i', 'n', 'g', 'e', 'r', 'i', 'e', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "lingolia.com", true */ 'l', 'i', 'n', 'g', 'o', 'l', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "lingotaxi.com", true */ 'l', 'i', 'n', 'g', 'o', 't', 'a', 'x', 'i', '.', 'c', 'o', 'm', '\0',
   /* "linguamilla.com", true */ 'l', 'i', 'n', 'g', 'u', 'a', 'm', 'i', 'l', 'l', 'a', '.', 'c', 'o', 'm', '\0',
   /* "linguatrip.com", false */ 'l', 'i', 'n', 'g', 'u', 'a', 't', 'r', 'i', 'p', '.', 'c', 'o', 'm', '\0',
-  /* "lingvo-svoboda.ru", true */ 'l', 'i', 'n', 'g', 'v', 'o', '-', 's', 'v', 'o', 'b', 'o', 'd', 'a', '.', 'r', 'u', '\0',
   /* "link-sanitizer.com", true */ 'l', 'i', 'n', 'k', '-', 's', 'a', 'n', 'i', 't', 'i', 'z', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "linkages.org", true */ 'l', 'i', 'n', 'k', 'a', 'g', 'e', 's', '.', 'o', 'r', 'g', '\0',
   /* "linkenheil.org", true */ 'l', 'i', 'n', 'k', 'e', 'n', 'h', 'e', 'i', 'l', '.', 'o', 'r', 'g', '\0',
   /* "linklocker.co", true */ 'l', 'i', 'n', 'k', 'l', 'o', 'c', 'k', 'e', 'r', '.', 'c', 'o', '\0',
   /* "linkmaker.co.uk", true */ 'l', 'i', 'n', 'k', 'm', 'a', 'k', 'e', 'r', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "linkonaut.net", true */ 'l', 'i', 'n', 'k', 'o', 'n', 'a', 'u', 't', '.', 'n', 'e', 't', '\0',
   /* "linksanitizer.com", true */ 'l', 'i', 'n', 'k', 's', 'a', 'n', 'i', 't', 'i', 'z', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "linkycat.com", true */ 'l', 'i', 'n', 'k', 'y', 'c', 'a', 't', '.', 'c', 'o', 'm', '\0',
@@ -11217,16 +11218,17 @@ static const char kSTSHostTable[] = {
   /* "linx.net", true */ 'l', 'i', 'n', 'x', '.', 'n', 'e', 't', '\0',
   /* "linzgau.de", true */ 'l', 'i', 'n', 'z', 'g', 'a', 'u', '.', 'd', 'e', '\0',
   /* "lionlyrics.com", true */ 'l', 'i', 'o', 'n', 'l', 'y', 'r', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "liornavok.com", true */ 'l', 'i', 'o', 'r', 'n', 'a', 'v', 'o', 'k', '.', 'c', 'o', 'm', '\0',
   /* "liqd.net", true */ 'l', 'i', 'q', 'd', '.', 'n', 'e', 't', '\0',
   /* "liquid.cz", true */ 'l', 'i', 'q', 'u', 'i', 'd', '.', 'c', 'z', '\0',
   /* "liquidcomm.net", true */ 'l', 'i', 'q', 'u', 'i', 'd', 'c', 'o', 'm', 'm', '.', 'n', 'e', 't', '\0',
   /* "liquidhost.co", true */ 'l', 'i', 'q', 'u', 'i', 'd', 'h', 'o', 's', 't', '.', 'c', 'o', '\0',
+  /* "lirion.de", true */ 'l', 'i', 'r', 'i', 'o', 'n', '.', 'd', 'e', '\0',
   /* "liris-beautywelt.de", true */ 'l', 'i', 'r', 'i', 's', '-', 'b', 'e', 'a', 'u', 't', 'y', 'w', 'e', 'l', 't', '.', 'd', 'e', '\0',
   /* "lirnberger.com", true */ 'l', 'i', 'r', 'n', 'b', 'e', 'r', 'g', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "lisamccorrie.com", true */ 'l', 'i', 's', 'a', 'm', 'c', 'c', 'o', 'r', 'r', 'i', 'e', '.', 'c', 'o', 'm', '\0',
   /* "lisamortimore.com", true */ 'l', 'i', 's', 'a', 'm', 'o', 'r', 't', 'i', 'm', 'o', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "lisieuxarquitetura.com.br", true */ 'l', 'i', 's', 'i', 'e', 'u', 'x', 'a', 'r', 'q', 'u', 'i', 't', 'e', 't', 'u', 'r', 'a', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "liskgdt.net", true */ 'l', 'i', 's', 'k', 'g', 'd', 't', '.', 'n', 'e', 't', '\0',
   /* "lislan.org.uk", true */ 'l', 'i', 's', 'l', 'a', 'n', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "lisonfan.com", true */ 'l', 'i', 's', 'o', 'n', 'f', 'a', 'n', '.', 'c', 'o', 'm', '\0',
@@ -11387,16 +11389,17 @@ static const char kSTSHostTable[] = {
   /* "look.co.il", true */ 'l', 'o', 'o', 'k', '.', 'c', 'o', '.', 'i', 'l', '\0',
   /* "lookastic.co.uk", true */ 'l', 'o', 'o', 'k', 'a', 's', 't', 'i', 'c', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "lookastic.com", true */ 'l', 'o', 'o', 'k', 'a', 's', 't', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "lookastic.de", true */ 'l', 'o', 'o', 'k', 'a', 's', 't', 'i', 'c', '.', 'd', 'e', '\0',
   /* "lookastic.es", true */ 'l', 'o', 'o', 'k', 'a', 's', 't', 'i', 'c', '.', 'e', 's', '\0',
   /* "lookastic.fr", true */ 'l', 'o', 'o', 'k', 'a', 's', 't', 'i', 'c', '.', 'f', 'r', '\0',
   /* "lookastic.mx", true */ 'l', 'o', 'o', 'k', 'a', 's', 't', 'i', 'c', '.', 'm', 'x', '\0',
   /* "lookastic.ru", true */ 'l', 'o', 'o', 'k', 'a', 's', 't', 'i', 'c', '.', 'r', 'u', '\0',
+  /* "lookyman.net", true */ 'l', 'o', 'o', 'k', 'y', 'm', 'a', 'n', '.', 'n', 'e', 't', '\0',
   /* "loony.info", true */ 'l', 'o', 'o', 'n', 'y', '.', 'i', 'n', 'f', 'o', '\0',
   /* "loophost.com.br", false */ 'l', 'o', 'o', 'p', 'h', 'o', 's', 't', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "loopower.com", true */ 'l', 'o', 'o', 'p', 'o', 'w', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "loopstart.org", true */ 'l', 'o', 'o', 'p', 's', 't', 'a', 'r', 't', '.', 'o', 'r', 'g', '\0',
   /* "loothole.com", true */ 'l', 'o', 'o', 't', 'h', 'o', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "loovto.net", true */ 'l', 'o', 'o', 'v', 't', 'o', '.', 'n', 'e', 't', '\0',
   /* "loqu8.com", true */ 'l', 'o', 'q', 'u', '8', '.', 'c', 'o', 'm', '\0',
   /* "lore.azurewebsites.net", true */ 'l', 'o', 'r', 'e', '.', 'a', 'z', 'u', 'r', 'e', 'w', 'e', 'b', 's', 'i', 't', 'e', 's', '.', 'n', 'e', 't', '\0',
@@ -11764,17 +11767,16 @@ static const char kSTSHostTable[] = {
   /* "manshop24.com", true */ 'm', 'a', 'n', 's', 'h', 'o', 'p', '2', '4', '.', 'c', 'o', 'm', '\0',
   /* "mantor.org", false */ 'm', 'a', 'n', 't', 'o', 'r', '.', 'o', 'r', 'g', '\0',
   /* "manuel-herrmann.de", true */ 'm', 'a', 'n', 'u', 'e', 'l', '-', 'h', 'e', 'r', 'r', 'm', 'a', 'n', 'n', '.', 'd', 'e', '\0',
   /* "manueldopheide.com", true */ 'm', 'a', 'n', 'u', 'e', 'l', 'd', 'o', 'p', 'h', 'e', 'i', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "manueli.de", true */ 'm', 'a', 'n', 'u', 'e', 'l', 'i', '.', 'd', 'e', '\0',
   /* "manufacturing.gov", true */ 'm', 'a', 'n', 'u', 'f', 'a', 'c', 't', 'u', 'r', 'i', 'n', 'g', '.', 'g', 'o', 'v', '\0',
   /* "manutd.org.np", true */ 'm', 'a', 'n', 'u', 't', 'd', '.', 'o', 'r', 'g', '.', 'n', 'p', '\0',
   /* "manuth.life", true */ 'm', 'a', 'n', 'u', 't', 'h', '.', 'l', 'i', 'f', 'e', '\0',
-  /* "manutrol.com.br", true */ 'm', 'a', 'n', 'u', 't', 'r', 'o', 'l', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "manwithavan.co.uk", true */ 'm', 'a', 'n', 'w', 'i', 't', 'h', 'a', 'v', 'a', 'n', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "manyetikboya.com", true */ 'm', 'a', 'n', 'y', 'e', 't', 'i', 'k', 'b', 'o', 'y', 'a', '.', 'c', 'o', 'm', '\0',
   /* "manyiu.com", true */ 'm', 'a', 'n', 'y', 'i', 'u', '.', 'c', 'o', 'm', '\0',
   /* "manyue.org", true */ 'm', 'a', 'n', 'y', 'u', 'e', '.', 'o', 'r', 'g', '\0',
   /* "maone.net", true */ 'm', 'a', 'o', 'n', 'e', '.', 'n', 'e', 't', '\0',
   /* "maorseo.com", true */ 'm', 'a', 'o', 'r', 's', 'e', 'o', '.', 'c', 'o', 'm', '\0',
   /* "maosensanguentadasdejesus.net", true */ 'm', 'a', 'o', 's', 'e', 'n', 's', 'a', 'n', 'g', 'u', 'e', 'n', 't', 'a', 'd', 'a', 's', 'd', 'e', 'j', 'e', 's', 'u', 's', '.', 'n', 'e', 't', '\0',
   /* "maowtm.org", true */ 'm', 'a', 'o', 'w', 't', 'm', '.', 'o', 'r', 'g', '\0',
@@ -11891,17 +11893,16 @@ static const char kSTSHostTable[] = {
   /* "maruhoi.com", true */ 'm', 'a', 'r', 'u', 'h', 'o', 'i', '.', 'c', 'o', 'm', '\0',
   /* "maryjruggles.com", true */ 'm', 'a', 'r', 'y', 'j', 'r', 'u', 'g', 'g', 'l', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "masa-hou.com", true */ 'm', 'a', 's', 'a', '-', 'h', 'o', 'u', '.', 'c', 'o', 'm', '\0',
   /* "masa-yoga.com", true */ 'm', 'a', 's', 'a', '-', 'y', 'o', 'g', 'a', '.', 'c', 'o', 'm', '\0',
   /* "masa.li", true */ 'm', 'a', 's', 'a', '.', 'l', 'i', '\0',
   /* "mascosolutions.com", true */ 'm', 'a', 's', 'c', 'o', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "maservant.net", true */ 'm', 'a', 's', 'e', 'r', 'v', 'a', 'n', 't', '.', 'n', 'e', 't', '\0',
   /* "mashek.net", true */ 'm', 'a', 's', 'h', 'e', 'k', '.', 'n', 'e', 't', '\0',
-  /* "mashnew.com", true */ 'm', 'a', 's', 'h', 'n', 'e', 'w', '.', 'c', 'o', 'm', '\0',
   /* "masiniunelte.store.ro", true */ 'm', 'a', 's', 'i', 'n', 'i', 'u', 'n', 'e', 'l', 't', 'e', '.', 's', 't', 'o', 'r', 'e', '.', 'r', 'o', '\0',
   /* "maskinkultur.com", true */ 'm', 'a', 's', 'k', 'i', 'n', 'k', 'u', 'l', 't', 'u', 'r', '.', 'c', 'o', 'm', '\0',
   /* "massdrop.com", true */ 'm', 'a', 's', 's', 'd', 'r', 'o', 'p', '.', 'c', 'o', 'm', '\0',
   /* "masse.org", true */ 'm', 'a', 's', 's', 'e', '.', 'o', 'r', 'g', '\0',
   /* "masshiro.blog", true */ 'm', 'a', 's', 's', 'h', 'i', 'r', 'o', '.', 'b', 'l', 'o', 'g', '\0',
   /* "massivum.de", false */ 'm', 'a', 's', 's', 'i', 'v', 'u', 'm', '.', 'd', 'e', '\0',
   /* "massoni.pl", true */ 'm', 'a', 's', 's', 'o', 'n', 'i', '.', 'p', 'l', '\0',
   /* "massot.eu", true */ 'm', 'a', 's', 's', 'o', 't', '.', 'e', 'u', '\0',
@@ -12069,16 +12070,17 @@ static const char kSTSHostTable[] = {
   /* "mcynews.com", true */ 'm', 'c', 'y', 'n', 'e', 'w', 's', '.', 'c', 'o', 'm', '\0',
   /* "mcyukon.com", true */ 'm', 'c', 'y', 'u', 'k', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "md5file.com", true */ 'm', 'd', '5', 'f', 'i', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "md5hashing.net", true */ 'm', 'd', '5', 'h', 'a', 's', 'h', 'i', 'n', 'g', '.', 'n', 'e', 't', '\0',
   /* "mdcloudpracticesolutions.com", true */ 'm', 'd', 'c', 'l', 'o', 'u', 'd', 'p', 'r', 'a', 'c', 't', 'i', 'c', 'e', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "mdcloudps.com", true */ 'm', 'd', 'c', 'l', 'o', 'u', 'd', 'p', 's', '.', 'c', 'o', 'm', '\0',
   /* "mdek.at", true */ 'm', 'd', 'e', 'k', '.', 'a', 't', '\0',
   /* "mdewendt.de", true */ 'm', 'd', 'e', 'w', 'e', 'n', 'd', 't', '.', 'd', 'e', '\0',
+  /* "mdkr.nl", true */ 'm', 'd', 'k', 'r', '.', 'n', 'l', '\0',
   /* "mdma.net", true */ 'm', 'd', 'm', 'a', '.', 'n', 'e', 't', '\0',
   /* "mdmed.clinic", true */ 'm', 'd', 'm', 'e', 'd', '.', 'c', 'l', 'i', 'n', 'i', 'c', '\0',
   /* "mdns.eu", true */ 'm', 'd', 'n', 's', '.', 'e', 'u', '\0',
   /* "mdosch.de", true */ 'm', 'd', 'o', 's', 'c', 'h', '.', 'd', 'e', '\0',
   /* "mdpraha.cz", true */ 'm', 'd', 'p', 'r', 'a', 'h', 'a', '.', 'c', 'z', '\0',
   /* "mdwftw.com", true */ 'm', 'd', 'w', 'f', 't', 'w', '.', 'c', 'o', 'm', '\0',
   /* "mdx.no", true */ 'm', 'd', 'x', '.', 'n', 'o', '\0',
   /* "mdxn.org", true */ 'm', 'd', 'x', 'n', '.', 'o', 'r', 'g', '\0',
@@ -12263,17 +12265,17 @@ static const char kSTSHostTable[] = {
   /* "meteobox.sk", true */ 'm', 'e', 't', 'e', 'o', 'b', 'o', 'x', '.', 's', 'k', '\0',
   /* "meteorapp.space", true */ 'm', 'e', 't', 'e', 'o', 'r', 'a', 'p', 'p', '.', 's', 'p', 'a', 'c', 'e', '\0',
   /* "meteosmit.it", true */ 'm', 'e', 't', 'e', 'o', 's', 'm', 'i', 't', '.', 'i', 't', '\0',
   /* "meter.md", true */ 'm', 'e', 't', 'e', 'r', '.', 'm', 'd', '\0',
   /* "meterhost.com", true */ 'm', 'e', 't', 'e', 'r', 'h', 'o', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "methamphetamine.co.uk", true */ 'm', 'e', 't', 'h', 'a', 'm', 'p', 'h', 'e', 't', 'a', 'm', 'i', 'n', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "methylone.com", true */ 'm', 'e', 't', 'h', 'y', 'l', 'o', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "metricaid.com", true */ 'm', 'e', 't', 'r', 'i', 'c', 'a', 'i', 'd', '.', 'c', 'o', 'm', '\0',
-  /* "metronaut.de", true */ 'm', 'e', 't', 'r', 'o', 'n', 'a', 'u', 't', '.', 'd', 'e', '\0',
+  /* "metrobriefs.com", true */ 'm', 'e', 't', 'r', 'o', 'b', 'r', 'i', 'e', 'f', 's', '.', 'c', 'o', 'm', '\0',
   /* "metropop.ch", true */ 'm', 'e', 't', 'r', 'o', 'p', 'o', 'p', '.', 'c', 'h', '\0',
   /* "metsasta.com", true */ 'm', 'e', 't', 's', 'a', 's', 't', 'a', '.', 'c', 'o', 'm', '\0',
   /* "metzgerei-birkenhof.de", true */ 'm', 'e', 't', 'z', 'g', 'e', 'r', 'e', 'i', '-', 'b', 'i', 'r', 'k', 'e', 'n', 'h', 'o', 'f', '.', 'd', 'e', '\0',
   /* "meulike.us", true */ 'm', 'e', 'u', 'l', 'i', 'k', 'e', '.', 'u', 's', '\0',
   /* "meusigno.com", true */ 'm', 'e', 'u', 's', 'i', 'g', 'n', 'o', '.', 'c', 'o', 'm', '\0',
   /* "mevo.xyz", true */ 'm', 'e', 'v', 'o', '.', 'x', 'y', 'z', '\0',
   /* "mevs.cz", true */ 'm', 'e', 'v', 's', '.', 'c', 'z', '\0',
   /* "mexican.dating", true */ 'm', 'e', 'x', 'i', 'c', 'a', 'n', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
@@ -12409,17 +12411,16 @@ static const char kSTSHostTable[] = {
   /* "minami.xyz", true */ 'm', 'i', 'n', 'a', 'm', 'i', '.', 'x', 'y', 'z', '\0',
   /* "minantavla.se", true */ 'm', 'i', 'n', 'a', 'n', 't', 'a', 'v', 'l', 'a', '.', 's', 'e', '\0',
   /* "minaprine.com", true */ 'm', 'i', 'n', 'a', 'p', 'r', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "mind-box.ch", true */ 'm', 'i', 'n', 'd', '-', 'b', 'o', 'x', '.', 'c', 'h', '\0',
   /* "mind-hochschul-netzwerk.de", true */ 'm', 'i', 'n', 'd', '-', 'h', 'o', 'c', 'h', 's', 'c', 'h', 'u', 'l', '-', 'n', 'e', 't', 'z', 'w', 'e', 'r', 'k', '.', 'd', 'e', '\0',
   /* "mind-moves.es", true */ 'm', 'i', 'n', 'd', '-', 'm', 'o', 'v', 'e', 's', '.', 'e', 's', '\0',
   /* "mind.sh", true */ 'm', 'i', 'n', 'd', '.', 's', 'h', '\0',
   /* "mindbodycontinuum.com", true */ 'm', 'i', 'n', 'd', 'b', 'o', 'd', 'y', 'c', 'o', 'n', 't', 'i', 'n', 'u', 'u', 'm', '.', 'c', 'o', 'm', '\0',
-  /* "mindcoding.ro", true */ 'm', 'i', 'n', 'd', 'c', 'o', 'd', 'i', 'n', 'g', '.', 'r', 'o', '\0',
   /* "mindturbo.com", true */ 'm', 'i', 'n', 'd', 't', 'u', 'r', 'b', 'o', '.', 'c', 'o', 'm', '\0',
   /* "mindwerks.net", true */ 'm', 'i', 'n', 'd', 'w', 'e', 'r', 'k', 's', '.', 'n', 'e', 't', '\0',
   /* "mine.world", true */ 'm', 'i', 'n', 'e', '.', 'w', 'o', 'r', 'l', 'd', '\0',
   /* "mine260309.me", true */ 'm', 'i', 'n', 'e', '2', '6', '0', '3', '0', '9', '.', 'm', 'e', '\0',
   /* "minecraft-forum.cf", true */ 'm', 'i', 'n', 'e', 'c', 'r', 'a', 'f', 't', '-', 'f', 'o', 'r', 'u', 'm', '.', 'c', 'f', '\0',
   /* "minecraft-forum.eu", true */ 'm', 'i', 'n', 'e', 'c', 'r', 'a', 'f', 't', '-', 'f', 'o', 'r', 'u', 'm', '.', 'e', 'u', '\0',
   /* "minecraft-forum.ga", true */ 'm', 'i', 'n', 'e', 'c', 'r', 'a', 'f', 't', '-', 'f', 'o', 'r', 'u', 'm', '.', 'g', 'a', '\0',
   /* "minecraft-forum.gq", true */ 'm', 'i', 'n', 'e', 'c', 'r', 'a', 'f', 't', '-', 'f', 'o', 'r', 'u', 'm', '.', 'g', 'q', '\0',
@@ -12487,17 +12488,16 @@ static const char kSTSHostTable[] = {
   /* "misoji-resist.com", true */ 'm', 'i', 's', 'o', 'j', 'i', '-', 'r', 'e', 's', 'i', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "miss-inventory.co.uk", true */ 'm', 'i', 's', 's', '-', 'i', 'n', 'v', 'e', 'n', 't', 'o', 'r', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "missdream.org", true */ 'm', 'i', 's', 's', 'd', 'r', 'e', 'a', 'm', '.', 'o', 'r', 'g', '\0',
   /* "missguidedus.com", true */ 'm', 'i', 's', 's', 'g', 'u', 'i', 'd', 'e', 'd', 'u', 's', '.', 'c', 'o', 'm', '\0',
   /* "mission-orange.de", true */ 'm', 'i', 's', 's', 'i', 'o', 'n', '-', 'o', 'r', 'a', 'n', 'g', 'e', '.', 'd', 'e', '\0',
   /* "missionsgemeinde.de", true */ 'm', 'i', 's', 's', 'i', 'o', 'n', 's', 'g', 'e', 'm', 'e', 'i', 'n', 'd', 'e', '.', 'd', 'e', '\0',
   /* "missip.nl", true */ 'm', 'i', 's', 's', 'i', 'p', '.', 'n', 'l', '\0',
   /* "misskey.xyz", true */ 'm', 'i', 's', 's', 'k', 'e', 'y', '.', 'x', 'y', 'z', '\0',
-  /* "missoy.me", true */ 'm', 'i', 's', 's', 'o', 'y', '.', 'm', 'e', '\0',
   /* "misssex.de", true */ 'm', 'i', 's', 's', 's', 'e', 'x', '.', 'd', 'e', '\0',
   /* "missualready.com", true */ 'm', 'i', 's', 's', 'u', 'a', 'l', 'r', 'e', 'a', 'd', 'y', '.', 'c', 'o', 'm', '\0',
   /* "missycosmeticos.com.br", true */ 'm', 'i', 's', 's', 'y', 'c', 'o', 's', 'm', 'e', 't', 'i', 'c', 'o', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "mistacms.com", true */ 'm', 'i', 's', 't', 'a', 'c', 'm', 's', '.', 'c', 'o', 'm', '\0',
   /* "mister-cooks.fr", true */ 'm', 'i', 's', 't', 'e', 'r', '-', 'c', 'o', 'o', 'k', 's', '.', 'f', 'r', '\0',
   /* "mistreaded.com", true */ 'm', 'i', 's', 't', 'r', 'e', 'a', 'd', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "mistybox.com", true */ 'm', 'i', 's', 't', 'y', 'b', 'o', 'x', '.', 'c', 'o', 'm', '\0',
   /* "misupport.dk", true */ 'm', 'i', 's', 'u', 'p', 'p', 'o', 'r', 't', '.', 'd', 'k', '\0',
@@ -12528,29 +12528,29 @@ static const char kSTSHostTable[] = {
   /* "mjanja.ch", true */ 'm', 'j', 'a', 'n', 'j', 'a', '.', 'c', 'h', '\0',
   /* "mjcaffarattilaw.com", true */ 'm', 'j', 'c', 'a', 'f', 'f', 'a', 'r', 'a', 't', 't', 'i', 'l', 'a', 'w', '.', 'c', 'o', 'm', '\0',
   /* "mjec.net", true */ 'm', 'j', 'e', 'c', '.', 'n', 'e', 't', '\0',
   /* "mjhsc.nl", true */ 'm', 'j', 'h', 's', 'c', '.', 'n', 'l', '\0',
   /* "mjlaurindo.pt", true */ 'm', 'j', 'l', 'a', 'u', 'r', 'i', 'n', 'd', 'o', '.', 'p', 't', '\0',
   /* "mk89.de", true */ 'm', 'k', '8', '9', '.', 'd', 'e', '\0',
   /* "mkaciuba.com", true */ 'm', 'k', 'a', 'c', 'i', 'u', 'b', 'a', '.', 'c', 'o', 'm', '\0',
   /* "mkakh.com", true */ 'm', 'k', 'a', 'k', 'h', '.', 'c', 'o', 'm', '\0',
+  /* "mkakh.xyz", true */ 'm', 'k', 'a', 'k', 'h', '.', 'x', 'y', 'z', '\0',
   /* "mkcert.org", true */ 'm', 'k', 'c', 'e', 'r', 't', '.', 'o', 'r', 'g', '\0',
   /* "mkes.com", true */ 'm', 'k', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "mkfs.fr", true */ 'm', 'k', 'f', 's', '.', 'f', 'r', '\0',
   /* "mkimage.com", true */ 'm', 'k', 'i', 'm', 'a', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "mkoppmann.at", true */ 'm', 'k', 'o', 'p', 'p', 'm', 'a', 'n', 'n', '.', 'a', 't', '\0',
   /* "mkp-deutschland.de", true */ 'm', 'k', 'p', '-', 'd', 'e', 'u', 't', 's', 'c', 'h', 'l', 'a', 'n', 'd', '.', 'd', 'e', '\0',
   /* "mkpef.org", true */ 'm', 'k', 'p', 'e', 'f', '.', 'o', 'r', 'g', '\0',
   /* "mkse.com", true */ 'm', 'k', 's', 'e', '.', 'c', 'o', 'm', '\0',
   /* "mktdigital.info", true */ 'm', 'k', 't', 'd', 'i', 'g', 'i', 't', 'a', 'l', '.', 'i', 'n', 'f', 'o', '\0',
   /* "mktemp.org", true */ 'm', 'k', 't', 'e', 'm', 'p', '.', 'o', 'r', 'g', '\0',
   /* "mkuznets.com", true */ 'm', 'k', 'u', 'z', 'n', 'e', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "mkw.st", true */ 'm', 'k', 'w', '.', 's', 't', '\0',
-  /* "mlcambiental.com.br", true */ 'm', 'l', 'c', 'a', 'm', 'b', 'i', 'e', 'n', 't', 'a', 'l', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "mlcnfriends.com", true */ 'm', 'l', 'c', 'n', 'f', 'r', 'i', 'e', 'n', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "mlemay.com", true */ 'm', 'l', 'e', 'm', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "mlpchan.net", true */ 'm', 'l', 'p', 'c', 'h', 'a', 'n', '.', 'n', 'e', 't', '\0',
   /* "mlpvc-rr.ml", true */ 'm', 'l', 'p', 'v', 'c', '-', 'r', 'r', '.', 'm', 'l', '\0',
   /* "mlrslateroofing.com.au", true */ 'm', 'l', 'r', 's', 'l', 'a', 't', 'e', 'r', 'o', 'o', 'f', 'i', 'n', 'g', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "mlsrv.de", true */ 'm', 'l', 's', 'r', 'v', '.', 'd', 'e', '\0',
   /* "mlvbphotography.com", true */ 'm', 'l', 'v', 'b', 'p', 'h', 'o', 't', 'o', 'g', 'r', 'a', 'p', 'h', 'y', '.', 'c', 'o', 'm', '\0',
   /* "mm13.at", true */ 'm', 'm', '1', '3', '.', 'a', 't', '\0',
@@ -12592,16 +12592,17 @@ static const char kSTSHostTable[] = {
   /* "mobility-events.ch", true */ 'm', 'o', 'b', 'i', 'l', 'i', 't', 'y', '-', 'e', 'v', 'e', 'n', 't', 's', '.', 'c', 'h', '\0',
   /* "mobilux.lv", true */ 'm', 'o', 'b', 'i', 'l', 'u', 'x', '.', 'l', 'v', '\0',
   /* "mobio.net", true */ 'm', 'o', 'b', 'i', 'o', '.', 'n', 'e', 't', '\0',
   /* "mobisaar-cloud.de", true */ 'm', 'o', 'b', 'i', 's', 'a', 'a', 'r', '-', 'c', 'l', 'o', 'u', 'd', '.', 'd', 'e', '\0',
   /* "mobobe.com", true */ 'm', 'o', 'b', 'o', 'b', 'e', '.', 'c', 'o', 'm', '\0',
   /* "mobsender.com", true */ 'm', 'o', 'b', 's', 'e', 'n', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "mochoko.com", true */ 'm', 'o', 'c', 'h', 'o', 'k', 'o', '.', 'c', 'o', 'm', '\0',
   /* "mockmyapp.com", true */ 'm', 'o', 'c', 'k', 'm', 'y', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
+  /* "mocurio.com", false */ 'm', 'o', 'c', 'u', 'r', 'i', 'o', '.', 'c', 'o', 'm', '\0',
   /* "modafinil.com", true */ 'm', 'o', 'd', 'a', 'f', 'i', 'n', 'i', 'l', '.', 'c', 'o', 'm', '\0',
   /* "modafinil.wiki", true */ 'm', 'o', 'd', 'a', 'f', 'i', 'n', 'i', 'l', '.', 'w', 'i', 'k', 'i', '\0',
   /* "modafo.com", true */ 'm', 'o', 'd', 'a', 'f', 'o', '.', 'c', 'o', 'm', '\0',
   /* "modalogi.com", true */ 'm', 'o', 'd', 'a', 'l', 'o', 'g', 'i', '.', 'c', 'o', 'm', '\0',
   /* "mode-individuell.de", true */ 'm', 'o', 'd', 'e', '-', 'i', 'n', 'd', 'i', 'v', 'i', 'd', 'u', 'e', 'l', 'l', '.', 'd', 'e', '\0',
   /* "mode-marine.com", true */ 'm', 'o', 'd', 'e', '-', 'm', 'a', 'r', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "modecaso.com", true */ 'm', 'o', 'd', 'e', 'c', 'a', 's', 'o', '.', 'c', 'o', 'm', '\0',
   /* "modehaus-marionk.de", true */ 'm', 'o', 'd', 'e', 'h', 'a', 'u', 's', '-', 'm', 'a', 'r', 'i', 'o', 'n', 'k', '.', 'd', 'e', '\0',
@@ -12639,16 +12640,17 @@ static const char kSTSHostTable[] = {
   /* "mojapraca.sk", true */ 'm', 'o', 'j', 'a', 'p', 'r', 'a', 'c', 'a', '.', 's', 'k', '\0',
   /* "mojzis.com", true */ 'm', 'o', 'j', 'z', 'i', 's', '.', 'c', 'o', 'm', '\0',
   /* "mojzis.cz", true */ 'm', 'o', 'j', 'z', 'i', 's', '.', 'c', 'z', '\0',
   /* "mojzisova.com", true */ 'm', 'o', 'j', 'z', 'i', 's', 'o', 'v', 'a', '.', 'c', 'o', 'm', '\0',
   /* "mokadev.com", true */ 'm', 'o', 'k', 'a', 'd', 'e', 'v', '.', 'c', 'o', 'm', '\0',
   /* "mokote.com", true */ 'm', 'o', 'k', 'o', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "molb.org", true */ 'm', 'o', 'l', 'b', '.', 'o', 'r', 'g', '\0',
   /* "molinero.xyz", true */ 'm', 'o', 'l', 'i', 'n', 'e', 'r', 'o', '.', 'x', 'y', 'z', '\0',
+  /* "momentoscoquetos.es", true */ 'm', 'o', 'm', 'e', 'n', 't', 'o', 's', 'c', 'o', 'q', 'u', 'e', 't', 'o', 's', '.', 'e', 's', '\0',
   /* "momentumdash.com", true */ 'm', 'o', 'm', 'e', 'n', 't', 'u', 'm', 'd', 'a', 's', 'h', '.', 'c', 'o', 'm', '\0',
   /* "mommel.com", true */ 'm', 'o', 'm', 'm', 'e', 'l', '.', 'c', 'o', 'm', '\0',
   /* "mommelonline.de", true */ 'm', 'o', 'm', 'm', 'e', 'l', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'd', 'e', '\0',
   /* "momozeit.de", true */ 'm', 'o', 'm', 'o', 'z', 'e', 'i', 't', '.', 'd', 'e', '\0',
   /* "momut.org", true */ 'm', 'o', 'm', 'u', 't', '.', 'o', 'r', 'g', '\0',
   /* "mon-a-lisa.com", true */ 'm', 'o', 'n', '-', 'a', '-', 'l', 'i', 's', 'a', '.', 'c', 'o', 'm', '\0',
   /* "mon-agenda.org", false */ 'm', 'o', 'n', '-', 'a', 'g', 'e', 'n', 'd', 'a', '.', 'o', 'r', 'g', '\0',
   /* "mon-partage.fr", true */ 'm', 'o', 'n', '-', 'p', 'a', 'r', 't', 'a', 'g', 'e', '.', 'f', 'r', '\0',
@@ -12831,17 +12833,16 @@ static const char kSTSHostTable[] = {
   /* "mtn.cc", true */ 'm', 't', 'n', '.', 'c', 'c', '\0',
   /* "mtnz.co.za", true */ 'm', 't', 'n', 'z', '.', 'c', 'o', '.', 'z', 'a', '\0',
   /* "mtouch.facebook.com", false */ 'm', 't', 'o', 'u', 'c', 'h', '.', 'f', 'a', 'c', 'e', 'b', 'o', 'o', 'k', '.', 'c', 'o', 'm', '\0',
   /* "mtr.md", true */ 'm', 't', 'r', '.', 'm', 'd', '\0',
   /* "mts-energia.eu", true */ 'm', 't', 's', '-', 'e', 'n', 'e', 'r', 'g', 'i', 'a', '.', 'e', 'u', '\0',
   /* "mts-server.com", true */ 'm', 't', 's', '-', 's', 'e', 'r', 'v', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "mtsolar.es", true */ 'm', 't', 's', 'o', 'l', 'a', 'r', '.', 'e', 's', '\0',
   /* "muabannhanh.com", false */ 'm', 'u', 'a', 'b', 'a', 'n', 'n', 'h', 'a', 'n', 'h', '.', 'c', 'o', 'm', '\0',
-  /* "muchohentai.com", true */ 'm', 'u', 'c', 'h', 'o', 'h', 'e', 'n', 't', 'a', 'i', '.', 'c', 'o', 'm', '\0',
   /* "muckingabout.eu", true */ 'm', 'u', 'c', 'k', 'i', 'n', 'g', 'a', 'b', 'o', 'u', 't', '.', 'e', 'u', '\0',
   /* "muehlemann.net", true */ 'm', 'u', 'e', 'h', 'l', 'e', 'm', 'a', 'n', 'n', '.', 'n', 'e', 't', '\0',
   /* "muellapp.com", true */ 'm', 'u', 'e', 'l', 'l', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "muenzubi.de", true */ 'm', 'u', 'e', 'n', 'z', 'u', 'b', 'i', '.', 'd', 'e', '\0',
   /* "muevetumundo.com.mx", true */ 'm', 'u', 'e', 'v', 'e', 't', 'u', 'm', 'u', 'n', 'd', 'o', '.', 'c', 'o', 'm', '.', 'm', 'x', '\0',
   /* "muga.space", true */ 'm', 'u', 'g', 'a', '.', 's', 'p', 'a', 'c', 'e', '\0',
   /* "muguayuan.com", true */ 'm', 'u', 'g', 'u', 'a', 'y', 'u', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "muj-svet.cz", true */ 'm', 'u', 'j', '-', 's', 'v', 'e', 't', '.', 'c', 'z', '\0',
@@ -12894,17 +12895,16 @@ static const char kSTSHostTable[] = {
   /* "musicwear.cz", true */ 'm', 'u', 's', 'i', 'c', 'w', 'e', 'a', 'r', '.', 'c', 'z', '\0',
   /* "musketonhaken.nl", false */ 'm', 'u', 's', 'k', 'e', 't', 'o', 'n', 'h', 'a', 'k', 'e', 'n', '.', 'n', 'l', '\0',
   /* "muslim.singles", true */ 'm', 'u', 's', 'l', 'i', 'm', '.', 's', 'i', 'n', 'g', 'l', 'e', 's', '\0',
   /* "muslimbanter.co.za", true */ 'm', 'u', 's', 'l', 'i', 'm', 'b', 'a', 'n', 't', 'e', 'r', '.', 'c', 'o', '.', 'z', 'a', '\0',
   /* "musmann.io", true */ 'm', 'u', 's', 'm', 'a', 'n', 'n', '.', 'i', 'o', '\0',
   /* "muspla.com", true */ 'm', 'u', 's', 'p', 'l', 'a', '.', 'c', 'o', 'm', '\0',
   /* "muspla.com.br", true */ 'm', 'u', 's', 'p', 'l', 'a', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "mustard.co.uk", true */ 'm', 'u', 's', 't', 'a', 'r', 'd', '.', 'c', 'o', '.', 'u', 'k', '\0',
-  /* "mustardking.me", true */ 'm', 'u', 's', 't', 'a', 'r', 'd', 'k', 'i', 'n', 'g', '.', 'm', 'e', '\0',
   /* "musthavesforreal.com", true */ 'm', 'u', 's', 't', 'h', 'a', 'v', 'e', 's', 'f', 'o', 'r', 'r', 'e', 'a', 'l', '.', 'c', 'o', 'm', '\0',
   /* "mutantmonkey.in", true */ 'm', 'u', 't', 'a', 'n', 't', 'm', 'o', 'n', 'k', 'e', 'y', '.', 'i', 'n', '\0',
   /* "mutantmonkey.info", true */ 'm', 'u', 't', 'a', 'n', 't', 'm', 'o', 'n', 'k', 'e', 'y', '.', 'i', 'n', 'f', 'o', '\0',
   /* "mutantmonkey.sexy", true */ 'm', 'u', 't', 'a', 'n', 't', 'm', 'o', 'n', 'k', 'e', 'y', '.', 's', 'e', 'x', 'y', '\0',
   /* "mutuals.cool", true */ 'm', 'u', 't', 'u', 'a', 'l', 's', '.', 'c', 'o', 'o', 'l', '\0',
   /* "mutuelle-obligatoire-pme.fr", true */ 'm', 'u', 't', 'u', 'e', 'l', 'l', 'e', '-', 'o', 'b', 'l', 'i', 'g', 'a', 't', 'o', 'i', 'r', 'e', '-', 'p', 'm', 'e', '.', 'f', 'r', '\0',
   /* "mutuelle.fr", true */ 'm', 'u', 't', 'u', 'e', 'l', 'l', 'e', '.', 'f', 'r', '\0',
   /* "muusikoiden.net", true */ 'm', 'u', 'u', 's', 'i', 'k', 'o', 'i', 'd', 'e', 'n', '.', 'n', 'e', 't', '\0',
@@ -13342,16 +13342,17 @@ static const char kSTSHostTable[] = {
   /* "netsystems.pro", true */ 'n', 'e', 't', 's', 'y', 's', 't', 'e', 'm', 's', '.', 'p', 'r', 'o', '\0',
   /* "nette.org", true */ 'n', 'e', 't', 't', 'e', '.', 'o', 'r', 'g', '\0',
   /* "nettia.fi", true */ 'n', 'e', 't', 't', 'i', 'a', '.', 'f', 'i', '\0',
   /* "netto-service.ch", true */ 'n', 'e', 't', 't', 'o', '-', 's', 'e', 'r', 'v', 'i', 'c', 'e', '.', 'c', 'h', '\0',
   /* "nettools.link", true */ 'n', 'e', 't', 't', 'o', 'o', 'l', 's', '.', 'l', 'i', 'n', 'k', '\0',
   /* "nettopower.dk", true */ 'n', 'e', 't', 't', 'o', 'p', 'o', 'w', 'e', 'r', '.', 'd', 'k', '\0',
   /* "nettplusultra-rhone.fr", true */ 'n', 'e', 't', 't', 'p', 'l', 'u', 's', 'u', 'l', 't', 'r', 'a', '-', 'r', 'h', 'o', 'n', 'e', '.', 'f', 'r', '\0',
   /* "nettx.co.uk", true */ 'n', 'e', 't', 't', 'x', '.', 'c', 'o', '.', 'u', 'k', '\0',
+  /* "netulo.com", true */ 'n', 'e', 't', 'u', 'l', 'o', '.', 'c', 'o', 'm', '\0',
   /* "netvizura.co.uk", true */ 'n', 'e', 't', 'v', 'i', 'z', 'u', 'r', 'a', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "netwarc.eu", true */ 'n', 'e', 't', 'w', 'a', 'r', 'c', '.', 'e', 'u', '\0',
   /* "netwarc.nl", true */ 'n', 'e', 't', 'w', 'a', 'r', 'c', '.', 'n', 'l', '\0',
   /* "netwerkmanager.nl", false */ 'n', 'e', 't', 'w', 'e', 'r', 'k', 'm', 'a', 'n', 'a', 'g', 'e', 'r', '.', 'n', 'l', '\0',
   /* "network-notes.com", true */ 'n', 'e', 't', 'w', 'o', 'r', 'k', '-', 'n', 'o', 't', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "network23.nl", true */ 'n', 'e', 't', 'w', 'o', 'r', 'k', '2', '3', '.', 'n', 'l', '\0',
   /* "networkalarmcorp.com", true */ 'n', 'e', 't', 'w', 'o', 'r', 'k', 'a', 'l', 'a', 'r', 'm', 'c', 'o', 'r', 'p', '.', 'c', 'o', 'm', '\0',
   /* "networkersdiary.com", true */ 'n', 'e', 't', 'w', 'o', 'r', 'k', 'e', 'r', 's', 'd', 'i', 'a', 'r', 'y', '.', 'c', 'o', 'm', '\0',
@@ -13539,16 +13540,17 @@ static const char kSTSHostTable[] = {
   /* "nitrous-networks.com", true */ 'n', 'i', 't', 'r', 'o', 'u', 's', '-', 'n', 'e', 't', 'w', 'o', 'r', 'k', 's', '.', 'c', 'o', 'm', '\0',
   /* "niu.moe", true */ 'n', 'i', 'u', '.', 'm', 'o', 'e', '\0',
   /* "niva.synology.me", true */ 'n', 'i', 'v', 'a', '.', 's', 'y', 'n', 'o', 'l', 'o', 'g', 'y', '.', 'm', 'e', '\0',
   /* "nivi.ca", true */ 'n', 'i', 'v', 'i', '.', 'c', 'a', '\0',
   /* "nja.id.au", true */ 'n', 'j', 'a', '.', 'i', 'd', '.', 'a', 'u', '\0',
   /* "njpjanssen.nl", true */ 'n', 'j', 'p', 'j', 'a', 'n', 's', 's', 'e', 'n', '.', 'n', 'l', '\0',
   /* "nkadvertising.online", true */ 'n', 'k', 'a', 'd', 'v', 'e', 'r', 't', 'i', 's', 'i', 'n', 'g', '.', 'o', 'n', 'l', 'i', 'n', 'e', '\0',
   /* "nkinka.de", true */ 'n', 'k', 'i', 'n', 'k', 'a', '.', 'd', 'e', '\0',
+  /* "nkp-media.de", true */ 'n', 'k', 'p', '-', 'm', 'e', 'd', 'i', 'a', '.', 'd', 'e', '\0',
   /* "nl-ix.net", true */ 'n', 'l', '-', 'i', 'x', '.', 'n', 'e', 't', '\0',
   /* "nl.search.yahoo.com", false */ 'n', 'l', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "nlap.ca", true */ 'n', 'l', 'a', 'p', '.', 'c', 'a', '\0',
   /* "nlegall.fr", true */ 'n', 'l', 'e', 'g', 'a', 'l', 'l', '.', 'f', 'r', '\0',
   /* "nlm.gov", true */ 'n', 'l', 'm', '.', 'g', 'o', 'v', '\0',
   /* "nlt.by", true */ 'n', 'l', 't', '.', 'b', 'y', '\0',
   /* "nmd.so", true */ 'n', 'm', 'd', '.', 's', 'o', '\0',
   /* "nmnd.de", true */ 'n', 'm', 'n', 'd', '.', 'd', 'e', '\0',
@@ -13618,17 +13620,16 @@ static const char kSTSHostTable[] = {
   /* "norman-preusser-gmbh.de", true */ 'n', 'o', 'r', 'm', 'a', 'n', '-', 'p', 'r', 'e', 'u', 's', 's', 'e', 'r', '-', 'g', 'm', 'b', 'h', '.', 'd', 'e', '\0',
   /* "normanbauer.com", true */ 'n', 'o', 'r', 'm', 'a', 'n', 'b', 'a', 'u', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "norrkemi.se", true */ 'n', 'o', 'r', 'r', 'k', 'e', 'm', 'i', '.', 's', 'e', '\0',
   /* "norrliden.de", true */ 'n', 'o', 'r', 'r', 'l', 'i', 'd', 'e', 'n', '.', 'd', 'e', '\0',
   /* "norskpensjon.no", true */ 'n', 'o', 'r', 's', 'k', 'p', 'e', 'n', 's', 'j', 'o', 'n', '.', 'n', 'o', '\0',
   /* "north.supply", true */ 'n', 'o', 'r', 't', 'h', '.', 's', 'u', 'p', 'p', 'l', 'y', '\0',
   /* "northatlantalaw.net", true */ 'n', 'o', 'r', 't', 'h', 'a', 't', 'l', 'a', 'n', 't', 'a', 'l', 'a', 'w', '.', 'n', 'e', 't', '\0',
   /* "northbrisbaneapartments.com.au", true */ 'n', 'o', 'r', 't', 'h', 'b', 'r', 'i', 's', 'b', 'a', 'n', 'e', 'a', 'p', 'a', 'r', 't', 'm', 'e', 'n', 't', 's', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
-  /* "northcutt.com", true */ 'n', 'o', 'r', 't', 'h', 'c', 'u', 't', 't', '.', 'c', 'o', 'm', '\0',
   /* "northeastcdc.org", true */ 'n', 'o', 'r', 't', 'h', 'e', 'a', 's', 't', 'c', 'd', 'c', '.', 'o', 'r', 'g', '\0',
   /* "northernmuscle.ca", true */ 'n', 'o', 'r', 't', 'h', 'e', 'r', 'n', 'm', 'u', 's', 'c', 'l', 'e', '.', 'c', 'a', '\0',
   /* "northfieldyarn.com", true */ 'n', 'o', 'r', 't', 'h', 'f', 'i', 'e', 'l', 'd', 'y', 'a', 'r', 'n', '.', 'c', 'o', 'm', '\0',
   /* "northpole.dance", true */ 'n', 'o', 'r', 't', 'h', 'p', 'o', 'l', 'e', '.', 'd', 'a', 'n', 'c', 'e', '\0',
   /* "northumbriagames.co.uk", true */ 'n', 'o', 'r', 't', 'h', 'u', 'm', 'b', 'r', 'i', 'a', 'g', 'a', 'm', 'e', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "northwoodsfish.com", true */ 'n', 'o', 'r', 't', 'h', 'w', 'o', 'o', 'd', 's', 'f', 'i', 's', 'h', '.', 'c', 'o', 'm', '\0',
   /* "nos-medias.fr", true */ 'n', 'o', 's', '-', 'm', 'e', 'd', 'i', 'a', 's', '.', 'f', 'r', '\0',
   /* "nos-oignons.net", true */ 'n', 'o', 's', '-', 'o', 'i', 'g', 'n', 'o', 'n', 's', '.', 'n', 'e', 't', '\0',
@@ -13688,16 +13689,17 @@ static const char kSTSHostTable[] = {
   /* "noxlogic.nl", true */ 'n', 'o', 'x', 'l', 'o', 'g', 'i', 'c', '.', 'n', 'l', '\0',
   /* "npath.de", true */ 'n', 'p', 'a', 't', 'h', '.', 'd', 'e', '\0',
   /* "npm.li", true */ 'n', 'p', 'm', '.', 'l', 'i', '\0',
   /* "npmcdn.com", true */ 'n', 'p', 'm', 'c', 'd', 'n', '.', 'c', 'o', 'm', '\0',
   /* "npw.net", true */ 'n', 'p', 'w', '.', 'n', 'e', 't', '\0',
   /* "nq7.pl", true */ 'n', 'q', '7', '.', 'p', 'l', '\0',
   /* "nrd.li", true */ 'n', 'r', 'd', '.', 'l', 'i', '\0',
   /* "nrkn.fr", true */ 'n', 'r', 'k', 'n', '.', 'f', 'r', '\0',
+  /* "nrnjn.xyz", true */ 'n', 'r', 'n', 'j', 'n', '.', 'x', 'y', 'z', '\0',
   /* "nsa.lol", true */ 'n', 's', 'a', '.', 'l', 'o', 'l', '\0',
   /* "nsa.wtf", true */ 'n', 's', 'a', '.', 'w', 't', 'f', '\0',
   /* "nsboston.org", true */ 'n', 's', 'b', 'o', 's', 't', 'o', 'n', '.', 'o', 'r', 'g', '\0',
   /* "nsboutique.com", true */ 'n', 's', 'b', 'o', 'u', 't', 'i', 'q', 'u', 'e', '.', 'c', 'o', 'm', '\0',
   /* "nscnet.jp", true */ 'n', 's', 'c', 'n', 'e', 't', '.', 'j', 'p', '\0',
   /* "nshost.ro", true */ 'n', 's', 'h', 'o', 's', 't', '.', 'r', 'o', '\0',
   /* "nsm.ee", true */ 'n', 's', 'm', '.', 'e', 'e', '\0',
   /* "nso.ie", true */ 'n', 's', 'o', '.', 'i', 'e', '\0',
@@ -13752,17 +13754,16 @@ static const char kSTSHostTable[] = {
   /* "nurses.dating", true */ 'n', 'u', 'r', 's', 'e', 's', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "nurture.be", true */ 'n', 'u', 'r', 't', 'u', 'r', 'e', '.', 'b', 'e', '\0',
   /* "nusku.biz", true */ 'n', 'u', 's', 'k', 'u', '.', 'b', 'i', 'z', '\0',
   /* "nussadoclub.org", true */ 'n', 'u', 's', 's', 'a', 'd', 'o', 'c', 'l', 'u', 'b', '.', 'o', 'r', 'g', '\0',
   /* "nutikell.com", true */ 'n', 'u', 't', 'i', 'k', 'e', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "nutleyeducationalfoundation.org", true */ 'n', 'u', 't', 'l', 'e', 'y', 'e', 'd', 'u', 'c', 'a', 't', 'i', 'o', 'n', 'a', 'l', 'f', 'o', 'u', 'n', 'd', 'a', 't', 'i', 'o', 'n', '.', 'o', 'r', 'g', '\0',
   /* "nutleyef.org", true */ 'n', 'u', 't', 'l', 'e', 'y', 'e', 'f', '.', 'o', 'r', 'g', '\0',
   /* "nutri-spec.me", true */ 'n', 'u', 't', 'r', 'i', '-', 's', 'p', 'e', 'c', '.', 'm', 'e', '\0',
-  /* "nutricuerpo.com", true */ 'n', 'u', 't', 'r', 'i', 'c', 'u', 'e', 'r', 'p', 'o', '.', 'c', 'o', 'm', '\0',
   /* "nutrienti.eu", false */ 'n', 'u', 't', 'r', 'i', 'e', 'n', 't', 'i', '.', 'e', 'u', '\0',
   /* "nutripedia.gr", true */ 'n', 'u', 't', 'r', 'i', 'p', 'e', 'd', 'i', 'a', '.', 'g', 'r', '\0',
   /* "nuttyveg.com", true */ 'n', 'u', 't', 't', 'y', 'v', 'e', 'g', '.', 'c', 'o', 'm', '\0',
   /* "nuvechtdal.nl", true */ 'n', 'u', 'v', 'e', 'c', 'h', 't', 'd', 'a', 'l', '.', 'n', 'l', '\0',
   /* "nuvini.com", true */ 'n', 'u', 'v', 'i', 'n', 'i', '.', 'c', 'o', 'm', '\0',
   /* "nuxer.fr", true */ 'n', 'u', 'x', 'e', 'r', '.', 'f', 'r', '\0',
   /* "nvlop.xyz", true */ 'n', 'v', 'l', 'o', 'p', '.', 'x', 'y', 'z', '\0',
   /* "nvr.bz", true */ 'n', 'v', 'r', '.', 'b', 'z', '\0',
@@ -14191,16 +14192,17 @@ static const char kSTSHostTable[] = {
   /* "ourai.ws", true */ 'o', 'u', 'r', 'a', 'i', '.', 'w', 's', '\0',
   /* "ourchoice2016.com", true */ 'o', 'u', 'r', 'c', 'h', 'o', 'i', 'c', 'e', '2', '0', '1', '6', '.', 'c', 'o', 'm', '\0',
   /* "ourcloud.at", true */ 'o', 'u', 'r', 'c', 'l', 'o', 'u', 'd', '.', 'a', 't', '\0',
   /* "ourcodinglives.com", true */ 'o', 'u', 'r', 'c', 'o', 'd', 'i', 'n', 'g', 'l', 'i', 'v', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "ourevents.net", true */ 'o', 'u', 'r', 'e', 'v', 'e', 'n', 't', 's', '.', 'n', 'e', 't', '\0',
   /* "ourwedding.xyz", true */ 'o', 'u', 'r', 'w', 'e', 'd', 'd', 'i', 'n', 'g', '.', 'x', 'y', 'z', '\0',
   /* "outdoorfurniture.ie", true */ 'o', 'u', 't', 'd', 'o', 'o', 'r', 'f', 'u', 'r', 'n', 'i', 't', 'u', 'r', 'e', '.', 'i', 'e', '\0',
   /* "outerlimitsdigital.com", true */ 'o', 'u', 't', 'e', 'r', 'l', 'i', 'm', 'i', 't', 's', 'd', 'i', 'g', 'i', 't', 'a', 'l', '.', 'c', 'o', 'm', '\0',
+  /* "outetc.com", true */ 'o', 'u', 't', 'e', 't', 'c', '.', 'c', 'o', 'm', '\0',
   /* "outgress.com", true */ 'o', 'u', 't', 'g', 'r', 'e', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "outka.xyz", true */ 'o', 'u', 't', 'k', 'a', '.', 'x', 'y', 'z', '\0',
   /* "outline.ski", true */ 'o', 'u', 't', 'l', 'i', 'n', 'e', '.', 's', 'k', 'i', '\0',
   /* "outlookonthedesktop.com", true */ 'o', 'u', 't', 'l', 'o', 'o', 'k', 'o', 'n', 't', 'h', 'e', 'd', 'e', 's', 'k', 't', 'o', 'p', '.', 'c', 'o', 'm', '\0',
   /* "outofcontrol.ca", true */ 'o', 'u', 't', 'o', 'f', 'c', 'o', 'n', 't', 'r', 'o', 'l', '.', 'c', 'a', '\0',
   /* "outsideconnections.com", true */ 'o', 'u', 't', 's', 'i', 'd', 'e', 'c', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "overalglas.nl", true */ 'o', 'v', 'e', 'r', 'a', 'l', 'g', 'l', 'a', 's', '.', 'n', 'l', '\0',
   /* "overkillshop.com", true */ 'o', 'v', 'e', 'r', 'k', 'i', 'l', 'l', 's', 'h', 'o', 'p', '.', 'c', 'o', 'm', '\0',
@@ -14624,17 +14626,16 @@ static const char kSTSHostTable[] = {
   /* "pfd-nz.com", false */ 'p', 'f', 'd', '-', 'n', 'z', '.', 'c', 'o', 'm', '\0',
   /* "pferdeeinstreu-kaufen.com", true */ 'p', 'f', 'e', 'r', 'd', 'e', 'e', 'i', 'n', 's', 't', 'r', 'e', 'u', '-', 'k', 'a', 'u', 'f', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "pfeuffer-elektro.de", true */ 'p', 'f', 'e', 'u', 'f', 'f', 'e', 'r', '-', 'e', 'l', 'e', 'k', 't', 'r', 'o', '.', 'd', 'e', '\0',
   /* "pfolta.net", true */ 'p', 'f', 'o', 'l', 't', 'a', '.', 'n', 'e', 't', '\0',
   /* "pfudor.tk", true */ 'p', 'f', 'u', 'd', 'o', 'r', '.', 't', 'k', '\0',
   /* "pgmann.cf", true */ 'p', 'g', 'm', 'a', 'n', 'n', '.', 'c', 'f', '\0',
   /* "pgmsource.com", true */ 'p', 'g', 'm', 's', 'o', 'u', 'r', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "pgnetwork.net", true */ 'p', 'g', 'n', 'e', 't', 'w', 'o', 'r', 'k', '.', 'n', 'e', 't', '\0',
-  /* "pgpmail.cc", true */ 'p', 'g', 'p', 'm', 'a', 'i', 'l', '.', 'c', 'c', '\0',
   /* "pgregg.com", false */ 'p', 'g', 'r', 'e', 'g', 'g', '.', 'c', 'o', 'm', '\0',
   /* "ph-blog.de", true */ 'p', 'h', '-', 'b', 'l', 'o', 'g', '.', 'd', 'e', '\0',
   /* "ph.search.yahoo.com", false */ 'p', 'h', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "phantasie.cc", true */ 'p', 'h', 'a', 'n', 't', 'a', 's', 'i', 'e', '.', 'c', 'c', '\0',
   /* "phantastikon.de", true */ 'p', 'h', 'a', 'n', 't', 'a', 's', 't', 'i', 'k', 'o', 'n', '.', 'd', 'e', '\0',
   /* "pharmaboard.de", true */ 'p', 'h', 'a', 'r', 'm', 'a', 'b', 'o', 'a', 'r', 'd', '.', 'd', 'e', '\0',
   /* "pharmaboard.org", true */ 'p', 'h', 'a', 'r', 'm', 'a', 'b', 'o', 'a', 'r', 'd', '.', 'o', 'r', 'g', '\0',
   /* "pharmafoto.ch", true */ 'p', 'h', 'a', 'r', 'm', 'a', 'f', 'o', 't', 'o', '.', 'c', 'h', '\0',
@@ -15041,17 +15042,16 @@ static const char kSTSHostTable[] = {
   /* "postal3.es", true */ 'p', 'o', 's', 't', 'a', 'l', '3', '.', 'e', 's', '\0',
   /* "postblue.info", true */ 'p', 'o', 's', 't', 'b', 'l', 'u', 'e', '.', 'i', 'n', 'f', 'o', '\0',
   /* "postbox.life", true */ 'p', 'o', 's', 't', 'b', 'o', 'x', '.', 'l', 'i', 'f', 'e', '\0',
   /* "postcardpayment.com", true */ 'p', 'o', 's', 't', 'c', 'a', 'r', 'd', 'p', 'a', 'y', 'm', 'e', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "postcodegarant.nl", true */ 'p', 'o', 's', 't', 'c', 'o', 'd', 'e', 'g', 'a', 'r', 'a', 'n', 't', '.', 'n', 'l', '\0',
   /* "postdarwinian.com", true */ 'p', 'o', 's', 't', 'd', 'a', 'r', 'w', 'i', 'n', 'i', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "postdarwinism.com", true */ 'p', 'o', 's', 't', 'd', 'a', 'r', 'w', 'i', 'n', 'i', 's', 'm', '.', 'c', 'o', 'm', '\0',
   /* "posteo.de", false */ 'p', 'o', 's', 't', 'e', 'o', '.', 'd', 'e', '\0',
-  /* "posterspy.com", true */ 'p', 'o', 's', 't', 'e', 'r', 's', 'p', 'y', '.', 'c', 'o', 'm', '\0',
   /* "postfinance.ch", true */ 'p', 'o', 's', 't', 'f', 'i', 'n', 'a', 'n', 'c', 'e', '.', 'c', 'h', '\0',
   /* "postmatescode.com", true */ 'p', 'o', 's', 't', 'm', 'a', 't', 'e', 's', 'c', 'o', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "postn.eu", true */ 'p', 'o', 's', 't', 'n', '.', 'e', 'u', '\0',
   /* "posttigo.com", true */ 'p', 'o', 's', 't', 't', 'i', 'g', 'o', '.', 'c', 'o', 'm', '\0',
   /* "potatiz.com", true */ 'p', 'o', 't', 'a', 't', 'i', 'z', '.', 'c', 'o', 'm', '\0',
   /* "potatofrom.space", true */ 'p', 'o', 't', 'a', 't', 'o', 'f', 'r', 'o', 'm', '.', 's', 'p', 'a', 'c', 'e', '\0',
   /* "potbox.com", true */ 'p', 'o', 't', 'b', 'o', 'x', '.', 'c', 'o', 'm', '\0',
   /* "pothe.com", true */ 'p', 'o', 't', 'h', 'e', '.', 'c', 'o', 'm', '\0',
@@ -15095,17 +15095,16 @@ static const char kSTSHostTable[] = {
   /* "prado.it", true */ 'p', 'r', 'a', 'd', 'o', '.', 'i', 't', '\0',
   /* "praeparation-keppner.de", true */ 'p', 'r', 'a', 'e', 'p', 'a', 'r', 'a', 't', 'i', 'o', 'n', '-', 'k', 'e', 'p', 'p', 'n', 'e', 'r', '.', 'd', 'e', '\0',
   /* "praguepsychology.com", true */ 'p', 'r', 'a', 'g', 'u', 'e', 'p', 's', 'y', 'c', 'h', 'o', 'l', 'o', 'g', 'y', '.', 'c', 'o', 'm', '\0',
   /* "praguepsychology.cz", true */ 'p', 'r', 'a', 'g', 'u', 'e', 'p', 's', 'y', 'c', 'h', 'o', 'l', 'o', 'g', 'y', '.', 'c', 'z', '\0',
   /* "prakharprasad.com", true */ 'p', 'r', 'a', 'k', 'h', 'a', 'r', 'p', 'r', 'a', 's', 'a', 'd', '.', 'c', 'o', 'm', '\0',
   /* "praxis-research.info", true */ 'p', 'r', 'a', 'x', 'i', 's', '-', 'r', 'e', 's', 'e', 'a', 'r', 'c', 'h', '.', 'i', 'n', 'f', 'o', '\0',
   /* "prayerrequest.com", true */ 'p', 'r', 'a', 'y', 'e', 'r', 'r', 'e', 'q', 'u', 'e', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "prazynka.pl", true */ 'p', 'r', 'a', 'z', 'y', 'n', 'k', 'a', '.', 'p', 'l', '\0',
-  /* "prc.gov", true */ 'p', 'r', 'c', '.', 'g', 'o', 'v', '\0',
   /* "precedecaritas.com.br", true */ 'p', 'r', 'e', 'c', 'e', 'd', 'e', 'c', 'a', 'r', 'i', 't', 'a', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "preciouslife.fr", true */ 'p', 'r', 'e', 'c', 'i', 'o', 'u', 's', 'l', 'i', 'f', 'e', '.', 'f', 'r', '\0',
   /* "preciscx.com", true */ 'p', 'r', 'e', 'c', 'i', 's', 'c', 'x', '.', 'c', 'o', 'm', '\0',
   /* "precisionaeroimaging.com", true */ 'p', 'r', 'e', 'c', 'i', 's', 'i', 'o', 'n', 'a', 'e', 'r', 'o', 'i', 'm', 'a', 'g', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "predoiu.ro", true */ 'p', 'r', 'e', 'd', 'o', 'i', 'u', '.', 'r', 'o', '\0',
   /* "preexport.com", true */ 'p', 'r', 'e', 'e', 'x', 'p', 'o', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "preferredathlete.com", true */ 'p', 'r', 'e', 'f', 'e', 'r', 'r', 'e', 'd', 'a', 't', 'h', 'l', 'e', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "prefix.eu", true */ 'p', 'r', 'e', 'f', 'i', 'x', '.', 'e', 'u', '\0',
@@ -15115,17 +15114,16 @@ static const char kSTSHostTable[] = {
   /* "prekladysanca.cz", true */ 'p', 'r', 'e', 'k', 'l', 'a', 'd', 'y', 's', 'a', 'n', 'c', 'a', '.', 'c', 'z', '\0',
   /* "preloaded-hsts.badssl.com", true */ 'p', 'r', 'e', 'l', 'o', 'a', 'd', 'e', 'd', '-', 'h', 's', 't', 's', '.', 'b', 'a', 'd', 's', 's', 'l', '.', 'c', 'o', 'm', '\0',
   /* "preludes.org", true */ 'p', 'r', 'e', 'l', 'u', 'd', 'e', 's', '.', 'o', 'r', 'g', '\0',
   /* "premaritalsex.info", true */ 'p', 'r', 'e', 'm', 'a', 'r', 'i', 't', 'a', 'l', 's', 'e', 'x', '.', 'i', 'n', 'f', 'o', '\0',
   /* "premierheart.com", true */ 'p', 'r', 'e', 'm', 'i', 'e', 'r', 'h', 'e', 'a', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "premiership-predictors.co.uk", true */ 'p', 'r', 'e', 'm', 'i', 'e', 'r', 's', 'h', 'i', 'p', '-', 'p', 'r', 'e', 'd', 'i', 'c', 't', 'o', 'r', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "premiumzweirad.de", false */ 'p', 'r', 'e', 'm', 'i', 'u', 'm', 'z', 'w', 'e', 'i', 'r', 'a', 'd', '.', 'd', 'e', '\0',
   /* "prenatalgeboortekaartjes.nl", true */ 'p', 'r', 'e', 'n', 'a', 't', 'a', 'l', 'g', 'e', 'b', 'o', 'o', 'r', 't', 'e', 'k', 'a', 'a', 'r', 't', 'j', 'e', 's', '.', 'n', 'l', '\0',
-  /* "prenger.co", true */ 'p', 'r', 'e', 'n', 'g', 'e', 'r', '.', 'c', 'o', '\0',
   /* "prepaid-voip.nl", true */ 'p', 'r', 'e', 'p', 'a', 'i', 'd', '-', 'v', 'o', 'i', 'p', '.', 'n', 'l', '\0',
   /* "prepaidgirl.com", true */ 'p', 'r', 'e', 'p', 'a', 'i', 'd', 'g', 'i', 'r', 'l', '.', 'c', 'o', 'm', '\0',
   /* "prepaidkredietkaart.be", true */ 'p', 'r', 'e', 'p', 'a', 'i', 'd', 'k', 'r', 'e', 'd', 'i', 'e', 't', 'k', 'a', 'a', 'r', 't', '.', 'b', 'e', '\0',
   /* "prepare-job-hunting.com", true */ 'p', 'r', 'e', 'p', 'a', 'r', 'e', '-', 'j', 'o', 'b', '-', 'h', 'u', 'n', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "preparetheword.com", false */ 'p', 'r', 'e', 'p', 'a', 'r', 'e', 't', 'h', 'e', 'w', 'o', 'r', 'd', '.', 'c', 'o', 'm', '\0',
   /* "presbee.com", true */ 'p', 'r', 'e', 's', 'b', 'e', 'e', '.', 'c', 'o', 'm', '\0',
   /* "prescotonline.co.uk", true */ 'p', 'r', 'e', 's', 'c', 'o', 't', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "president.bg", true */ 'p', 'r', 'e', 's', 'i', 'd', 'e', 'n', 't', '.', 'b', 'g', '\0',
@@ -15193,17 +15191,16 @@ static const char kSTSHostTable[] = {
   /* "procensus.com", true */ 'p', 'r', 'o', 'c', 'e', 'n', 's', 'u', 's', '.', 'c', 'o', 'm', '\0',
   /* "proclib.org", true */ 'p', 'r', 'o', 'c', 'l', 'i', 'b', '.', 'o', 'r', 'g', '\0',
   /* "procrastinationland.com", true */ 'p', 'r', 'o', 'c', 'r', 'a', 's', 't', 'i', 'n', 'a', 't', 'i', 'o', 'n', 'l', 'a', 'n', 'd', '.', 'c', 'o', 'm', '\0',
   /* "prodct.info", true */ 'p', 'r', 'o', 'd', 'c', 't', '.', 'i', 'n', 'f', 'o', '\0',
   /* "prodigia.com", true */ 'p', 'r', 'o', 'd', 'i', 'g', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "prodsim.ninja", true */ 'p', 'r', 'o', 'd', 's', 'i', 'm', '.', 'n', 'i', 'n', 'j', 'a', '\0',
   /* "productdesignsoftware.com.au", true */ 'p', 'r', 'o', 'd', 'u', 'c', 't', 'd', 'e', 's', 'i', 'g', 'n', 's', 'o', 'f', 't', 'w', 'a', 'r', 'e', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "productgap.com", true */ 'p', 'r', 'o', 'd', 'u', 'c', 't', 'g', 'a', 'p', '.', 'c', 'o', 'm', '\0',
-  /* "producto8.com", true */ 'p', 'r', 'o', 'd', 'u', 'c', 't', 'o', '8', '.', 'c', 'o', 'm', '\0',
   /* "proefteksten.nl", false */ 'p', 'r', 'o', 'e', 'f', 't', 'e', 'k', 's', 't', 'e', 'n', '.', 'n', 'l', '\0',
   /* "profection.biz", true */ 'p', 'r', 'o', 'f', 'e', 'c', 't', 'i', 'o', 'n', '.', 'b', 'i', 'z', '\0',
   /* "professionalboundaries.com", true */ 'p', 'r', 'o', 'f', 'e', 's', 's', 'i', 'o', 'n', 'a', 'l', 'b', 'o', 'u', 'n', 'd', 'a', 'r', 'i', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "professors.ee", true */ 'p', 'r', 'o', 'f', 'e', 's', 's', 'o', 'r', 's', '.', 'e', 'e', '\0',
   /* "profidea.cz", true */ 'p', 'r', 'o', 'f', 'i', 'd', 'e', 'a', '.', 'c', 'z', '\0',
   /* "profile.tf", true */ 'p', 'r', 'o', 'f', 'i', 'l', 'e', '.', 't', 'f', '\0',
   /* "profiles.google.com", true */ 'p', 'r', 'o', 'f', 'i', 'l', 'e', 's', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "profinetz.de", true */ 'p', 'r', 'o', 'f', 'i', 'n', 'e', 't', 'z', '.', 'd', 'e', '\0',
@@ -15216,17 +15213,16 @@ static const char kSTSHostTable[] = {
   /* "progreso.pl", true */ 'p', 'r', 'o', 'g', 'r', 'e', 's', 'o', '.', 'p', 'l', '\0',
   /* "progress-linux.org", true */ 'p', 'r', 'o', 'g', 'r', 'e', 's', 's', '-', 'l', 'i', 'n', 'u', 'x', '.', 'o', 'r', 'g', '\0',
   /* "progressive.work", true */ 'p', 'r', 'o', 'g', 'r', 'e', 's', 's', 'i', 'v', 'e', '.', 'w', 'o', 'r', 'k', '\0',
   /* "progressivecfo.co.nz", true */ 'p', 'r', 'o', 'g', 'r', 'e', 's', 's', 'i', 'v', 'e', 'c', 'f', 'o', '.', 'c', 'o', '.', 'n', 'z', '\0',
   /* "progressiveplanning.com", true */ 'p', 'r', 'o', 'g', 'r', 'e', 's', 's', 'i', 'v', 'e', 'p', 'l', 'a', 'n', 'n', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "proj.org.cn", true */ 'p', 'r', 'o', 'j', '.', 'o', 'r', 'g', '.', 'c', 'n', '\0',
   /* "project-rune.tech", true */ 'p', 'r', 'o', 'j', 'e', 'c', 't', '-', 'r', 'u', 'n', 'e', '.', 't', 'e', 'c', 'h', '\0',
   /* "projectarmy.net", true */ 'p', 'r', 'o', 'j', 'e', 'c', 't', 'a', 'r', 'm', 'y', '.', 'n', 'e', 't', '\0',
-  /* "projectbenson.com", false */ 'p', 'r', 'o', 'j', 'e', 'c', 't', 'b', 'e', 'n', 's', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "projectblackbook.us", true */ 'p', 'r', 'o', 'j', 'e', 'c', 't', 'b', 'l', 'a', 'c', 'k', 'b', 'o', 'o', 'k', '.', 'u', 's', '\0',
   /* "projectdp.net", true */ 'p', 'r', 'o', 'j', 'e', 'c', 't', 'd', 'p', '.', 'n', 'e', 't', '\0',
   /* "projectnom.com", true */ 'p', 'r', 'o', 'j', 'e', 'c', 't', 'n', 'o', 'm', '.', 'c', 'o', 'm', '\0',
   /* "projectsecretidentity.com", true */ 'p', 'r', 'o', 'j', 'e', 'c', 't', 's', 'e', 'c', 'r', 'e', 't', 'i', 'd', 'e', 'n', 't', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "projectsecretidentity.org", true */ 'p', 'r', 'o', 'j', 'e', 'c', 't', 's', 'e', 'c', 'r', 'e', 't', 'i', 'd', 'e', 'n', 't', 'i', 't', 'y', '.', 'o', 'r', 'g', '\0',
   /* "projectte.ch", true */ 'p', 'r', 'o', 'j', 'e', 'c', 't', 't', 'e', '.', 'c', 'h', '\0',
   /* "projekt-umbriel.de", true */ 'p', 'r', 'o', 'j', 'e', 'k', 't', '-', 'u', 'm', 'b', 'r', 'i', 'e', 'l', '.', 'd', 'e', '\0',
   /* "projektik.cz", true */ 'p', 'r', 'o', 'j', 'e', 'k', 't', 'i', 'k', '.', 'c', 'z', '\0',
@@ -15477,16 +15473,17 @@ static const char kSTSHostTable[] = {
   /* "qualityhomesystems.com", true */ 'q', 'u', 'a', 'l', 'i', 't', 'y', 'h', 'o', 'm', 'e', 's', 'y', 's', 't', 'e', 'm', 's', '.', 'c', 'o', 'm', '\0',
   /* "qualityofcourse.com", false */ 'q', 'u', 'a', 'l', 'i', 't', 'y', 'o', 'f', 'c', 'o', 'u', 'r', 's', 'e', '.', 'c', 'o', 'm', '\0',
   /* "qualitypropertycare.co.uk", true */ 'q', 'u', 'a', 'l', 'i', 't', 'y', 'p', 'r', 'o', 'p', 'e', 'r', 't', 'y', 'c', 'a', 'r', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "quantoras.com", true */ 'q', 'u', 'a', 'n', 't', 'o', 'r', 'a', 's', '.', 'c', 'o', 'm', '\0',
   /* "quantum-ethics.com", true */ 'q', 'u', 'a', 'n', 't', 'u', 'm', '-', 'e', 't', 'h', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "quantum-mechanics.com", true */ 'q', 'u', 'a', 'n', 't', 'u', 'm', '-', 'm', 'e', 'c', 'h', 'a', 'n', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "quantumfurball.net", true */ 'q', 'u', 'a', 'n', 't', 'u', 'm', 'f', 'u', 'r', 'b', 'a', 'l', 'l', '.', 'n', 'e', 't', '\0',
   /* "quantumwebs.co", true */ 'q', 'u', 'a', 'n', 't', 'u', 'm', 'w', 'e', 'b', 's', '.', 'c', 'o', '\0',
+  /* "quarterfull.com", true */ 'q', 'u', 'a', 'r', 't', 'e', 'r', 'f', 'u', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "qubes-os.org", true */ 'q', 'u', 'b', 'e', 's', '-', 'o', 's', '.', 'o', 'r', 'g', '\0',
   /* "qubyte.codes", true */ 'q', 'u', 'b', 'y', 't', 'e', '.', 'c', 'o', 'd', 'e', 's', '\0',
   /* "quchao.com", true */ 'q', 'u', 'c', 'h', 'a', 'o', '.', 'c', 'o', 'm', '\0',
   /* "queercinema.ch", true */ 'q', 'u', 'e', 'e', 'r', 'c', 'i', 'n', 'e', 'm', 'a', '.', 'c', 'h', '\0',
   /* "queercoders.com", false */ 'q', 'u', 'e', 'e', 'r', 'c', 'o', 'd', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "quelleformation.net", true */ 'q', 'u', 'e', 'l', 'l', 'e', 'f', 'o', 'r', 'm', 'a', 't', 'i', 'o', 'n', '.', 'n', 'e', 't', '\0',
   /* "quelmandataire.fr", true */ 'q', 'u', 'e', 'l', 'm', 'a', 'n', 'd', 'a', 't', 'a', 'i', 'r', 'e', '.', 'f', 'r', '\0',
   /* "queminventou.com.br", true */ 'q', 'u', 'e', 'm', 'i', 'n', 'v', 'e', 'n', 't', 'o', 'u', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
@@ -15803,16 +15800,17 @@ static const char kSTSHostTable[] = {
   /* "reinierjonker.nl", true */ 'r', 'e', 'i', 'n', 'i', 'e', 'r', 'j', 'o', 'n', 'k', 'e', 'r', '.', 'n', 'l', '\0',
   /* "reinoldus.ddns.net", true */ 'r', 'e', 'i', 'n', 'o', 'l', 'd', 'u', 's', '.', 'd', 'd', 'n', 's', '.', 'n', 'e', 't', '\0',
   /* "reinout.nu", true */ 'r', 'e', 'i', 'n', 'o', 'u', 't', '.', 'n', 'u', '\0',
   /* "reinouthoornweg.nl", true */ 'r', 'e', 'i', 'n', 'o', 'u', 't', 'h', 'o', 'o', 'r', 'n', 'w', 'e', 'g', '.', 'n', 'l', '\0',
   /* "reishunger.de", true */ 'r', 'e', 'i', 's', 'h', 'u', 'n', 'g', 'e', 'r', '.', 'd', 'e', '\0',
   /* "rejahrehim.com", true */ 'r', 'e', 'j', 'a', 'h', 'r', 'e', 'h', 'i', 'm', '.', 'c', 'o', 'm', '\0',
   /* "relatethesport.com", true */ 'r', 'e', 'l', 'a', 't', 'e', 't', 'h', 'e', 's', 'p', 'o', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "relatic.net", true */ 'r', 'e', 'l', 'a', 't', 'i', 'c', '.', 'n', 'e', 't', '\0',
+  /* "relax.hn", true */ 'r', 'e', 'l', 'a', 'x', '.', 'h', 'n', '\0',
   /* "relaxdom.net", true */ 'r', 'e', 'l', 'a', 'x', 'd', 'o', 'm', '.', 'n', 'e', 't', '\0',
   /* "relaxpointhyncice.cz", true */ 'r', 'e', 'l', 'a', 'x', 'p', 'o', 'i', 'n', 't', 'h', 'y', 'n', 'c', 'i', 'c', 'e', '.', 'c', 'z', '\0',
   /* "relaybox.io", true */ 'r', 'e', 'l', 'a', 'y', 'b', 'o', 'x', '.', 'i', 'o', '\0',
   /* "release-monitoring.org", true */ 'r', 'e', 'l', 'e', 'a', 's', 'e', '-', 'm', 'o', 'n', 'i', 't', 'o', 'r', 'i', 'n', 'g', '.', 'o', 'r', 'g', '\0',
   /* "reliancebank.bank", true */ 'r', 'e', 'l', 'i', 'a', 'n', 'c', 'e', 'b', 'a', 'n', 'k', '.', 'b', 'a', 'n', 'k', '\0',
   /* "religiousforums.com", true */ 'r', 'e', 'l', 'i', 'g', 'i', 'o', 'u', 's', 'f', 'o', 'r', 'u', 'm', 's', '.', 'c', 'o', 'm', '\0',
   /* "relsak.cz", true */ 'r', 'e', 'l', 's', 'a', 'k', '.', 'c', 'z', '\0',
   /* "relvan.com", true */ 'r', 'e', 'l', 'v', 'a', 'n', '.', 'c', 'o', 'm', '\0',
@@ -15829,17 +15827,16 @@ static const char kSTSHostTable[] = {
   /* "rene-stolp.de", true */ 'r', 'e', 'n', 'e', '-', 's', 't', 'o', 'l', 'p', '.', 'd', 'e', '\0',
   /* "renearends.nl", true */ 'r', 'e', 'n', 'e', 'a', 'r', 'e', 'n', 'd', 's', '.', 'n', 'l', '\0',
   /* "renemayrhofer.com", true */ 'r', 'e', 'n', 'e', 'm', 'a', 'y', 'r', 'h', 'o', 'f', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "renemoser.net", true */ 'r', 'e', 'n', 'e', 'm', 'o', 's', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "renerehelse.no", false */ 'r', 'e', 'n', 'e', 'r', 'e', 'h', 'e', 'l', 's', 'e', '.', 'n', 'o', '\0',
   /* "renewablefreedom.org", true */ 'r', 'e', 'n', 'e', 'w', 'a', 'b', 'l', 'e', 'f', 'r', 'e', 'e', 'd', 'o', 'm', '.', 'o', 'r', 'g', '\0',
   /* "rengarenkblog.com", true */ 'r', 'e', 'n', 'g', 'a', 'r', 'e', 'n', 'k', 'b', 'l', 'o', 'g', '.', 'c', 'o', 'm', '\0',
   /* "renkenlaw.com", true */ 'r', 'e', 'n', 'k', 'e', 'n', 'l', 'a', 'w', '.', 'c', 'o', 'm', '\0',
-  /* "renkhosting.com", true */ 'r', 'e', 'n', 'k', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "rennfire.org", true */ 'r', 'e', 'n', 'n', 'f', 'i', 'r', 'e', '.', 'o', 'r', 'g', '\0',
   /* "renrenche.com", false */ 'r', 'e', 'n', 'r', 'e', 'n', 'c', 'h', 'e', '.', 'c', 'o', 'm', '\0',
   /* "rens.nu", true */ 'r', 'e', 'n', 's', '.', 'n', 'u', '\0',
   /* "rent-a-coder.de", true */ 'r', 'e', 'n', 't', '-', 'a', '-', 'c', 'o', 'd', 'e', 'r', '.', 'd', 'e', '\0',
   /* "rentasweb.gob.ar", true */ 'r', 'e', 'n', 't', 'a', 's', 'w', 'e', 'b', '.', 'g', 'o', 'b', '.', 'a', 'r', '\0',
   /* "rentbrowser.com", true */ 'r', 'e', 'n', 't', 'b', 'r', 'o', 'w', 's', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "rentex.com", true */ 'r', 'e', 'n', 't', 'e', 'x', '.', 'c', 'o', 'm', '\0',
   /* "rentinsingapore.com.sg", true */ 'r', 'e', 'n', 't', 'i', 'n', 's', 'i', 'n', 'g', 'a', 'p', 'o', 'r', 'e', '.', 'c', 'o', 'm', '.', 's', 'g', '\0',
@@ -15959,16 +15956,17 @@ static const char kSTSHostTable[] = {
   /* "riceglue.com", true */ 'r', 'i', 'c', 'e', 'g', 'l', 'u', 'e', '.', 'c', 'o', 'm', '\0',
   /* "richardb.me", true */ 'r', 'i', 'c', 'h', 'a', 'r', 'd', 'b', '.', 'm', 'e', '\0',
   /* "richardhering.de", true */ 'r', 'i', 'c', 'h', 'a', 'r', 'd', 'h', 'e', 'r', 'i', 'n', 'g', '.', 'd', 'e', '\0',
   /* "richardjgreen.net", true */ 'r', 'i', 'c', 'h', 'a', 'r', 'd', 'j', 'g', 'r', 'e', 'e', 'n', '.', 'n', 'e', 't', '\0',
   /* "richardlangworth.com", true */ 'r', 'i', 'c', 'h', 'a', 'r', 'd', 'l', 'a', 'n', 'g', 'w', 'o', 'r', 't', 'h', '.', 'c', 'o', 'm', '\0',
   /* "richardlugten.nl", true */ 'r', 'i', 'c', 'h', 'a', 'r', 'd', 'l', 'u', 'g', 't', 'e', 'n', '.', 'n', 'l', '\0',
   /* "richardrblocker.net", true */ 'r', 'i', 'c', 'h', 'a', 'r', 'd', 'r', 'b', 'l', 'o', 'c', 'k', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "richardwarrender.com", true */ 'r', 'i', 'c', 'h', 'a', 'r', 'd', 'w', 'a', 'r', 'r', 'e', 'n', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0',
+  /* "richmtdriver.com", true */ 'r', 'i', 'c', 'h', 'm', 't', 'd', 'r', 'i', 'v', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "richonrails.com", true */ 'r', 'i', 'c', 'h', 'o', 'n', 'r', 'a', 'i', 'l', 's', '.', 'c', 'o', 'm', '\0',
   /* "ricki-z.com", true */ 'r', 'i', 'c', 'k', 'i', '-', 'z', '.', 'c', 'o', 'm', '\0',
   /* "rickrongen.nl", true */ 'r', 'i', 'c', 'k', 'r', 'o', 'n', 'g', 'e', 'n', '.', 'n', 'l', '\0',
   /* "rickweijers.nl", true */ 'r', 'i', 'c', 'k', 'w', 'e', 'i', 'j', 'e', 'r', 's', '.', 'n', 'l', '\0',
   /* "rickyromero.com", true */ 'r', 'i', 'c', 'k', 'y', 'r', 'o', 'm', 'e', 'r', 'o', '.', 'c', 'o', 'm', '\0',
   /* "rico-brase.de", true */ 'r', 'i', 'c', 'o', '-', 'b', 'r', 'a', 's', 'e', '.', 'd', 'e', '\0',
   /* "ricochet.im", true */ 'r', 'i', 'c', 'o', 'c', 'h', 'e', 't', '.', 'i', 'm', '\0',
   /* "ricozienke.de", true */ 'r', 'i', 'c', 'o', 'z', 'i', 'e', 'n', 'k', 'e', '.', 'd', 'e', '\0',
@@ -16005,17 +16003,17 @@ static const char kSTSHostTable[] = {
   /* "rio-weimar.de", true */ 'r', 'i', 'o', '-', 'w', 'e', 'i', 'm', 'a', 'r', '.', 'd', 'e', '\0',
   /* "rioshop.com.br", true */ 'r', 'i', 'o', 's', 'h', 'o', 'p', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "rip-sport.cz", true */ 'r', 'i', 'p', '-', 's', 'p', 'o', 'r', 't', '.', 'c', 'z', '\0',
   /* "ripa.io", true */ 'r', 'i', 'p', 'a', '.', 'i', 'o', '\0',
   /* "ripple.com", true */ 'r', 'i', 'p', 'p', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "riscascape.net", true */ 'r', 'i', 's', 'c', 'a', 's', 'c', 'a', 'p', 'e', '.', 'n', 'e', 't', '\0',
   /* "rischard.org", true */ 'r', 'i', 's', 'c', 'h', 'a', 'r', 'd', '.', 'o', 'r', 'g', '\0',
   /* "riseup.net", true */ 'r', 'i', 's', 'e', 'u', 'p', '.', 'n', 'e', 't', '\0',
-  /* "risingsun.red", false */ 'r', 'i', 's', 'i', 'n', 'g', 's', 'u', 'n', '.', 'r', 'e', 'd', '\0',
+  /* "risingsun.red", true */ 'r', 'i', 's', 'i', 'n', 'g', 's', 'u', 'n', '.', 'r', 'e', 'd', '\0',
   /* "riskmitigation.ch", true */ 'r', 'i', 's', 'k', 'm', 'i', 't', 'i', 'g', 'a', 't', 'i', 'o', 'n', '.', 'c', 'h', '\0',
   /* "ristioja.ee", true */ 'r', 'i', 's', 't', 'i', 'o', 'j', 'a', '.', 'e', 'e', '\0',
   /* "ristoarea.it", true */ 'r', 'i', 's', 't', 'o', 'a', 'r', 'e', 'a', '.', 'i', 't', '\0',
   /* "ristorantefattoamano.eu", true */ 'r', 'i', 's', 't', 'o', 'r', 'a', 'n', 't', 'e', 'f', 'a', 't', 't', 'o', 'a', 'm', 'a', 'n', 'o', '.', 'e', 'u', '\0',
   /* "rivaforum.de", true */ 'r', 'i', 'v', 'a', 'f', 'o', 'r', 'u', 'm', '.', 'd', 'e', '\0',
   /* "rivastation.de", true */ 'r', 'i', 'v', 'a', 's', 't', 'a', 't', 'i', 'o', 'n', '.', 'd', 'e', '\0',
   /* "riverbanktearooms.co.uk", true */ 'r', 'i', 'v', 'e', 'r', 'b', 'a', 'n', 'k', 't', 'e', 'a', 'r', 'o', 'o', 'm', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "rivermendhealthcenters.com", true */ 'r', 'i', 'v', 'e', 'r', 'm', 'e', 'n', 'd', 'h', 'e', 'a', 'l', 't', 'h', 'c', 'e', 'n', 't', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
@@ -16652,16 +16650,17 @@ static const char kSTSHostTable[] = {
   /* "schutzwerk.com", true */ 's', 'c', 'h', 'u', 't', 'z', 'w', 'e', 'r', 'k', '.', 'c', 'o', 'm', '\0',
   /* "schwabenhaus-ka.de", true */ 's', 'c', 'h', 'w', 'a', 'b', 'e', 'n', 'h', 'a', 'u', 's', '-', 'k', 'a', '.', 'd', 'e', '\0',
   /* "schwarzer.it", true */ 's', 'c', 'h', 'w', 'a', 'r', 'z', 'e', 'r', '.', 'i', 't', '\0',
   /* "schwarztrade.cz", true */ 's', 'c', 'h', 'w', 'a', 'r', 'z', 't', 'r', 'a', 'd', 'e', '.', 'c', 'z', '\0',
   /* "schwarzwald-flirt.de", true */ 's', 'c', 'h', 'w', 'a', 'r', 'z', 'w', 'a', 'l', 'd', '-', 'f', 'l', 'i', 'r', 't', '.', 'd', 'e', '\0',
   /* "schwarzwaldcon.de", true */ 's', 'c', 'h', 'w', 'a', 'r', 'z', 'w', 'a', 'l', 'd', 'c', 'o', 'n', '.', 'd', 'e', '\0',
   /* "schwetz.net", true */ 's', 'c', 'h', 'w', 'e', 't', 'z', '.', 'n', 'e', 't', '\0',
   /* "schwinabart.com", true */ 's', 'c', 'h', 'w', 'i', 'n', 'a', 'b', 'a', 'r', 't', '.', 'c', 'o', 'm', '\0',
+  /* "schwinger.me", true */ 's', 'c', 'h', 'w', 'i', 'n', 'g', 'e', 'r', '.', 'm', 'e', '\0',
   /* "schwuppengrillen.de", true */ 's', 'c', 'h', 'w', 'u', 'p', 'p', 'e', 'n', 'g', 'r', 'i', 'l', 'l', 'e', 'n', '.', 'd', 'e', '\0',
   /* "science-questions.org", true */ 's', 'c', 'i', 'e', 'n', 'c', 'e', '-', 'q', 'u', 'e', 's', 't', 'i', 'o', 'n', 's', '.', 'o', 'r', 'g', '\0',
   /* "science-texts.de", true */ 's', 'c', 'i', 'e', 'n', 'c', 'e', '-', 't', 'e', 'x', 't', 's', '.', 'd', 'e', '\0',
   /* "science360.gov", true */ 's', 'c', 'i', 'e', 'n', 'c', 'e', '3', '6', '0', '.', 'g', 'o', 'v', '\0',
   /* "sciencebase.gov", true */ 's', 'c', 'i', 'e', 'n', 'c', 'e', 'b', 'a', 's', 'e', '.', 'g', 'o', 'v', '\0',
   /* "sciencemonster.co.uk", true */ 's', 'c', 'i', 'e', 'n', 'c', 'e', 'm', 'o', 'n', 's', 't', 'e', 'r', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "sciencesolutions.eu", true */ 's', 'c', 'i', 'e', 'n', 'c', 'e', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'e', 'u', '\0',
   /* "sciencex.com", true */ 's', 'c', 'i', 'e', 'n', 'c', 'e', 'x', '.', 'c', 'o', 'm', '\0',
@@ -16675,17 +16674,16 @@ static const char kSTSHostTable[] = {
   /* "score-savers.com", true */ 's', 'c', 'o', 'r', 'e', '-', 's', 'a', 'v', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "scores4schools.com", true */ 's', 'c', 'o', 'r', 'e', 's', '4', 's', 'c', 'h', 'o', 'o', 'l', 's', '.', 'c', 'o', 'm', '\0',
   /* "scorocode.ru", true */ 's', 'c', 'o', 'r', 'o', 'c', 'o', 'd', 'e', '.', 'r', 'u', '\0',
   /* "scottainslie.me.uk", true */ 's', 'c', 'o', 't', 't', 'a', 'i', 'n', 's', 'l', 'i', 'e', '.', 'm', 'e', '.', 'u', 'k', '\0',
   /* "scottgruber.me", true */ 's', 'c', 'o', 't', 't', 'g', 'r', 'u', 'b', 'e', 'r', '.', 'm', 'e', '\0',
   /* "scotthel.me", true */ 's', 'c', 'o', 't', 't', 'h', 'e', 'l', '.', 'm', 'e', '\0',
   /* "scotthelme.co.uk", true */ 's', 'c', 'o', 't', 't', 'h', 'e', 'l', 'm', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "scotthelme.com", true */ 's', 'c', 'o', 't', 't', 'h', 'e', 'l', 'm', 'e', '.', 'c', 'o', 'm', '\0',
-  /* "scottnicol.co.uk", true */ 's', 'c', 'o', 't', 't', 'n', 'i', 'c', 'o', 'l', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "scottstorey.co.uk", true */ 's', 'c', 'o', 't', 't', 's', 't', 'o', 'r', 'e', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "scottynordstrom.org", false */ 's', 'c', 'o', 't', 't', 'y', 'n', 'o', 'r', 'd', 's', 't', 'r', 'o', 'm', '.', 'o', 'r', 'g', '\0',
   /* "scoutdb.ch", true */ 's', 'c', 'o', 'u', 't', 'd', 'b', '.', 'c', 'h', '\0',
   /* "scoutnet.de", true */ 's', 'c', 'o', 'u', 't', 'n', 'e', 't', '.', 'd', 'e', '\0',
   /* "scp-trens.notaires.fr", true */ 's', 'c', 'p', '-', 't', 'r', 'e', 'n', 's', '.', 'n', 'o', 't', 'a', 'i', 'r', 'e', 's', '.', 'f', 'r', '\0',
   /* "scrap.tf", true */ 's', 'c', 'r', 'a', 'p', '.', 't', 'f', '\0',
   /* "scrayos.net", true */ 's', 'c', 'r', 'a', 'y', 'o', 's', '.', 'n', 'e', 't', '\0',
   /* "scredible.com", true */ 's', 'c', 'r', 'e', 'd', 'i', 'b', 'l', 'e', '.', 'c', 'o', 'm', '\0',
@@ -16749,16 +16747,17 @@ static const char kSTSHostTable[] = {
   /* "secpatrol.de", true */ 's', 'e', 'c', 'p', 'a', 't', 'r', 'o', 'l', '.', 'd', 'e', '\0',
   /* "secretintelligence.0.me.uk", true */ 's', 'e', 'c', 'r', 'e', 't', 'i', 'n', 't', 'e', 'l', 'l', 'i', 'g', 'e', 'n', 'c', 'e', '.', '0', '.', 'm', 'e', '.', 'u', 'k', '\0',
   /* "secretofanah.com", true */ 's', 'e', 'c', 'r', 'e', 't', 'o', 'f', 'a', 'n', 'a', 'h', '.', 'c', 'o', 'm', '\0',
   /* "secretpanties.com", true */ 's', 'e', 'c', 'r', 'e', 't', 'p', 'a', 'n', 't', 'i', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "secretsanta.fr", true */ 's', 'e', 'c', 'r', 'e', 't', 's', 'a', 'n', 't', 'a', '.', 'f', 'r', '\0',
   /* "secretserveronline.com", true */ 's', 'e', 'c', 'r', 'e', 't', 's', 'e', 'r', 'v', 'e', 'r', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "sectelligence.nl", true */ 's', 'e', 'c', 't', 'e', 'l', 'l', 'i', 'g', 'e', 'n', 'c', 'e', '.', 'n', 'l', '\0',
   /* "sectest.ml", true */ 's', 'e', 'c', 't', 'e', 's', 't', '.', 'm', 'l', '\0',
+  /* "sectia22.ro", false */ 's', 'e', 'c', 't', 'i', 'a', '2', '2', '.', 'r', 'o', '\0',
   /* "sectio-aurea.org", true */ 's', 'e', 'c', 't', 'i', 'o', '-', 'a', 'u', 'r', 'e', 'a', '.', 'o', 'r', 'g', '\0',
   /* "section-31.org", true */ 's', 'e', 'c', 't', 'i', 'o', 'n', '-', '3', '1', '.', 'o', 'r', 'g', '\0',
   /* "section.io", true */ 's', 'e', 'c', 't', 'i', 'o', 'n', '.', 'i', 'o', '\0',
   /* "sectionw2s.org", true */ 's', 'e', 'c', 't', 'i', 'o', 'n', 'w', '2', 's', '.', 'o', 'r', 'g', '\0',
   /* "secundity.nl", true */ 's', 'e', 'c', 'u', 'n', 'd', 'i', 't', 'y', '.', 'n', 'l', '\0',
   /* "securai.de", true */ 's', 'e', 'c', 'u', 'r', 'a', 'i', '.', 'd', 'e', '\0',
   /* "secure-automotive-cloud.com", true */ 's', 'e', 'c', 'u', 'r', 'e', '-', 'a', 'u', 't', 'o', 'm', 'o', 't', 'i', 'v', 'e', '-', 'c', 'l', 'o', 'u', 'd', '.', 'c', 'o', 'm', '\0',
   /* "secure-automotive-cloud.org", true */ 's', 'e', 'c', 'u', 'r', 'e', '-', 'a', 'u', 't', 'o', 'm', 'o', 't', 'i', 'v', 'e', '-', 'c', 'l', 'o', 'u', 'd', '.', 'o', 'r', 'g', '\0',
@@ -16800,17 +16799,16 @@ static const char kSTSHostTable[] = {
   /* "securitysoapbox.com", true */ 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', 's', 'o', 'a', 'p', 'b', 'o', 'x', '.', 'c', 'o', 'm', '\0',
   /* "securitystrata.com", true */ 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', 's', 't', 'r', 'a', 't', 'a', '.', 'c', 'o', 'm', '\0',
   /* "securitystreak.com", true */ 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', 's', 't', 'r', 'e', 'a', 'k', '.', 'c', 'o', 'm', '\0',
   /* "securitytalk.pl", true */ 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', 't', 'a', 'l', 'k', '.', 'p', 'l', '\0',
   /* "securitywatch.co.nz", true */ 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', 'w', 'a', 't', 'c', 'h', '.', 'c', 'o', '.', 'n', 'z', '\0',
   /* "securitywithnick.com", true */ 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', 'w', 'i', 't', 'h', 'n', 'i', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "securitywithoutborders.org", true */ 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', 'w', 'i', 't', 'h', 'o', 'u', 't', 'b', 'o', 'r', 'd', 'e', 'r', 's', '.', 'o', 'r', 'g', '\0',
   /* "secuvera.de", true */ 's', 'e', 'c', 'u', 'v', 'e', 'r', 'a', '.', 'd', 'e', '\0',
-  /* "secwall.me", true */ 's', 'e', 'c', 'w', 'a', 'l', 'l', '.', 'm', 'e', '\0',
   /* "secwise.nl", true */ 's', 'e', 'c', 'w', 'i', 's', 'e', '.', 'n', 'l', '\0',
   /* "sedrubal.de", true */ 's', 'e', 'd', 'r', 'u', 'b', 'a', 'l', '.', 'd', 'e', '\0',
   /* "sedussa.ro", true */ 's', 'e', 'd', 'u', 's', 's', 'a', '.', 'r', 'o', '\0',
   /* "seeclop.ch", true */ 's', 'e', 'e', 'c', 'l', 'o', 'p', '.', 'c', 'h', '\0',
   /* "seedalpha.com", true */ 's', 'e', 'e', 'd', 'a', 'l', 'p', 'h', 'a', '.', 'c', 'o', 'm', '\0',
   /* "seedbox.fr", true */ 's', 'e', 'e', 'd', 'b', 'o', 'x', '.', 'f', 'r', '\0',
   /* "seefirm.com", true */ 's', 'e', 'e', 'f', 'i', 'r', 'm', '.', 'c', 'o', 'm', '\0',
   /* "seekers.ch", true */ 's', 'e', 'e', 'k', 'e', 'r', 's', '.', 'c', 'h', '\0',
@@ -17094,17 +17092,16 @@ static const char kSTSHostTable[] = {
   /* "shishkin.link", true */ 's', 'h', 'i', 's', 'h', 'k', 'i', 'n', '.', 'l', 'i', 'n', 'k', '\0',
   /* "shishkin.us", true */ 's', 'h', 'i', 's', 'h', 'k', 'i', 'n', '.', 'u', 's', '\0',
   /* "shishlik.net", true */ 's', 'h', 'i', 's', 'h', 'l', 'i', 'k', '.', 'n', 'e', 't', '\0',
   /* "shitbeast.institute", true */ 's', 'h', 'i', 't', 'b', 'e', 'a', 's', 't', '.', 'i', 'n', 's', 't', 'i', 't', 'u', 't', 'e', '\0',
   /* "shitmybradsays.com", true */ 's', 'h', 'i', 't', 'm', 'y', 'b', 'r', 'a', 'd', 's', 'a', 'y', 's', '.', 'c', 'o', 'm', '\0',
   /* "shitposting.life", true */ 's', 'h', 'i', 't', 'p', 'o', 's', 't', 'i', 'n', 'g', '.', 'l', 'i', 'f', 'e', '\0',
   /* "shitposts.se", true */ 's', 'h', 'i', 't', 'p', 'o', 's', 't', 's', '.', 's', 'e', '\0',
   /* "shitproductions.org", true */ 's', 'h', 'i', 't', 'p', 'r', 'o', 'd', 'u', 'c', 't', 'i', 'o', 'n', 's', '.', 'o', 'r', 'g', '\0',
-  /* "shitsta.in", true */ 's', 'h', 'i', 't', 's', 't', 'a', '.', 'i', 'n', '\0',
   /* "shlemenkov.by", true */ 's', 'h', 'l', 'e', 'm', 'e', 'n', 'k', 'o', 'v', '.', 'b', 'y', '\0',
   /* "shockercityservices.com", true */ 's', 'h', 'o', 'c', 'k', 'e', 'r', 'c', 'i', 't', 'y', 's', 'e', 'r', 'v', 'i', 'c', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "shodan.io", true */ 's', 'h', 'o', 'd', 'a', 'n', '.', 'i', 'o', '\0',
   /* "shoemuse.com", true */ 's', 'h', 'o', 'e', 'm', 'u', 's', 'e', '.', 'c', 'o', 'm', '\0',
   /* "shoestringeventing.co.uk", true */ 's', 'h', 'o', 'e', 's', 't', 'r', 'i', 'n', 'g', 'e', 'v', 'e', 'n', 't', 'i', 'n', 'g', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "shome.de", true */ 's', 'h', 'o', 'm', 'e', '.', 'd', 'e', '\0',
   /* "shooter.dog", true */ 's', 'h', 'o', 'o', 't', 'e', 'r', '.', 'd', 'o', 'g', '\0',
   /* "shootpooloklahoma.com", true */ 's', 'h', 'o', 'o', 't', 'p', 'o', 'o', 'l', 'o', 'k', 'l', 'a', 'h', 'o', 'm', 'a', '.', 'c', 'o', 'm', '\0',
@@ -17174,16 +17171,17 @@ static const char kSTSHostTable[] = {
   /* "signere.no", true */ 's', 'i', 'g', 'n', 'e', 'r', 'e', '.', 'n', 'o', '\0',
   /* "significados.com.br", true */ 's', 'i', 'g', 'n', 'i', 'f', 'i', 'c', 'a', 'd', 'o', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "signing-milter.org", true */ 's', 'i', 'g', 'n', 'i', 'n', 'g', '-', 'm', 'i', 'l', 't', 'e', 'r', '.', 'o', 'r', 'g', '\0',
   /* "signix.net", true */ 's', 'i', 'g', 'n', 'i', 'x', '.', 'n', 'e', 't', '\0',
   /* "signoracle.com", true */ 's', 'i', 'g', 'n', 'o', 'r', 'a', 'c', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "signosquecombinam.com.br", true */ 's', 'i', 'g', 'n', 'o', 's', 'q', 'u', 'e', 'c', 'o', 'm', 'b', 'i', 'n', 'a', 'm', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "signslabelstapesandmore.com", false */ 's', 'i', 'g', 'n', 's', 'l', 'a', 'b', 'e', 'l', 's', 't', 'a', 'p', 'e', 's', 'a', 'n', 'd', 'm', 'o', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "signtul.com", false */ 's', 'i', 'g', 'n', 't', 'u', 'l', '.', 'c', 'o', 'm', '\0',
+  /* "sigsegv.run", true */ 's', 'i', 'g', 's', 'e', 'g', 'v', '.', 'r', 'u', 'n', '\0',
   /* "sigterm.no", true */ 's', 'i', 'g', 't', 'e', 'r', 'm', '.', 'n', 'o', '\0',
   /* "sigterm.sh", true */ 's', 'i', 'g', 't', 'e', 'r', 'm', '.', 's', 'h', '\0',
   /* "siirtutkusu.com", true */ 's', 'i', 'i', 'r', 't', 'u', 't', 'k', 'u', 's', 'u', '.', 'c', 'o', 'm', '\0',
   /* "sijmenschoon.nl", true */ 's', 'i', 'j', 'm', 'e', 'n', 's', 'c', 'h', 'o', 'o', 'n', '.', 'n', 'l', '\0',
   /* "sikatehtaat.fi", true */ 's', 'i', 'k', 'a', 't', 'e', 'h', 't', 'a', 'a', 't', '.', 'f', 'i', '\0',
   /* "sikevux.se", true */ 's', 'i', 'k', 'e', 'v', 'u', 'x', '.', 's', 'e', '\0',
   /* "siku-shop.ch", true */ 's', 'i', 'k', 'u', '-', 's', 'h', 'o', 'p', '.', 'c', 'h', '\0',
   /* "silashes.com", true */ 's', 'i', 'l', 'a', 's', 'h', 'e', 's', '.', 'c', 'o', 'm', '\0',
@@ -17472,17 +17470,16 @@ static const char kSTSHostTable[] = {
   /* "smartest-trading.com", true */ 's', 'm', 'a', 'r', 't', 'e', 's', 't', '-', 't', 'r', 'a', 'd', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "smartfon4you.ru", true */ 's', 'm', 'a', 'r', 't', 'f', 'o', 'n', '4', 'y', 'o', 'u', '.', 'r', 'u', '\0',
   /* "smartftp.com", true */ 's', 'm', 'a', 'r', 't', 'f', 't', 'p', '.', 'c', 'o', 'm', '\0',
   /* "smarthdd.com", true */ 's', 'm', 'a', 'r', 't', 'h', 'd', 'd', '.', 'c', 'o', 'm', '\0',
   /* "smarthouse.de", true */ 's', 'm', 'a', 'r', 't', 'h', 'o', 'u', 's', 'e', '.', 'd', 'e', '\0',
   /* "smartit.pro", true */ 's', 'm', 'a', 'r', 't', 'i', 't', '.', 'p', 'r', 'o', '\0',
   /* "smartlend.se", true */ 's', 'm', 'a', 'r', 't', 'l', 'e', 'n', 'd', '.', 's', 'e', '\0',
   /* "smartlocksmith.com", true */ 's', 'm', 'a', 'r', 't', 'l', 'o', 'c', 'k', 's', 'm', 'i', 't', 'h', '.', 'c', 'o', 'm', '\0',
-  /* "smartmeal.ru", true */ 's', 'm', 'a', 'r', 't', 'm', 'e', 'a', 'l', '.', 'r', 'u', '\0',
   /* "smartmessages.net", true */ 's', 'm', 'a', 'r', 't', 'm', 'e', 's', 's', 'a', 'g', 'e', 's', '.', 'n', 'e', 't', '\0',
   /* "smartpass.government.ae", true */ 's', 'm', 'a', 'r', 't', 'p', 'a', 's', 's', '.', 'g', 'o', 'v', 'e', 'r', 'n', 'm', 'e', 'n', 't', '.', 'a', 'e', '\0',
   /* "smartphone.continental.com", false */ 's', 'm', 'a', 'r', 't', 'p', 'h', 'o', 'n', 'e', '.', 'c', 'o', 'n', 't', 'i', 'n', 'e', 'n', 't', 'a', 'l', '.', 'c', 'o', 'm', '\0',
   /* "smartpolicingplatform.com", true */ 's', 'm', 'a', 'r', 't', 'p', 'o', 'l', 'i', 'c', 'i', 'n', 'g', 'p', 'l', 'a', 't', 'f', 'o', 'r', 'm', '.', 'c', 'o', 'm', '\0',
   /* "smartrade.tech", true */ 's', 'm', 'a', 'r', 't', 'r', 'a', 'd', 'e', '.', 't', 'e', 'c', 'h', '\0',
   /* "smartshiftme.com", true */ 's', 'm', 'a', 'r', 't', 's', 'h', 'i', 'f', 't', 'm', 'e', '.', 'c', 'o', 'm', '\0',
   /* "smartship.co.jp", true */ 's', 'm', 'a', 'r', 't', 's', 'h', 'i', 'p', '.', 'c', 'o', '.', 'j', 'p', '\0',
   /* "smartsparrow.com", true */ 's', 'm', 'a', 'r', 't', 's', 'p', 'a', 'r', 'r', 'o', 'w', '.', 'c', 'o', 'm', '\0',
@@ -17650,17 +17647,16 @@ static const char kSTSHostTable[] = {
   /* "sona-gaming.com", true */ 's', 'o', 'n', 'a', '-', 'g', 'a', 'm', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "sonafe.info", true */ 's', 'o', 'n', 'a', 'f', 'e', '.', 'i', 'n', 'f', 'o', '\0',
   /* "sonarqube.com", false */ 's', 'o', 'n', 'a', 'r', 'q', 'u', 'b', 'e', '.', 'c', 'o', 'm', '\0',
   /* "sondergaard.de", true */ 's', 'o', 'n', 'd', 'e', 'r', 'g', 'a', 'a', 'r', 'd', '.', 'd', 'e', '\0',
   /* "sonerezh.bzh", true */ 's', 'o', 'n', 'e', 'r', 'e', 'z', 'h', '.', 'b', 'z', 'h', '\0',
   /* "songsthatsavedyourlife.com", true */ 's', 'o', 'n', 'g', 's', 't', 'h', 'a', 't', 's', 'a', 'v', 'e', 'd', 'y', 'o', 'u', 'r', 'l', 'i', 'f', 'e', '.', 'c', 'o', 'm', '\0',
   /* "songzhuolun.com", true */ 's', 'o', 'n', 'g', 'z', 'h', 'u', 'o', 'l', 'u', 'n', '.', 'c', 'o', 'm', '\0',
   /* "sonic.sk", false */ 's', 'o', 'n', 'i', 'c', '.', 's', 'k', '\0',
-  /* "sonicrainboom.rocks", false */ 's', 'o', 'n', 'i', 'c', 'r', 'a', 'i', 'n', 'b', 'o', 'o', 'm', '.', 'r', 'o', 'c', 'k', 's', '\0',
   /* "sonja-daniels.com", true */ 's', 'o', 'n', 'j', 'a', '-', 'd', 'a', 'n', 'i', 'e', 'l', 's', '.', 'c', 'o', 'm', '\0',
   /* "sonja-kowa.de", true */ 's', 'o', 'n', 'j', 'a', '-', 'k', 'o', 'w', 'a', '.', 'd', 'e', '\0',
   /* "sonyunlock.nu", true */ 's', 'o', 'n', 'y', 'u', 'n', 'l', 'o', 'c', 'k', '.', 'n', 'u', '\0',
   /* "soph.us", true */ 's', 'o', 'p', 'h', '.', 'u', 's', '\0',
   /* "sopheos.com", false */ 's', 'o', 'p', 'h', 'e', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "sopher.io", true */ 's', 'o', 'p', 'h', 'e', 'r', '.', 'i', 'o', '\0',
   /* "sophiakligys.com", true */ 's', 'o', 'p', 'h', 'i', 'a', 'k', 'l', 'i', 'g', 'y', 's', '.', 'c', 'o', 'm', '\0',
   /* "soply.com", true */ 's', 'o', 'p', 'l', 'y', '.', 'c', 'o', 'm', '\0',
@@ -17857,16 +17853,17 @@ static const char kSTSHostTable[] = {
   /* "square-gaming.org", true */ 's', 'q', 'u', 'a', 'r', 'e', '-', 'g', 'a', 'm', 'i', 'n', 'g', '.', 'o', 'r', 'g', '\0',
   /* "square-src.de", false */ 's', 'q', 'u', 'a', 'r', 'e', '-', 's', 'r', 'c', '.', 'd', 'e', '\0',
   /* "square.com", false */ 's', 'q', 'u', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "squarelab.it", true */ 's', 'q', 'u', 'a', 'r', 'e', 'l', 'a', 'b', '.', 'i', 't', '\0',
   /* "squareonebgc.com.ph", true */ 's', 'q', 'u', 'a', 'r', 'e', 'o', 'n', 'e', 'b', 'g', 'c', '.', 'c', 'o', 'm', '.', 'p', 'h', '\0',
   /* "squareup.com", false */ 's', 'q', 'u', 'a', 'r', 'e', 'u', 'p', '.', 'c', 'o', 'm', '\0',
   /* "squawk.cc", true */ 's', 'q', 'u', 'a', 'w', 'k', '.', 'c', 'c', '\0',
   /* "squeezemetrics.com", true */ 's', 'q', 'u', 'e', 'e', 'z', 'e', 'm', 'e', 't', 'r', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
+  /* "squido.ch", true */ 's', 'q', 'u', 'i', 'd', 'o', '.', 'c', 'h', '\0',
   /* "squids.space", true */ 's', 'q', 'u', 'i', 'd', 's', '.', 's', 'p', 'a', 'c', 'e', '\0',
   /* "squirtlesbians.net", true */ 's', 'q', 'u', 'i', 'r', 't', 'l', 'e', 's', 'b', 'i', 'a', 'n', 's', '.', 'n', 'e', 't', '\0',
   /* "srandom.com", true */ 's', 'r', 'a', 'n', 'd', 'o', 'm', '.', 'c', 'o', 'm', '\0',
   /* "src.fedoraproject.org", true */ 's', 'r', 'c', '.', 'f', 'e', 'd', 'o', 'r', 'a', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
   /* "srchub.org", true */ 's', 'r', 'c', 'h', 'u', 'b', '.', 'o', 'r', 'g', '\0',
   /* "sritest.io", true */ 's', 'r', 'i', 't', 'e', 's', 't', '.', 'i', 'o', '\0',
   /* "sro.center", true */ 's', 'r', 'o', '.', 'c', 'e', 'n', 't', 'e', 'r', '\0',
   /* "srpdb.com", true */ 's', 'r', 'p', 'd', 'b', '.', 'c', 'o', 'm', '\0',
@@ -17938,17 +17935,16 @@ static const char kSTSHostTable[] = {
   /* "stamonicatourandtravel.com", true */ 's', 't', 'a', 'm', 'o', 'n', 'i', 'c', 'a', 't', 'o', 'u', 'r', 'a', 'n', 'd', 't', 'r', 'a', 'v', 'e', 'l', '.', 'c', 'o', 'm', '\0',
   /* "stamparmakarije.me", true */ 's', 't', 'a', 'm', 'p', 'a', 'r', 'm', 'a', 'k', 'a', 'r', 'i', 'j', 'e', '.', 'm', 'e', '\0',
   /* "stampederadon.com", true */ 's', 't', 'a', 'm', 'p', 'e', 'd', 'e', 'r', 'a', 'd', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "stanandjerre.org", true */ 's', 't', 'a', 'n', 'a', 'n', 'd', 'j', 'e', 'r', 'r', 'e', '.', 'o', 'r', 'g', '\0',
   /* "standagainstspying.org", true */ 's', 't', 'a', 'n', 'd', 'a', 'g', 'a', 'i', 'n', 's', 't', 's', 'p', 'y', 'i', 'n', 'g', '.', 'o', 'r', 'g', '\0',
   /* "standards.gov", true */ 's', 't', 'a', 'n', 'd', 'a', 'r', 'd', 's', '.', 'g', 'o', 'v', '\0',
   /* "standoutbooks.com", true */ 's', 't', 'a', 'n', 'd', 'o', 'u', 't', 'b', 'o', 'o', 'k', 's', '.', 'c', 'o', 'm', '\0',
   /* "star-citizen.wiki", true */ 's', 't', 'a', 'r', '-', 'c', 'i', 't', 'i', 'z', 'e', 'n', '.', 'w', 'i', 'k', 'i', '\0',
-  /* "star-killer.net", true */ 's', 't', 'a', 'r', '-', 'k', 'i', 'l', 'l', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "starcafe.me", true */ 's', 't', 'a', 'r', 'c', 'a', 'f', 'e', '.', 'm', 'e', '\0',
   /* "starcomproj.com", true */ 's', 't', 'a', 'r', 'c', 'o', 'm', 'p', 'r', 'o', 'j', '.', 'c', 'o', 'm', '\0',
   /* "stardanceacademy.net", true */ 's', 't', 'a', 'r', 'd', 'a', 'n', 'c', 'e', 'a', 'c', 'a', 'd', 'e', 'm', 'y', '.', 'n', 'e', 't', '\0',
   /* "starfm.de", true */ 's', 't', 'a', 'r', 'f', 'm', '.', 'd', 'e', '\0',
   /* "stargarder-jungs.de", true */ 's', 't', 'a', 'r', 'g', 'a', 'r', 'd', 'e', 'r', '-', 'j', 'u', 'n', 'g', 's', '.', 'd', 'e', '\0',
   /* "stargazer.de", true */ 's', 't', 'a', 'r', 'g', 'a', 'z', 'e', 'r', '.', 'd', 'e', '\0',
   /* "stari.co", true */ 's', 't', 'a', 'r', 'i', '.', 'c', 'o', '\0',
   /* "starina.ru", true */ 's', 't', 'a', 'r', 'i', 'n', 'a', '.', 'r', 'u', '\0',
@@ -18146,17 +18142,16 @@ static const char kSTSHostTable[] = {
   /* "strutta.me", true */ 's', 't', 'r', 'u', 't', 't', 'a', '.', 'm', 'e', '\0',
   /* "struxureon.com", true */ 's', 't', 'r', 'u', 'x', 'u', 'r', 'e', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "stt.wiki", true */ 's', 't', 't', '.', 'w', 'i', 'k', 'i', '\0',
   /* "stuartbell.co.uk", true */ 's', 't', 'u', 'a', 'r', 't', 'b', 'e', 'l', 'l', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "stuco.co", true */ 's', 't', 'u', 'c', 'o', '.', 'c', 'o', '\0',
   /* "studenckiemetody.pl", true */ 's', 't', 'u', 'd', 'e', 'n', 'c', 'k', 'i', 'e', 'm', 'e', 't', 'o', 'd', 'y', '.', 'p', 'l', '\0',
   /* "student.andover.edu", true */ 's', 't', 'u', 'd', 'e', 'n', 't', '.', 'a', 'n', 'd', 'o', 'v', 'e', 'r', '.', 'e', 'd', 'u', '\0',
   /* "studentite.bg", false */ 's', 't', 'u', 'd', 'e', 'n', 't', 'i', 't', 'e', '.', 'b', 'g', '\0',
-  /* "studentloans.gov", true */ 's', 't', 'u', 'd', 'e', 'n', 't', 'l', 'o', 'a', 'n', 's', '.', 'g', 'o', 'v', '\0',
   /* "studentrdh.com", true */ 's', 't', 'u', 'd', 'e', 'n', 't', 'r', 'd', 'h', '.', 'c', 'o', 'm', '\0',
   /* "studentrightsadvocate.org", true */ 's', 't', 'u', 'd', 'e', 'n', 't', 'r', 'i', 'g', 'h', 't', 's', 'a', 'd', 'v', 'o', 'c', 'a', 't', 'e', '.', 'o', 'r', 'g', '\0',
   /* "studenttenant.com", true */ 's', 't', 'u', 'd', 'e', 'n', 't', 't', 'e', 'n', 'a', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "studer.su", true */ 's', 't', 'u', 'd', 'e', 'r', '.', 's', 'u', '\0',
   /* "studienportal.eu", true */ 's', 't', 'u', 'd', 'i', 'e', 'n', 'p', 'o', 'r', 't', 'a', 'l', '.', 'e', 'u', '\0',
   /* "studiodentisticosanmarco.it", true */ 's', 't', 'u', 'd', 'i', 'o', 'd', 'e', 'n', 't', 'i', 's', 't', 'i', 'c', 'o', 's', 'a', 'n', 'm', 'a', 'r', 'c', 'o', '.', 'i', 't', '\0',
   /* "studiodewit.nl", true */ 's', 't', 'u', 'd', 'i', 'o', 'd', 'e', 'w', 'i', 't', '.', 'n', 'l', '\0',
   /* "studiograou.com", true */ 's', 't', 'u', 'd', 'i', 'o', 'g', 'r', 'a', 'o', 'u', '.', 'c', 'o', 'm', '\0',
@@ -18226,16 +18221,17 @@ static const char kSTSHostTable[] = {
   /* "suksit.com", true */ 's', 'u', 'k', 's', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "sulek.eu", true */ 's', 'u', 'l', 'e', 'k', '.', 'e', 'u', '\0',
   /* "sumguy.com", true */ 's', 'u', 'm', 'g', 'u', 'y', '.', 'c', 'o', 'm', '\0',
   /* "summa.eu", false */ 's', 'u', 'm', 'm', 'a', '.', 'e', 'u', '\0',
   /* "sumthing.com", true */ 's', 'u', 'm', 't', 'h', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "sunbritetv.com", true */ 's', 'u', 'n', 'b', 'r', 'i', 't', 'e', 't', 'v', '.', 'c', 'o', 'm', '\0',
   /* "sundayfundayjapan.com", true */ 's', 'u', 'n', 'd', 'a', 'y', 'f', 'u', 'n', 'd', 'a', 'y', 'j', 'a', 'p', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "suneilpatel.com", true */ 's', 'u', 'n', 'e', 'i', 'l', 'p', 'a', 't', 'e', 'l', '.', 'c', 'o', 'm', '\0',
+  /* "sunflyer.cn", false */ 's', 'u', 'n', 'f', 'l', 'y', 'e', 'r', '.', 'c', 'n', '\0',
   /* "sunfox.cz", true */ 's', 'u', 'n', 'f', 'o', 'x', '.', 'c', 'z', '\0',
   /* "sungo.wtf", true */ 's', 'u', 'n', 'g', 'o', '.', 'w', 't', 'f', '\0',
   /* "sunjaydhama.com", true */ 's', 'u', 'n', 'j', 'a', 'y', 'd', 'h', 'a', 'm', 'a', '.', 'c', 'o', 'm', '\0',
   /* "sunsetwx.com", true */ 's', 'u', 'n', 's', 'e', 't', 'w', 'x', '.', 'c', 'o', 'm', '\0',
   /* "sunsmartresorts.com", true */ 's', 'u', 'n', 's', 'm', 'a', 'r', 't', 'r', 'e', 's', 'o', 'r', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "sunstar.bg", true */ 's', 'u', 'n', 's', 't', 'a', 'r', '.', 'b', 'g', '\0',
   /* "supa.sexy", true */ 's', 'u', 'p', 'a', '.', 's', 'e', 'x', 'y', '\0',
   /* "supastuds.com", true */ 's', 'u', 'p', 'a', 's', 't', 'u', 'd', 's', '.', 'c', 'o', 'm', '\0',
@@ -18460,16 +18456,17 @@ static const char kSTSHostTable[] = {
   /* "talentos.pt", true */ 't', 'a', 'l', 'e', 'n', 't', 'o', 's', '.', 'p', 't', '\0',
   /* "talentuar.com", true */ 't', 'a', 'l', 'e', 'n', 't', 'u', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "taler.net", true */ 't', 'a', 'l', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "talideon.com", false */ 't', 'a', 'l', 'i', 'd', 'e', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "talk.google.com", true */ 't', 'a', 'l', 'k', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "talkgadget.google.com", true */ 't', 'a', 'l', 'k', 'g', 'a', 'd', 'g', 'e', 't', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "talkitup.mx", true */ 't', 'a', 'l', 'k', 'i', 't', 'u', 'p', '.', 'm', 'x', '\0',
   /* "talktodarcy.com", true */ 't', 'a', 'l', 'k', 't', 'o', 'd', 'a', 'r', 'c', 'y', '.', 'c', 'o', 'm', '\0',
+  /* "talktwincities.com", true */ 't', 'a', 'l', 'k', 't', 'w', 'i', 'n', 'c', 'i', 't', 'i', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "tallcraft.com", true */ 't', 'a', 'l', 'l', 'c', 'r', 'a', 'f', 't', '.', 'c', 'o', 'm', '\0',
   /* "talldude.net", true */ 't', 'a', 'l', 'l', 'd', 'u', 'd', 'e', '.', 'n', 'e', 't', '\0',
   /* "talsi.eu", true */ 't', 'a', 'l', 's', 'i', '.', 'e', 'u', '\0',
   /* "talun.de", true */ 't', 'a', 'l', 'u', 'n', '.', 'd', 'e', '\0',
   /* "tamasszabo.net", true */ 't', 'a', 'm', 'a', 's', 's', 'z', 'a', 'b', 'o', '.', 'n', 'e', 't', '\0',
   /* "tamchunho.com", true */ 't', 'a', 'm', 'c', 'h', 'u', 'n', 'h', 'o', '.', 'c', 'o', 'm', '\0',
   /* "tammy.pro", true */ 't', 'a', 'm', 'm', 'y', '.', 'p', 'r', 'o', '\0',
   /* "tampabaybusinesslistings.com", true */ 't', 'a', 'm', 'p', 'a', 'b', 'a', 'y', 'b', 'u', 's', 'i', 'n', 'e', 's', 's', 'l', 'i', 's', 't', 'i', 'n', 'g', 's', '.', 'c', 'o', 'm', '\0',
@@ -18541,31 +18538,31 @@ static const char kSTSHostTable[] = {
   /* "tdelmas.eu", true */ 't', 'd', 'e', 'l', 'm', 'a', 's', '.', 'e', 'u', '\0',
   /* "tdelmas.ovh", true */ 't', 'd', 'e', 'l', 'm', 'a', 's', '.', 'o', 'v', 'h', '\0',
   /* "tdfbfoundation.org", true */ 't', 'd', 'f', 'b', 'f', 'o', 'u', 'n', 'd', 'a', 't', 'i', 'o', 'n', '.', 'o', 'r', 'g', '\0',
   /* "tdrs.info", true */ 't', 'd', 'r', 's', '.', 'i', 'n', 'f', 'o', '\0',
   /* "tdsb.cf", true */ 't', 'd', 's', 'b', '.', 'c', 'f', '\0',
   /* "tdsb.ga", true */ 't', 'd', 's', 'b', '.', 'g', 'a', '\0',
   /* "tdsb.gq", true */ 't', 'd', 's', 'b', '.', 'g', 'q', '\0',
   /* "tdsb.ml", true */ 't', 'd', 's', 'b', '.', 'm', 'l', '\0',
-  /* "tdude.co", true */ 't', 'd', 'u', 'd', 'e', '.', 'c', 'o', '\0',
   /* "teabagdesign.co.uk", true */ 't', 'e', 'a', 'b', 'a', 'g', 'd', 'e', 's', 'i', 'g', 'n', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "teachercreatedmaterials.com", true */ 't', 'e', 'a', 'c', 'h', 'e', 'r', 'c', 'r', 'e', 'a', 't', 'e', 'd', 'm', 'a', 't', 'e', 'r', 'i', 'a', 'l', 's', '.', 'c', 'o', 'm', '\0',
   /* "teacherph.com", true */ 't', 'e', 'a', 'c', 'h', 'e', 'r', 'p', 'h', '.', 'c', 'o', 'm', '\0',
   /* "teacherph.net", true */ 't', 'e', 'a', 'c', 'h', 'e', 'r', 'p', 'h', '.', 'n', 'e', 't', '\0',
   /* "teacherpowered.org", true */ 't', 'e', 'a', 'c', 'h', 'e', 'r', 'p', 'o', 'w', 'e', 'r', 'e', 'd', '.', 'o', 'r', 'g', '\0',
   /* "teachingcopyright.com", true */ 't', 'e', 'a', 'c', 'h', 'i', 'n', 'g', 'c', 'o', 'p', 'y', 'r', 'i', 'g', 'h', 't', '.', 'c', 'o', 'm', '\0',
   /* "teachingcopyright.net", true */ 't', 'e', 'a', 'c', 'h', 'i', 'n', 'g', 'c', 'o', 'p', 'y', 'r', 'i', 'g', 'h', 't', '.', 'n', 'e', 't', '\0',
   /* "teachingcopyright.org", true */ 't', 'e', 'a', 'c', 'h', 'i', 'n', 'g', 'c', 'o', 'p', 'y', 'r', 'i', 'g', 'h', 't', '.', 'o', 'r', 'g', '\0',
   /* "teachmeplease.com", true */ 't', 'e', 'a', 'c', 'h', 'm', 'e', 'p', 'l', 'e', 'a', 's', 'e', '.', 'c', 'o', 'm', '\0',
   /* "teachmeplease.ru", true */ 't', 'e', 'a', 'c', 'h', 'm', 'e', 'p', 'l', 'e', 'a', 's', 'e', '.', 'r', 'u', '\0',
   /* "teachpeople.org", true */ 't', 'e', 'a', 'c', 'h', 'p', 'e', 'o', 'p', 'l', 'e', '.', 'o', 'r', 'g', '\0',
   /* "teahut.net", true */ 't', 'e', 'a', 'h', 'u', 't', '.', 'n', 'e', 't', '\0',
   /* "tealdrones.com", true */ 't', 'e', 'a', 'l', 'd', 'r', 'o', 'n', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "team-azerty.com", true */ 't', 'e', 'a', 'm', '-', 'a', 'z', 'e', 'r', 't', 'y', '.', 'c', 'o', 'm', '\0',
+  /* "team-bbd.com", true */ 't', 'e', 'a', 'm', '-', 'b', 'b', 'd', '.', 'c', 'o', 'm', '\0',
   /* "team-one.racing", false */ 't', 'e', 'a', 'm', '-', 'o', 'n', 'e', '.', 'r', 'a', 'c', 'i', 'n', 'g', '\0',
   /* "team-pancake.eu", true */ 't', 'e', 'a', 'm', '-', 'p', 'a', 'n', 'c', 'a', 'k', 'e', '.', 'e', 'u', '\0',
   /* "team3482.com", true */ 't', 'e', 'a', 'm', '3', '4', '8', '2', '.', 'c', 'o', 'm', '\0',
   /* "teambeoplay.co.uk", true */ 't', 'e', 'a', 'm', 'b', 'e', 'o', 'p', 'l', 'a', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "teambition.com", true */ 't', 'e', 'a', 'm', 'b', 'i', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "teamcombat.com", true */ 't', 'e', 'a', 'm', 'c', 'o', 'm', 'b', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "teamdaylo.xyz", true */ 't', 'e', 'a', 'm', 'd', 'a', 'y', 'l', 'o', '.', 'x', 'y', 'z', '\0',
   /* "teamhood.io", true */ 't', 'e', 'a', 'm', 'h', 'o', 'o', 'd', '.', 'i', 'o', '\0',
@@ -19014,16 +19011,17 @@ static const char kSTSHostTable[] = {
   /* "thouni.de", true */ 't', 'h', 'o', 'u', 'n', 'i', '.', 'd', 'e', '\0',
   /* "threatcentral.io", true */ 't', 'h', 'r', 'e', 'a', 't', 'c', 'e', 'n', 't', 'r', 'a', 'l', '.', 'i', 'o', '\0',
   /* "threebrothersbrewing.com", true */ 't', 'h', 'r', 'e', 'e', 'b', 'r', 'o', 't', 'h', 'e', 'r', 's', 'b', 'r', 'e', 'w', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "threecrownsllp.com", true */ 't', 'h', 'r', 'e', 'e', 'c', 'r', 'o', 'w', 'n', 's', 'l', 'l', 'p', '.', 'c', 'o', 'm', '\0',
   /* "threedpro.me", true */ 't', 'h', 'r', 'e', 'e', 'd', 'p', 'r', 'o', '.', 'm', 'e', '\0',
   /* "threefours.net", true */ 't', 'h', 'r', 'e', 'e', 'f', 'o', 'u', 'r', 's', '.', 'n', 'e', 't', '\0',
   /* "threelions.ch", true */ 't', 'h', 'r', 'e', 'e', 'l', 'i', 'o', 'n', 's', '.', 'c', 'h', '\0',
   /* "threv.net", true */ 't', 'h', 'r', 'e', 'v', '.', 'n', 'e', 't', '\0',
+  /* "thriveta.com", true */ 't', 'h', 'r', 'i', 'v', 'e', 't', 'a', '.', 'c', 'o', 'm', '\0',
   /* "thrivewellnesshub.co.za", true */ 't', 'h', 'r', 'i', 'v', 'e', 'w', 'e', 'l', 'l', 'n', 'e', 's', 's', 'h', 'u', 'b', '.', 'c', 'o', '.', 'z', 'a', '\0',
   /* "throttlerz.in", true */ 't', 'h', 'r', 'o', 't', 't', 'l', 'e', 'r', 'z', '.', 'i', 'n', '\0',
   /* "throughtheglass.photo", true */ 't', 'h', 'r', 'o', 'u', 'g', 'h', 't', 'h', 'e', 'g', 'l', 'a', 's', 's', '.', 'p', 'h', 'o', 't', 'o', '\0',
   /* "throwaway.link", true */ 't', 'h', 'r', 'o', 'w', 'a', 'w', 'a', 'y', '.', 'l', 'i', 'n', 'k', '\0',
   /* "throwpass.com", true */ 't', 'h', 'r', 'o', 'w', 'p', 'a', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "thrx.net", true */ 't', 'h', 'r', 'x', '.', 'n', 'e', 't', '\0',
   /* "thues.eu", true */ 't', 'h', 'u', 'e', 's', '.', 'e', 'u', '\0',
   /* "thunderfox.nl", true */ 't', 'h', 'u', 'n', 'd', 'e', 'r', 'f', 'o', 'x', '.', 'n', 'l', '\0',
@@ -19057,17 +19055,16 @@ static const char kSTSHostTable[] = {
   /* "tierarztpraxis-bogenhausen.de", true */ 't', 'i', 'e', 'r', 'a', 'r', 'z', 't', 'p', 'r', 'a', 'x', 'i', 's', '-', 'b', 'o', 'g', 'e', 'n', 'h', 'a', 'u', 's', 'e', 'n', '.', 'd', 'e', '\0',
   /* "tierrarp.com", true */ 't', 'i', 'e', 'r', 'r', 'a', 'r', 'p', '.', 'c', 'o', 'm', '\0',
   /* "tifan.net", true */ 't', 'i', 'f', 'a', 'n', '.', 'n', 'e', 't', '\0',
   /* "tiffnix.com", true */ 't', 'i', 'f', 'f', 'n', 'i', 'x', '.', 'c', 'o', 'm', '\0',
   /* "tigerchef.com", true */ 't', 'i', 'g', 'e', 'r', 'c', 'h', 'e', 'f', '.', 'c', 'o', 'm', '\0',
   /* "tigerdile.com", true */ 't', 'i', 'g', 'e', 'r', 'd', 'i', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "tijden.nu", true */ 't', 'i', 'j', 'd', 'e', 'n', '.', 'n', 'u', '\0',
   /* "tiki-god.co.uk", true */ 't', 'i', 'k', 'i', '-', 'g', 'o', 'd', '.', 'c', 'o', '.', 'u', 'k', '\0',
-  /* "tiledailyshop.com", true */ 't', 'i', 'l', 'e', 'd', 'a', 'i', 'l', 'y', 's', 'h', 'o', 'p', '.', 'c', 'o', 'm', '\0',
   /* "tileyourvisit.pt", true */ 't', 'i', 'l', 'e', 'y', 'o', 'u', 'r', 'v', 'i', 's', 'i', 't', '.', 'p', 't', '\0',
   /* "tilikum.io", true */ 't', 'i', 'l', 'i', 'k', 'u', 'm', '.', 'i', 'o', '\0',
   /* "till.im", true */ 't', 'i', 'l', 'l', '.', 'i', 'm', '\0',
   /* "tillseasyscore.com", true */ 't', 'i', 'l', 'l', 's', 'e', 'a', 's', 'y', 's', 'c', 'o', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "timdebruijn.nl", true */ 't', 'i', 'm', 'd', 'e', 'b', 'r', 'u', 'i', 'j', 'n', '.', 'n', 'l', '\0',
   /* "timdeneau.com", true */ 't', 'i', 'm', 'd', 'e', 'n', 'e', 'a', 'u', '.', 'c', 'o', 'm', '\0',
   /* "timdoug.com", true */ 't', 'i', 'm', 'd', 'o', 'u', 'g', '.', 'c', 'o', 'm', '\0',
   /* "time2060.ru", true */ 't', 'i', 'm', 'e', '2', '0', '6', '0', '.', 'r', 'u', '\0',
@@ -19677,16 +19674,17 @@ static const char kSTSHostTable[] = {
   /* "twentymilliseconds.com", true */ 't', 'w', 'e', 'n', 't', 'y', 'm', 'i', 'l', 'l', 'i', 's', 'e', 'c', 'o', 'n', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "twistapp.com", true */ 't', 'w', 'i', 's', 't', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "twistedwave.com", true */ 't', 'w', 'i', 's', 't', 'e', 'd', 'w', 'a', 'v', 'e', '.', 'c', 'o', 'm', '\0',
   /* "twisto.cz", true */ 't', 'w', 'i', 's', 't', 'o', '.', 'c', 'z', '\0',
   /* "twit-guide.com", true */ 't', 'w', 'i', 't', '-', 'g', 'u', 'i', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "twitter.com", false */ 't', 'w', 'i', 't', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "twitteroauth.com", true */ 't', 'w', 'i', 't', 't', 'e', 'r', 'o', 'a', 'u', 't', 'h', '.', 'c', 'o', 'm', '\0',
   /* "twlan.org", true */ 't', 'w', 'l', 'a', 'n', '.', 'o', 'r', 'g', '\0',
+  /* "twodadsgames.com", true */ 't', 'w', 'o', 'd', 'a', 'd', 's', 'g', 'a', 'm', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "twofactorauth.org", true */ 't', 'w', 'o', 'f', 'a', 'c', 't', 'o', 'r', 'a', 'u', 't', 'h', '.', 'o', 'r', 'g', '\0',
   /* "twojfaktum.pl", true */ 't', 'w', 'o', 'j', 'f', 'a', 'k', 't', 'u', 'm', '.', 'p', 'l', '\0',
   /* "twolanedesign.com", true */ 't', 'w', 'o', 'l', 'a', 'n', 'e', 'd', 'e', 's', 'i', 'g', 'n', '.', 'c', 'o', 'm', '\0',
   /* "twolivelife.com", true */ 't', 'w', 'o', 'l', 'i', 'v', 'e', 'l', 'i', 'f', 'e', '.', 'c', 'o', 'm', '\0',
   /* "twoo.com", true */ 't', 'w', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "twopif.net", true */ 't', 'w', 'o', 'p', 'i', 'f', '.', 'n', 'e', 't', '\0',
   /* "twotube.ie", true */ 't', 'w', 'o', 't', 'u', 'b', 'e', '.', 'i', 'e', '\0',
   /* "twun.io", true */ 't', 'w', 'u', 'n', '.', 'i', 'o', '\0',
@@ -19723,16 +19721,17 @@ static const char kSTSHostTable[] = {
   /* "uangteman.com", true */ 'u', 'a', 'n', 'g', 't', 'e', 'm', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "uasmi.com", true */ 'u', 'a', 's', 'm', 'i', '.', 'c', 'o', 'm', '\0',
   /* "uat-activesg.com", true */ 'u', 'a', 't', '-', 'a', 'c', 't', 'i', 'v', 'e', 's', 'g', '.', 'c', 'o', 'm', '\0',
   /* "ub3rk1tten.com", false */ 'u', 'b', '3', 'r', 'k', '1', 't', 't', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "ubalert.com", true */ 'u', 'b', 'a', 'l', 'e', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "ubanquity.com", true */ 'u', 'b', 'a', 'n', 'q', 'u', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "uberboxen.net", true */ 'u', 'b', 'e', 'r', 'b', 'o', 'x', 'e', 'n', '.', 'n', 'e', 't', '\0',
   /* "ubertt.org", true */ 'u', 'b', 'e', 'r', 't', 't', '.', 'o', 'r', 'g', '\0',
+  /* "uberwald.de", true */ 'u', 'b', 'e', 'r', 'w', 'a', 'l', 'd', '.', 'd', 'e', '\0',
   /* "uberwald.ws", true */ 'u', 'b', 'e', 'r', 'w', 'a', 'l', 'd', '.', 'w', 's', '\0',
   /* "ublaboo.org", true */ 'u', 'b', 'l', 'a', 'b', 'o', 'o', '.', 'o', 'r', 'g', '\0',
   /* "uborcare.com", true */ 'u', 'b', 'o', 'r', 'c', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "ubtce.com", true */ 'u', 'b', 't', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "ucangiller.com", true */ 'u', 'c', 'a', 'n', 'g', 'i', 'l', 'l', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "ucfirst.nl", true */ 'u', 'c', 'f', 'i', 'r', 's', 't', '.', 'n', 'l', '\0',
   /* "uchargeapp.com", true */ 'u', 'c', 'h', 'a', 'r', 'g', 'e', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "uclanmasterplan.co.uk", true */ 'u', 'c', 'l', 'a', 'n', 'm', 'a', 's', 't', 'e', 'r', 'p', 'l', 'a', 'n', '.', 'c', 'o', '.', 'u', 'k', '\0',
@@ -20512,16 +20511,17 @@ static const char kSTSHostTable[] = {
   /* "watchinventory.com", true */ 'w', 'a', 't', 'c', 'h', 'i', 'n', 'v', 'e', 'n', 't', 'o', 'r', 'y', '.', 'c', 'o', 'm', '\0',
   /* "watchstyle.com", true */ 'w', 'a', 't', 'c', 'h', 's', 't', 'y', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "watchweasel.com", true */ 'w', 'a', 't', 'c', 'h', 'w', 'e', 'a', 's', 'e', 'l', '.', 'c', 'o', 'm', '\0',
   /* "waterfedpole.com", true */ 'w', 'a', 't', 'e', 'r', 'f', 'e', 'd', 'p', 'o', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "watermonitor.gov", true */ 'w', 'a', 't', 'e', 'r', 'm', 'o', 'n', 'i', 't', 'o', 'r', '.', 'g', 'o', 'v', '\0',
   /* "watersb.org", true */ 'w', 'a', 't', 'e', 'r', 's', 'b', '.', 'o', 'r', 'g', '\0',
   /* "watertrails.io", true */ 'w', 'a', 't', 'e', 'r', 't', 'r', 'a', 'i', 'l', 's', '.', 'i', 'o', '\0',
   /* "watsonwork.me", true */ 'w', 'a', 't', 's', 'o', 'n', 'w', 'o', 'r', 'k', '.', 'm', 'e', '\0',
+  /* "wattechweb.com", true */ 'w', 'a', 't', 't', 'e', 'c', 'h', 'w', 'e', 'b', '.', 'c', 'o', 'm', '\0',
   /* "wavesboardshop.com", true */ 'w', 'a', 'v', 'e', 's', 'b', 'o', 'a', 'r', 'd', 's', 'h', 'o', 'p', '.', 'c', 'o', 'm', '\0',
   /* "wavesoftime.com", true */ 'w', 'a', 'v', 'e', 's', 'o', 'f', 't', 'i', 'm', 'e', '.', 'c', 'o', 'm', '\0',
   /* "wawak.pl", true */ 'w', 'a', 'w', 'a', 'k', '.', 'p', 'l', '\0',
   /* "waxdramatic.com", true */ 'w', 'a', 'x', 'd', 'r', 'a', 'm', 'a', 't', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "waylaydesign.com", true */ 'w', 'a', 'y', 'l', 'a', 'y', 'd', 'e', 's', 'i', 'g', 'n', '.', 'c', 'o', 'm', '\0',
   /* "wayne.cloud", false */ 'w', 'a', 'y', 'n', 'e', '.', 'c', 'l', 'o', 'u', 'd', '\0',
   /* "wayohoo.com", true */ 'w', 'a', 'y', 'o', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "wayohoo.net", true */ 'w', 'a', 'y', 'o', 'h', 'o', 'o', '.', 'n', 'e', 't', '\0',
@@ -20563,16 +20563,17 @@ static const char kSTSHostTable[] = {
   /* "webart-factory.de", true */ 'w', 'e', 'b', 'a', 'r', 't', '-', 'f', 'a', 'c', 't', 'o', 'r', 'y', '.', 'd', 'e', '\0',
   /* "webbhuset.se", false */ 'w', 'e', 'b', 'b', 'h', 'u', 's', 'e', 't', '.', 's', 'e', '\0',
   /* "webcamtoy.com", true */ 'w', 'e', 'b', 'c', 'a', 'm', 't', 'o', 'y', '.', 'c', 'o', 'm', '\0',
   /* "webcollect.org.uk", true */ 'w', 'e', 'b', 'c', 'o', 'l', 'l', 'e', 'c', 't', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "webcontentspinning.com", true */ 'w', 'e', 'b', 'c', 'o', 'n', 't', 'e', 'n', 't', 's', 'p', 'i', 'n', 'n', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "webcrm.com", true */ 'w', 'e', 'b', 'c', 'r', 'm', '.', 'c', 'o', 'm', '\0',
   /* "webdeflect.com", true */ 'w', 'e', 'b', 'd', 'e', 'f', 'l', 'e', 'c', 't', '.', 'c', 'o', 'm', '\0',
   /* "webdesign-st.de", true */ 'w', 'e', 'b', 'd', 'e', 's', 'i', 'g', 'n', '-', 's', 't', '.', 'd', 'e', '\0',
+  /* "webdesigneauclaire.com", true */ 'w', 'e', 'b', 'd', 'e', 's', 'i', 'g', 'n', 'e', 'a', 'u', 'c', 'l', 'a', 'i', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "webdesignplay.com", true */ 'w', 'e', 'b', 'd', 'e', 's', 'i', 'g', 'n', 'p', 'l', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "webdevops.io", true */ 'w', 'e', 'b', 'd', 'e', 'v', 'o', 'p', 's', '.', 'i', 'o', '\0',
   /* "webdosh.com", true */ 'w', 'e', 'b', 'd', 'o', 's', 'h', '.', 'c', 'o', 'm', '\0',
   /* "webduck.nl", true */ 'w', 'e', 'b', 'd', 'u', 'c', 'k', '.', 'n', 'l', '\0',
   /* "webeau.com", true */ 'w', 'e', 'b', 'e', 'a', 'u', '.', 'c', 'o', 'm', '\0',
   /* "webergrillrestaurant.com", true */ 'w', 'e', 'b', 'e', 'r', 'g', 'r', 'i', 'l', 'l', 'r', 'e', 's', 't', 'a', 'u', 'r', 'a', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "weberjulia.com", true */ 'w', 'e', 'b', 'e', 'r', 'j', 'u', 'l', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "webexp.biz", true */ 'w', 'e', 'b', 'e', 'x', 'p', '.', 'b', 'i', 'z', '\0',
@@ -20601,17 +20602,16 @@ static const char kSTSHostTable[] = {
   /* "webmel.com", true */ 'w', 'e', 'b', 'm', 'e', 'l', '.', 'c', 'o', 'm', '\0',
   /* "webmetering.at", true */ 'w', 'e', 'b', 'm', 'e', 't', 'e', 'r', 'i', 'n', 'g', '.', 'a', 't', '\0',
   /* "webogram.org", false */ 'w', 'e', 'b', 'o', 'g', 'r', 'a', 'm', '.', 'o', 'r', 'g', '\0',
   /* "webproguru.com", true */ 'w', 'e', 'b', 'p', 'r', 'o', 'g', 'u', 'r', 'u', '.', 'c', 'o', 'm', '\0',
   /* "webproject.rocks", true */ 'w', 'e', 'b', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'r', 'o', 'c', 'k', 's', '\0',
   /* "webpubsub.com", true */ 'w', 'e', 'b', 'p', 'u', 'b', 's', 'u', 'b', '.', 'c', 'o', 'm', '\0',
   /* "webreport.fr", true */ 'w', 'e', 'b', 'r', 'e', 'p', 'o', 'r', 't', '.', 'f', 'r', '\0',
   /* "webreslist.com", true */ 'w', 'e', 'b', 'r', 'e', 's', 'l', 'i', 's', 't', '.', 'c', 'o', 'm', '\0',
-  /* "webs4all.ro", true */ 'w', 'e', 'b', 's', '4', 'a', 'l', 'l', '.', 'r', 'o', '\0',
   /* "webscale.nl", true */ 'w', 'e', 'b', 's', 'c', 'a', 'l', 'e', '.', 'n', 'l', '\0',
   /* "websectools.com", true */ 'w', 'e', 'b', 's', 'e', 'c', 't', 'o', 'o', 'l', 's', '.', 'c', 'o', 'm', '\0',
   /* "websecurity.is", true */ 'w', 'e', 'b', 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', '.', 'i', 's', '\0',
   /* "webseitendesigner.com", false */ 'w', 'e', 'b', 's', 'e', 'i', 't', 'e', 'n', 'd', 'e', 's', 'i', 'g', 'n', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "webseitenserver.com", true */ 'w', 'e', 'b', 's', 'e', 'i', 't', 'e', 'n', 's', 'e', 'r', 'v', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "websenat.de", true */ 'w', 'e', 'b', 's', 'e', 'n', 'a', 't', '.', 'd', 'e', '\0',
   /* "websiteadvice.com.au", true */ 'w', 'e', 'b', 's', 'i', 't', 'e', 'a', 'd', 'v', 'i', 'c', 'e', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "websitedesign.bg", true */ 'w', 'e', 'b', 's', 'i', 't', 'e', 'd', 'e', 's', 'i', 'g', 'n', '.', 'b', 'g', '\0',
@@ -20804,17 +20804,16 @@ static const char kSTSHostTable[] = {
   /* "widemann.de", true */ 'w', 'i', 'd', 'e', 'm', 'a', 'n', 'n', '.', 'd', 'e', '\0',
   /* "widememory.com", true */ 'w', 'i', 'd', 'e', 'm', 'e', 'm', 'o', 'r', 'y', '.', 'c', 'o', 'm', '\0',
   /* "widsl.de", true */ 'w', 'i', 'd', 's', 'l', '.', 'd', 'e', '\0',
   /* "wiebetaaltdat.nl", true */ 'w', 'i', 'e', 'b', 'e', 't', 'a', 'a', 'l', 't', 'd', 'a', 't', '.', 'n', 'l', '\0',
   /* "wieckiewicz.org", true */ 'w', 'i', 'e', 'c', 'k', 'i', 'e', 'w', 'i', 'c', 'z', '.', 'o', 'r', 'g', '\0',
   /* "wiedmeyer.de", true */ 'w', 'i', 'e', 'd', 'm', 'e', 'y', 'e', 'r', '.', 'd', 'e', '\0',
   /* "wiedu.net", true */ 'w', 'i', 'e', 'd', 'u', '.', 'n', 'e', 't', '\0',
   /* "wiegedaten.de", true */ 'w', 'i', 'e', 'g', 'e', 'd', 'a', 't', 'e', 'n', '.', 'd', 'e', '\0',
-  /* "wienergyjobs.com", true */ 'w', 'i', 'e', 'n', 'e', 'r', 'g', 'y', 'j', 'o', 'b', 's', '.', 'c', 'o', 'm', '\0',
   /* "wificafehosting.com", true */ 'w', 'i', 'f', 'i', 'c', 'a', 'f', 'e', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "wifimapa.cz", true */ 'w', 'i', 'f', 'i', 'm', 'a', 'p', 'a', '.', 'c', 'z', '\0',
   /* "wifimask.com", true */ 'w', 'i', 'f', 'i', 'm', 'a', 's', 'k', '.', 'c', 'o', 'm', '\0',
   /* "wifipineapple.com", true */ 'w', 'i', 'f', 'i', 'p', 'i', 'n', 'e', 'a', 'p', 'p', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "wifirst.net", true */ 'w', 'i', 'f', 'i', 'r', 's', 't', '.', 'n', 'e', 't', '\0',
   /* "wifree.lv", true */ 'w', 'i', 'f', 'r', 'e', 'e', '.', 'l', 'v', '\0',
   /* "wigggle.it", true */ 'w', 'i', 'g', 'g', 'g', 'l', 'e', '.', 'i', 't', '\0',
   /* "wigle.net", true */ 'w', 'i', 'g', 'l', 'e', '.', 'n', 'e', 't', '\0',
@@ -20839,16 +20838,17 @@ static const char kSTSHostTable[] = {
   /* "wilane.org", true */ 'w', 'i', 'l', 'a', 'n', 'e', '.', 'o', 'r', 'g', '\0',
   /* "wildcard.hu", true */ 'w', 'i', 'l', 'd', 'c', 'a', 'r', 'd', '.', 'h', 'u', '\0',
   /* "wilddog.com", true */ 'w', 'i', 'l', 'd', 'd', 'o', 'g', '.', 'c', 'o', 'm', '\0',
   /* "wilddogdesign.co.uk", true */ 'w', 'i', 'l', 'd', 'd', 'o', 'g', 'd', 'e', 's', 'i', 'g', 'n', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "wildewood.ca", true */ 'w', 'i', 'l', 'd', 'e', 'w', 'o', 'o', 'd', '.', 'c', 'a', '\0',
   /* "wildnisfamilie.net", true */ 'w', 'i', 'l', 'd', 'n', 'i', 's', 'f', 'a', 'm', 'i', 'l', 'i', 'e', '.', 'n', 'e', 't', '\0',
   /* "wildtrip.blog", true */ 'w', 'i', 'l', 'd', 't', 'r', 'i', 'p', '.', 'b', 'l', 'o', 'g', '\0',
   /* "wilfrid-calixte.fr", true */ 'w', 'i', 'l', 'f', 'r', 'i', 'd', '-', 'c', 'a', 'l', 'i', 'x', 't', 'e', '.', 'f', 'r', '\0',
+  /* "wilhelm-nathan.de", true */ 'w', 'i', 'l', 'h', 'e', 'l', 'm', '-', 'n', 'a', 't', 'h', 'a', 'n', '.', 'd', 'e', '\0',
   /* "willbarnesphotography.co.uk", true */ 'w', 'i', 'l', 'l', 'b', 'a', 'r', 'n', 'e', 's', 'p', 'h', 'o', 't', 'o', 'g', 'r', 'a', 'p', 'h', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "willberg.bayern", true */ 'w', 'i', 'l', 'l', 'b', 'e', 'r', 'g', '.', 'b', 'a', 'y', 'e', 'r', 'n', '\0',
   /* "willeminfo.ch", true */ 'w', 'i', 'l', 'l', 'e', 'm', 'i', 'n', 'f', 'o', '.', 'c', 'h', '\0',
   /* "willemsjort.be", true */ 'w', 'i', 'l', 'l', 'e', 'm', 's', 'j', 'o', 'r', 't', '.', 'b', 'e', '\0',
   /* "willfarrell.ca", true */ 'w', 'i', 'l', 'l', 'f', 'a', 'r', 'r', 'e', 'l', 'l', '.', 'c', 'a', '\0',
   /* "willi-graf-gymnasium.de", true */ 'w', 'i', 'l', 'l', 'i', '-', 'g', 'r', 'a', 'f', '-', 'g', 'y', 'm', 'n', 'a', 's', 'i', 'u', 'm', '.', 'd', 'e', '\0',
   /* "willi-graf-os.de", true */ 'w', 'i', 'l', 'l', 'i', '-', 'g', 'r', 'a', 'f', '-', 'o', 's', '.', 'd', 'e', '\0',
   /* "williamboundsltd.com", true */ 'w', 'i', 'l', 'l', 'i', 'a', 'm', 'b', 'o', 'u', 'n', 'd', 's', 'l', 't', 'd', '.', 'c', 'o', 'm', '\0',
@@ -20988,17 +20988,16 @@ static const char kSTSHostTable[] = {
   /* "woof.gq", true */ 'w', 'o', 'o', 'f', '.', 'g', 'q', '\0',
   /* "woohooyeah.nl", true */ 'w', 'o', 'o', 'h', 'o', 'o', 'y', 'e', 'a', 'h', '.', 'n', 'l', '\0',
   /* "woontegelwinkel.nl", true */ 'w', 'o', 'o', 'n', 't', 'e', 'g', 'e', 'l', 'w', 'i', 'n', 'k', 'e', 'l', '.', 'n', 'l', '\0',
   /* "worcesterfestival.co.uk", true */ 'w', 'o', 'r', 'c', 'e', 's', 't', 'e', 'r', 'f', 'e', 's', 't', 'i', 'v', 'a', 'l', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "wordpress.com", false */ 'w', 'o', 'r', 'd', 'p', 'r', 'e', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "wordsmart.it", true */ 'w', 'o', 'r', 'd', 's', 'm', 'a', 'r', 't', '.', 'i', 't', '\0',
   /* "wordxtra.net", true */ 'w', 'o', 'r', 'd', 'x', 't', 'r', 'a', '.', 'n', 'e', 't', '\0',
   /* "workgrouptech.org", true */ 'w', 'o', 'r', 'k', 'g', 'r', 'o', 'u', 'p', 't', 'e', 'c', 'h', '.', 'o', 'r', 'g', '\0',
-  /* "workingclassmedia.com", true */ 'w', 'o', 'r', 'k', 'i', 'n', 'g', 'c', 'l', 'a', 's', 's', 'm', 'e', 'd', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "workingmachine.info", true */ 'w', 'o', 'r', 'k', 'i', 'n', 'g', 'm', 'a', 'c', 'h', 'i', 'n', 'e', '.', 'i', 'n', 'f', 'o', '\0',
   /* "workraw.com", true */ 'w', 'o', 'r', 'k', 'r', 'a', 'w', '.', 'c', 'o', 'm', '\0',
   /* "workray.com", true */ 'w', 'o', 'r', 'k', 'r', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "works-ginan.jp", true */ 'w', 'o', 'r', 'k', 's', '-', 'g', 'i', 'n', 'a', 'n', '.', 'j', 'p', '\0',
   /* "world-in-my-eyes.com", true */ 'w', 'o', 'r', 'l', 'd', '-', 'i', 'n', '-', 'm', 'y', '-', 'e', 'y', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "worldcubeassociation.org", true */ 'w', 'o', 'r', 'l', 'd', 'c', 'u', 'b', 'e', 'a', 's', 's', 'o', 'c', 'i', 'a', 't', 'i', 'o', 'n', '.', 'o', 'r', 'g', '\0',
   /* "worldeventscalendars.com", true */ 'w', 'o', 'r', 'l', 'd', 'e', 'v', 'e', 'n', 't', 's', 'c', 'a', 'l', 'e', 'n', 'd', 'a', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "worldofbelia.de", true */ 'w', 'o', 'r', 'l', 'd', 'o', 'f', 'b', 'e', 'l', 'i', 'a', '.', 'd', 'e', '\0',
@@ -21146,16 +21145,17 @@ static const char kSTSHostTable[] = {
   /* "www.simple.com", false */ 'w', 'w', 'w', '.', 's', 'i', 'm', 'p', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "www.theguardian.com", true */ 'w', 'w', 'w', '.', 't', 'h', 'e', 'g', 'u', 'a', 'r', 'd', 'i', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "www.therapynotes.com", true */ 'w', 'w', 'w', '.', 't', 'h', 'e', 'r', 'a', 'p', 'y', 'n', 'o', 't', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "www.tinfoilsecurity.com", false */ 'w', 'w', 'w', '.', 't', 'i', 'n', 'f', 'o', 'i', 'l', 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "www.torproject.org", false */ 'w', 'w', 'w', '.', 't', 'o', 'r', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
   /* "www.twitter.com", false */ 'w', 'w', 'w', '.', 't', 'w', 'i', 't', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "www.united.com", true */ 'w', 'w', 'w', '.', 'u', 'n', 'i', 't', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "www.usaa.com", false */ 'w', 'w', 'w', '.', 'u', 's', 'a', 'a', '.', 'c', 'o', 'm', '\0',
+  /* "www.viasinc.com", true */ 'w', 'w', 'w', '.', 'v', 'i', 'a', 's', 'i', 'n', 'c', '.', 'c', 'o', 'm', '\0',
   /* "www.vino75.com", false */ 'w', 'w', 'w', '.', 'v', 'i', 'n', 'o', '7', '5', '.', 'c', 'o', 'm', '\0',
   /* "www.wepay.com", false */ 'w', 'w', 'w', '.', 'w', 'e', 'p', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "www.wordpress.com", false */ 'w', 'w', 'w', '.', 'w', 'o', 'r', 'd', 'p', 'r', 'e', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "wxcafe.net", true */ 'w', 'x', 'c', 'a', 'f', 'e', '.', 'n', 'e', 't', '\0',
   /* "wxh.jp", true */ 'w', 'x', 'h', '.', 'j', 'p', '\0',
   /* "wxrlab.com", true */ 'w', 'x', 'r', 'l', 'a', 'b', '.', 'c', 'o', 'm', '\0',
   /* "wxster.com", true */ 'w', 'x', 's', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "wy6.org", true */ 'w', 'y', '6', '.', 'o', 'r', 'g', '\0',
@@ -21198,17 +21198,16 @@ static const char kSTSHostTable[] = {
   /* "xbtmusic.org", false */ 'x', 'b', 't', 'm', 'u', 's', 'i', 'c', '.', 'o', 'r', 'g', '\0',
   /* "xcentricmold.com", true */ 'x', 'c', 'e', 'n', 't', 'r', 'i', 'c', 'm', 'o', 'l', 'd', '.', 'c', 'o', 'm', '\0',
   /* "xclirion-support.de", true */ 'x', 'c', 'l', 'i', 'r', 'i', 'o', 'n', '-', 's', 'u', 'p', 'p', 'o', 'r', 't', '.', 'd', 'e', '\0',
   /* "xd.cm", true */ 'x', 'd', '.', 'c', 'm', '\0',
   /* "xd.fi", true */ 'x', 'd', '.', 'f', 'i', '\0',
   /* "xdd.io", true */ 'x', 'd', 'd', '.', 'i', 'o', '\0',
   /* "xdeftor.com", true */ 'x', 'd', 'e', 'f', 't', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "xecureit.com", true */ 'x', 'e', 'c', 'u', 'r', 'e', 'i', 't', '.', 'c', 'o', 'm', '\0',
-  /* "xendo.net", false */ 'x', 'e', 'n', 'd', 'o', '.', 'n', 'e', 't', '\0',
   /* "xenophile.name", true */ 'x', 'e', 'n', 'o', 'p', 'h', 'i', 'l', 'e', '.', 'n', 'a', 'm', 'e', '\0',
   /* "xenosphere.tk", true */ 'x', 'e', 'n', 'o', 's', 'p', 'h', 'e', 'r', 'e', '.', 't', 'k', '\0',
   /* "xenoworld.de", true */ 'x', 'e', 'n', 'o', 'w', 'o', 'r', 'l', 'd', '.', 'd', 'e', '\0',
   /* "xeonlab.com", true */ 'x', 'e', 'o', 'n', 'l', 'a', 'b', '.', 'c', 'o', 'm', '\0',
   /* "xeonlab.de", true */ 'x', 'e', 'o', 'n', 'l', 'a', 'b', '.', 'd', 'e', '\0',
   /* "xerblade.com", true */ 'x', 'e', 'r', 'b', 'l', 'a', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "xerhost.de", false */ 'x', 'e', 'r', 'h', 'o', 's', 't', '.', 'd', 'e', '\0',
   /* "xetown.com", true */ 'x', 'e', 't', 'o', 'w', 'n', '.', 'c', 'o', 'm', '\0',
@@ -21241,16 +21240,17 @@ static const char kSTSHostTable[] = {
   /* "xing.ml", true */ 'x', 'i', 'n', 'g', '.', 'm', 'l', '\0',
   /* "xiqi.us", true */ 'x', 'i', 'q', 'i', '.', 'u', 's', '\0',
   /* "xirion.net", true */ 'x', 'i', 'r', 'i', 'o', 'n', '.', 'n', 'e', 't', '\0',
   /* "xivpn.com", true */ 'x', 'i', 'v', 'p', 'n', '.', 'c', 'o', 'm', '\0',
   /* "xkbcommon.org", false */ 'x', 'k', 'b', 'c', 'o', 'm', 'm', 'o', 'n', '.', 'o', 'r', 'g', '\0',
   /* "xkcd.pw", true */ 'x', 'k', 'c', 'd', '.', 'p', 'w', '\0',
   /* "xkviz.net", true */ 'x', 'k', 'v', 'i', 'z', '.', 'n', 'e', 't', '\0',
   /* "xlange.com", true */ 'x', 'l', 'a', 'n', 'g', 'e', '.', 'c', 'o', 'm', '\0',
+  /* "xlii.io", true */ 'x', 'l', 'i', 'i', '.', 'i', 'o', '\0',
   /* "xmedius.com", false */ 'x', 'm', 'e', 'd', 'i', 'u', 's', '.', 'c', 'o', 'm', '\0',
   /* "xmedius.eu", true */ 'x', 'm', 'e', 'd', 'i', 'u', 's', '.', 'e', 'u', '\0',
   /* "xmlbeam.org", true */ 'x', 'm', 'l', 'b', 'e', 'a', 'm', '.', 'o', 'r', 'g', '\0',
   /* "xmpp.dk", true */ 'x', 'm', 'p', 'p', '.', 'd', 'k', '\0',
   /* "xmppwocky.net", true */ 'x', 'm', 'p', 'p', 'w', 'o', 'c', 'k', 'y', '.', 'n', 'e', 't', '\0',
   /* "xmr.to", true */ 'x', 'm', 'r', '.', 't', 'o', '\0',
   /* "xmv.cz", true */ 'x', 'm', 'v', '.', 'c', 'z', '\0',
   /* "xn----7sbmucgqdbgwwc5e9b.xn--p1ai", true */ 'x', 'n', '-', '-', '-', '-', '7', 's', 'b', 'm', 'u', 'c', 'g', 'q', 'd', 'b', 'g', 'w', 'w', 'c', '5', 'e', '9', 'b', '.', 'x', 'n', '-', '-', 'p', '1', 'a', 'i', '\0',
@@ -21349,17 +21349,16 @@ static const char kSTSHostTable[] = {
   /* "xts3636.net", true */ 'x', 't', 's', '3', '6', '3', '6', '.', 'n', 'e', 't', '\0',
   /* "xtu2.com", true */ 'x', 't', 'u', '2', '.', 'c', 'o', 'm', '\0',
   /* "xuc.me", true */ 'x', 'u', 'c', '.', 'm', 'e', '\0',
   /* "xunn.io", true */ 'x', 'u', 'n', 'n', '.', 'i', 'o', '\0',
   /* "xuntier.ch", true */ 'x', 'u', 'n', 't', 'i', 'e', 'r', '.', 'c', 'h', '\0',
   /* "xupeng.me", true */ 'x', 'u', 'p', 'e', 'n', 'g', '.', 'm', 'e', '\0',
   /* "xuri.me", false */ 'x', 'u', 'r', 'i', '.', 'm', 'e', '\0',
   /* "xvt-blog.tk", true */ 'x', 'v', 't', '-', 'b', 'l', 'o', 'g', '.', 't', 'k', '\0',
-  /* "xwalck.se", true */ 'x', 'w', 'a', 'l', 'c', 'k', '.', 's', 'e', '\0',
   /* "xwaretech.info", true */ 'x', 'w', 'a', 'r', 'e', 't', 'e', 'c', 'h', '.', 'i', 'n', 'f', 'o', '\0',
   /* "xxffo.com", true */ 'x', 'x', 'f', 'f', 'o', '.', 'c', 'o', 'm', '\0',
   /* "xxiz.com", true */ 'x', 'x', 'i', 'z', '.', 'c', 'o', 'm', '\0',
   /* "xxx3dbdsm.com", true */ 'x', 'x', 'x', '3', 'd', 'b', 'd', 's', 'm', '.', 'c', 'o', 'm', '\0',
   /* "xxxladyboysporn.com", true */ 'x', 'x', 'x', 'l', 'a', 'd', 'y', 'b', 'o', 'y', 's', 'p', 'o', 'r', 'n', '.', 'c', 'o', 'm', '\0',
   /* "xyfun.net", true */ 'x', 'y', 'f', 'u', 'n', '.', 'n', 'e', 't', '\0',
   /* "xyndrac.net", true */ 'x', 'y', 'n', 'd', 'r', 'a', 'c', '.', 'n', 'e', 't', '\0',
   /* "xyngular-health.com", true */ 'x', 'y', 'n', 'g', 'u', 'l', 'a', 'r', '-', 'h', 'e', 'a', 'l', 't', 'h', '.', 'c', 'o', 'm', '\0',
@@ -21587,23 +21586,21 @@ static const char kSTSHostTable[] = {
   /* "zakr.es", true */ 'z', 'a', 'k', 'r', '.', 'e', 's', '\0',
   /* "zalan.do", true */ 'z', 'a', 'l', 'a', 'n', '.', 'd', 'o', '\0',
   /* "zamis.net", true */ 'z', 'a', 'm', 'i', 's', '.', 'n', 'e', 't', '\0',
   /* "zandcell.com", true */ 'z', 'a', 'n', 'd', 'c', 'e', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "zaoshanghao-dajia.rhcloud.com", true */ 'z', 'a', 'o', 's', 'h', 'a', 'n', 'g', 'h', 'a', 'o', '-', 'd', 'a', 'j', 'i', 'a', '.', 'r', 'h', 'c', 'l', 'o', 'u', 'd', '.', 'c', 'o', 'm', '\0',
   /* "zapier.com", true */ 'z', 'a', 'p', 'i', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "zappbuildapps.com", true */ 'z', 'a', 'p', 'p', 'b', 'u', 'i', 'l', 'd', 'a', 'p', 'p', 's', '.', 'c', 'o', 'm', '\0',
   /* "zaratan.fr", true */ 'z', 'a', 'r', 'a', 't', 'a', 'n', '.', 'f', 'r', '\0',
-  /* "zary.me", true */ 'z', 'a', 'r', 'y', '.', 'm', 'e', '\0',
   /* "zaufanatrzeciastrona.pl", true */ 'z', 'a', 'u', 'f', 'a', 'n', 'a', 't', 'r', 'z', 'e', 'c', 'i', 'a', 's', 't', 'r', 'o', 'n', 'a', '.', 'p', 'l', '\0',
   /* "zavetaji.lv", true */ 'z', 'a', 'v', 'e', 't', 'a', 'j', 'i', '.', 'l', 'v', '\0',
   /* "zawo-electric.de", true */ 'z', 'a', 'w', 'o', '-', 'e', 'l', 'e', 'c', 't', 'r', 'i', 'c', '.', 'd', 'e', '\0',
   /* "zbasenem.pl", true */ 'z', 'b', 'a', 's', 'e', 'n', 'e', 'm', '.', 'p', 'l', '\0',
   /* "zbchen.com", true */ 'z', 'b', 'c', 'h', 'e', 'n', '.', 'c', 'o', 'm', '\0',
-  /* "zberger.com", true */ 'z', 'b', 'e', 'r', 'g', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "zbetcheck.in", true */ 'z', 'b', 'e', 't', 'c', 'h', 'e', 'c', 'k', '.', 'i', 'n', '\0',
   /* "zbp.at", false */ 'z', 'b', 'p', '.', 'a', 't', '\0',
   /* "zbrane-doplnky.cz", true */ 'z', 'b', 'r', 'a', 'n', 'e', '-', 'd', 'o', 'p', 'l', 'n', 'k', 'y', '.', 'c', 'z', '\0',
   /* "zbyga.cz", true */ 'z', 'b', 'y', 'g', 'a', '.', 'c', 'z', '\0',
   /* "zcarot.com", true */ 'z', 'c', 'a', 'r', 'o', 't', '.', 'c', 'o', 'm', '\0',
   /* "zcarrot.com", true */ 'z', 'c', 'a', 'r', 'r', 'o', 't', '.', 'c', 'o', 'm', '\0',
   /* "zcgram.com", true */ 'z', 'c', 'g', 'r', 'a', 'm', '.', 'c', 'o', 'm', '\0',
   /* "zcr.ca", true */ 'z', 'c', 'r', '.', 'c', 'a', '\0',
@@ -21663,17 +21660,16 @@ static const char kSTSHostTable[] = {
   /* "zhangsir.net", true */ 'z', 'h', 'a', 'n', 'g', 's', 'i', 'r', '.', 'n', 'e', 't', '\0',
   /* "zhangyuhao.com", true */ 'z', 'h', 'a', 'n', 'g', 'y', 'u', 'h', 'a', 'o', '.', 'c', 'o', 'm', '\0',
   /* "zhaochen.xyz", true */ 'z', 'h', 'a', 'o', 'c', 'h', 'e', 'n', '.', 'x', 'y', 'z', '\0',
   /* "zhaofeng.li", true */ 'z', 'h', 'a', 'o', 'f', 'e', 'n', 'g', '.', 'l', 'i', '\0',
   /* "zhen-chen.com", true */ 'z', 'h', 'e', 'n', '-', 'c', 'h', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "zhengjie.com", true */ 'z', 'h', 'e', 'n', 'g', 'j', 'i', 'e', '.', 'c', 'o', 'm', '\0',
   /* "zhengzexin.com", false */ 'z', 'h', 'e', 'n', 'g', 'z', 'e', 'x', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "zhikin.com", true */ 'z', 'h', 'i', 'k', 'i', 'n', '.', 'c', 'o', 'm', '\0',
-  /* "zhousiru.com", false */ 'z', 'h', 'o', 'u', 's', 'i', 'r', 'u', '.', 'c', 'o', 'm', '\0',
   /* "zhovner.com", true */ 'z', 'h', 'o', 'v', 'n', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "zian.online", true */ 'z', 'i', 'a', 'n', '.', 'o', 'n', 'l', 'i', 'n', 'e', '\0',
   /* "ziegler-family.com", true */ 'z', 'i', 'e', 'g', 'l', 'e', 'r', '-', 'f', 'a', 'm', 'i', 'l', 'y', '.', 'c', 'o', 'm', '\0',
   /* "ziegler-heizung-frankfurt.de", true */ 'z', 'i', 'e', 'g', 'l', 'e', 'r', '-', 'h', 'e', 'i', 'z', 'u', 'n', 'g', '-', 'f', 'r', 'a', 'n', 'k', 'f', 'u', 'r', 't', '.', 'd', 'e', '\0',
   /* "zifb.in", true */ 'z', 'i', 'f', 'b', '.', 'i', 'n', '\0',
   /* "zigi.io", true */ 'z', 'i', 'g', 'i', '.', 'i', 'o', '\0',
   /* "zigzagmart.com", true */ 'z', 'i', 'g', 'z', 'a', 'g', 'm', 'a', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "ziin.de", false */ 'z', 'i', 'i', 'n', '.', 'd', 'e', '\0',
@@ -21705,17 +21701,16 @@ static const char kSTSHostTable[] = {
   /* "zobraz.cz", true */ 'z', 'o', 'b', 'r', 'a', 'z', '.', 'c', 'z', '\0',
   /* "zockenbiszumumfallen.de", true */ 'z', 'o', 'c', 'k', 'e', 'n', 'b', 'i', 's', 'z', 'u', 'm', 'u', 'm', 'f', 'a', 'l', 'l', 'e', 'n', '.', 'd', 'e', '\0',
   /* "zoeller.me", true */ 'z', 'o', 'e', 'l', 'l', 'e', 'r', '.', 'm', 'e', '\0',
   /* "zohar.shop", true */ 'z', 'o', 'h', 'a', 'r', '.', 's', 'h', 'o', 'p', '\0',
   /* "zohar.wang", false */ 'z', 'o', 'h', 'a', 'r', '.', 'w', 'a', 'n', 'g', '\0',
   /* "zoigl.club", true */ 'z', 'o', 'i', 'g', 'l', '.', 'c', 'l', 'u', 'b', '\0',
   /* "zojadravai.com", true */ 'z', 'o', 'j', 'a', 'd', 'r', 'a', 'v', 'a', 'i', '.', 'c', 'o', 'm', '\0',
   /* "zolokar.xyz", true */ 'z', 'o', 'l', 'o', 'k', 'a', 'r', '.', 'x', 'y', 'z', '\0',
-  /* "zolotoy-standart.com.ua", true */ 'z', 'o', 'l', 'o', 't', 'o', 'y', '-', 's', 't', 'a', 'n', 'd', 'a', 'r', 't', '.', 'c', 'o', 'm', '.', 'u', 'a', '\0',
   /* "zombiesecured.com", true */ 'z', 'o', 'm', 'b', 'i', 'e', 's', 'e', 'c', 'u', 'r', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "zomerschoen.nl", true */ 'z', 'o', 'm', 'e', 'r', 's', 'c', 'h', 'o', 'e', 'n', '.', 'n', 'l', '\0',
   /* "zone39.com", true */ 'z', 'o', 'n', 'e', '3', '9', '.', 'c', 'o', 'm', '\0',
   /* "zonecb.com", true */ 'z', 'o', 'n', 'e', 'c', 'b', '.', 'c', 'o', 'm', '\0',
   /* "zonemaster.net", true */ 'z', 'o', 'n', 'e', 'm', 'a', 's', 't', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "zoners.si", true */ 'z', 'o', 'n', 'e', 'r', 's', '.', 's', 'i', '\0',
   /* "zonglovani.