Merge m-c to m-i
authorPhil Ringnalda <philringnalda@gmail.com>
Sun, 30 Oct 2016 11:04:05 -0700
changeset 320219 708de5d681d113649e8fac2a10a4a0c0eae8be43
parent 320218 a44d3d73a9903bc9e9a565fd7b96da30fecd782d (current diff)
parent 320205 e3279760cd977aac30bd9e8032d3ee71f55d2a67 (diff)
child 320220 bc85cad3e93b19ea9a09c49d93b6010711f06fff
push id20754
push usercbook@mozilla.com
push dateMon, 31 Oct 2016 15:58:35 +0000
treeherderfx-team@b1b66b1780c2 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone52.0a1
Merge m-c to m-i
dom/html/HTMLAnchorElement.cpp
dom/html/HTMLAreaElement.cpp
dom/html/nsGenericHTMLElement.cpp
dom/html/nsGenericHTMLElement.h
--- a/accessible/tests/browser/.eslintrc.js
+++ b/accessible/tests/browser/.eslintrc.js
@@ -46,17 +46,16 @@ module.exports = { // eslint-disable-lin
     "waitForEvent": true,
     "waitForMultipleEvents": true,
     "invokeSetAttribute": true,
     "invokeSetStyle": true,
     "invokeFocus": true,
     "findAccessibleChildByID": true
   },
   "rules": {
-    "mozilla/mark-test-function-used": 1,
     "mozilla/no-aArgs": 1,
     "mozilla/no-cpows-in-tests": 1,
     "mozilla/reject-importGlobalProperties": 1,
     "mozilla/var-only-at-top-level": 1,
 
     "block-scoped-var": 2,
     "brace-style": [2, "1tbs"],
     "camelcase": 2,
--- a/browser/app/blocklist.xml
+++ b/browser/app/blocklist.xml
@@ -1,31 +1,31 @@
 <?xml version='1.0' encoding='UTF-8'?>
-<blocklist lastupdate="1477745530875" xmlns="http://www.mozilla.org/2006/addons-blocklist">
+<blocklist lastupdate="1477831926672" xmlns="http://www.mozilla.org/2006/addons-blocklist">
   <emItems>
     <emItem blockID="i988" id="{b12785f5-d8d0-4530-a3ea-5c4263b85bef}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i398" id="{377e5d4d-77e5-476a-8716-7e70a9272da0}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i698" id="{6b2a75c8-6e2e-4267-b955-43e25b54e575}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
+    <emItem blockID="i1263" id="axtara__web@axtara.com">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="1.1.1" severity="3"/>
+    </emItem>
     <emItem blockID="i1231" id="youtube@downloader.yt">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
-    <emItem blockID="i1263" id="axtara__web@axtara.com">
-      <prefs/>
-      <versionRange minVersion="0" maxVersion="1.1.1" severity="3"/>
-    </emItem>
     <emItem blockID="i922" id="{34712C68-7391-4c47-94F3-8F88D49AD632}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3">
         <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
           <versionRange maxVersion="*" minVersion="39.0a1"/>
         </targetApplication>
       </versionRange>
     </emItem>
@@ -144,28 +144,28 @@
     <emItem blockID="i1266" id="@stopad">
       <prefs/>
       <versionRange minVersion="0" maxVersion="0.0.4" severity="1"/>
     </emItem>
     <emItem blockID="i473" id="{81b13b5d-fba1-49fd-9a6b-189483ac548a}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
-    <emItem blockID="i496" id="{ACAA314B-EEBA-48e4-AD47-84E31C44796C}">
-      <prefs/>
-      <versionRange minVersion="0" maxVersion="*" severity="1"/>
-    </emItem>
     <emItem blockID="i914" id="{0153E448-190B-4987-BDE1-F256CADA672F}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3">
         <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
           <versionRange maxVersion="*" minVersion="39.0a1"/>
         </targetApplication>
       </versionRange>
     </emItem>
+    <emItem blockID="i496" id="{ACAA314B-EEBA-48e4-AD47-84E31C44796C}">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="1"/>
+    </emItem>
     <emItem blockID="i690" id="{55dce8ba-9dec-4013-937e-adbf9317d990">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i218" id="ffxtlbr@claro.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
@@ -411,24 +411,24 @@
     <emItem blockID="i312" id="extension21804@extension21804.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i552" id="jid0-O6MIff3eO5dIGf5Tcv8RsJDKxrs@jetpack">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
+    <emItem blockID="i479" id="mbrsepone@facebook.com">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="3"/>
+    </emItem>
     <emItem blockID="i744" id="{84a93d51-b7a9-431e-8ff8-d60e5d7f5df1}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
-    <emItem blockID="i479" id="mbrsepone@facebook.com">
-      <prefs/>
-      <versionRange minVersion="0" maxVersion="*" severity="3"/>
-    </emItem>
     <emItem blockID="i736" id="{c5e48979-bd7f-4cf7-9b73-2482a67a4f37}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i406" id="{bf7380fa-e3b4-4db2-af3e-9d8783a45bfc}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
@@ -451,27 +451,27 @@
     <emItem blockID="i1232" id="nosquint@urandom.ca">
       <prefs/>
       <versionRange minVersion="0" maxVersion="2.1.9.1-signed.1-signed" severity="1">
         <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
           <versionRange maxVersion="*" minVersion="47"/>
         </targetApplication>
       </versionRange>
     </emItem>
-    <emItem blockID="i650" id="jid1-qj0w91o64N7Eeg@jetpack">
-      <prefs/>
-      <versionRange minVersion="39.5.1" maxVersion="47.0.4" severity="3"/>
+    <emItem blockID="i544" id="/^(93abedcf-8e3a-4d02-b761-d1441e437c09@243f129d-aee2-42c2-bcd1-48858e1c22fd\.com|9acfc440-ac2d-417a-a64c-f6f14653b712@09f9a966-9258-4b12-af32-da29bdcc28c5\.com|58ad0086-1cfb-48bb-8ad2-33a8905572bc@5715d2be-69b9-4930-8f7e-64bdeb961cfd\.com)$/">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i748" id="{32da2f20-827d-40aa-a3b4-2fc4a294352e}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
-    <emItem blockID="i544" id="/^(93abedcf-8e3a-4d02-b761-d1441e437c09@243f129d-aee2-42c2-bcd1-48858e1c22fd\.com|9acfc440-ac2d-417a-a64c-f6f14653b712@09f9a966-9258-4b12-af32-da29bdcc28c5\.com|58ad0086-1cfb-48bb-8ad2-33a8905572bc@5715d2be-69b9-4930-8f7e-64bdeb961cfd\.com)$/">
-      <prefs/>
-      <versionRange minVersion="0" maxVersion="*" severity="1"/>
+    <emItem blockID="i650" id="jid1-qj0w91o64N7Eeg@jetpack">
+      <prefs/>
+      <versionRange minVersion="39.5.1" maxVersion="47.0.4" severity="3"/>
     </emItem>
     <emItem blockID="i640" id="jid0-l9BxpNUhx1UUgRfKigWzSfrZqAc@jetpack">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i628" id="ffxtlbr@iminent.com">
       <prefs>
         <pref>browser.startup.homepage</pref>
@@ -532,41 +532,41 @@
     <emItem blockID="i358" id="lfind@nijadsoft.net">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i438" id="{02edb56b-9b33-435b-b7df-b2843273a694}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
+    <emItem blockID="i67" id="youtube2@youtube2.com">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*"/>
+    </emItem>
     <emItem blockID="i546" id="firefox@browsefox.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
-    <emItem blockID="i67" id="youtube2@youtube2.com">
-      <prefs/>
-      <versionRange minVersion="0" maxVersion="*"/>
-    </emItem>
     <emItem blockID="i586" id="jid1-0xtMKhXFEs4jIg@jetpack">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i786" id="{63eb5ed4-e1b3-47ec-a253-f8462f205350}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i115" id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
-    <emItem blockID="i510" id="{3c9a72a0-b849-40f3-8c84-219109c27554}">
+    <emItem blockID="i1229" id="/^(.*@(unblocker\.yt|sparpilot\.com))|(axtara@axtara\.com)$/">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
-    <emItem blockID="i1229" id="/^(.*@(unblocker\.yt|sparpilot\.com))|(axtara@axtara\.com)$/">
+    <emItem blockID="i510" id="{3c9a72a0-b849-40f3-8c84-219109c27554}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i530" id="{739df940-c5ee-4bab-9d7e-270894ae687a}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i431" id="chinaescapeone@facebook.com">
@@ -673,24 +673,24 @@
     <emItem blockID="i538" id="{354dbb0a-71d5-4e9f-9c02-6c88b9d387ba}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i968" id="{184AA5E6-741D-464a-820E-94B3ABC2F3B4}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
+    <emItem blockID="i658" id="low_quality_flash@pie2k.com">
+      <prefs/>
+      <versionRange minVersion="46.2" maxVersion="47.1" severity="3"/>
+    </emItem>
     <emItem blockID="i792" id="{8f894ed3-0bf2-498e-a103-27ef6e88899f}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
-    <emItem blockID="i658" id="low_quality_flash@pie2k.com">
-      <prefs/>
-      <versionRange minVersion="46.2" maxVersion="47.1" severity="3"/>
-    </emItem>
     <emItem blockID="i742" id="{f894a29a-f065-40c3-bb19-da6057778493}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i17" id="{3252b9ae-c69a-4eaf-9502-dc9c1f6c009e}">
       <prefs/>
       <versionRange minVersion="2.2" maxVersion="2.2"/>
     </emItem>
@@ -782,51 +782,51 @@
           <versionRange maxVersion="*" minVersion="3.7a1"/>
         </targetApplication>
       </versionRange>
     </emItem>
     <emItem blockID="i746" id="{58d2a791-6199-482f-a9aa-9b725ec61362}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
+    <emItem blockID="i20" id="{AB2CE124-6272-4b12-94A9-7303C7397BD1}">
+      <prefs/>
+      <versionRange minVersion="0.1" maxVersion="5.2.0.7164" severity="1"/>
+    </emItem>
     <emItem blockID="i686" id="{a7f2cb14-0472-42a1-915a-8adca2280a2c}">
       <prefs>
         <pref>browser.startup.homepage</pref>
         <pref>browser.search.defaultenginename</pref>
       </prefs>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
-    <emItem blockID="i20" id="{AB2CE124-6272-4b12-94A9-7303C7397BD1}">
-      <prefs/>
-      <versionRange minVersion="0.1" maxVersion="5.2.0.7164" severity="1"/>
-    </emItem>
     <emItem blockID="i1279" id="dodatek@flash2.pl">
       <prefs/>
       <versionRange minVersion="1.3" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i998" id="meOYKQEbBBjH5Ml91z0p9Aosgus8P55bjTa4KPfl@jetpack">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i434" id="afurladvisor@anchorfree.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i872" id="search-snacks@search-snacks.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
+    <emItem blockID="i306" id="{ADFA33FD-16F5-4355-8504-DF4D664CFE10}">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="1"/>
+    </emItem>
     <emItem blockID="i966" id="{5C655500-E712-41e7-9349-CE462F844B19}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="1.0.1-signed" severity="1"/>
     </emItem>
-    <emItem blockID="i306" id="{ADFA33FD-16F5-4355-8504-DF4D664CFE10}">
-      <prefs/>
-      <versionRange minVersion="0" maxVersion="*" severity="1"/>
-    </emItem>
     <emItem blockID="i90" id="videoplugin@player.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*"/>
     </emItem>
     <emItem blockID="i1012" id="wxtui502n2xce9j@no14">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
@@ -911,29 +911,29 @@
     <emItem blockID="i228" id="crossriderapp5060@crossrider.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i470" id="extension@FastFreeConverter.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
-    <emItem blockID="i1223" id="tmbepff@trendmicro.com">
-      <prefs/>
-      <versionRange minVersion="9.2" maxVersion="9.2.0.1023" severity="1"/>
-      <versionRange minVersion="0" maxVersion="9.1.0.1035" severity="1"/>
-    </emItem>
     <emItem blockID="i478" id="{7e8a1050-cf67-4575-92df-dcc60e7d952d}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i370" id="happylyrics@hpyproductions.net">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
+    <emItem blockID="i1223" id="tmbepff@trendmicro.com">
+      <prefs/>
+      <versionRange minVersion="9.2" maxVersion="9.2.0.1023" severity="1"/>
+      <versionRange minVersion="0" maxVersion="9.1.0.1035" severity="1"/>
+    </emItem>
     <emItem blockID="i440" id="{2d069a16-fca1-4e81-81ea-5d5086dcbd0c}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i1077" id="helper@vidscrab.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
@@ -951,21 +951,21 @@
     <emItem blockID="i664" id="123456789@offeringmedia.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i93" id="{68b8676b-99a5-46d1-b390-22411d8bcd61}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*"/>
     </emItem>
-    <emItem blockID="i624" id="/^({b95faac1-a3d7-4d69-8943-ddd5a487d966}|{ecce0073-a837-45a2-95b9-600420505f7e}|{2713b394-286f-4d7c-89ea-4174eeab9f5a}|{da7a20cf-bef4-4342-ad78-0240fdf87055})$/">
+    <emItem blockID="i868" id="{6e7f6f9f-8ce6-4611-add2-05f0f7049ee6}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
-    <emItem blockID="i868" id="{6e7f6f9f-8ce6-4611-add2-05f0f7049ee6}">
+    <emItem blockID="i624" id="/^({b95faac1-a3d7-4d69-8943-ddd5a487d966}|{ecce0073-a837-45a2-95b9-600420505f7e}|{2713b394-286f-4d7c-89ea-4174eeab9f5a}|{da7a20cf-bef4-4342-ad78-0240fdf87055})$/">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i842" id="{746505DC-0E21-4667-97F8-72EA6BCF5EEF}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i7" id="{2224e955-00e9-4613-a844-ce69fccaae91}">
@@ -1016,21 +1016,21 @@
     </emItem>
     <emItem blockID="i47" id="youtube@youtube2.com">
       <prefs/>
     </emItem>
     <emItem blockID="i453" id="/^brasilescape.*\@facebook\.com$/">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
-    <emItem blockID="i485" id="/^brasilescape.*\@facebook\.com$//">
+    <emItem blockID="i816" id="noOpus@outlook.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
-    <emItem blockID="i816" id="noOpus@outlook.com">
+    <emItem blockID="i485" id="/^brasilescape.*\@facebook\.com$//">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i1262" id="my7thfakeid@gmail.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i86" id="{45147e67-4020-47e2-8f7a-55464fb535aa}">
@@ -1048,28 +1048,28 @@
     <emItem blockID="i598" id="{29b136c9-938d-4d3d-8df8-d649d9b74d02}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i108" id="{28bfb930-7620-11e1-b0c4-0800200c9a66}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*"/>
     </emItem>
-    <emItem blockID="i350" id="sqlmoz@facebook.com">
-      <prefs/>
-      <versionRange minVersion="0" maxVersion="*" severity="3"/>
-    </emItem>
     <emItem blockID="i1056" id="{82AF8DCA-6DE9-405D-BD5E-43525BDAD38A}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="7.5.0.9082" severity="1">
         <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
           <versionRange maxVersion="*" minVersion="43.0a1"/>
         </targetApplication>
       </versionRange>
     </emItem>
+    <emItem blockID="i350" id="sqlmoz@facebook.com">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="3"/>
+    </emItem>
     <emItem blockID="i446" id="{E90FA778-C2B7-41D0-9FA9-3FEC1CA54D66}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i13" id="{E8E88AB0-7182-11DF-904E-6045E0D72085}">
       <prefs/>
     </emItem>
     <emItem blockID="i117" id="{ce7e73df-6a44-4028-8079-5927a588c948}">
@@ -1175,24 +1175,24 @@
     </emItem>
     <emItem blockID="i844" id="e9d197d59f2f45f382b1aa5c14d82@8706aaed9b904554b5cb7984e9.com">
       <prefs>
         <pref>browser.startup.homepage</pref>
         <pref>browser.search.defaultenginename</pref>
       </prefs>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
+    <emItem blockID="i818" id="contentarget@maildrop.cc">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="3"/>
+    </emItem>
     <emItem blockID="i596" id="{b99c8534-7800-48fa-bd71-519a46cdc7e1}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
-    <emItem blockID="i818" id="contentarget@maildrop.cc">
-      <prefs/>
-      <versionRange minVersion="0" maxVersion="*" severity="3"/>
-    </emItem>
     <emItem blockID="i461" id="{8E9E3331-D360-4f87-8803-52DE43566502}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i23" id="firefox@bandoo.com">
       <prefs/>
       <versionRange minVersion="5.0" maxVersion="5.0" severity="1">
         <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
@@ -1296,24 +1296,24 @@
     <emItem blockID="i364" id="{FE1DEEEA-DB6D-44b8-83F0-34FC0F9D1052}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i356" id="{341f4dac-1966-47ff-aacf-0ce175f1498a}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
+    <emItem blockID="i536" id="{25D77636-38B1-1260-887C-2D4AFA92D6A4}">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="3"/>
+    </emItem>
     <emItem blockID="i336" id="CortonExt@ext.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
-    <emItem blockID="i536" id="{25D77636-38B1-1260-887C-2D4AFA92D6A4}">
-      <prefs/>
-      <versionRange minVersion="0" maxVersion="*" severity="3"/>
-    </emItem>
     <emItem blockID="i374" id="update@firefox.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i858" id="fftoolbar2014@etech.com">
       <prefs>
         <pref>browser.startup.homepage</pref>
         <pref>browser.search.defaultenginename</pref>
@@ -1359,36 +1359,36 @@
     <emItem blockID="i1034" id="a88a77ahjjfjakckmmabsy278djasi@jetpack">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i562" id="iobitapps@mybrowserbar.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
+    <emItem blockID="i430" id="1chtw@facebook.com">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="3"/>
+    </emItem>
+    <emItem blockID="i970" id="hha8771ui3-Fo9j9h7aH98jsdfa8sda@jetpack">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="3"/>
+    </emItem>
     <emItem blockID="i338" id="{1FD91A9C-410C-4090-BBCC-55D3450EF433}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i916" id="{97E22097-9A2F-45b1-8DAF-36AD648C7EF4}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3">
         <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
           <versionRange maxVersion="*" minVersion="39.0a1"/>
         </targetApplication>
       </versionRange>
     </emItem>
-    <emItem blockID="i430" id="1chtw@facebook.com">
-      <prefs/>
-      <versionRange minVersion="0" maxVersion="*" severity="3"/>
-    </emItem>
-    <emItem blockID="i970" id="hha8771ui3-Fo9j9h7aH98jsdfa8sda@jetpack">
-      <prefs/>
-      <versionRange minVersion="0" maxVersion="*" severity="3"/>
-    </emItem>
     <emItem blockID="i344" id="lrcsTube@hansanddeta.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i79" id="GifBlock@facebook.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*"/>
     </emItem>
@@ -1587,24 +1587,24 @@
     <emItem blockID="i465" id="trtv3@trtv.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i8" id="{B13721C7-F507-4982-B2E5-502A71474FED}">
       <prefs/>
       <versionRange minVersion=" " severity="1"/>
     </emItem>
+    <emItem blockID="i854" id="/^(7tG@zEb\.net|ru@gfK0J\.edu)$/">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="3"/>
+    </emItem>
     <emItem blockID="i73" id="a1g0a9g219d@a1.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*"/>
     </emItem>
-    <emItem blockID="i854" id="/^(7tG@zEb\.net|ru@gfK0J\.edu)$/">
-      <prefs/>
-      <versionRange minVersion="0" maxVersion="*" severity="3"/>
-    </emItem>
     <emItem blockID="i662" id="imbaty@taringamp3.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i1126" id="{bbea93c6-64a3-4a5a-854a-9cc61c8d309e}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
@@ -1638,53 +1638,53 @@
     <emItem blockID="i710" id="{e0352044-1439-48ba-99b6-b05ed1a4d2de}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i506" id="/^ext@bettersurfplus/">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
+    <emItem blockID="i672" id="/^(saamazon@mybrowserbar\.com)|(saebay@mybrowserbar\.com)$/">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="1"/>
+    </emItem>
     <emItem blockID="i864" id="{0A92F062-6AC6-8180-5881-B6E0C0DC2CC5}">
       <prefs>
         <pref>browser.startup.homepage</pref>
         <pref>browser.search.defaultenginename</pref>
       </prefs>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
-    <emItem blockID="i672" id="/^(saamazon@mybrowserbar\.com)|(saebay@mybrowserbar\.com)$/">
-      <prefs/>
-      <versionRange minVersion="0" maxVersion="*" severity="1"/>
-    </emItem>
     <emItem blockID="i634" id="jid1-4vUehhSALFNqCw@jetpack">
       <prefs/>
       <versionRange minVersion="99.7" maxVersion="99.7" severity="3"/>
       <versionRange minVersion="100.7" maxVersion="100.7" severity="3"/>
     </emItem>
     <emItem blockID="i162" id="{EB7508CA-C7B2-46E0-8C04-3E94A035BD49}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
-    <emItem blockID="i62" id="jid0-EcdqvFOgWLKHNJPuqAnawlykCGZ@jetpack">
+    <emItem blockID="i103" id="kdrgun@gmail.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*"/>
     </emItem>
-    <emItem blockID="i103" id="kdrgun@gmail.com">
+    <emItem blockID="i62" id="jid0-EcdqvFOgWLKHNJPuqAnawlykCGZ@jetpack">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*"/>
     </emItem>
     <emItem blockID="i1119" id="/^(test3@test.org|test2@test.org|test@test.org|support@mozilla.org)$/">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
-    <emItem blockID="i484" id="plugin@getwebcake.com">
+    <emItem blockID="i519" id="703db0db-5fe9-44b6-9f53-c6a91a0ad5bd@7314bc82-969e-4d2a-921b-e5edd0b02cf1.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
-    <emItem blockID="i519" id="703db0db-5fe9-44b6-9f53-c6a91a0ad5bd@7314bc82-969e-4d2a-921b-e5edd0b02cf1.com">
+    <emItem blockID="i484" id="plugin@getwebcake.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i477" id="mbrnovone@facebook.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i495" id="kallow@facebook.com">
@@ -1796,28 +1796,28 @@
     <emItem blockID="i926" id="{B1FC07E1-E05B-4567-8891-E63FBE545BA8}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3">
         <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
           <versionRange maxVersion="*" minVersion="39.0a1"/>
         </targetApplication>
       </versionRange>
     </emItem>
-    <emItem blockID="i782" id="safebrowse@safebrowse.co">
-      <prefs/>
-      <versionRange minVersion="0" maxVersion="*" severity="3"/>
-    </emItem>
     <emItem blockID="i806" id="{d9284e50-81fc-11da-a72b-0800200c9a66}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="7.7.34" severity="1">
         <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
           <versionRange maxVersion="*" minVersion="34.0a1"/>
         </targetApplication>
       </versionRange>
     </emItem>
+    <emItem blockID="i782" id="safebrowse@safebrowse.co">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="3"/>
+    </emItem>
     <emItem blockID="i382" id="{6926c7f7-6006-42d1-b046-eba1b3010315}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i812" id="{1e4ea5fc-09e5-4f45-a43b-c048304899fc}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
@@ -1959,21 +1959,21 @@
     <emItem blockID="i1050" id="87aukfkausiopoawjsuifhasefgased278djasi@jetpack">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i22" id="ShopperReports@ShopperReports.com">
       <prefs/>
       <versionRange minVersion="3.1.22.0" maxVersion="3.1.22.0"/>
     </emItem>
-    <emItem blockID="i1230" id="addon@gemaoff">
+    <emItem blockID="i1137" id="/^({d50bfa5f-291d-48a8-909c-5f1a77b31948}|{d54bc985-6e7b-46cd-ad72-a4a266ad879e}|{d89e5de3-5543-4363-b320-a98cf150f86a}|{f3465017-6f51-4980-84a5-7bee2f961eba}|{fae25f38-ff55-46ea-888f-03b49aaf8812})$/">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
-    <emItem blockID="i1137" id="/^({d50bfa5f-291d-48a8-909c-5f1a77b31948}|{d54bc985-6e7b-46cd-ad72-a4a266ad879e}|{d89e5de3-5543-4363-b320-a98cf150f86a}|{f3465017-6f51-4980-84a5-7bee2f961eba}|{fae25f38-ff55-46ea-888f-03b49aaf8812})$/">
+    <emItem blockID="i1230" id="addon@gemaoff">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i342" id="lbmsrvfvxcblvpane@lpaezhjez.org">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i840" id="{4889ddce-7a83-45e6-afc9-1e4f1149fff4}">
--- a/browser/components/migration/tests/unit/test_fx_telemetry.js
+++ b/browser/components/migration/tests/unit/test_fx_telemetry.js
@@ -1,16 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /* globals do_get_tempdir */
 
 "use strict";
 
-/* exported run_test */
 function run_test() {
   run_next_test();
 }
 
 function readFile(file) {
   let stream = Cc["@mozilla.org/network/file-input-stream;1"]
                .createInstance(Ci.nsIFileInputStream);
   stream.init(file, -1, -1, Ci.nsIFileInputStream.CLOSE_ON_EOF);
--- a/browser/components/newtab/tests/xpcshell/test_NewTabPrefsProvider.js
+++ b/browser/components/newtab/tests/xpcshell/test_NewTabPrefsProvider.js
@@ -1,12 +1,11 @@
 "use strict";
 
 /* global XPCOMUtils, equal, Preferences, NewTabPrefsProvider, run_next_test */
-/* exported run_test */
 /* jscs:disable requireCamelCaseOrUpperCaseIdentifiers */
 
 const Cu = Components.utils;
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Preferences.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "NewTabPrefsProvider",
     "resource:///modules/NewTabPrefsProvider.jsm");
--- a/browser/components/newtab/tests/xpcshell/test_NewTabSearchProvider.js
+++ b/browser/components/newtab/tests/xpcshell/test_NewTabSearchProvider.js
@@ -1,12 +1,11 @@
 "use strict";
 
 /* global XPCOMUtils, NewTabSearchProvider, run_next_test, ok, equal, do_check_true, do_get_profile, Services */
-/* exported run_test */
 /* jscs:disable requireCamelCaseOrUpperCaseIdentifiers */
 
 const Cu = Components.utils;
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "NewTabSearchProvider",
     "resource:///modules/NewTabSearchProvider.jsm");
@@ -76,9 +75,8 @@ add_task(function* test_search() {
   let expectedEngineName = Services.search.currentEngine.name;
 
   // emitter should fire and return the new engine
   let [eventName, actualEngineName] = yield promise;
   equal(eventName, "browser-search-engine-modified", `emitter sent the correct event ${eventName}`);
   equal(expectedEngineName, actualEngineName, `emitter set the correct engine ${expectedEngineName}`);
   NewTabSearchProvider.search.uninit();
 });
-
--- a/browser/components/newtab/tests/xpcshell/test_PlacesProvider.js
+++ b/browser/components/newtab/tests/xpcshell/test_PlacesProvider.js
@@ -1,14 +1,13 @@
 "use strict";
 
 /* global XPCOMUtils, PlacesUtils, PlacesTestUtils, PlacesProvider, NetUtil */
 /* global do_get_profile, run_next_test, add_task */
 /* global equal, ok */
-/* exported run_test */
 
 const {
   utils: Cu,
   interfaces: Ci,
 } = Components;
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 
--- a/browser/components/preferences/cookies.js
+++ b/browser/components/preferences/cookies.js
@@ -122,20 +122,20 @@ var gCookiesWindow = {
     // We don't yet handle aData == "deleted" - it's a less common case
     // and is rather complicated as selection tracking is difficult
   },
 
   _handleCookieChanged: function (changedCookie, strippedHost) {
     var rowIndex = 0;
     var cookieItem = null;
     if (!this._view._filtered) {
-      for (let host of this._hostsOrder) { // (var host in this._hosts) {
+      for (let host of this._hostOrder) {
         ++rowIndex;
         var hostItem = this._hosts[host];
-        if (this._hostOrder[i] == strippedHost) { // host == strippedHost) {
+        if (host == strippedHost) {
           // Host matches, look for the cookie within this Host collection
           // and update its data
           for (let currCookie of hostItem.cookies) {
             ++rowIndex;
             if (this._cookieEquals(currCookie, changedCookie, strippedHost)) {
               currCookie.value    = changedCookie.value;
               currCookie.isSecure = changedCookie.isSecure;
               currCookie.isDomain = changedCookie.isDomain;
@@ -883,17 +883,17 @@ var gCookiesWindow = {
     for (let i = 0; i < rangeCount; ++i) {
       var min = {}; var max = {};
       seln.getRangeAt(i, min, max);
       this._lastSelectedRanges.push({ min: min.value, max: max.value });
     }
 
     // Save open states
     this._openIndices = [];
-    for (i = 0; i < this._view.rowCount; ++i) {
+    for (let i = 0; i < this._view.rowCount; ++i) {
       var item = this._view._getItemAtIndex(i);
       if (item && item.container && item.open)
         this._openIndices.push(i);
     }
   },
 
   _updateRemoveAllButton: function gCookiesWindow__updateRemoveAllButton() {
     document.getElementById("removeAllCookies").disabled = this._view._rowCount == 0;
--- a/browser/experiments/test/xpcshell/.eslintrc.js
+++ b/browser/experiments/test/xpcshell/.eslintrc.js
@@ -3,13 +3,13 @@
 module.exports = {
   "extends": [
     "../../../../testing/xpcshell/xpcshell.eslintrc.js"
   ],
 
   "rules": {
     "no-unused-vars": ["error", {
       "vars": "all",
-      "varsIgnorePattern": "^(Cc|Ci|Cr|Cu|EXPORTED_SYMBOLS|run_test)$",
+      "varsIgnorePattern": "^(Cc|Ci|Cr|Cu|EXPORTED_SYMBOLS)$",
       "args": "none"
     }]
   }
 };
--- a/browser/extensions/formautofill/.eslintrc.js
+++ b/browser/extensions/formautofill/.eslintrc.js
@@ -8,17 +8,16 @@ module.exports = { // eslint-disable-lin
     "dump": true,
     "TextDecoder": false,
     "TextEncoder": false,
   },
 
   "rules": {
     // Rules from the mozilla plugin
     "mozilla/balanced-listeners": 2,
-    "mozilla/mark-test-function-used": 1,
     "mozilla/no-aArgs": 1,
     "mozilla/no-cpows-in-tests": 1,
     "mozilla/var-only-at-top-level": 1,
 
     "valid-jsdoc": [2, {
       "prefer": {
         "return": "returns",
       },
--- a/devtools/.eslintrc.js
+++ b/devtools/.eslintrc.js
@@ -32,17 +32,16 @@ module.exports = {
     "WebSocket": true,
     "XMLHttpRequest": true,
   },
   "rules": {
     // These are the rules that have been configured so far to match the
     // devtools coding style.
 
     // Rules from the mozilla plugin
-    "mozilla/mark-test-function-used": 1,
     "mozilla/no-aArgs": 1,
     "mozilla/no-cpows-in-tests": 2,
     "mozilla/no-single-arg-cu-import": 2,
     // See bug 1224289.
     "mozilla/reject-importGlobalProperties": 2,
     // devtools/shared/platform is special; see the README.md in that
     // directory for details.  We reject requires using explicit
     // subdirectories of this directory.
--- a/devtools/.eslintrc.xpcshell.js
+++ b/devtools/.eslintrc.xpcshell.js
@@ -8,14 +8,12 @@ module.exports = {
     "camelcase": 0,
     // Allow using undefined variables so that tests can refer to functions
     // and variables defined in head.js files, without having to maintain a
     // list of globals in each .eslintrc file.
     // Note that bug 1168340 will eventually help auto-registering globals
     // from head.js files.
     "no-undef": 0,
     "block-scoped-var": 0,
-    // Allow run_test to be unused in xpcshell
-    "no-unused-vars": [2, { "varsIgnorePattern": "run_test" }],
     // Tests can always import anything.
     "mozilla/reject-some-requires": 0,
   }
 };
new file mode 100644
--- /dev/null
+++ b/dom/base/IdleDeadline.cpp
@@ -0,0 +1,70 @@
+/* -*- 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 <algorithm>
+
+#include "mozilla/dom/IdleDeadline.h"
+#include "mozilla/dom/IdleDeadlineBinding.h"
+#include "mozilla/dom/Performance.h"
+#include "nsCOMPtr.h"
+#include "nsCycleCollectionParticipant.h"
+#include "nsDOMNavigationTiming.h"
+#include "nsPIDOMWindow.h"
+
+namespace mozilla {
+namespace dom {
+
+NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(IdleDeadline, mWindow)
+NS_IMPL_CYCLE_COLLECTING_ADDREF(IdleDeadline)
+NS_IMPL_CYCLE_COLLECTING_RELEASE(IdleDeadline)
+NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(IdleDeadline)
+  NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
+  NS_INTERFACE_MAP_ENTRY(nsISupports)
+NS_INTERFACE_MAP_END
+
+IdleDeadline::IdleDeadline(nsPIDOMWindowInner* aWindow, bool aDidTimeout,
+                           DOMHighResTimeStamp aDeadline)
+  : mWindow(aWindow)
+  , mDidTimeout(aDidTimeout)
+  , mDeadline(aDeadline)
+{
+}
+
+IdleDeadline::~IdleDeadline()
+{
+}
+
+JSObject*
+IdleDeadline::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
+{
+  return IdleDeadlineBinding::Wrap(aCx, this, aGivenProto);
+}
+
+DOMHighResTimeStamp
+IdleDeadline::TimeRemaining()
+{
+  if (mDidTimeout) {
+    return 0.0;
+  }
+
+  RefPtr<Performance> performance = mWindow->GetPerformance();
+  if (!performance) {
+    // If there is no performance object the window is partially torn
+    // down, so we can safely say that there is no time remaining.
+    return 0.0;
+  }
+
+  return std::max(mDeadline - performance->Now(), 0.0);
+}
+
+bool
+IdleDeadline::DidTimeout() const
+{
+  return mDidTimeout;
+}
+
+} // namespace dom
+} // namespace mozilla
new file mode 100644
--- /dev/null
+++ b/dom/base/IdleDeadline.h
@@ -0,0 +1,55 @@
+/* -*- 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 mozilla_dom_IdleDeadline_h
+#define mozilla_dom_IdleDeadline_h
+
+#include "js/TypeDecls.h"
+#include "mozilla/Attributes.h"
+#include "mozilla/ErrorResult.h"
+#include "mozilla/Maybe.h"
+#include "mozilla/dom/BindingDeclarations.h"
+#include "nsCOMPtr.h"
+#include "nsCycleCollectionParticipant.h"
+#include "nsDOMNavigationTiming.h"
+#include "nsWrapperCache.h"
+
+class nsPIDOMWindowInner;
+
+namespace mozilla {
+namespace dom {
+
+class IdleDeadline final
+  : public nsISupports
+  , public nsWrapperCache
+{
+public:
+  IdleDeadline(nsPIDOMWindowInner* aWindow, bool aDidTimeout,
+               DOMHighResTimeStamp aDeadline);
+
+  nsPIDOMWindowInner* GetParentObject() const { return mWindow; }
+
+  virtual JSObject* WrapObject(JSContext* aCx,
+                               JS::Handle<JSObject*> aGivenProto) override;
+
+  DOMHighResTimeStamp TimeRemaining();
+  bool DidTimeout() const;
+
+  NS_DECL_CYCLE_COLLECTING_ISUPPORTS
+  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(IdleDeadline)
+
+private:
+  ~IdleDeadline();
+
+  nsCOMPtr<nsPIDOMWindowInner> mWindow;
+  const bool mDidTimeout;
+  const DOMHighResTimeStamp mDeadline;
+};
+
+} // namespace dom
+} // namespace mozilla
+
+#endif // mozilla_dom_IdleDeadline_h
new file mode 100644
--- /dev/null
+++ b/dom/base/IdleRequest.cpp
@@ -0,0 +1,157 @@
+/* -*- 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 "IdleRequest.h"
+
+#include "mozilla/Function.h"
+#include "mozilla/TimeStamp.h"
+#include "mozilla/dom/IdleDeadline.h"
+#include "mozilla/dom/Performance.h"
+#include "mozilla/dom/PerformanceTiming.h"
+#include "mozilla/dom/WindowBinding.h"
+#include "nsComponentManagerUtils.h"
+#include "nsGlobalWindow.h"
+#include "nsISupportsPrimitives.h"
+#include "nsPIDOMWindow.h"
+
+namespace mozilla {
+namespace dom {
+
+IdleRequest::IdleRequest(JSContext* aCx, nsPIDOMWindowInner* aWindow,
+                         IdleRequestCallback& aCallback, uint32_t aHandle)
+  : mWindow(aWindow)
+  , mCallback(&aCallback)
+  , mHandle(aHandle)
+  , mTimeoutHandle(Nothing())
+{
+  MOZ_ASSERT(aWindow);
+
+  // Get the calling location.
+  nsJSUtils::GetCallingLocation(aCx, mFileName, &mLineNo, &mColumn);
+}
+
+IdleRequest::~IdleRequest()
+{
+}
+
+NS_IMPL_CYCLE_COLLECTION_CLASS(IdleRequest)
+
+NS_IMPL_CYCLE_COLLECTING_ADDREF(IdleRequest)
+NS_IMPL_CYCLE_COLLECTING_RELEASE(IdleRequest)
+
+NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(IdleRequest)
+  NS_IMPL_CYCLE_COLLECTION_UNLINK(mWindow)
+  NS_IMPL_CYCLE_COLLECTION_UNLINK(mCallback)
+NS_IMPL_CYCLE_COLLECTION_UNLINK_END
+
+NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(IdleRequest)
+  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mWindow)
+  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mCallback)
+NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
+
+NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(IdleRequest)
+  NS_INTERFACE_MAP_ENTRY(nsIRunnable)
+  NS_INTERFACE_MAP_ENTRY(nsICancelableRunnable)
+  NS_INTERFACE_MAP_ENTRY(nsIIncrementalRunnable)
+  NS_INTERFACE_MAP_ENTRY(nsITimeoutHandler)
+  NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsITimeoutHandler)
+NS_INTERFACE_MAP_END
+
+nsresult
+IdleRequest::SetTimeout(uint32_t aTimeout)
+{
+  int32_t handle;
+  nsresult rv = nsGlobalWindow::Cast(mWindow)->SetTimeoutOrInterval(
+    this, aTimeout, false, Timeout::Reason::eIdleCallbackTimeout, &handle);
+  mTimeoutHandle = Some(handle);
+
+  return rv;
+}
+
+nsresult
+IdleRequest::Run()
+{
+  if (mCallback) {
+    RunIdleRequestCallback(false);
+  }
+
+  return NS_OK;
+}
+
+nsresult
+IdleRequest::Cancel()
+{
+  mCallback = nullptr;
+  CancelTimeout();
+  if (isInList()) {
+    remove();
+  }
+  Release();
+
+  return NS_OK;
+}
+
+void
+IdleRequest::SetDeadline(TimeStamp aDeadline)
+{
+  mozilla::dom::Performance* perf = mWindow->GetPerformance();
+  mDeadline =
+    perf ? perf->GetDOMTiming()->TimeStampToDOMHighRes(aDeadline) : 0.0;
+}
+
+nsresult
+IdleRequest::RunIdleRequestCallback(bool aDidTimeout)
+{
+  MOZ_ASSERT(NS_IsMainThread());
+
+  if (!aDidTimeout) {
+    CancelTimeout();
+  }
+
+  remove();
+  ErrorResult error;
+  RefPtr<IdleDeadline> deadline =
+    new IdleDeadline(mWindow, aDidTimeout, mDeadline);
+  mCallback->Call(*deadline, error, "requestIdleCallback handler");
+  mCallback = nullptr;
+  Release();
+
+  return error.StealNSResult();
+}
+
+void
+IdleRequest::CancelTimeout()
+{
+  if (mTimeoutHandle.isSome()) {
+    nsGlobalWindow::Cast(mWindow)->ClearTimeoutOrInterval(
+      mTimeoutHandle.value(), Timeout::Reason::eIdleCallbackTimeout);
+  }
+}
+
+nsresult
+IdleRequest::Call()
+{
+  SetDeadline(TimeStamp::Now());
+  return RunIdleRequestCallback(true);
+}
+
+void
+IdleRequest::GetLocation(const char** aFileName, uint32_t* aLineNo,
+                         uint32_t* aColumn)
+{
+  *aFileName = mFileName.get();
+  *aLineNo = mLineNo;
+  *aColumn = mColumn;
+}
+
+void
+IdleRequest::MarkForCC()
+{
+  mCallback->MarkForCC();
+}
+
+} // namespace dom
+} // namespace mozilla
new file mode 100644
--- /dev/null
+++ b/dom/base/IdleRequest.h
@@ -0,0 +1,74 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef mozilla_dom_idlerequest_h
+#define mozilla_dom_idlerequest_h
+
+#include "mozilla/LinkedList.h"
+#include "mozilla/Maybe.h"
+#include "nsCOMPtr.h"
+#include "nsCycleCollectionParticipant.h"
+#include "nsDOMNavigationTiming.h"
+#include "nsITimeoutHandler.h"
+
+class nsPIDOMWindowInner;
+
+namespace mozilla {
+namespace dom {
+
+class IdleRequestCallback;
+
+class IdleRequest final : public nsITimeoutHandler
+                        , public nsIRunnable
+                        , public nsICancelableRunnable
+                        , public nsIIncrementalRunnable
+                        , public LinkedListElement<IdleRequest>
+{
+public:
+  IdleRequest(JSContext* aCx, nsPIDOMWindowInner* aWindow,
+              IdleRequestCallback& aCallback, uint32_t aHandle);
+
+  virtual nsresult Call() override;
+  virtual void GetLocation(const char** aFileName, uint32_t* aLineNo,
+                           uint32_t* aColumn) override;
+  virtual void MarkForCC() override;
+
+  nsresult SetTimeout(uint32_t aTimout);
+  nsresult RunIdleRequestCallback(bool aDidTimeout);
+  void CancelTimeout();
+
+  NS_DECL_NSIRUNNABLE;
+  virtual nsresult Cancel() override;
+  virtual void SetDeadline(mozilla::TimeStamp aDeadline) override;
+
+  uint32_t Handle() const
+  {
+    return mHandle;
+  }
+
+  NS_DECL_CYCLE_COLLECTING_ISUPPORTS
+  NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(IdleRequest, nsITimeoutHandler)
+
+private:
+  ~IdleRequest();
+
+  // filename, line number and JS language version string of the
+  // caller of setTimeout()
+  nsCString mFileName;
+  uint32_t mLineNo;
+  uint32_t mColumn;
+
+  nsCOMPtr<nsPIDOMWindowInner> mWindow;
+  RefPtr<IdleRequestCallback> mCallback;
+  uint32_t mHandle;
+  mozilla::Maybe<int32_t> mTimeoutHandle;
+  DOMHighResTimeStamp mDeadline;
+};
+
+} // namespace dom
+} // namespace mozilla
+
+#endif // mozilla_dom_idlerequest_h
new file mode 100644
--- /dev/null
+++ b/dom/base/Timeout.cpp
@@ -0,0 +1,91 @@
+/* -*- 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 "Timeout.h"
+
+#include "nsGlobalWindow.h"
+#include "nsITimeoutHandler.h"
+#include "nsITimer.h"
+#include "nsPIDOMWindow.h"
+
+namespace mozilla {
+namespace dom {
+
+Timeout::Timeout()
+  : mCleared(false),
+    mRunning(false),
+    mIsInterval(false),
+    mReason(Reason::eTimeoutOrInterval),
+    mTimeoutId(0),
+    mInterval(0),
+    mFiringDepth(0),
+    mNestingLevel(0),
+    mPopupState(openAllowed)
+{
+  MOZ_COUNT_CTOR(Timeout);
+}
+
+Timeout::~Timeout()
+{
+  if (mTimer) {
+    mTimer->Cancel();
+    mTimer = nullptr;
+  }
+
+  MOZ_COUNT_DTOR(Timeout);
+}
+
+NS_IMPL_CYCLE_COLLECTION_CLASS(Timeout)
+
+NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(Timeout)
+  NS_IMPL_CYCLE_COLLECTION_UNLINK(mWindow)
+  NS_IMPL_CYCLE_COLLECTION_UNLINK(mPrincipal)
+  NS_IMPL_CYCLE_COLLECTION_UNLINK(mScriptHandler)
+NS_IMPL_CYCLE_COLLECTION_UNLINK_END
+
+NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(Timeout)
+  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mWindow)
+  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mPrincipal)
+  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mScriptHandler)
+NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
+
+NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(Timeout, AddRef)
+NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(Timeout, Release)
+
+nsresult
+Timeout::InitTimer(uint32_t aDelay)
+{
+  return mTimer->InitWithNameableFuncCallback(
+    nsGlobalWindow::TimerCallback, this, aDelay,
+    nsITimer::TYPE_ONE_SHOT, Timeout::TimerNameCallback);
+}
+
+// static
+void
+Timeout::TimerNameCallback(nsITimer* aTimer, void* aClosure, char* aBuf,
+                           size_t aLen)
+{
+  RefPtr<Timeout> timeout = (Timeout*)aClosure;
+
+  const char* filename;
+  uint32_t lineNum, column;
+  timeout->mScriptHandler->GetLocation(&filename, &lineNum, &column);
+  snprintf(aBuf, aLen, "[content] %s:%u:%u", filename, lineNum, column);
+}
+
+
+// Return true if this timeout has a refcount of 1. This is used to check
+// that dummy_timeout doesn't leak from nsGlobalWindow::RunTimeout.
+#ifdef DEBUG
+bool
+Timeout::HasRefCntOne() const
+{
+  return mRefCnt.get() == 1;
+}
+#endif // DEBUG
+
+} // namespace dom
+} // namespace mozilla
new file mode 100644
--- /dev/null
+++ b/dom/base/Timeout.h
@@ -0,0 +1,101 @@
+/* -*- 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 mozilla_dom_timeout_h
+#define mozilla_dom_timeout_h
+
+#include "mozilla/LinkedList.h"
+#include "mozilla/TimeStamp.h"
+#include "nsCOMPtr.h"
+#include "nsCycleCollectionParticipant.h"
+
+class nsGlobalWindow;
+class nsIPrincipal;
+class nsITimeoutHandler;
+class nsITimer;
+
+namespace mozilla {
+namespace dom {
+
+/*
+ * Timeout struct that holds information about each script
+ * timeout.  Holds a strong reference to an nsITimeoutHandler, which
+ * abstracts the language specific cruft.
+ */
+class Timeout final
+  : public LinkedListElement<Timeout>
+{
+public:
+  Timeout();
+
+  NS_DECL_CYCLE_COLLECTION_NATIVE_CLASS(Timeout)
+  NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(Timeout)
+
+  nsresult InitTimer(uint32_t aDelay);
+
+  enum class Reason { eTimeoutOrInterval, eIdleCallbackTimeout };
+
+  static void TimerNameCallback(nsITimer* aTimer, void* aClosure, char* aBuf,
+                                size_t aLen);
+
+#ifdef DEBUG
+  bool HasRefCntOne() const;
+#endif // DEBUG
+
+  // Window for which this timeout fires
+  RefPtr<nsGlobalWindow> mWindow;
+
+  // The actual timer object
+  nsCOMPtr<nsITimer> mTimer;
+
+  // True if the timeout was cleared
+  bool mCleared;
+
+  // True if this is one of the timeouts that are currently running
+  bool mRunning;
+
+  // True if this is a repeating/interval timer
+  bool mIsInterval;
+
+  Reason mReason;
+
+  // Returned as value of setTimeout()
+  uint32_t mTimeoutId;
+
+  // Interval in milliseconds
+  uint32_t mInterval;
+
+  // mWhen and mTimeRemaining can't be in a union, sadly, because they
+  // have constructors.
+  // Nominal time to run this timeout.  Use only when timeouts are not
+  // suspended.
+  TimeStamp mWhen;
+  // Remaining time to wait.  Used only when timeouts are suspended.
+  TimeDuration mTimeRemaining;
+
+  // Principal with which to execute
+  nsCOMPtr<nsIPrincipal> mPrincipal;
+
+  // stack depth at which timeout is firing
+  uint32_t mFiringDepth;
+
+  uint32_t mNestingLevel;
+
+  // The popup state at timeout creation time if not created from
+  // another timeout
+  PopupControlState mPopupState;
+
+  // The language-specific information about the callback.
+  nsCOMPtr<nsITimeoutHandler> mScriptHandler;
+
+private:
+  ~Timeout();
+};
+
+} // namespace dom
+} // namespace mozilla
+
+#endif // mozilla_dom_timeout_h
--- a/dom/base/moz.build
+++ b/dom/base/moz.build
@@ -97,16 +97,17 @@ EXPORTS += [
     'nsINodeList.h',
     'nsIScriptContext.h',
     'nsIScriptElement.h',
     'nsIScriptGlobalObject.h',
     'nsIScriptNameSpaceManager.h',
     'nsIScriptObjectPrincipal.h',
     'nsIScriptTimeoutHandler.h',
     'nsIStyleSheetLinkingElement.h',
+    'nsITimeoutHandler.h',
     'nsJSEnvironment.h',
     'nsJSUtils.h',
     'nsLineBreaker.h',
     'nsMappedAttributeElement.h',
     'nsNameSpaceManager.h',
     'nsNodeInfoManager.h',
     'nsNodeUtils.h',
     'nsPIDOMWindow.h',
@@ -180,16 +181,18 @@ EXPORTS.mozilla.dom += [
     'EventSource.h',
     'File.h',
     'FileList.h',
     'FileReader.h',
     'FormData.h',
     'FragmentOrElement.h',
     'FromParser.h',
     'GroupedSHistory.h',
+    'IdleDeadline.h',
+    'IdleRequest.h',
     'ImageEncoder.h',
     'ImageTracker.h',
     'ImportManager.h',
     'Link.h',
     'Location.h',
     'MutableBlobStorage.h',
     'MutableBlobStreamListener.h',
     'NameSpaceConstants.h',
@@ -204,16 +207,17 @@ EXPORTS.mozilla.dom += [
     'ScreenOrientation.h',
     'ScriptSettings.h',
     'ShadowRoot.h',
     'StructuredCloneHolder.h',
     'StructuredCloneTags.h',
     'StyleSheetList.h',
     'SubtleCrypto.h',
     'Text.h',
+    'Timeout.h',
     'TreeWalker.h',
     'WebKitCSSMatrix.h',
     'WebSocket.h',
     'WindowOrientationObserver.h',
 ]
 
 UNIFIED_SOURCES += [
     'AnonymousContent.cpp',
@@ -246,16 +250,18 @@ UNIFIED_SOURCES += [
     'Element.cpp',
     'EventSource.cpp',
     'File.cpp',
     'FileList.cpp',
     'FileReader.cpp',
     'FormData.cpp',
     'FragmentOrElement.cpp',
     'GroupedSHistory.cpp',
+    'IdleDeadline.cpp',
+    'IdleRequest.cpp',
     'ImageEncoder.cpp',
     'ImageTracker.cpp',
     'ImportManager.cpp',
     'Link.cpp',
     'Location.cpp',
     'MultipartBlobImpl.cpp',
     'MutableBlobStorage.cpp',
     'MutableBlobStreamListener.cpp',
@@ -346,16 +352,17 @@ UNIFIED_SOURCES += [
     'ScriptSettings.cpp',
     'ShadowRoot.cpp',
     'StructuredCloneHolder.cpp',
     'StyleSheetList.cpp',
     'SubtleCrypto.cpp',
     'Text.cpp',
     'TextInputProcessor.cpp',
     'ThirdPartyUtil.cpp',
+    'Timeout.cpp',
     'TreeWalker.cpp',
     'WebKitCSSMatrix.cpp',
     'WebSocket.cpp',
     'WindowNamedPropertiesHandler.cpp',
     'WindowOrientationObserver.cpp',
 ]
 
 if CONFIG['MOZ_WEBRTC']:
--- a/dom/base/nsGlobalWindow.cpp
+++ b/dom/base/nsGlobalWindow.cpp
@@ -13,19 +13,21 @@
 // Local Includes
 #include "Navigator.h"
 #include "nsContentSecurityManager.h"
 #include "nsScreen.h"
 #include "nsHistory.h"
 #include "nsDOMNavigationTiming.h"
 #include "nsIDOMStorageManager.h"
 #include "mozilla/dom/DOMStorage.h"
+#include "mozilla/dom/IdleRequest.h"
 #include "mozilla/dom/Performance.h"
 #include "mozilla/dom/StorageEvent.h"
 #include "mozilla/dom/StorageEventBinding.h"
+#include "mozilla/dom/Timeout.h"
 #include "mozilla/IntegerPrintfMacros.h"
 #if defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WIDGET_GONK)
 #include "mozilla/dom/WindowOrientationObserver.h"
 #endif
 #include "nsDOMOfflineResourceList.h"
 #include "nsError.h"
 #include "nsIIdleService.h"
 #include "nsISizeOfEventTarget.h"
@@ -35,16 +37,17 @@
 #include "nsDOMWindowList.h"
 #include "mozilla/dom/WakeLock.h"
 #include "mozilla/dom/power/PowerManagerService.h"
 #include "nsIDocShellTreeOwner.h"
 #include "nsIInterfaceRequestorUtils.h"
 #include "nsIPermissionManager.h"
 #include "nsIScriptContext.h"
 #include "nsIScriptTimeoutHandler.h"
+#include "nsITimeoutHandler.h"
 #include "nsIController.h"
 #include "nsScriptNameSpaceManager.h"
 #include "nsISlowScriptDebug.h"
 #include "nsWindowMemoryReporter.h"
 #include "WindowNamedPropertiesHandler.h"
 #include "nsFrameSelection.h"
 #include "nsNetUtil.h"
 #include "nsVariant.h"
@@ -320,16 +323,21 @@ nsGlobalWindow::DOMMinTimeoutValue() con
 // uses 5.
 #define DOM_CLAMP_TIMEOUT_NESTING_LEVEL 5
 
 // The longest interval (as PRIntervalTime) we permit, or that our
 // timer code can handle, really. See DELAY_INTERVAL_LIMIT in
 // nsTimerImpl.h for details.
 #define DOM_MAX_TIMEOUT_VALUE    DELAY_INTERVAL_LIMIT
 
+// The interval at which we execute idle callbacks
+static uint32_t gThrottledIdlePeriodLength;
+
+#define DEFAULT_THROTTLED_IDLE_PERIOD_LENGTH 10000
+
 #define FORWARD_TO_OUTER(method, args, err_rval)                              \
   PR_BEGIN_MACRO                                                              \
   if (IsInnerWindow()) {                                                      \
     nsGlobalWindow *outer = GetOuterWindowInternal();                         \
     if (!AsInner()->HasActiveDocument()) {                                    \
       NS_WARNING(outer ?                                                      \
                  "Inner window does not have active document." :              \
                  "No outer window available!");                               \
@@ -498,81 +506,16 @@ private:
 
   // This reference is non-owning and safe because it's cleared by
   // nsGlobalWindow::CleanUp().
   nsGlobalWindow* MOZ_NON_OWNING_REF mWindow;
 };
 
 NS_IMPL_ISUPPORTS(nsGlobalWindowObserver, nsIObserver, nsIInterfaceRequestor)
 
-nsTimeout::nsTimeout()
-  : mCleared(false),
-    mRunning(false),
-    mIsInterval(false),
-    mPublicId(0),
-    mInterval(0),
-    mFiringDepth(0),
-    mNestingLevel(0),
-    mPopupState(openAllowed)
-{
-#ifdef DEBUG_jst
-  {
-    extern int gTimeoutCnt;
-
-    ++gTimeoutCnt;
-  }
-#endif
-
-  MOZ_COUNT_CTOR(nsTimeout);
-}
-
-nsTimeout::~nsTimeout()
-{
-#ifdef DEBUG_jst
-  {
-    extern int gTimeoutCnt;
-
-    --gTimeoutCnt;
-  }
-#endif
-
-  if (mTimer) {
-    mTimer->Cancel();
-    mTimer = nullptr;
-  }
-
-  MOZ_COUNT_DTOR(nsTimeout);
-}
-
-NS_IMPL_CYCLE_COLLECTION_CLASS(nsTimeout)
-
-NS_IMPL_CYCLE_COLLECTION_UNLINK_0(nsTimeout)
-NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsTimeout)
-  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mWindow)
-  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mScriptHandler)
-NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(nsTimeout, AddRef)
-NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(nsTimeout, Release)
-
-nsresult
-nsTimeout::InitTimer(uint32_t aDelay)
-{
-  return mTimer->InitWithNameableFuncCallback(
-    nsGlobalWindow::TimerCallback, this, aDelay,
-    nsITimer::TYPE_ONE_SHOT, nsGlobalWindow::TimerNameCallback);
-}
-
-// Return true if this timeout has a refcount of 1. This is used to check
-// that dummy_timeout doesn't leak from nsGlobalWindow::RunTimeout.
-bool
-nsTimeout::HasRefCntOne()
-{
-  return mRefCnt.get() == 1;
-}
-
 static already_AddRefed<nsIVariant>
 CreateVoidVariant()
 {
   RefPtr<nsVariantCC> writable = new nsVariantCC();
   writable->SetAsVoid();
   return writable.forget();
 }
 
@@ -598,16 +541,119 @@ DialogValueHolder::Get(JSContext* aCx, J
   if (aSubject->Subsumes(mOrigin)) {
     aError = nsContentUtils::XPConnect()->VariantToJS(aCx, aScope,
                                                       mValue, aResult);
   } else {
     aResult.setUndefined();
   }
 }
 
+void
+nsGlobalWindow::PostThrottledIdleCallback()
+{
+  AssertIsOnMainThread();
+
+  if (mThrottledIdleRequestCallbacks.isEmpty())
+    return;
+
+  RefPtr<IdleRequest> request(mThrottledIdleRequestCallbacks.popFirst());
+  // ownership transferred from mThrottledIdleRequestCallbacks to
+  // mIdleRequestCallbacks
+  mIdleRequestCallbacks.insertBack(request);
+  NS_IdleDispatchToCurrentThread(request.forget());
+}
+
+/* static */ void
+nsGlobalWindow::InsertIdleCallbackIntoList(IdleRequest* aRequest,
+                                           IdleRequests& aList)
+{
+  aList.insertBack(aRequest);
+  aRequest->AddRef();
+}
+
+uint32_t
+nsGlobalWindow::RequestIdleCallback(JSContext* aCx,
+                                    IdleRequestCallback& aCallback,
+                                    const IdleRequestOptions& aOptions,
+                                    ErrorResult& aError)
+{
+  MOZ_RELEASE_ASSERT(IsInnerWindow());
+  AssertIsOnMainThread();
+
+  uint32_t handle = ++mIdleRequestCallbackCounter;
+
+  RefPtr<IdleRequest> request =
+    new IdleRequest(aCx, AsInner(), aCallback, handle);
+
+  if (aOptions.mTimeout.WasPassed()) {
+    aError = request->SetTimeout(aOptions.mTimeout.Value());
+    if (NS_WARN_IF(aError.Failed())) {
+      return 0;
+    }
+  }
+
+  nsGlobalWindow* outer = GetOuterWindowInternal();
+  if (outer && outer->AsOuter()->IsBackground()) {
+    // mThrottledIdleRequestCallbacks now owns request
+    InsertIdleCallbackIntoList(request, mThrottledIdleRequestCallbacks);
+
+    NS_DelayedDispatchToCurrentThread(
+      NewRunnableMethod(this, &nsGlobalWindow::PostThrottledIdleCallback),
+      10000);
+  } else {
+    MOZ_ASSERT(mThrottledIdleRequestCallbacks.isEmpty());
+
+    // mIdleRequestCallbacks now owns request
+    InsertIdleCallbackIntoList(request, mIdleRequestCallbacks);
+
+    NS_IdleDispatchToCurrentThread(request.forget());
+  }
+
+  return handle;
+}
+
+void
+nsGlobalWindow::CancelIdleCallback(uint32_t aHandle)
+{
+  MOZ_RELEASE_ASSERT(IsInnerWindow());
+
+  for (IdleRequest* r : mIdleRequestCallbacks) {
+    if (r->Handle() == aHandle) {
+      r->Cancel();
+      break;
+    }
+  }
+}
+
+void
+nsGlobalWindow::DisableIdleCallbackRequests()
+{
+  while (!mIdleRequestCallbacks.isEmpty()) {
+    RefPtr<IdleRequest> request = mIdleRequestCallbacks.popFirst();
+    request->Cancel();
+  }
+
+  while (!mThrottledIdleRequestCallbacks.isEmpty()) {
+    RefPtr<IdleRequest> request = mThrottledIdleRequestCallbacks.popFirst();
+    request->Cancel();
+  }
+}
+
+void nsGlobalWindow::UnthrottleIdleCallbackRequests()
+{
+  AssertIsOnMainThread();
+
+  while (!mThrottledIdleRequestCallbacks.isEmpty()) {
+    RefPtr<IdleRequest> request(mThrottledIdleRequestCallbacks.popFirst());
+    mIdleRequestCallbacks.insertBack(request);
+    NS_IdleDispatchToCurrentThread(request.forget());
+  }
+}
+
+
 namespace mozilla {
 namespace dom {
 extern uint64_t
 NextWindowID();
 } // namespace dom
 } // namespace mozilla
 
 template<class T>
@@ -1206,22 +1252,24 @@ nsGlobalWindow::nsGlobalWindow(nsGlobalW
     mHasGamepad(false),
     mHasVREvents(false),
 #ifdef MOZ_GAMEPAD
     mHasSeenGamepadInput(false),
 #endif
     mNotifiedIDDestroyed(false),
     mAllowScriptsToClose(false),
     mTimeoutInsertionPoint(nullptr),
-    mTimeoutPublicIdCounter(1),
+    mTimeoutIdCounter(1),
     mTimeoutFiringDepth(0),
     mSuspendDepth(0),
     mFreezeDepth(0),
     mFocusMethod(0),
     mSerial(0),
+    mIdleCallbackTimeoutCounter(1),
+    mIdleRequestCallbackCounter(1),
 #ifdef DEBUG
     mSetOpenerWindowCalled(false),
 #endif
 #ifdef MOZ_B2G
     mNetworkUploadObserverEnabled(false),
     mNetworkDownloadObserverEnabled(false),
 #endif
     mCleanedUp(false),
@@ -1277,16 +1325,20 @@ nsGlobalWindow::nsGlobalWindow(nsGlobalW
                                 "dom.min_timeout_value",
                                 DEFAULT_MIN_TIMEOUT_VALUE);
     Preferences::AddIntVarCache(&gMinBackgroundTimeoutValue,
                                 "dom.min_background_timeout_value",
                                 DEFAULT_MIN_BACKGROUND_TIMEOUT_VALUE);
     Preferences::AddBoolVarCache(&sIdleObserversAPIFuzzTimeDisabled,
                                  "dom.idle-observers-api.fuzz_time.disabled",
                                  false);
+
+    Preferences::AddUintVarCache(&gThrottledIdlePeriodLength,
+                                 "dom.idle_period.throttled_length",
+                                 DEFAULT_THROTTLED_IDLE_PERIOD_LENGTH);
   }
 
   if (gDumpFile == nullptr) {
     const nsAdoptingCString& fname =
       Preferences::GetCString("browser.dom.window.dump.file");
     if (!fname.IsEmpty()) {
       // if this fails to open, Dump() knows to just go to stdout
       // on null.
@@ -1623,16 +1675,17 @@ nsGlobalWindow::CleanUp()
   if (IsInnerWindow()) {
     DisableGamepadUpdates();
     mHasGamepad = false;
     DisableVRUpdates();
     mHasVREvents = false;
 #ifdef MOZ_B2G
     DisableTimeChangeNotifications();
 #endif
+    DisableIdleCallbackRequests();
   } else {
     MOZ_ASSERT(!mHasGamepad);
     MOZ_ASSERT(!mHasVREvents);
   }
 
   if (mCleanMessageManager) {
     MOZ_ASSERT(mIsChrome, "only chrome should have msg manager cleaned");
     nsGlobalChromeWindow *asChrome = static_cast<nsGlobalChromeWindow*>(this);
@@ -1702,16 +1755,18 @@ nsGlobalWindow::FreeInnerObjects()
 
   if (mIdleTimer) {
     mIdleTimer->Cancel();
     mIdleTimer = nullptr;
   }
 
   mIdleObservers.Clear();
 
+  DisableIdleCallbackRequests();
+
   mChromeEventHandler = nullptr;
 
   if (mListenerManager) {
     mListenerManager->Disconnect();
     mListenerManager = nullptr;
   }
 
   mLocation = nullptr;
@@ -1891,36 +1946,45 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_
 #ifdef MOZ_WEBSPEECH
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mSpeechSynthesis)
 #endif
 
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mOuterWindow)
 
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mListenerManager)
 
-  for (nsTimeout* timeout = tmp->mTimeouts.getFirst();
+  for (Timeout* timeout = tmp->mTimeouts.getFirst();
        timeout;
        timeout = timeout->getNext()) {
-    cb.NoteNativeChild(timeout, NS_CYCLE_COLLECTION_PARTICIPANT(nsTimeout));
+    cb.NoteNativeChild(timeout, NS_CYCLE_COLLECTION_PARTICIPANT(Timeout));
   }
 
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mLocation)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mHistory)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mCustomElements)
 
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mLocalStorage)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mSessionStorage)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mApplicationCache)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mSuspendedDoc)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mIndexedDB)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDocumentPrincipal)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDoc)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mIdleService)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mWakeLock)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mPendingStorageEvents)
+
+  for (IdleRequest* request : tmp->mIdleRequestCallbacks) {
+    cb.NoteNativeChild(request, NS_CYCLE_COLLECTION_PARTICIPANT(IdleRequest));
+  }
+
+  for (IdleRequest* request : tmp->mThrottledIdleRequestCallbacks) {
+    cb.NoteNativeChild(request, NS_CYCLE_COLLECTION_PARTICIPANT(IdleRequest));
+  }
+
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mIdleObservers)
 
 #ifdef MOZ_GAMEPAD
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mGamepads)
 #endif
 
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mCacheStorage)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mVRDisplays)
@@ -1971,16 +2035,17 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(ns
     nsGlobalWindow::Cast(tmp->mOuterWindow)->MaybeClearInnerWindow(tmp);
     NS_IMPL_CYCLE_COLLECTION_UNLINK(mOuterWindow)
   }
 
   if (tmp->mListenerManager) {
     tmp->mListenerManager->Disconnect();
     NS_IMPL_CYCLE_COLLECTION_UNLINK(mListenerManager)
   }
+
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mLocation)
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mHistory)
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mCustomElements)
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mLocalStorage)
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mSessionStorage)
   if (tmp->mApplicationCache) {
     static_cast<nsDOMOfflineResourceList*>(tmp->mApplicationCache.get())->Disconnect();
     NS_IMPL_CYCLE_COLLECTION_UNLINK(mApplicationCache)
@@ -2016,16 +2081,18 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(ns
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mCrypto)
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mU2F)
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mConsole)
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mExternal)
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mMozSelfSupport)
 
   tmp->UnlinkHostObjectURIs();
 
+  tmp->DisableIdleCallbackRequests();
+
   NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 
 #ifdef DEBUG
 void
 nsGlobalWindow::RiskyUnlink()
 {
   NS_CYCLE_COLLECTION_INNERNAME.Unlink(this);
@@ -2054,24 +2121,21 @@ nsGlobalWindow::IsBlackForCC(bool aTraci
           IsBlack()) &&
          (!aTracingNeeded ||
           HasNothingToTrace(static_cast<nsIDOMEventTarget*>(this)));
 }
 
 void
 nsGlobalWindow::UnmarkGrayTimers()
 {
-  for (nsTimeout* timeout = mTimeouts.getFirst();
+  for (Timeout* timeout = mTimeouts.getFirst();
        timeout;
        timeout = timeout->getNext()) {
     if (timeout->mScriptHandler) {
-      Function* f = timeout->mScriptHandler->GetCallback();
-      if (f) {
-        f->MarkForCC();
-      }
+      timeout->mScriptHandler->MarkForCC();
     }
   }
 }
 
 //*****************************************************************************
 // nsGlobalWindow::nsIScriptGlobalObject
 //*****************************************************************************
 
@@ -7953,25 +8017,25 @@ nsGlobalWindow::MozRequestOverfill(Overf
 }
 
 void
 nsGlobalWindow::ClearTimeout(int32_t aHandle)
 {
   MOZ_RELEASE_ASSERT(IsInnerWindow());
 
   if (aHandle > 0) {
-    ClearTimeoutOrInterval(aHandle);
+    ClearTimeoutOrInterval(aHandle, Timeout::Reason::eTimeoutOrInterval);
   }
 }
 
 void
 nsGlobalWindow::ClearInterval(int32_t aHandle)
 {
   if (aHandle > 0) {
-    ClearTimeoutOrInterval(aHandle);
+    ClearTimeoutOrInterval(aHandle, Timeout::Reason::eTimeoutOrInterval);
   }
 }
 
 void
 nsGlobalWindow::SetResizable(bool aResizable) const
 {
   // nop
 }
@@ -9915,16 +9979,23 @@ void nsGlobalWindow::SetIsBackground(boo
 {
   MOZ_ASSERT(IsOuterWindow());
 
   bool resetTimers = (!aIsBackground && AsOuter()->IsBackground());
   nsPIDOMWindow::SetIsBackground(aIsBackground);
   if (resetTimers) {
     ResetTimersForNonBackgroundWindow();
   }
+
+  if (!aIsBackground) {
+    nsGlobalWindow* inner = GetCurrentInnerWindowInternal();
+    if (inner) {
+      inner->UnthrottleIdleCallbackRequests();
+    }
+  }
 #ifdef MOZ_GAMEPAD
   if (!aIsBackground) {
     nsGlobalWindow* inner = GetCurrentInnerWindowInternal();
     if (inner) {
       inner->SyncGamepadState();
     }
   }
 #endif
@@ -11700,17 +11771,17 @@ nsGlobalWindow::Suspend()
     for (uint32_t i = 0; i < mEnabledSensors.Length(); i++)
       ac->RemoveWindowListener(mEnabledSensors[i], this);
   }
   DisableGamepadUpdates();
   DisableVRUpdates();
 
   mozilla::dom::workers::SuspendWorkersForWindow(AsInner());
 
-  for (nsTimeout* t = mTimeouts.getFirst(); t; t = t->getNext()) {
+  for (Timeout* t = mTimeouts.getFirst(); t; t = t->getNext()) {
     // Leave the timers with the current time remaining.  This will
     // cause the timers to potentially fire when the window is
     // Resume()'d.  Time effectively passes while suspended.
 
     // Drop the XPCOM timer; we'll reschedule when restoring the state.
     if (t->mTimer) {
       t->mTimer->Cancel();
       t->mTimer = nullptr;
@@ -11759,17 +11830,17 @@ nsGlobalWindow::Resume()
   for (uint32_t i = 0; i < mAudioContexts.Length(); ++i) {
     ErrorResult dummy;
     RefPtr<Promise> d = mAudioContexts[i]->Resume(dummy);
   }
 
   TimeStamp now = TimeStamp::Now();
   DebugOnly<bool> _seenDummyTimeout = false;
 
-  for (nsTimeout* t = mTimeouts.getFirst(); t; t = t->getNext()) {
+  for (Timeout* t = mTimeouts.getFirst(); t; t = t->getNext()) {
     // There's a chance we're being called with RunTimeout on the stack in which
     // case we have a dummy timeout in the list that *must not* be resumed. It
     // can be identified by a null mWindow.
     if (!t->mWindow) {
       NS_ASSERTION(!_seenDummyTimeout, "More than one dummy timeout?!");
       _seenDummyTimeout = true;
       continue;
     }
@@ -11846,17 +11917,17 @@ nsGlobalWindow::FreezeInternal()
   MOZ_ASSERT(mSuspendDepth >= mFreezeDepth);
   if (mFreezeDepth != 1) {
     return;
   }
 
   mozilla::dom::workers::FreezeWorkersForWindow(AsInner());
 
   TimeStamp now = TimeStamp::Now();
-  for (nsTimeout *t = mTimeouts.getFirst(); t; t = t->getNext()) {
+  for (Timeout *t = mTimeouts.getFirst(); t; t = t->getNext()) {
     // Save the current remaining time for this timeout.  We will
     // re-apply it when the window is Thaw()'d.  This effectively
     // shifts timers to the right as if time does not pass while
     // the window is frozen.
     if (t->mWhen > now) {
       t->mTimeRemaining = t->mWhen - now;
     } else {
       t->mTimeRemaining = TimeDuration(0);
@@ -11892,17 +11963,17 @@ nsGlobalWindow::ThawInternal()
   MOZ_ASSERT(mSuspendDepth >= mFreezeDepth);
   if (mFreezeDepth != 0) {
     return;
   }
 
   TimeStamp now = TimeStamp::Now();
   DebugOnly<bool> _seenDummyTimeout = false;
 
-  for (nsTimeout *t = mTimeouts.getFirst(); t; t = t->getNext()) {
+  for (Timeout *t = mTimeouts.getFirst(); t; t = t->getNext()) {
     // There's a chance we're being called with RunTimeout on the stack in which
     // case we have a dummy timeout in the list that *must not* be resumed. It
     // can be identified by a null mWindow.
     if (!t->mWindow) {
       NS_ASSERTION(!_seenDummyTimeout, "More than one dummy timeout?!");
       _seenDummyTimeout = true;
       continue;
     }
@@ -12323,16 +12394,28 @@ nsGlobalWindow::OpenInternal(const nsASt
 }
 
 //*****************************************************************************
 // nsGlobalWindow: Timeout Functions
 //*****************************************************************************
 
 uint32_t sNestingLevel;
 
+uint32_t
+nsGlobalWindow::GetTimeoutId(Timeout::Reason aReason)
+{
+  switch (aReason) {
+    case Timeout::Reason::eIdleCallbackTimeout:
+      return ++mIdleCallbackTimeoutCounter;
+    case Timeout::Reason::eTimeoutOrInterval:
+    default:
+      return ++mTimeoutIdCounter;
+  }
+}
+
 nsGlobalWindow*
 nsGlobalWindow::InnerForSetTimeoutOrInterval(ErrorResult& aError)
 {
   nsGlobalWindow* currentInner;
   nsGlobalWindow* forwardTo;
   if (IsInnerWindow()) {
     nsGlobalWindow* outer = GetOuterWindowInternal();
     currentInner = outer ? outer->GetCurrentInnerWindowInternal() : this;
@@ -12430,19 +12513,19 @@ nsGlobalWindow::SetInterval(JSContext* a
                             ErrorResult& aError)
 {
   int32_t timeout;
   bool isInterval = IsInterval(aTimeout, timeout);
   return SetTimeoutOrInterval(aCx, aHandler, timeout, isInterval, aError);
 }
 
 nsresult
-nsGlobalWindow::SetTimeoutOrInterval(nsIScriptTimeoutHandler *aHandler,
-                                     int32_t interval,
-                                     bool aIsInterval, int32_t *aReturn)
+nsGlobalWindow::SetTimeoutOrInterval(nsITimeoutHandler* aHandler,
+                                     int32_t interval, bool aIsInterval,
+                                     Timeout::Reason aReason, int32_t* aReturn)
 {
   MOZ_ASSERT(IsInnerWindow());
 
   // If we don't have a document (we could have been unloaded since
   // the call to setTimeout was made), do nothing.
   if (!mDoc) {
     return NS_OK;
   }
@@ -12454,20 +12537,21 @@ nsGlobalWindow::SetTimeoutOrInterval(nsI
   // Make sure we don't proceed with an interval larger than our timer
   // code can handle. (Note: we already forced |interval| to be non-negative,
   // so the uint32_t cast (to avoid compiler warnings) is ok.)
   uint32_t maxTimeoutMs = PR_IntervalToMilliseconds(DOM_MAX_TIMEOUT_VALUE);
   if (static_cast<uint32_t>(interval) > maxTimeoutMs) {
     interval = maxTimeoutMs;
   }
 
-  RefPtr<nsTimeout> timeout = new nsTimeout();
+  RefPtr<Timeout> timeout = new Timeout();
   timeout->mIsInterval = aIsInterval;
   timeout->mInterval = interval;
   timeout->mScriptHandler = aHandler;
+  timeout->mReason = aReason;
 
   // Now clamp the actual interval we will use for the timer based on
   uint32_t nestingLevel = sNestingLevel + 1;
   uint32_t realInterval = interval;
   if (aIsInterval || nestingLevel >= DOM_CLAMP_TIMEOUT_NESTING_LEVEL) {
     // Don't allow timeouts less than DOMMinTimeoutValue() from
     // now...
     realInterval = std::max(realInterval, uint32_t(DOMMinTimeoutValue()));
@@ -12493,17 +12577,17 @@ nsGlobalWindow::SetTimeoutOrInterval(nsI
     MOZ_ASSERT(!timeout->mWhen.IsNull());
 
     nsresult rv;
     timeout->mTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
     if (NS_FAILED(rv)) {
       return rv;
     }
 
-    RefPtr<nsTimeout> copy = timeout;
+    RefPtr<Timeout> copy = timeout;
 
     rv = timeout->InitTimer(realInterval);
     if (NS_FAILED(rv)) {
       return rv;
     }
 
     // The timeout is now also held in the timer's closure.
     Unused << copy.forget();
@@ -12532,21 +12616,20 @@ nsGlobalWindow::SetTimeoutOrInterval(nsI
     // in some cases.
     if (interval <= delay) {
       timeout->mPopupState = gPopupControlState;
     }
   }
 
   InsertTimeoutIntoList(timeout);
 
-  timeout->mPublicId = ++mTimeoutPublicIdCounter;
-  *aReturn = timeout->mPublicId;
+  timeout->mTimeoutId = GetTimeoutId(aReason);
+  *aReturn = timeout->mTimeoutId;
 
   return NS_OK;
-
 }
 
 int32_t
 nsGlobalWindow::SetTimeoutOrInterval(JSContext *aCx, Function& aFunction,
                                      int32_t aTimeout,
                                      const Sequence<JS::Value>& aArguments,
                                      bool aIsInterval, ErrorResult& aError)
 {
@@ -12562,17 +12645,18 @@ nsGlobalWindow::SetTimeoutOrInterval(JSC
 
   nsCOMPtr<nsIScriptTimeoutHandler> handler =
     NS_CreateJSTimeoutHandler(aCx, this, aFunction, aArguments, aError);
   if (!handler) {
     return 0;
   }
 
   int32_t result;
-  aError = SetTimeoutOrInterval(handler, aTimeout, aIsInterval, &result);
+  aError = SetTimeoutOrInterval(handler, aTimeout, aIsInterval,
+                                Timeout::Reason::eTimeoutOrInterval, &result);
   return result;
 }
 
 int32_t
 nsGlobalWindow::SetTimeoutOrInterval(JSContext* aCx, const nsAString& aHandler,
                                      int32_t aTimeout, bool aIsInterval,
                                      ErrorResult& aError)
 {
@@ -12588,28 +12672,29 @@ nsGlobalWindow::SetTimeoutOrInterval(JSC
 
   nsCOMPtr<nsIScriptTimeoutHandler> handler =
     NS_CreateJSTimeoutHandler(aCx, this, aHandler, aError);
   if (!handler) {
     return 0;
   }
 
   int32_t result;
-  aError = SetTimeoutOrInterval(handler, aTimeout, aIsInterval, &result);
+  aError = SetTimeoutOrInterval(handler, aTimeout, aIsInterval,
+                                Timeout::Reason::eTimeoutOrInterval, &result);
   return result;
 }
 
 bool
-nsGlobalWindow::RunTimeoutHandler(nsTimeout* aTimeout,
+nsGlobalWindow::RunTimeoutHandler(Timeout* aTimeout,
                                   nsIScriptContext* aScx)
 {
   // Hold on to the timeout in case mExpr or mFunObj releases its
   // doc.
-  RefPtr<nsTimeout> timeout = aTimeout;
-  nsTimeout* last_running_timeout = mRunningTimeout;
+  RefPtr<Timeout> timeout = aTimeout;
+  Timeout* last_running_timeout = mRunningTimeout;
   mRunningTimeout = timeout;
   timeout->mRunning = true;
 
   // Push this timeout's popup control state, which should only be
   // eabled the first time a timeout fires that was created while
   // popups were enabled and with a delay less than
   // "dom.disable_open_click_delay".
   nsAutoPopupStatePusher popupStatePusher(timeout->mPopupState);
@@ -12631,49 +12716,57 @@ nsGlobalWindow::RunTimeoutHandler(nsTime
   const char *reason;
   if (timeout->mIsInterval) {
     reason = "setInterval handler";
   } else {
     reason = "setTimeout handler";
   }
 
   bool abortIntervalHandler = false;
-  nsCOMPtr<nsIScriptTimeoutHandler> handler(timeout->mScriptHandler);
-  RefPtr<Function> callback = handler->GetCallback();
-  if (!callback) {
-    // Evaluate the timeout expression.
-    const nsAString& script = handler->GetHandlerText();
-
-    const char* filename = nullptr;
-    uint32_t lineNo = 0, dummyColumn = 0;
-    handler->GetLocation(&filename, &lineNo, &dummyColumn);
-
-    // New script entry point required, due to the "Create a script" sub-step of
-    // http://www.whatwg.org/specs/web-apps/current-work/#timer-initialisation-steps
-    nsAutoMicroTask mt;
-    AutoEntryScript aes(this, reason, true);
-    JS::CompileOptions options(aes.cx());
-    options.setFileAndLine(filename, lineNo)
-           .setVersion(JSVERSION_DEFAULT);
-    JS::Rooted<JSObject*> global(aes.cx(), FastGetGlobalJSObject());
-    nsresult rv = nsJSUtils::EvaluateString(aes.cx(), script, global, options);
-    if (rv == NS_SUCCESS_DOM_SCRIPT_EVALUATION_THREW_UNCATCHABLE) {
-      abortIntervalHandler = true;
+  nsCOMPtr<nsIScriptTimeoutHandler> handler(do_QueryInterface(timeout->mScriptHandler));
+  if (handler) {
+    RefPtr<Function> callback = handler->GetCallback();
+
+    if (!callback) {
+      // Evaluate the timeout expression.
+      const nsAString& script = handler->GetHandlerText();
+
+      const char* filename = nullptr;
+      uint32_t lineNo = 0, dummyColumn = 0;
+      handler->GetLocation(&filename, &lineNo, &dummyColumn);
+
+      // New script entry point required, due to the "Create a script" sub-step of
+      // http://www.whatwg.org/specs/web-apps/current-work/#timer-initialisation-steps
+      nsAutoMicroTask mt;
+      AutoEntryScript aes(this, reason, true);
+      JS::CompileOptions options(aes.cx());
+      options.setFileAndLine(filename, lineNo).setVersion(JSVERSION_DEFAULT);
+      JS::Rooted<JSObject*> global(aes.cx(), FastGetGlobalJSObject());
+      nsresult rv =
+        nsJSUtils::EvaluateString(aes.cx(), script, global, options);
+      if (rv == NS_SUCCESS_DOM_SCRIPT_EVALUATION_THREW_UNCATCHABLE) {
+        abortIntervalHandler = true;
+      }
+    } else {
+      // Hold strong ref to ourselves while we call the callback.
+      nsCOMPtr<nsISupports> me(static_cast<nsIDOMWindow*>(this));
+      ErrorResult rv;
+      JS::Rooted<JS::Value> ignoredVal(RootingCx());
+      callback->Call(me, handler->GetArgs(), &ignoredVal, rv, reason);
+      if (rv.IsUncatchableException()) {
+        abortIntervalHandler = true;
+      }
+
+      rv.SuppressException();
     }
   } else {
-    // Hold strong ref to ourselves while we call the callback.
-    nsCOMPtr<nsISupports> me(static_cast<nsIDOMWindow *>(this));
-    ErrorResult rv;
-    JS::Rooted<JS::Value> ignoredVal(RootingCx());
-    callback->Call(me, handler->GetArgs(), &ignoredVal, rv, reason);
-    if (rv.IsUncatchableException()) {
-      abortIntervalHandler = true;
-    }
-
-    rv.SuppressException();
+    nsCOMPtr<nsITimeoutHandler> basicHandler(timeout->mScriptHandler);
+    nsCOMPtr<nsISupports> kungFuDeathGrip(static_cast<nsIDOMWindow*>(this));
+    mozilla::Unused << kungFuDeathGrip;
+    basicHandler->Call();
   }
 
   // If we received an uncatchable exception, do not schedule the timeout again.
   // This allows the slow script dialog to break easy DoS attacks like
   // setInterval(function() { while(1); }, 100);
   if (abortIntervalHandler) {
     // If it wasn't an interval timer to begin with, this does nothing.  If it
     // was, we'll treat it as a timeout that we just ran and discard it when
@@ -12705,17 +12798,17 @@ nsGlobalWindow::RunTimeoutHandler(nsTime
 
   mRunningTimeout = last_running_timeout;
   timeout->mRunning = false;
 
   return timeout->mCleared;
 }
 
 bool
-nsGlobalWindow::RescheduleTimeout(nsTimeout* aTimeout, const TimeStamp& now,
+nsGlobalWindow::RescheduleTimeout(Timeout* aTimeout, const TimeStamp& now,
                                   bool aRunningPendingTimeouts)
 {
   if (!aTimeout->mIsInterval) {
     if (aTimeout->mTimer) {
       // The timeout still has an OS timer, and it's not an interval,
       // that means that the OS timer could still fire; cancel the OS
       // timer and release its reference to the timeout.
       aTimeout->mTimer->Cancel();
@@ -12784,27 +12877,28 @@ nsGlobalWindow::RescheduleTimeout(nsTime
 
     return false;
   }
 
   return true;
 }
 
 void
-nsGlobalWindow::RunTimeout(nsTimeout *aTimeout)
+nsGlobalWindow::RunTimeout(Timeout* aTimeout)
 {
   if (IsSuspended()) {
     return;
   }
 
   NS_ASSERTION(IsInnerWindow(), "Timeout running on outer window!");
   NS_ASSERTION(!IsFrozen(), "Timeout running on a window in the bfcache!");
 
-  nsTimeout *nextTimeout;
-  nsTimeout *last_expired_timeout, *last_insertion_point;
+  Timeout* nextTimeout;
+  Timeout* last_expired_timeout;
+  Timeout* last_insertion_point;
   uint32_t firingDepth = mTimeoutFiringDepth + 1;
 
   // Make sure that the window and the script context don't go away as
   // a result of running timeouts
   nsCOMPtr<nsIScriptGlobalObject> windowKungFuDeathGrip(this);
 
   // A native timer has gone off. See which of our timeouts need
   // servicing
@@ -12825,17 +12919,17 @@ nsGlobalWindow::RunTimeout(nsTimeout *aT
 
   // The timeout list is kept in deadline order. Discover the latest timeout
   // whose deadline has expired. On some platforms, native timeout events fire
   // "early", but we handled that above by setting deadline to aTimeout->mWhen
   // if the timer fired early.  So we can stop walking if we get to timeouts
   // whose mWhen is greater than deadline, since once that happens we know
   // nothing past that point is expired.
   last_expired_timeout = nullptr;
-  for (nsTimeout *timeout = mTimeouts.getFirst();
+  for (Timeout* timeout = mTimeouts.getFirst();
        timeout && timeout->mWhen <= deadline;
        timeout = timeout->getNext()) {
     if (timeout->mFiringDepth == 0) {
       // Mark any timeouts that are on the list to be fired with the
       // firing depth so that we can reentrantly run timeouts
       timeout->mFiringDepth = firingDepth;
       last_expired_timeout = timeout;
     }
@@ -12855,28 +12949,28 @@ nsGlobalWindow::RunTimeout(nsTimeout *aT
     gLastRecordedRecentTimeouts = now;
   }
 
   // Insert a dummy timeout into the list of timeouts between the
   // portion of the list that we are about to process now and those
   // timeouts that will be processed in a future call to
   // win_run_timeout(). This dummy timeout serves as the head of the
   // list for any timeouts inserted as a result of running a timeout.
-  RefPtr<nsTimeout> dummy_timeout = new nsTimeout();
+  RefPtr<Timeout> dummy_timeout = new Timeout();
   dummy_timeout->mFiringDepth = firingDepth;
   dummy_timeout->mWhen = now;
   last_expired_timeout->setNext(dummy_timeout);
-  RefPtr<nsTimeout> timeoutExtraRef(dummy_timeout);
+  RefPtr<Timeout> timeoutExtraRef(dummy_timeout);
 
   last_insertion_point = mTimeoutInsertionPoint;
   // If we ever start setting mTimeoutInsertionPoint to a non-dummy timeout,
   // the logic in ResetTimersForNonBackgroundWindow will need to change.
   mTimeoutInsertionPoint = dummy_timeout;
 
-  for (nsTimeout *timeout = mTimeouts.getFirst();
+  for (Timeout* timeout = mTimeouts.getFirst();
        timeout != dummy_timeout && !IsFrozen();
        timeout = nextTimeout) {
     nextTimeout = timeout->getNext();
 
     if (timeout->mFiringDepth != firingDepth) {
       // We skip the timeout since it's on the list to run at another
       // depth.
 
@@ -12943,25 +13037,25 @@ nsGlobalWindow::RunTimeout(nsTimeout *aT
   dummy_timeout->remove();
   timeoutExtraRef = nullptr;
   MOZ_ASSERT(dummy_timeout->HasRefCntOne(), "dummy_timeout may leak");
 
   mTimeoutInsertionPoint = last_insertion_point;
 }
 
 void
-nsGlobalWindow::ClearTimeoutOrInterval(int32_t aTimerID)
+nsGlobalWindow::ClearTimeoutOrInterval(int32_t aTimerId, Timeout::Reason aReason)
 {
   MOZ_RELEASE_ASSERT(IsInnerWindow());
 
-  uint32_t public_id = (uint32_t)aTimerID;
-  nsTimeout *timeout;
+  uint32_t timerId = (uint32_t)aTimerId;
+  Timeout* timeout;
 
   for (timeout = mTimeouts.getFirst(); timeout; timeout = timeout->getNext()) {
-    if (timeout->mPublicId == public_id) {
+    if (timeout->mTimeoutId == timerId && timeout->mReason == aReason) {
       if (timeout->mRunning) {
         /* We're running from inside the timeout. Mark this
            timeout for deferred deletion by the code in
            RunTimeout() */
         timeout->mIsInterval = false;
       }
       else {
         /* Delete the timeout from the pending timeout list */
@@ -12992,17 +13086,17 @@ nsresult nsGlobalWindow::ResetTimersForN
 
   // If mTimeoutInsertionPoint is non-null, we're in the middle of firing
   // timers and the timers we're planning to fire all come before
   // mTimeoutInsertionPoint; mTimeoutInsertionPoint itself is a dummy timeout
   // with an mWhen that may be semi-bogus.  In that case, we don't need to do
   // anything with mTimeoutInsertionPoint or anything before it, so should
   // start at the timer after mTimeoutInsertionPoint, if there is one.
   // Otherwise, start at the beginning of the list.
-  for (nsTimeout *timeout = mTimeoutInsertionPoint ?
+  for (Timeout* timeout = mTimeoutInsertionPoint ?
          mTimeoutInsertionPoint->getNext() : mTimeouts.getFirst();
        timeout; ) {
     // It's important that this check be <= so that we guarantee that
     // taking std::max with |now| won't make a quantity equal to
     // timeout->mWhen below.
     if (timeout->mWhen <= now) {
       timeout = timeout->getNext();
       continue;
@@ -13036,17 +13130,17 @@ nsresult nsGlobalWindow::ResetTimersForN
       TimeDuration delay = firingTime - now;
       timeout->mWhen = firingTime;
 
       // Since we reset mWhen we need to move |timeout| to the right
       // place in the list so that it remains sorted by mWhen.
 
       // Get the pointer to the next timeout now, before we move the
       // current timeout in the list.
-      nsTimeout* nextTimeout = timeout->getNext();
+      Timeout* nextTimeout = timeout->getNext();
 
       // It is safe to remove and re-insert because mWhen is now
       // strictly smaller than it used to be, so we know we'll insert
       // |timeout| before nextTimeout.
       NS_ASSERTION(!nextTimeout ||
                    timeout->mWhen < nextTimeout->mWhen, "How did that happen?");
       timeout->remove();
       // InsertTimeoutIntoList will addref |timeout| and reset
@@ -13070,17 +13164,18 @@ nsresult nsGlobalWindow::ResetTimersForN
   }
 
   return NS_OK;
 }
 
 void
 nsGlobalWindow::ClearAllTimeouts()
 {
-  nsTimeout *timeout, *nextTimeout;
+  Timeout* timeout;
+  Timeout* nextTimeout;
 
   for (timeout = mTimeouts.getFirst(); timeout; timeout = nextTimeout) {
     /* If RunTimeout() is higher up on the stack for this
        window, e.g. as a result of document.write from a timeout,
        then we need to reset the list insertion point for
        newly-created timeouts in case the user adds a timeout,
        before we pop the stack back to RunTimeout. */
     if (mRunningTimeout == timeout)
@@ -13105,25 +13200,25 @@ nsGlobalWindow::ClearAllTimeouts()
     timeout->Release();
   }
 
   // Clear out our list
   mTimeouts.clear();
 }
 
 void
-nsGlobalWindow::InsertTimeoutIntoList(nsTimeout *aTimeout)
+nsGlobalWindow::InsertTimeoutIntoList(Timeout* aTimeout)
 {
   NS_ASSERTION(IsInnerWindow(),
                "InsertTimeoutIntoList() called on outer window!");
 
   // Start at mLastTimeout and go backwards.  Don't go further than
   // mTimeoutInsertionPoint, though.  This optimizes for the common case of
   // insertion at the end.
-  nsTimeout* prevSibling;
+  Timeout* prevSibling;
   for (prevSibling = mTimeouts.getLast();
        prevSibling && prevSibling != mTimeoutInsertionPoint &&
          // This condition needs to match the one in SetTimeoutOrInterval that
          // determines whether to set mWhen or mTimeRemaining.
          (IsFrozen() ?
           prevSibling->mTimeRemaining > aTimeout->mTimeRemaining :
           prevSibling->mWhen > aTimeout->mWhen);
        prevSibling = prevSibling->getPrevious()) {
@@ -13143,34 +13238,21 @@ nsGlobalWindow::InsertTimeoutIntoList(ns
   // by the list
   aTimeout->AddRef();
 }
 
 // static
 void
 nsGlobalWindow::TimerCallback(nsITimer *aTimer, void *aClosure)
 {
-  RefPtr<nsTimeout> timeout = (nsTimeout *)aClosure;
+  RefPtr<Timeout> timeout = (Timeout*)aClosure;
 
   timeout->mWindow->RunTimeout(timeout);
 }
 
-// static
-void
-nsGlobalWindow::TimerNameCallback(nsITimer* aTimer, void* aClosure, char* aBuf,
-                                  size_t aLen)
-{
-  RefPtr<nsTimeout> timeout = (nsTimeout*)aClosure;
-
-  const char* filename;
-  uint32_t lineNum, column;
-  timeout->mScriptHandler->GetLocation(&filename, &lineNum, &column);
-  snprintf(aBuf, aLen, "[content] %s:%u:%u", filename, lineNum, column);
-}
-
 //*****************************************************************************
 // nsGlobalWindow: Helper Functions
 //*****************************************************************************
 
 already_AddRefed<nsIDocShellTreeOwner>
 nsGlobalWindow::GetTreeOwner()
 {
   FORWARD_TO_OUTER(GetTreeOwner, (), nullptr);
--- a/dom/base/nsGlobalWindow.h
+++ b/dom/base/nsGlobalWindow.h
@@ -51,16 +51,17 @@
 #include "nsIDocument.h"
 #include "mozilla/dom/EventTarget.h"
 #include "mozilla/dom/WindowBinding.h"
 #include "Units.h"
 #include "nsComponentManagerUtils.h"
 #include "nsSize.h"
 #include "nsCheapSets.h"
 #include "mozilla/dom/ImageBitmapSource.h"
+#include "mozilla/dom/Timeout.h"
 
 #define DEFAULT_HOME_PAGE "www.mozilla.org"
 #define PREF_BROWSER_STARTUP_HOMEPAGE "browser.startup.homepage"
 
 // Amount of time allowed between alert/prompt/confirm before enabling
 // the stop dialog checkbox.
 #define DEFAULT_SUCCESSIVE_DIALOG_TIME_LIMIT 3 // 3 sec
 
@@ -80,16 +81,17 @@ class nsIContent;
 class nsICSSDeclaration;
 class nsIDocShellTreeOwner;
 class nsIDOMOfflineResourceList;
 class nsIScrollableFrame;
 class nsIControllers;
 class nsIJSID;
 class nsIScriptContext;
 class nsIScriptTimeoutHandler;
+class nsITimeoutHandler;
 class nsIWebBrowserChrome;
 class mozIDOMWindowProxy;
 
 class nsDOMWindowList;
 class nsScreen;
 class nsHistory;
 class nsGlobalWindowObserver;
 class nsGlobalWindow;
@@ -107,28 +109,31 @@ struct ChannelPixelLayout;
 class Console;
 class Crypto;
 class CustomElementRegistry;
 class DocGroup;
 class External;
 class Function;
 class Gamepad;
 enum class ImageBitmapFormat : uint32_t;
+class IdleRequest;
+class IdleRequestCallback;
 class Location;
 class MediaQueryList;
 class MozSelfSupport;
 class Navigator;
 class OwningExternalOrWindowProxy;
 class Promise;
 class PostMessageEvent;
 struct RequestInit;
 class RequestOrUSVString;
 class Selection;
 class SpeechSynthesis;
 class TabGroup;
+class Timeout;
 class U2F;
 class VRDisplay;
 class VREventObserver;
 class WakeLock;
 #if defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WIDGET_GONK)
 class WindowOrientationObserver;
 #endif
 namespace cache {
@@ -146,79 +151,16 @@ NS_CreateJSTimeoutHandler(JSContext* aCx
 
 extern already_AddRefed<nsIScriptTimeoutHandler>
 NS_CreateJSTimeoutHandler(JSContext* aCx, nsGlobalWindow *aWindow,
                           const nsAString& aExpression,
                           mozilla::ErrorResult& aError);
 
 extern const js::Class OuterWindowProxyClass;
 
-/*
- * Timeout struct that holds information about each script
- * timeout.  Holds a strong reference to an nsIScriptTimeoutHandler, which
- * abstracts the language specific cruft.
- */
-struct nsTimeout final
-  : mozilla::LinkedListElement<nsTimeout>
-{
-private:
-  ~nsTimeout();
-
-public:
-  nsTimeout();
-
-  NS_DECL_CYCLE_COLLECTION_NATIVE_CLASS(nsTimeout)
-  NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(nsTimeout)
-
-  nsresult InitTimer(uint32_t aDelay);
-
-  bool HasRefCntOne();
-
-  // Window for which this timeout fires
-  RefPtr<nsGlobalWindow> mWindow;
-
-  // The actual timer object
-  nsCOMPtr<nsITimer> mTimer;
-
-  // True if the timeout was cleared
-  bool mCleared;
-
-  // True if this is one of the timeouts that are currently running
-  bool mRunning;
-
-  // True if this is a repeating/interval timer
-  bool mIsInterval;
-
-  // Returned as value of setTimeout()
-  uint32_t mPublicId;
-
-  // Interval in milliseconds
-  uint32_t mInterval;
-
-  // mWhen and mTimeRemaining can't be in a union, sadly, because they
-  // have constructors.
-  // Nominal time to run this timeout.  Use only when timeouts are not
-  // suspended.
-  mozilla::TimeStamp mWhen;
-  // Remaining time to wait.  Used only when timeouts are suspended.
-  mozilla::TimeDuration mTimeRemaining;
-
-  // stack depth at which timeout is firing
-  uint32_t mFiringDepth;
-
-  uint32_t mNestingLevel;
-
-  // The popup state at timeout creation time if not created from
-  // another timeout
-  PopupControlState mPopupState;
-
-  // The language-specific information about the callback.
-  nsCOMPtr<nsIScriptTimeoutHandler> mScriptHandler;
-};
-
 struct IdleObserverHolder
 {
   nsCOMPtr<nsIIdleObserver> mIdleObserver;
   uint32_t mTimeInS;
   bool mPrevNotificationIdle;
 
   IdleObserverHolder()
     : mTimeInS(0), mPrevNotificationIdle(false)
@@ -806,16 +748,17 @@ public:
 
   // Inner windows only.
   // Enable/disable updates for VR
   void EnableVRUpdates();
   void DisableVRUpdates();
 
   // Update the VR displays for this window
   bool UpdateVRDisplays(nsTArray<RefPtr<mozilla::dom::VRDisplay>>& aDisplays);
+
   // Inner windows only.
   // Called to inform that the set of active VR displays has changed.
   void NotifyActiveVRDisplaysChanged();
 
 #define EVENT(name_, id_, type_, struct_)                                     \
   mozilla::dom::EventHandlerNonNull* GetOn##name_()                           \
   {                                                                           \
     mozilla::EventListenerManager* elm = GetExistingListenerManager();        \
@@ -1122,16 +1065,24 @@ public:
                      mozilla::ErrorResult& aError);
   void GetOuterHeight(JSContext* aCx, JS::MutableHandle<JS::Value> aValue,
                       mozilla::ErrorResult& aError);
   void SetOuterHeight(JSContext* aCx, JS::Handle<JS::Value> aValue,
                       mozilla::ErrorResult& aError);
   int32_t RequestAnimationFrame(mozilla::dom::FrameRequestCallback& aCallback,
                                 mozilla::ErrorResult& aError);
   void CancelAnimationFrame(int32_t aHandle, mozilla::ErrorResult& aError);
+
+  uint32_t RequestIdleCallback(JSContext* aCx,
+                               mozilla::dom::IdleRequestCallback& aCallback,
+                               const mozilla::dom::IdleRequestOptions& aOptions,
+                               mozilla::ErrorResult& aError);
+  void CancelIdleCallback(uint32_t aHandle);
+
+
 #ifdef MOZ_WEBSPEECH
   mozilla::dom::SpeechSynthesis*
     GetSpeechSynthesis(mozilla::ErrorResult& aError);
   bool HasActiveSpeechSynthesis();
 #endif
   already_AddRefed<nsICSSDeclaration>
     GetDefaultComputedStyle(mozilla::dom::Element& aElt,
                             const nsAString& aPseudoElt,
@@ -1293,17 +1244,16 @@ public:
   void GetInterface(JSContext* aCx, nsIJSID* aIID,
                     JS::MutableHandle<JS::Value> aRetval,
                     mozilla::ErrorResult& aError);
 
   already_AddRefed<nsWindowRoot> GetWindowRootOuter();
   already_AddRefed<nsWindowRoot> GetWindowRoot(mozilla::ErrorResult& aError);
 
   mozilla::dom::Performance* GetPerformance();
-
 protected:
   // Web IDL helpers
 
   // Redefine the property called aPropName on this window object to be a value
   // property with the value aValue, much like we would do for a [Replaceable]
   // property in IDL.
   void RedefineProperty(JSContext* aCx, const char* aPropName,
                         JS::Handle<JS::Value> aValue,
@@ -1504,48 +1454,49 @@ private:
 
   void FreezeInternal();
   void ThawInternal();
 
 public:
   // Timeout Functions
   // Language agnostic timeout function (all args passed).
   // |interval| is in milliseconds.
-  nsresult SetTimeoutOrInterval(nsIScriptTimeoutHandler *aHandler,
-                                int32_t interval,
-                                bool aIsInterval, int32_t* aReturn);
+  nsresult SetTimeoutOrInterval(nsITimeoutHandler* aHandler,
+                                int32_t interval, bool aIsInterval,
+                                mozilla::dom::Timeout::Reason aReason,
+                                int32_t* aReturn);
   int32_t SetTimeoutOrInterval(JSContext* aCx,
                                mozilla::dom::Function& aFunction,
                                int32_t aTimeout,
                                const mozilla::dom::Sequence<JS::Value>& aArguments,
                                bool aIsInterval, mozilla::ErrorResult& aError);
   int32_t SetTimeoutOrInterval(JSContext* aCx, const nsAString& aHandler,
                                int32_t aTimeout, bool aIsInterval,
                                mozilla::ErrorResult& aError);
-  void ClearTimeoutOrInterval(int32_t aTimerID);
+  void ClearTimeoutOrInterval(int32_t aTimerId,
+                              mozilla::dom::Timeout::Reason aReason);
 
   // JS specific timeout functions (JS args grabbed from context).
   nsresult ResetTimersForNonBackgroundWindow();
 
   // The timeout implementation functions.
-  void RunTimeout(nsTimeout *aTimeout);
+  void RunTimeout(mozilla::dom::Timeout* aTimeout);
   void RunTimeout() { RunTimeout(nullptr); }
   // Return true if |aTimeout| was cleared while its handler ran.
-  bool RunTimeoutHandler(nsTimeout* aTimeout, nsIScriptContext* aScx);
+  bool RunTimeoutHandler(mozilla::dom::Timeout* aTimeout, nsIScriptContext* aScx);
   // Return true if |aTimeout| needs to be reinserted into the timeout list.
-  bool RescheduleTimeout(nsTimeout* aTimeout, const TimeStamp& now,
+  bool RescheduleTimeout(mozilla::dom::Timeout* aTimeout, const TimeStamp& now,
                          bool aRunningPendingTimeouts);
 
   void ClearAllTimeouts();
   // Insert aTimeout into the list, before all timeouts that would
   // fire after it, but no earlier than mTimeoutInsertionPoint, if any.
-  void InsertTimeoutIntoList(nsTimeout *aTimeout);
+  void InsertTimeoutIntoList(mozilla::dom::Timeout* aTimeout);
   static void TimerCallback(nsITimer *aTimer, void *aClosure);
-  static void TimerNameCallback(nsITimer* aTimer, void* aClosure, char* aBuf,
-                                size_t aLen);
+  uint32_t GetTimeoutId(mozilla::dom::Timeout::Reason aReason);
 
   // Helper Functions
   already_AddRefed<nsIDocShellTreeOwner> GetTreeOwner();
   already_AddRefed<nsIBaseWindow> GetTreeOwnerWindow();
   already_AddRefed<nsIWebBrowserChrome> GetWebBrowserChrome();
   nsresult SecurityCheckURL(const char *aURL);
   bool IsPrivateBrowsing();
 
@@ -1845,17 +1796,17 @@ protected:
   RefPtr<nsDOMWindowList>     mFrames;
   // All BarProps are inner window only.
   RefPtr<mozilla::dom::BarProp> mMenubar;
   RefPtr<mozilla::dom::BarProp> mToolbar;
   RefPtr<mozilla::dom::BarProp> mLocationbar;
   RefPtr<mozilla::dom::BarProp> mPersonalbar;
   RefPtr<mozilla::dom::BarProp> mStatusbar;
   RefPtr<mozilla::dom::BarProp> mScrollbars;
-  RefPtr<nsDOMWindowUtils>    mWindowUtils;
+  RefPtr<nsDOMWindowUtils>      mWindowUtils;
   nsString                      mStatus;
   nsString                      mDefaultStatus;
   RefPtr<nsGlobalWindowObserver> mObserver; // Inner windows only.
   RefPtr<mozilla::dom::Crypto>  mCrypto;
   RefPtr<mozilla::dom::U2F> mU2F;
   RefPtr<mozilla::dom::cache::CacheStorage> mCacheStorage;
   RefPtr<mozilla::dom::Console> mConsole;
   // We need to store an nsISupports pointer to this object because the
@@ -1870,23 +1821,23 @@ protected:
   RefPtr<mozilla::dom::DOMStorage> mSessionStorage;
 
   // These member variable are used only on inner windows.
   RefPtr<mozilla::EventListenerManager> mListenerManager;
   // mTimeouts is generally sorted by mWhen, unless mTimeoutInsertionPoint is
   // non-null.  In that case, the dummy timeout pointed to by
   // mTimeoutInsertionPoint may have a later mWhen than some of the timeouts
   // that come after it.
-  mozilla::LinkedList<nsTimeout> mTimeouts;
+  mozilla::LinkedList<mozilla::dom::Timeout> mTimeouts;
   // If mTimeoutInsertionPoint is non-null, insertions should happen after it.
   // This is a dummy timeout at the moment; if that ever changes, the logic in
   // ResetTimersForNonBackgroundWindow needs to change.
-  nsTimeout*                    mTimeoutInsertionPoint;
-  uint32_t                      mTimeoutPublicIdCounter;
-  uint32_t                      mTimeoutFiringDepth;
+  mozilla::dom::Timeout*      mTimeoutInsertionPoint;
+  uint32_t                    mTimeoutIdCounter;
+  uint32_t                    mTimeoutFiringDepth;
   RefPtr<mozilla::dom::Location> mLocation;
   RefPtr<nsHistory>           mHistory;
   RefPtr<mozilla::dom::CustomElementRegistry> mCustomElements;
 
   // These member variables are used on both inner and the outer windows.
   nsCOMPtr<nsIPrincipal> mDocumentPrincipal;
 
   typedef nsTArray<RefPtr<mozilla::dom::StorageEvent>> nsDOMStorageEventArray;
@@ -1895,16 +1846,32 @@ protected:
   uint32_t mSuspendDepth;
   uint32_t mFreezeDepth;
 
   // the method that was used to focus mFocusedNode
   uint32_t mFocusMethod;
 
   uint32_t mSerial;
 
+  void DisableIdleCallbackRequests();
+  void UnthrottleIdleCallbackRequests();
+
+  void PostThrottledIdleCallback();
+
+  typedef mozilla::LinkedList<mozilla::dom::IdleRequest> IdleRequests;
+  static void InsertIdleCallbackIntoList(mozilla::dom::IdleRequest* aRequest,
+                                         IdleRequests& aList);
+
+   // The current idle request callback timeout handle
+  uint32_t mIdleCallbackTimeoutCounter;
+  // The current idle request callback handle
+  uint32_t mIdleRequestCallbackCounter;
+  IdleRequests mIdleRequestCallbacks;
+  IdleRequests mThrottledIdleRequestCallbacks;
+
 #ifdef DEBUG
   bool mSetOpenerWindowCalled;
   nsCOMPtr<nsIURI> mLastOpenedURI;
 #endif
 
 #ifdef MOZ_B2G
   bool mNetworkUploadObserverEnabled;
   bool mNetworkDownloadObserverEnabled;
--- a/dom/base/nsIScriptTimeoutHandler.h
+++ b/dom/base/nsIScriptTimeoutHandler.h
@@ -1,51 +1,52 @@
 /* -*- 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 nsIScriptTimeoutHandler_h___
 #define nsIScriptTimeoutHandler_h___
 
+#include "nsITimeoutHandler.h"
 #include "nsTArray.h"
 #include "js/TypeDecls.h"
+#include "mozilla/Function.h"
+#include "mozilla/Maybe.h"
 
 namespace mozilla {
 namespace dom {
 class Function;
 } // namespace dom
 } // namespace mozilla
 
 #define NS_ISCRIPTTIMEOUTHANDLER_IID \
 { 0x53c8e80e, 0xcc78, 0x48bc, \
  { 0xba, 0x63, 0x0c, 0xb9, 0xdb, 0xf7, 0x06, 0x34 } }
 
 /**
  * Abstraction of the script objects etc required to do timeouts in a
  * language agnostic way.
  */
 
-class nsIScriptTimeoutHandler : public nsISupports
+class nsIScriptTimeoutHandler : public nsITimeoutHandler
 {
 public:
   NS_DECLARE_STATIC_IID_ACCESSOR(NS_ISCRIPTTIMEOUTHANDLER_IID)
 
   // Get the Function to call.  If this returns nullptr, GetHandlerText() will
   // be called to get the string.
-  virtual mozilla::dom::Function *GetCallback() = 0;
+  virtual mozilla::dom::Function* GetCallback() = 0;
 
   // Get the handler text of not a compiled object.
   virtual const nsAString& GetHandlerText() = 0;
 
   // Get the location of the script.
   // Note: The memory pointed to by aFileName is owned by the
   // nsIScriptTimeoutHandler and should not be freed by the caller.
-  virtual void GetLocation(const char **aFileName, uint32_t *aLineNo,
-                           uint32_t *aColumn) = 0;
 
   // If we have a Function, get the arguments for passing to it.
   virtual const nsTArray<JS::Value>& GetArgs() = 0;
 };
 
 NS_DEFINE_STATIC_IID_ACCESSOR(nsIScriptTimeoutHandler,
                               NS_ISCRIPTTIMEOUTHANDLER_IID)
 
new file mode 100644
--- /dev/null
+++ b/dom/base/nsITimeoutHandler.h
@@ -0,0 +1,31 @@
+/* -*- 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 nsITimeoutHandler_h___
+#define nsITimeoutHandler_h___
+
+#include "nsISupports.h"
+
+#define NS_ITIMEOUTHANDLER_IID \
+{ 0xb071a1d3, 0xfd54, 0x40a8,  \
+ { 0x91, 0x9f, 0xc8, 0xf3, 0x3e, 0xb8, 0x3c, 0xfe } }
+
+class nsITimeoutHandler : public nsISupports
+{
+public:
+  NS_DECLARE_STATIC_IID_ACCESSOR(NS_ITIMEOUTHANDLER_IID)
+
+  virtual nsresult Call() = 0;
+
+  virtual void GetLocation(const char** aFileName, uint32_t* aLineNo,
+                           uint32_t* aColumn) = 0;
+
+  virtual void MarkForCC() = 0;
+};
+
+NS_DEFINE_STATIC_IID_ACCESSOR(nsITimeoutHandler,
+                              NS_ITIMEOUTHANDLER_IID)
+
+#endif // nsITimeoutHandler_h___
--- a/dom/base/nsJSTimeoutHandler.cpp
+++ b/dom/base/nsJSTimeoutHandler.cpp
@@ -1,29 +1,32 @@
 /* -*- 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 <algorithm>
+
+#include "mozilla/Attributes.h"
+#include "mozilla/Function.h"
+#include "mozilla/Likely.h"
+#include "mozilla/Maybe.h"
+#include "mozilla/dom/FunctionBinding.h"
+#include "nsAXPCNativeCallContext.h"
 #include "nsCOMPtr.h"
+#include "nsContentUtils.h"
+#include "nsError.h"
+#include "nsGlobalWindow.h"
+#include "nsIContentSecurityPolicy.h"
 #include "nsIDocument.h"
 #include "nsIScriptTimeoutHandler.h"
 #include "nsIXPConnect.h"
 #include "nsJSUtils.h"
-#include "nsContentUtils.h"
-#include "nsError.h"
-#include "nsGlobalWindow.h"
-#include "nsIContentSecurityPolicy.h"
-#include "mozilla/Attributes.h"
-#include "mozilla/Likely.h"
-#include <algorithm>
-#include "mozilla/dom/FunctionBinding.h"
 #include "WorkerPrivate.h"
-#include "nsAXPCNativeCallContext.h"
 
 static const char kSetIntervalStr[] = "setInterval";
 static const char kSetTimeoutStr[] = "setTimeout";
 
 using namespace mozilla;
 using namespace mozilla::dom;
 using namespace mozilla::dom::workers;
 
@@ -32,45 +35,59 @@ class nsJSScriptTimeoutHandler final : p
 {
 public:
   // nsISupports
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
   NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsJSScriptTimeoutHandler)
 
   nsJSScriptTimeoutHandler();
   // This will call SwapElements on aArguments with an empty array.
-  nsJSScriptTimeoutHandler(JSContext* aCx, nsGlobalWindow *aWindow,
+  nsJSScriptTimeoutHandler(JSContext* aCx, nsGlobalWindow* aWindow,
                            Function& aFunction,
                            nsTArray<JS::Heap<JS::Value>>&& aArguments,
                            ErrorResult& aError);
-  nsJSScriptTimeoutHandler(JSContext* aCx, nsGlobalWindow *aWindow,
+  nsJSScriptTimeoutHandler(JSContext* aCx, nsGlobalWindow* aWindow,
                            const nsAString& aExpression, bool* aAllowEval,
                            ErrorResult& aError);
   nsJSScriptTimeoutHandler(JSContext* aCx, WorkerPrivate* aWorkerPrivate,
                            Function& aFunction,
                            nsTArray<JS::Heap<JS::Value>>&& aArguments);
   nsJSScriptTimeoutHandler(JSContext* aCx, WorkerPrivate* aWorkerPrivate,
                            const nsAString& aExpression);
 
   virtual const nsAString& GetHandlerText() override;
+
   virtual Function* GetCallback() override
   {
     return mFunction;
   }
+
+  virtual const nsTArray<JS::Value>& GetArgs() override
+  {
+    return mArgs;
+  }
+
+  virtual nsresult Call() override
+  {
+    return NS_OK;
+  }
+
   virtual void GetLocation(const char** aFileName, uint32_t* aLineNo,
                            uint32_t* aColumn) override
   {
     *aFileName = mFileName.get();
     *aLineNo = mLineNo;
     *aColumn = mColumn;
   }
 
-  virtual const nsTArray<JS::Value>& GetArgs() override
+  virtual void MarkForCC() override
   {
-    return mArgs;
+    if (mFunction) {
+      mFunction->MarkForCC();
+    }
   }
 
   void ReleaseJSObjects();
 
 private:
   ~nsJSScriptTimeoutHandler();
 
   void Init(JSContext* aCx,
@@ -141,16 +158,17 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(nsJSScriptTimeoutHandler)
   for (uint32_t i = 0; i < tmp->mArgs.Length(); ++i) {
     NS_IMPL_CYCLE_COLLECTION_TRACE_JS_MEMBER_CALLBACK(mArgs[i])
   }
 NS_IMPL_CYCLE_COLLECTION_TRACE_END
 
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsJSScriptTimeoutHandler)
   NS_INTERFACE_MAP_ENTRY(nsIScriptTimeoutHandler)
+  NS_INTERFACE_MAP_ENTRY(nsITimeoutHandler)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsJSScriptTimeoutHandler)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsJSScriptTimeoutHandler)
 
 static bool
 CheckCSPForEval(JSContext* aCx, nsGlobalWindow* aWindow, ErrorResult& aError)
--- a/dom/base/nsPIDOMWindow.h
+++ b/dom/base/nsPIDOMWindow.h
@@ -31,28 +31,28 @@ class nsIDocument;
 class nsIIdleObserver;
 class nsIPrincipal;
 class nsIScriptTimeoutHandler;
 class nsIURI;
 class nsPIDOMWindowInner;
 class nsPIDOMWindowOuter;
 class nsPIWindowRoot;
 class nsXBLPrototypeHandler;
-struct nsTimeout;
 
 typedef uint32_t SuspendTypes;
 
 namespace mozilla {
 namespace dom {
 class AudioContext;
 class DocGroup;
 class TabGroup;
 class Element;
 class Performance;
 class ServiceWorkerRegistration;
+class Timeout;
 class CustomElementRegistry;
 } // namespace dom
 } // namespace mozilla
 
 // Popup control state enum. The values in this enum must go from most
 // permissive to least permissive so that it's safe to push state in
 // all situations. Pushing popup state onto the stack never makes the
 // current popup state less permissive (see
@@ -622,17 +622,17 @@ protected:
   typedef nsRefPtrHashtable<nsStringHashKey,
                             mozilla::dom::ServiceWorkerRegistration>
           ServiceWorkerRegistrationTable;
   ServiceWorkerRegistrationTable mServiceWorkerRegistrationTable;
 
   uint32_t               mModalStateDepth;
 
   // These variables are only used on inner windows.
-  nsTimeout             *mRunningTimeout;
+  mozilla::dom::Timeout *mRunningTimeout;
 
   uint32_t               mMutationBits;
 
   bool                   mIsDocumentLoaded;
   bool                   mIsHandlingResizeEvent;
   bool                   mIsInnerWindow;
   bool                   mMayHavePaintEventListener;
   bool                   mMayHaveTouchEventListener;
--- a/dom/bindings/Bindings.conf
+++ b/dom/bindings/Bindings.conf
@@ -1418,16 +1418,19 @@ DOMInterfaces = {
     'concrete': False,
 },
 
 'Window': {
     'nativeType': 'nsGlobalWindow',
     'binaryNames': {
         'postMessage': 'postMessageMoz',
     },
+    'implicitJSContext': [
+        'requestIdleCallback'
+    ],
 },
 
 'WindowProxy': {
     'nativeType': 'nsPIDOMWindowOuter',
     'headerFile': 'nsPIDOMWindow.h',
     'concrete': False
 },
 
--- a/dom/html/HTMLInputElement.cpp
+++ b/dom/html/HTMLInputElement.cpp
@@ -1158,28 +1158,29 @@ static nsresult FireEventForAccessibilit
                                           const nsAString& aEventType);
 #endif
 
 //
 // construction, destruction
 //
 
 HTMLInputElement::HTMLInputElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo,
-                                   FromParser aFromParser)
+                                   FromParser aFromParser, FromClone aFromClone)
   : nsGenericHTMLFormElementWithState(aNodeInfo)
   , mType(kInputDefaultType->value)
   , mAutocompleteAttrState(nsContentUtils::eAutocompleteAttrState_Unknown)
   , mDisabledChanged(false)
   , mValueChanged(false)
   , mLastValueChangeWasInteractive(false)
   , mCheckedChanged(false)
   , mChecked(false)
   , mHandlingSelectEvent(false)
   , mShouldInitChecked(false)
-  , mParserCreating(aFromParser != NOT_FROM_PARSER)
+  , mDoneCreating(aFromParser == NOT_FROM_PARSER &&
+                  aFromClone == FromClone::no)
   , mInInternalActivate(false)
   , mCheckedIsToggled(false)
   , mIndeterminate(false)
   , mInhibitRestoration(aFromParser & FROM_PARSER_FRAGMENT)
   , mCanShowValidUI(true)
   , mCanShowInvalidUI(true)
   , mHasRange(false)
   , mIsDraggingRange(false)
@@ -1304,17 +1305,18 @@ NS_IMPL_NSICONSTRAINTVALIDATION_EXCEPT_S
 // nsIDOMNode
 
 nsresult
 HTMLInputElement::Clone(mozilla::dom::NodeInfo* aNodeInfo, nsINode** aResult) const
 {
   *aResult = nullptr;
 
   already_AddRefed<mozilla::dom::NodeInfo> ni = RefPtr<mozilla::dom::NodeInfo>(aNodeInfo).forget();
-  RefPtr<HTMLInputElement> it = new HTMLInputElement(ni, NOT_FROM_PARSER);
+  RefPtr<HTMLInputElement> it = new HTMLInputElement(ni, NOT_FROM_PARSER,
+                                                     FromClone::yes);
 
   nsresult rv = const_cast<HTMLInputElement*>(this)->CopyInnerTo(it);
   NS_ENSURE_SUCCESS(rv, rv);
 
   switch (GetValueMode()) {
     case VALUE_MODE_VALUE:
       if (mValueChanged) {
         // We don't have our default value anymore.  Set our value on
@@ -1346,36 +1348,38 @@ HTMLInputElement::Clone(mozilla::dom::No
       break;
     case VALUE_MODE_DEFAULT:
       if (mType == NS_FORM_INPUT_IMAGE && it->OwnerDoc()->IsStaticDocument()) {
         CreateStaticImageClone(it);
       }
       break;
   }
 
+  it->DoneCreatingElement();
+
   it->mLastValueChangeWasInteractive = mLastValueChangeWasInteractive;
   it.forget(aResult);
   return NS_OK;
 }
 
 nsresult
 HTMLInputElement::BeforeSetAttr(int32_t aNameSpaceID, nsIAtom* aName,
                                 nsAttrValueOrString* aValue,
                                 bool aNotify)
 {
   if (aNameSpaceID == kNameSpaceID_None) {
     //
     // When name or type changes, radio should be removed from radio group.
     // (type changes are handled in the form itself currently)
-    // If the parser is not done creating the radio, we also should not do it.
+    // If we are not done creating the radio, we also should not do it.
     //
     if ((aName == nsGkAtoms::name ||
          (aName == nsGkAtoms::type && !mForm)) &&
         mType == NS_FORM_INPUT_RADIO &&
-        (mForm || !mParserCreating)) {
+        (mForm || mDoneCreating)) {
       WillRemoveFromRadioGroup();
     } else if (aNotify && aName == nsGkAtoms::src &&
                mType == NS_FORM_INPUT_IMAGE) {
       if (aValue) {
         LoadImage(aValue->String(), true, aNotify, eImageLoadType_Normal);
       } else {
         // Null value means the attr got unset; drop the image
         CancelImageRequests(aNotify);
@@ -1410,22 +1414,22 @@ HTMLInputElement::BeforeSetAttr(int32_t 
 nsresult
 HTMLInputElement::AfterSetAttr(int32_t aNameSpaceID, nsIAtom* aName,
                                const nsAttrValue* aValue, bool aNotify)
 {
   if (aNameSpaceID == kNameSpaceID_None) {
     //
     // When name or type changes, radio should be added to radio group.
     // (type changes are handled in the form itself currently)
-    // If the parser is not done creating the radio, we also should not do it.
+    // If we are not done creating the radio, we also should not do it.
     //
     if ((aName == nsGkAtoms::name ||
          (aName == nsGkAtoms::type && !mForm)) &&
         mType == NS_FORM_INPUT_RADIO &&
-        (mForm || !mParserCreating)) {
+        (mForm || mDoneCreating)) {
       AddedToRadioGroup();
       UpdateValueMissingValidityStateForRadio(false);
     }
 
     // If @value is changed and BF_VALUE_CHANGED is false, @value is the value
     // of the element so, if the value of the element is different than @value,
     // we have to re-set it. This is only the case when GetValueMode() returns
     // VALUE_MODE_VALUE.
@@ -1433,19 +1437,19 @@ HTMLInputElement::AfterSetAttr(int32_t a
         !mValueChanged && GetValueMode() == VALUE_MODE_VALUE) {
       SetDefaultValueAsValue();
     }
 
     //
     // Checked must be set no matter what type of control it is, since
     // mChecked must reflect the new value
     if (aName == nsGkAtoms::checked && !mCheckedChanged) {
-      // Delay setting checked if the parser is creating this element (wait
+      // Delay setting checked if we are creating this element (wait
       // until everything is set)
-      if (mParserCreating) {
+      if (!mDoneCreating) {
         mShouldInitChecked = true;
       } else {
         DoSetChecked(DefaultChecked(), true, true);
         SetCheckedChanged(false);
       }
     }
 
     if (aName == nsGkAtoms::type) {
@@ -1489,17 +1493,17 @@ HTMLInputElement::AfterSetAttr(int32_t a
       // This *has* to be called *after* validity has changed.
       if (aName == nsGkAtoms::readonly || aName == nsGkAtoms::disabled) {
         UpdateBarredFromConstraintValidation();
       }
     } else if (MinOrMaxLengthApplies() && aName == nsGkAtoms::maxlength) {
       UpdateTooLongValidityState();
     } else if (MinOrMaxLengthApplies() && aName == nsGkAtoms::minlength) {
       UpdateTooShortValidityState();
-    } else if (aName == nsGkAtoms::pattern && !mParserCreating) {
+    } else if (aName == nsGkAtoms::pattern && mDoneCreating) {
       UpdatePatternMismatchValidityState();
     } else if (aName == nsGkAtoms::multiple) {
       UpdateTypeMismatchValidityState();
     } else if (aName == nsGkAtoms::max) {
       UpdateHasRange();
       if (mType == NS_FORM_INPUT_RANGE) {
         // The value may need to change when @max changes since the value may
         // have been invalid and can now change to a valid value, or vice
@@ -1515,52 +1519,52 @@ HTMLInputElement::AfterSetAttr(int32_t a
         nsAutoString value;
         GetValue(value);
         nsresult rv =
           SetValueInternal(value, nsTextEditorState::eSetValue_Internal);
         NS_ENSURE_SUCCESS(rv, rv);
       }
       // Validity state must be updated *after* the SetValueInternal call above
       // or else the following assert will not be valid.
-      // We don't assert the state of underflow during parsing since
+      // We don't assert the state of underflow during creation since
       // DoneCreatingElement sanitizes.
       UpdateRangeOverflowValidityState();
-      MOZ_ASSERT(mParserCreating ||
+      MOZ_ASSERT(!mDoneCreating ||
                  mType != NS_FORM_INPUT_RANGE ||
                  !GetValidityState(VALIDITY_STATE_RANGE_UNDERFLOW),
                  "HTML5 spec does not allow underflow for type=range");
     } else if (aName == nsGkAtoms::min) {
       UpdateHasRange();
       if (mType == NS_FORM_INPUT_RANGE) {
         // See @max comment
         nsAutoString value;
         GetValue(value);
         nsresult rv =
           SetValueInternal(value, nsTextEditorState::eSetValue_Internal);
         NS_ENSURE_SUCCESS(rv, rv);
       }
       // See corresponding @max comment
       UpdateRangeUnderflowValidityState();
       UpdateStepMismatchValidityState();
-      MOZ_ASSERT(mParserCreating ||
+      MOZ_ASSERT(!mDoneCreating ||
                  mType != NS_FORM_INPUT_RANGE ||
                  !GetValidityState(VALIDITY_STATE_RANGE_UNDERFLOW),
                  "HTML5 spec does not allow underflow for type=range");
     } else if (aName == nsGkAtoms::step) {
       if (mType == NS_FORM_INPUT_RANGE) {
         // See @max comment
         nsAutoString value;
         GetValue(value);
         nsresult rv =
           SetValueInternal(value, nsTextEditorState::eSetValue_Internal);
         NS_ENSURE_SUCCESS(rv, rv);
       }
       // See corresponding @max comment
       UpdateStepMismatchValidityState();
-      MOZ_ASSERT(mParserCreating ||
+      MOZ_ASSERT(!mDoneCreating ||
                  mType != NS_FORM_INPUT_RANGE ||
                  !GetValidityState(VALIDITY_STATE_RANGE_UNDERFLOW),
                  "HTML5 spec does not allow underflow for type=range");
     } else if (aName == nsGkAtoms::dir &&
                aValue && aValue->Equals(nsGkAtoms::_auto, eIgnoreCase)) {
       SetDirectionIfAuto(true, aNotify);
     } else if (aName == nsGkAtoms::lang) {
       if (mType == NS_FORM_INPUT_NUMBER) {
@@ -3244,32 +3248,32 @@ HTMLInputElement::SetValueInternal(const
   switch (GetValueMode()) {
     case VALUE_MODE_VALUE:
     {
       // At the moment, only single line text control have to sanitize their value
       // Because we have to create a new string for that, we should prevent doing
       // it if it's useless.
       nsAutoString value(aValue);
 
-      if (!mParserCreating) {
+      if (mDoneCreating) {
         SanitizeValue(value);
       }
-      // else DoneCreatingElement calls us again once mParserCreating is false
+      // else DoneCreatingElement calls us again once mDoneCreating is true
 
       bool setValueChanged = !!(aFlags & nsTextEditorState::eSetValue_Notify);
       if (setValueChanged) {
         SetValueChanged(true);
       }
 
       if (IsSingleLineTextControl(false)) {
         if (!mInputData.mState->SetValue(value, aFlags)) {
           return NS_ERROR_OUT_OF_MEMORY;
         }
         if (mType == NS_FORM_INPUT_EMAIL) {
-          UpdateAllValidityStates(mParserCreating);
+          UpdateAllValidityStates(!mDoneCreating);
         }
       } else {
         free(mInputData.mValue);
         mInputData.mValue = ToNewUnicode(value);
         if (setValueChanged) {
           SetValueChanged(true);
         }
         if (mType == NS_FORM_INPUT_NUMBER) {
@@ -3287,21 +3291,21 @@ HTMLInputElement::SetValueInternal(const
           }
         } else if (mType == NS_FORM_INPUT_TIME &&
                    !IsExperimentalMobileType(mType)) {
           nsDateTimeControlFrame* frame = do_QueryFrame(GetPrimaryFrame());
           if (frame) {
             frame->UpdateInputBoxValue();
           }
         }
-        if (!mParserCreating) {
+        if (mDoneCreating) {
           OnValueChanged(/* aNotify = */ true,
                          /* aWasInteractiveUserChange = */ false);
         }
-        // else DoneCreatingElement calls us again once mParserCreating is false
+        // else DoneCreatingElement calls us again once mDoneCreating is true
       }
 
       if (mType == NS_FORM_INPUT_COLOR) {
         // Update color frame, to reflect color changes
         nsColorControlFrame* colorControlFrame = do_QueryFrame(GetPrimaryFrame());
         if (colorControlFrame) {
           colorControlFrame->UpdateColor();
         }
@@ -5159,17 +5163,17 @@ HTMLInputElement::HandleTypeChange(uint8
   UpdateAllValidityStates(false);
 
   UpdateApzAwareFlag();
 }
 
 void
 HTMLInputElement::SanitizeValue(nsAString& aValue)
 {
-  NS_ASSERTION(!mParserCreating, "The element parsing should be finished!");
+  NS_ASSERTION(mDoneCreating, "The element creation should be finished!");
 
   switch (mType) {
     case NS_FORM_INPUT_TEXT:
     case NS_FORM_INPUT_SEARCH:
     case NS_FORM_INPUT_TEL:
     case NS_FORM_INPUT_PASSWORD:
       {
         char16_t crlf[] = { char16_t('\r'), char16_t('\n'), 0 };
@@ -6707,17 +6711,17 @@ HTMLInputElement::SaveState()
   }
 
   return NS_OK;
 }
 
 void
 HTMLInputElement::DoneCreatingElement()
 {
-  mParserCreating = false;
+  mDoneCreating = true;
 
   //
   // Restore state as needed.  Note that disabled state applies to all control
   // types.
   //
   bool restoredCheckedState =
     !mInhibitRestoration && NS_SUCCEEDED(GenerateStateKey()) && RestoreFormControlState();
 
@@ -6943,18 +6947,18 @@ void
 HTMLInputElement::AddedToRadioGroup()
 {
   // If the element is neither in a form nor a document, there is no group so we
   // should just stop here.
   if (!mForm && !IsInUncomposedDoc()) {
     return;
   }
 
-  // Make sure not to notify if we're still being created by the parser
-  bool notify = !mParserCreating;
+  // Make sure not to notify if we're still being created
+  bool notify = mDoneCreating;
 
   //
   // If the input element is checked, and we add it to the group, it will
   // deselect whatever is currently selected in that group
   //
   if (mChecked) {
     //
     // If it is checked, call "RadioSetChecked" to perform the selection/
@@ -7705,17 +7709,17 @@ void
 HTMLInputElement::UpdateTooShortValidityState()
 {
   SetValidityState(VALIDITY_STATE_TOO_SHORT, IsTooShort());
 }
 
 void
 HTMLInputElement::UpdateValueMissingValidityStateForRadio(bool aIgnoreSelf)
 {
-  bool notify = !mParserCreating;
+  bool notify = mDoneCreating;
   nsCOMPtr<nsIDOMHTMLInputElement> selection = GetSelectedRadioButton();
 
   aIgnoreSelf = aIgnoreSelf || !IsMutable();
 
   // If there is no selection, that might mean the radio is not in a group.
   // In that case, we can look for the checked state of the radio.
   bool selected = selection || (!aIgnoreSelf && mChecked);
   bool required = !aIgnoreSelf && HasAttr(kNameSpaceID_None, nsGkAtoms::required);
@@ -8228,17 +8232,17 @@ HTMLInputElement::GetRows()
 NS_IMETHODIMP_(void)
 HTMLInputElement::GetDefaultValueFromContent(nsAString& aValue)
 {
   nsTextEditorState *state = GetEditorState();
   if (state) {
     GetDefaultValue(aValue);
     // This is called by the frame to show the value.
     // We have to sanitize it when needed.
-    if (!mParserCreating) {
+    if (mDoneCreating) {
       SanitizeValue(aValue);
     }
   }
 }
 
 NS_IMETHODIMP_(bool)
 HTMLInputElement::ValueChanged() const
 {
--- a/dom/html/HTMLInputElement.h
+++ b/dom/html/HTMLInputElement.h
@@ -116,18 +116,21 @@ class HTMLInputElement final : public ns
 public:
   using nsIConstraintValidation::GetValidationMessage;
   using nsIConstraintValidation::CheckValidity;
   using nsIConstraintValidation::ReportValidity;
   using nsIConstraintValidation::WillValidate;
   using nsIConstraintValidation::Validity;
   using nsGenericHTMLFormElementWithState::GetForm;
 
+  enum class FromClone { no, yes };
+
   HTMLInputElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo,
-                   mozilla::dom::FromParser aFromParser);
+                   mozilla::dom::FromParser aFromParser,
+                   FromClone aFromClone = FromClone::no);
 
   NS_IMPL_FROMCONTENT_HTML_WITH_TAG(HTMLInputElement, input)
 
   // nsISupports
   NS_DECL_ISUPPORTS_INHERITED
 
   virtual int32_t TabIndexDefault() override;
   using nsGenericHTMLElement::Focus;
@@ -1553,17 +1556,17 @@ protected:
   nsContentUtils::AutocompleteAttrState mAutocompleteAttrState;
   bool                     mDisabledChanged     : 1;
   bool                     mValueChanged        : 1;
   bool                     mLastValueChangeWasInteractive : 1;
   bool                     mCheckedChanged      : 1;
   bool                     mChecked             : 1;
   bool                     mHandlingSelectEvent : 1;
   bool                     mShouldInitChecked   : 1;
-  bool                     mParserCreating      : 1;
+  bool                     mDoneCreating        : 1;
   bool                     mInInternalActivate  : 1;
   bool                     mCheckedIsToggled    : 1;
   bool                     mIndeterminate       : 1;
   bool                     mInhibitRestoration  : 1;
   bool                     mCanShowValidUI      : 1;
   bool                     mCanShowInvalidUI    : 1;
   bool                     mHasRange            : 1;
   bool                     mIsDraggingRange     : 1;
--- a/dom/html/nsGenericHTMLElement.cpp
+++ b/dom/html/nsGenericHTMLElement.cpp
@@ -1259,21 +1259,21 @@ nsGenericHTMLElement::MapCommonAttribute
   if (aData->mSIDs & NS_STYLE_INHERIT_BIT(UserInterface)) {
     nsCSSValue* userModify = aData->ValueForUserModify();
     if (userModify->GetUnit() == eCSSUnit_Null) {
       const nsAttrValue* value =
         aAttributes->GetAttr(nsGkAtoms::contenteditable);
       if (value) {
         if (value->Equals(nsGkAtoms::_empty, eCaseMatters) ||
             value->Equals(nsGkAtoms::_true, eIgnoreCase)) {
-          userModify->SetIntValue(NS_STYLE_USER_MODIFY_READ_WRITE,
+          userModify->SetIntValue(StyleUserModify::ReadWrite,
                                   eCSSUnit_Enumerated);
         }
         else if (value->Equals(nsGkAtoms::_false, eIgnoreCase)) {
-            userModify->SetIntValue(NS_STYLE_USER_MODIFY_READ_ONLY,
+            userModify->SetIntValue(StyleUserModify::ReadOnly,
                                     eCSSUnit_Enumerated);
         }
       }
     }
   }
 
   MapLangAttributeInto(aAttributes, aData);
 }
--- a/dom/html/test/mochitest.ini
+++ b/dom/html/test/mochitest.ini
@@ -625,8 +625,9 @@ skip-if = (os == 'android' || os == 'mac
 [test_bug1261674-2.html]
 skip-if = (os == 'android' || os == 'mac')
 [test_bug1260704.html]
 [test_allowMedia.html]
 [test_bug1292522_same_domain_with_different_port_number.html]
 [test_bug1295719_event_sequence_for_arrow_keys.html]
 skip-if = os == "android" || appname == "b2g" # up/down arrow keys not supported on android/b2g
 [test_bug1295719_event_sequence_for_number_keys.html]
+[test_bug1310865.html]
new file mode 100644
--- /dev/null
+++ b/dom/html/test/test_bug1310865.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<title>Test for Bug 1310865</title>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<script src="/tests/SimpleTest/EventUtils.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<input value="a
+b" type="hidden">
+<input type="hidden" value="a
+b">
+<script>
+var input1 = document.querySelector("input");
+var input2 = document.querySelector("input + input");
+var clone1 = input1.cloneNode(false);
+var clone2 = input2.cloneNode(false);
+// Newlines must not be stripped
+is(clone1.value, "a\nb");
+is(clone2.value, "a\nb");
+</script>
--- a/dom/ipc/ContentChild.cpp
+++ b/dom/ipc/ContentChild.cpp
@@ -78,16 +78,17 @@
 #endif
 
 #include "mozilla/Unused.h"
 
 #include "mozInlineSpellChecker.h"
 #include "nsDocShell.h"
 #include "nsIConsoleListener.h"
 #include "nsICycleCollectorListener.h"
+#include "nsIIdlePeriod.h"
 #include "nsIDragService.h"
 #include "nsIIPCBackgroundChildCreateCallback.h"
 #include "nsIInterfaceRequestorUtils.h"
 #include "nsIMemoryReporter.h"
 #include "nsIMemoryInfoDumper.h"
 #include "nsIMutable.h"
 #include "nsIObserverService.h"
 #include "nsIScriptSecurityManager.h"
--- a/dom/tests/mochitest/general/test_interfaces.html
+++ b/dom/tests/mochitest/general/test_interfaces.html
@@ -560,16 +560,18 @@ var interfaceNamesInGlobalScope =
     "HTMLTrackElement",
 // IMPORTANT: Do not change this list without review from a DOM peer!
     "HTMLUListElement",
 // IMPORTANT: Do not change this list without review from a DOM peer!
     "HTMLUnknownElement",
 // IMPORTANT: Do not change this list without review from a DOM peer!
     "HTMLVideoElement",
 // IMPORTANT: Do not change this list without review from a DOM peer!
+    "IdleDeadline",
+// IMPORTANT: Do not change this list without review from a DOM peer!
     "IDBCursor",
 // IMPORTANT: Do not change this list without review from a DOM peer!
     "IDBCursorWithValue",
 // IMPORTANT: Do not change this list without review from a DOM peer!
     "IDBDatabase",
 // IMPORTANT: Do not change this list without review from a DOM peer!
     "IDBFactory",
 // IMPORTANT: Do not change this list without review from a DOM peer!
new file mode 100644
--- /dev/null
+++ b/dom/webidl/IdleDeadline.webidl
@@ -0,0 +1,14 @@
+/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * The origin of this IDL file is:
+ * https://w3c.github.io/requestidlecallback/
+ */
+
+[Pref="dom.requestIdleCallback.enabled"]
+interface IdleDeadline {
+  DOMHighResTimeStamp timeRemaining();
+  readonly attribute boolean didTimeout;
+};
--- a/dom/webidl/Window.webidl
+++ b/dom/webidl/Window.webidl
@@ -9,16 +9,17 @@
  * https://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html
  * http://dev.w3.org/csswg/cssom/
  * http://dev.w3.org/csswg/cssom-view/
  * https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/RequestAnimationFrame/Overview.html
  * https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/NavigationTiming/Overview.html
  * https://dvcs.w3.org/hg/webcrypto-api/raw-file/tip/spec/Overview.html
  * http://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html
  * https://w3c.github.io/webappsec-secure-contexts/#monkey-patching-global-object
+ * https://w3c.github.io/requestidlecallback/
  */
 
 interface ApplicationCache;
 interface IID;
 interface nsIBrowserDOMWindow;
 interface nsIMessageBroadcaster;
 interface nsIDOMCrypto;
 typedef any Transferable;
@@ -485,8 +486,22 @@ partial interface Window {
   [Pref="dom.vr.enabled"]
   attribute EventHandler onvrdisplaydisconnect;
   [Pref="dom.vr.enabled"]
   attribute EventHandler onvrdisplaypresentchange;
 };
 
 Window implements ChromeWindow;
 Window implements WindowOrWorkerGlobalScope;
+
+partial interface Window {
+  [Throws, Pref="dom.requestIdleCallback.enabled"]
+  unsigned long requestIdleCallback(IdleRequestCallback callback,
+                                    optional IdleRequestOptions options);
+  [Pref="dom.requestIdleCallback.enabled"]
+  void          cancelIdleCallback(unsigned long handle);
+};
+
+dictionary IdleRequestOptions {
+  unsigned long timeout;
+};
+
+callback IdleRequestCallback = void (IdleDeadline deadline);
--- a/dom/webidl/moz.build
+++ b/dom/webidl/moz.build
@@ -264,16 +264,17 @@ WEBIDL_FILES = [
     'IDBIndex.webidl',
     'IDBKeyRange.webidl',
     'IDBMutableFile.webidl',
     'IDBObjectStore.webidl',
     'IDBOpenDBRequest.webidl',
     'IDBRequest.webidl',
     'IDBTransaction.webidl',
     'IDBVersionChangeEvent.webidl',
+    'IdleDeadline.webidl',
     'IIRFilterNode.webidl',
     'ImageBitmap.webidl',
     'ImageBitmapRenderingContext.webidl',
     'ImageCapture.webidl',
     'ImageData.webidl',
     'ImageDocument.webidl',
     'InputEvent.webidl',
     'InputMethod.webidl',
--- a/gfx/cairo/cairo/src/cairo-dwrite-font.cpp
+++ b/gfx/cairo/cairo/src/cairo-dwrite-font.cpp
@@ -1359,17 +1359,17 @@ cairo_int_status_t
      */
     RECT fontArea;
     fontArea.left = (INT32)(smallestX - scaled_font->font_matrix.xx);
     fontArea.right = (INT32)(largestX + scaled_font->font_matrix.xx * 2);
     fontArea.top = (INT32)(smallestY - scaled_font->font_matrix.yy);
     fontArea.bottom = (INT32)(largestY + scaled_font->font_matrix.yy * 2);
     if (fontArea.left < 0)
 	fontArea.left = 0;
-    if (fontArea.top > 0)
+    if (fontArea.top < 0)
 	fontArea.top = 0;
     if (fontArea.bottom > dst->extents.height) {
 	fontArea.bottom = dst->extents.height;
     }
     if (fontArea.right > dst->extents.width) {
 	fontArea.right = dst->extents.width;
     }
     if (fontArea.right <= fontArea.left ||
--- a/layout/base/nsCaret.cpp
+++ b/layout/base/nsCaret.cpp
@@ -509,17 +509,17 @@ nsCaret::GetPaintGeometry(nsRect* aRect)
       mOverrideContent, mOverrideOffset, &frameOffset);
   if (!frame) {
     return nullptr;
   }
 
   // now we have a frame, check whether it's appropriate to show the caret here
   const nsStyleUserInterface* userinterface = frame->StyleUserInterface();
   if ((!mIgnoreUserModify &&
-       userinterface->mUserModify == NS_STYLE_USER_MODIFY_READ_ONLY) ||
+       userinterface->mUserModify == StyleUserModify::ReadOnly) ||
       userinterface->mUserInput == StyleUserInput::None ||
       userinterface->mUserInput == StyleUserInput::Disabled) {
     return nullptr;
   }
 
   // If the offset falls outside of the frame, then don't paint the caret.
   int32_t startOffset, endOffset;
   if (frame->GetType() == nsGkAtoms::textFrame &&
--- a/layout/base/nsDisplayList.cpp
+++ b/layout/base/nsDisplayList.cpp
@@ -1302,17 +1302,17 @@ nsDisplayListBuilder::RecomputeCurrentAn
 void
 nsDisplayListBuilder::AdjustWindowDraggingRegion(nsIFrame* aFrame)
 {
   if (!mWindowDraggingAllowed || !IsForPainting()) {
     return;
   }
 
   const nsStyleUIReset* styleUI = aFrame->StyleUIReset();
-  if (styleUI->mWindowDragging == NS_STYLE_WINDOW_DRAGGING_DEFAULT) {
+  if (styleUI->mWindowDragging == StyleWindowDragging::Default) {
     // This frame has the default value and doesn't influence the window
     // dragging region.
     return;
   }
 
   LayoutDeviceToLayoutDeviceMatrix4x4 referenceFrameToRootReferenceFrame;
 
   // The const_cast is for nsLayoutUtils::GetTransformToAncestor.
@@ -1357,17 +1357,17 @@ nsDisplayListBuilder::AdjustWindowDraggi
   if (!borderBox.IsEmpty()) {
     LayoutDeviceRect devPixelBorderBox =
       LayoutDevicePixel::FromAppUnits(borderBox, aFrame->PresContext()->AppUnitsPerDevPixel());
     LayoutDeviceRect transformedDevPixelBorderBox =
       TransformBy(referenceFrameToRootReferenceFrame, devPixelBorderBox);
     transformedDevPixelBorderBox.Round();
     LayoutDeviceIntRect transformedDevPixelBorderBoxInt;
     if (transformedDevPixelBorderBox.ToIntRect(&transformedDevPixelBorderBoxInt)) {
-      if (styleUI->mWindowDragging == NS_STYLE_WINDOW_DRAGGING_DRAG) {
+      if (styleUI->mWindowDragging == StyleWindowDragging::Drag) {
         mWindowDraggingRegion.OrWith(transformedDevPixelBorderBoxInt);
       } else {
         mWindowNoDraggingRegion.OrWith(transformedDevPixelBorderBoxInt);
       }
     }
   }
 }
 
--- a/layout/base/nsLayoutUtils.cpp
+++ b/layout/base/nsLayoutUtils.cpp
@@ -146,16 +146,23 @@ using namespace mozilla::gfx;
 #define GRID_ENABLED_PREF_NAME "layout.css.grid.enabled"
 #define GRID_TEMPLATE_SUBGRID_ENABLED_PREF_NAME "layout.css.grid-template-subgrid-value.enabled"
 #define WEBKIT_PREFIXES_ENABLED_PREF_NAME "layout.css.prefixes.webkit"
 #define DISPLAY_CONTENTS_ENABLED_PREF_NAME "layout.css.display-contents.enabled"
 #define TEXT_ALIGN_UNSAFE_ENABLED_PREF_NAME "layout.css.text-align-unsafe-value.enabled"
 #define FLOAT_LOGICAL_VALUES_ENABLED_PREF_NAME "layout.css.float-logical-values.enabled"
 #define BG_CLIP_TEXT_ENABLED_PREF_NAME "layout.css.background-clip-text.enabled"
 
+// The time in number of frames that we estimate for a refresh driver
+// to be quiescent
+#define DEFAULT_QUIESCENT_FRAMES 2
+// The time (milliseconds) we estimate is needed between the end of an
+// idle time and the next Tick.
+#define DEFAULT_IDLE_PERIOD_TIME_LIMIT 3.0f
+
 #ifdef DEBUG
 // TODO: remove, see bug 598468.
 bool nsLayoutUtils::gPreventAssertInCompareTreePosition = false;
 #endif // DEBUG
 
 typedef FrameMetrics::ViewID ViewID;
 typedef nsStyleTransformMatrix::TransformReferenceBox TransformReferenceBox;
 
@@ -169,16 +176,18 @@ typedef nsStyleTransformMatrix::Transfor
 /* static */ bool nsLayoutUtils::sInvalidationDebuggingIsEnabled;
 /* static */ bool nsLayoutUtils::sCSSVariablesEnabled;
 /* static */ bool nsLayoutUtils::sInterruptibleReflowEnabled;
 /* static */ bool nsLayoutUtils::sSVGTransformBoxEnabled;
 /* static */ bool nsLayoutUtils::sTextCombineUprightDigitsEnabled;
 #ifdef MOZ_STYLO
 /* static */ bool nsLayoutUtils::sStyloEnabled;
 #endif
+/* static */ uint32_t nsLayoutUtils::sIdlePeriodDeadlineLimit;
+/* static */ uint32_t nsLayoutUtils::sQuiescentFramesBeforeIdlePeriod;
 
 static ViewID sScrollIdCounter = FrameMetrics::START_SCROLL_ID;
 
 typedef nsDataHashtable<nsUint64HashKey, nsIContent*> ContentMap;
 static ContentMap* sContentMap = nullptr;
 static ContentMap& GetContentMap() {
   if (!sContentMap) {
     sContentMap = new ContentMap();
@@ -7866,16 +7875,22 @@ nsLayoutUtils::Initialize()
   Preferences::AddBoolVarCache(&sSVGTransformBoxEnabled,
                                "svg.transform-box.enabled");
   Preferences::AddBoolVarCache(&sTextCombineUprightDigitsEnabled,
                                "layout.css.text-combine-upright-digits.enabled");
 #ifdef MOZ_STYLO
   Preferences::AddBoolVarCache(&sStyloEnabled,
                                "layout.css.servo.enabled");
 #endif
+  Preferences::AddUintVarCache(&sIdlePeriodDeadlineLimit,
+                               "layout.idle_period.time_limit",
+                               DEFAULT_IDLE_PERIOD_TIME_LIMIT);
+  Preferences::AddUintVarCache(&sQuiescentFramesBeforeIdlePeriod,
+                               "layout.idle_period.required_quiescent_frames",
+                               DEFAULT_QUIESCENT_FRAMES);
 
   for (auto& callback : kPrefCallbacks) {
     Preferences::RegisterCallbackAndCall(callback.func, callback.name);
   }
   nsComputedDOMStyle::RegisterPrefChangeCallbacks();
 }
 
 /* static */
--- a/layout/base/nsLayoutUtils.h
+++ b/layout/base/nsLayoutUtils.h
@@ -2424,16 +2424,24 @@ public:
   static bool StyloEnabled() {
 #ifdef MOZ_STYLO
     return sStyloEnabled;
 #else
     return false;
 #endif
   }
 
+  static uint32_t IdlePeriodDeadlineLimit() {
+    return sIdlePeriodDeadlineLimit;
+  }
+
+  static uint32_t QuiescentFramesBeforeIdlePeriod() {
+    return sQuiescentFramesBeforeIdlePeriod;
+  }
+
   /**
    * See comment above "font.size.inflation.mappingIntercept" in
    * modules/libpref/src/init/all.js .
    */
   static int32_t FontSizeInflationMappingIntercept() {
     return sFontSizeInflationMappingIntercept;
   }
 
@@ -2880,16 +2888,18 @@ private:
   static bool sInvalidationDebuggingIsEnabled;
   static bool sCSSVariablesEnabled;
   static bool sInterruptibleReflowEnabled;
   static bool sSVGTransformBoxEnabled;
   static bool sTextCombineUprightDigitsEnabled;
 #ifdef MOZ_STYLO
   static bool sStyloEnabled;
 #endif
+  static uint32_t sIdlePeriodDeadlineLimit;
+  static uint32_t sQuiescentFramesBeforeIdlePeriod;
 
   /**
    * Helper function for LogTestDataForPaint().
    */
   static void DoLogTestDataForPaint(mozilla::layers::LayerManager* aManager,
                                     ViewID aScrollId,
                                     const std::string& aKey,
                                     const std::string& aValue);
--- a/layout/base/nsRefreshDriver.cpp
+++ b/layout/base/nsRefreshDriver.cpp
@@ -134,16 +134,17 @@ namespace mozilla {
  * start/stop whatever timer mechanism is in use, and ScheduleNextTick
  * is called at the start of the Tick() implementation to set a time
  * for the next tick.
  */
 class RefreshDriverTimer {
 public:
   RefreshDriverTimer()
     : mLastFireEpoch(0)
+    , mLastFireSkipped(false)
   {
   }
 
   virtual ~RefreshDriverTimer()
   {
     MOZ_ASSERT(mContentRefreshDrivers.Length() == 0, "Should have removed all content refresh drivers from here by now!");
     MOZ_ASSERT(mRootRefreshDrivers.Length() == 0, "Should have removed all root refresh drivers from here by now!");
   }
@@ -217,16 +218,45 @@ public:
       driver->mActiveTimer = aNewTimer;
     }
     mRootRefreshDrivers.Clear();
 
     aNewTimer->mLastFireEpoch = mLastFireEpoch;
     aNewTimer->mLastFireTime = mLastFireTime;
   }
 
+  virtual TimeDuration GetTimerRate() = 0;
+
+  bool LastTickSkippedAnyPaints() const
+  {
+    return mLastFireSkipped;
+  }
+
+  Maybe<TimeStamp> GetIdleDeadlineHint()
+  {
+    MOZ_ASSERT(NS_IsMainThread());
+
+    if (LastTickSkippedAnyPaints()) {
+      return Some(TimeStamp());
+    }
+
+    TimeStamp mostRecentRefresh = MostRecentRefresh();
+    TimeDuration refreshRate = GetTimerRate();
+    TimeStamp idleEnd = mostRecentRefresh + refreshRate;
+
+    if (idleEnd +
+          refreshRate * nsLayoutUtils::QuiescentFramesBeforeIdlePeriod() <
+        TimeStamp::Now()) {
+      return Nothing();
+    }
+
+    return Some(idleEnd - TimeDuration::FromMilliseconds(
+                            nsLayoutUtils::IdlePeriodDeadlineLimit()));
+  }
+
 protected:
   virtual void StartTimer() = 0;
   virtual void StopTimer() = 0;
   virtual void ScheduleNextTick(TimeStamp aNowTime) = 0;
 
   bool IsRootRefreshDriver(nsRefreshDriver* aDriver)
   {
     nsPresContext* pc = aDriver->GetPresContext();
@@ -258,28 +288,31 @@ protected:
     nsTArray<RefPtr<nsRefreshDriver> > drivers(aDrivers);
     for (nsRefreshDriver* driver : drivers) {
       // don't poke this driver if it's in test mode
       if (driver->IsTestControllingRefreshesEnabled()) {
         continue;
       }
 
       TickDriver(driver, aJsNow, aNow);
+
+      mLastFireSkipped = mLastFireSkipped || driver->mSkippedPaints;
     }
   }
 
   /*
    * Tick the refresh drivers based on the given timestamp.
    */
   void Tick(int64_t jsnow, TimeStamp now)
   {
     ScheduleNextTick(now);
 
     mLastFireEpoch = jsnow;
     mLastFireTime = now;
+    mLastFireSkipped = false;
 
     LOG("[%p] ticking drivers...", this);
     // RD is short for RefreshDriver
     profiler_tracing("Paint", "RD", TRACING_INTERVAL_START);
 
     TickRefreshDrivers(jsnow, now, mContentRefreshDrivers);
     TickRefreshDrivers(jsnow, now, mRootRefreshDrivers);
 
@@ -289,16 +322,17 @@ protected:
 
   static void TickDriver(nsRefreshDriver* driver, int64_t jsnow, TimeStamp now)
   {
     LOG(">> TickDriver: %p (jsnow: %lld)", driver, jsnow);
     driver->Tick(jsnow, now);
   }
 
   int64_t mLastFireEpoch;
+  bool mLastFireSkipped;
   TimeStamp mLastFireTime;
   TimeStamp mTargetTime;
 
   nsTArray<RefPtr<nsRefreshDriver> > mContentRefreshDrivers;
   nsTArray<RefPtr<nsRefreshDriver> > mRootRefreshDrivers;
 
   // useful callback for nsITimer-based derived classes, here
   // bacause of c++ protected shenanigans
@@ -341,31 +375,36 @@ public:
     mRateDuration = TimeDuration::FromMilliseconds(mRateMilliseconds);
   }
 
   double GetRate() const
   {
     return mRateMilliseconds;
   }
 
+  virtual TimeDuration GetTimerRate() override
+  {
+    return mRateDuration;
+  }
+
 protected:
 
-  virtual void StartTimer()
+  virtual void StartTimer() override
   {
     // pretend we just fired, and we schedule the next tick normally
     mLastFireEpoch = JS_Now();
     mLastFireTime = TimeStamp::Now();
 
     mTargetTime = mLastFireTime + mRateDuration;
 
     uint32_t delay = static_cast<uint32_t>(mRateMilliseconds);
     mTimer->InitWithFuncCallback(TimerTick, this, delay, nsITimer::TYPE_ONE_SHOT);
   }
 
-  virtual void StopTimer()
+  virtual void StopTimer() override
   {
     mTimer->Cancel();
   }
 
   double mRateMilliseconds;
   TimeDuration mRateDuration;
   RefPtr<nsITimer> mTimer;
 };
@@ -382,26 +421,44 @@ public:
     : mVsyncChild(nullptr)
   {
     MOZ_ASSERT(XRE_IsParentProcess());
     MOZ_ASSERT(NS_IsMainThread());
     mVsyncObserver = new RefreshDriverVsyncObserver(this);
     RefPtr<mozilla::gfx::VsyncSource> vsyncSource = gfxPlatform::GetPlatform()->GetHardwareVsync();
     MOZ_ALWAYS_TRUE(mVsyncDispatcher = vsyncSource->GetRefreshTimerVsyncDispatcher());
     mVsyncDispatcher->SetParentRefreshTimer(mVsyncObserver);
+    mVsyncRate = vsyncSource->GetGlobalDisplay().GetVsyncRate();
   }
 
   explicit VsyncRefreshDriverTimer(VsyncChild* aVsyncChild)
     : mVsyncChild(aVsyncChild)
   {
     MOZ_ASSERT(!XRE_IsParentProcess());
     MOZ_ASSERT(NS_IsMainThread());
     MOZ_ASSERT(mVsyncChild);
     mVsyncObserver = new RefreshDriverVsyncObserver(this);
     mVsyncChild->SetVsyncObserver(mVsyncObserver);
+    mVsyncRate = mVsyncChild->GetVsyncRate();
+  }
+
+  virtual TimeDuration GetTimerRate() override
+  {
+    if (mVsyncRate != TimeDuration::Forever()) {
+      return mVsyncRate;
+    }
+
+    if (mVsyncChild) {
+      mVsyncRate = mVsyncChild->GetVsyncRate();
+    }
+
+    // If hardware queries fail / are unsupported, we have to just guess.
+    return mVsyncRate != TimeDuration::Forever()
+             ? mVsyncRate
+             : TimeDuration::FromMilliseconds(1000.0 / 60.0);
   }
 
 private:
   // Since VsyncObservers are refCounted, but the RefreshDriverTimer are
   // explicitly shutdown. We create an inner class that has the VsyncObserver
   // and is shutdown when the RefreshDriverTimer is deleted. The alternative is
   // to (a) make all RefreshDriverTimer RefCounted or (b) use different
   // VsyncObserver types.
@@ -454,17 +511,16 @@ private:
     }
 
     void OnTimerStart()
     {
       if (!XRE_IsParentProcess()) {
         mLastChildTick = TimeStamp::Now();
       }
     }
-
   private:
     virtual ~RefreshDriverVsyncObserver() {}
 
     void RecordTelemetryProbes(TimeStamp aVsyncTimestamp)
     {
       MOZ_ASSERT(NS_IsMainThread());
     #ifndef ANDROID  /* bug 1142079 */
       if (XRE_IsParentProcess()) {
@@ -609,16 +665,17 @@ private:
 
   RefPtr<RefreshDriverVsyncObserver> mVsyncObserver;
   // Used for parent process.
   RefPtr<RefreshTimerVsyncDispatcher> mVsyncDispatcher;
   // Used for child process.
   // The mVsyncChild will be always available before VsncChild::ActorDestroy().
   // After ActorDestroy(), StartTimer() and StopTimer() calls will be non-op.
   RefPtr<VsyncChild> mVsyncChild;
+  TimeDuration mVsyncRate;
 }; // VsyncRefreshDriverTimer
 
 /**
  * Since the content process takes some time to setup
  * the vsync IPC connection, this timer is used
  * during the intial startup process.
  * During initial startup, the refresh drivers
  * are ticked off this timer, and are swapped out once content
@@ -673,17 +730,17 @@ public:
   InactiveRefreshDriverTimer(double aRate, double aDisableAfterMilliseconds)
     : SimpleTimerBasedRefreshDriverTimer(aRate),
       mNextTickDuration(aRate),
       mDisableAfterMilliseconds(aDisableAfterMilliseconds),
       mNextDriverIndex(0)
   {
   }
 
-  virtual void AddRefreshDriver(nsRefreshDriver* aDriver)
+  virtual void AddRefreshDriver(nsRefreshDriver* aDriver) override
   {
     RefreshDriverTimer::AddRefreshDriver(aDriver);
 
     LOG("[%p] inactive timer got new refresh driver %p, resetting rate",
         this, aDriver);
 
     // reset the timer, and start with the newly added one next time.
     mNextTickDuration = mRateMilliseconds;
@@ -691,39 +748,44 @@ public:
     // we don't really have to start with the newly added one, but we may as well
     // not tick the old ones at the fastest rate any more than we need to.
     mNextDriverIndex = GetRefreshDriverCount() - 1;
 
     StopTimer();
     StartTimer();
   }
 
+  virtual TimeDuration GetTimerRate() override
+  {
+    return TimeDuration::FromMilliseconds(mNextTickDuration);
+  }
+
 protected:
   uint32_t GetRefreshDriverCount()
   {
     return mContentRefreshDrivers.Length() + mRootRefreshDrivers.Length();
   }
 
-  virtual void StartTimer()
+  virtual void StartTimer() override
   {
     mLastFireEpoch = JS_Now();
     mLastFireTime = TimeStamp::Now();
 
     mTargetTime = mLastFireTime + mRateDuration;
 
     uint32_t delay = static_cast<uint32_t>(mRateMilliseconds);
     mTimer->InitWithFuncCallback(TimerTickOne, this, delay, nsITimer::TYPE_ONE_SHOT);
   }
 
-  virtual void StopTimer()
+  virtual void StopTimer() override
   {
     mTimer->Cancel();
   }
 
-  virtual void ScheduleNextTick(TimeStamp aNowTime)
+  virtual void ScheduleNextTick(TimeStamp aNowTime) override
   {
     if (mDisableAfterMilliseconds > 0.0 &&
         mNextTickDuration > mDisableAfterMilliseconds)
     {
       // We hit the time after which we should disable
       // inactive window refreshes; don't schedule anything
       // until we get kicked by an AddRefreshDriver call.
       return;
@@ -748,24 +810,27 @@ protected:
   {
     int64_t jsnow = JS_Now();
     TimeStamp now = TimeStamp::Now();
 
     ScheduleNextTick(now);
 
     mLastFireEpoch = jsnow;
     mLastFireTime = now;
+    mLastFireSkipped = false;
 
     nsTArray<RefPtr<nsRefreshDriver> > drivers(mContentRefreshDrivers);
     drivers.AppendElements(mRootRefreshDrivers);
+    size_t index = mNextDriverIndex;
 
-    if (mNextDriverIndex < drivers.Length() &&
-        !drivers[mNextDriverIndex]->IsTestControllingRefreshesEnabled())
+    if (index < drivers.Length() &&
+        !drivers[index]->IsTestControllingRefreshesEnabled())
     {
-      TickDriver(drivers[mNextDriverIndex], jsnow, now);
+      TickDriver(drivers[index], jsnow, now);
+      mLastFireSkipped = mLastFireSkipped || drivers[index]->SkippedPaints();
     }
 
     mNextDriverIndex++;
   }
 
   static void TimerTickOne(nsITimer* aTimer, void* aClosure)
   {
     InactiveRefreshDriverTimer *timer = static_cast<InactiveRefreshDriverTimer*>(aClosure);
@@ -2254,16 +2319,34 @@ nsRefreshDriver::CancelPendingEvents(nsI
 {
   for (auto i : Reversed(MakeRange(mPendingEvents.Length()))) {
     if (mPendingEvents[i].mTarget->OwnerDoc() == aDocument) {
       mPendingEvents.RemoveElementAt(i);
     }
   }
 }
 
+/* static */ Maybe<TimeStamp>
+nsRefreshDriver::GetIdleDeadlineHint()
+{
+  MOZ_ASSERT(NS_IsMainThread());
+
+  if (!sRegularRateTimer) {
+    return Nothing();
+  }
+
+  // For computing idleness of refresh drivers we only care about
+  // sRegularRateTimer, since we consider refresh drivers attached to
+  // sThrottledRateTimer to be inactive. This implies that tasks
+  // resulting from a tick on the sRegularRateTimer counts as being
+  // busy but tasks resulting from a tick on sThrottledRateTimer
+  // counts as being idle.
+  return sRegularRateTimer->GetIdleDeadlineHint();
+}
+
 void
 nsRefreshDriver::Disconnect()
 {
   MOZ_ASSERT(NS_IsMainThread());
 
   StopTimer();
 
   if (mPresContext) {
--- a/layout/base/nsRefreshDriver.h
+++ b/layout/base/nsRefreshDriver.h
@@ -324,33 +324,73 @@ public:
 
   bool IsWaitingForPaint(mozilla::TimeStamp aTime);
 
   // nsARefreshObserver
   NS_IMETHOD_(MozExternalRefCountType) AddRef(void) override { return TransactionIdAllocator::AddRef(); }
   NS_IMETHOD_(MozExternalRefCountType) Release(void) override { return TransactionIdAllocator::Release(); }
   virtual void WillRefresh(mozilla::TimeStamp aTime) override;
 
+  /**
+   * Compute the time when the currently active refresh driver timer
+   * will start its next tick.
+   *
+   * Returns 'Nothing' if the refresh driver timer hasn't been
+   * initialized or if we can't tell when the next tick will happen.
+   *
+   * Returns Some(TimeStamp()), i.e. the null time, if the next tick is late.
+   *
+   * Otherwise returns Some(TimeStamp(t)), where t is the time of the next tick.
+   *
+   * Using these three types of return values it is possible to
+   * estimate three different things about the idleness of the
+   * currently active group of refresh drivers. This information is
+   * used by nsThread to schedule lower priority "idle tasks".
+   *
+   * The 'Nothing' return value indicates to nsThread that the
+   * currently active refresh drivers will be idle for a time
+   * significantly longer than the current refresh rate and that it is
+   * free to schedule longer periods for executing idle tasks. This is the
+   * expected result when we aren't animating.
+
+   * Returning the null time indicates to nsThread that we are very
+   * busy and that it should definitely not schedule idle tasks at
+   * all. This is the expected result when we are animating, but
+   * aren't able to keep up with the animation and hence need to skip
+   * paints. Since catching up to missed paints will happen as soon as
+   * possible, this is the expected result if any of the refresh
+   * drivers attached to the current refresh driver misses a paint.
+   *
+   * Returning Some(TimeStamp(t)) indicates to nsThread that we will
+   * be idle until. This is usually the case when we're animating
+   * without skipping paints.
+   */
+  static mozilla::Maybe<mozilla::TimeStamp> GetIdleDeadlineHint();
+
+  bool SkippedPaints() const
+  {
+    return mSkippedPaints;
+  }
+
 private:
   typedef nsTObserverArray<nsARefreshObserver*> ObserverArray;
   typedef nsTHashtable<nsISupportsHashKey> RequestTable;
   struct ImageStartData {
     ImageStartData()
     {
     }
 
     mozilla::Maybe<mozilla::TimeStamp> mStartTime;
     RequestTable mEntries;
   };
   typedef nsClassHashtable<nsUint32HashKey, ImageStartData> ImageStartTable;
 
   void DispatchPendingEvents();
   void DispatchAnimationEvents();
   void RunFrameRequestCallbacks(mozilla::TimeStamp aNowTime);
-
   void Tick(int64_t aNowEpoch, mozilla::TimeStamp aNowTime);
 
   enum EnsureTimerStartedFlags {
     eNone = 0,
     eForceAdjustTimer = 1 << 0,
     eAllowTimeToGoBackwards = 1 << 1,
     eNeverAdjustTimer = 1 << 2,
   };
--- a/layout/generic/nsContainerFrame.cpp
+++ b/layout/generic/nsContainerFrame.cpp
@@ -1778,25 +1778,25 @@ nsContainerFrame::PullNextInFlowChild(Co
     nsContainerFrame::ReparentFrameView(frame, nextInFlow, this);
   }
   return frame;
 }
 
 bool
 nsContainerFrame::ResolvedOrientationIsVertical()
 {
-  uint8_t orient = StyleDisplay()->mOrient;
+  StyleOrient orient = StyleDisplay()->mOrient;
   switch (orient) {
-    case NS_STYLE_ORIENT_HORIZONTAL:
+    case StyleOrient::Horizontal:
       return false;
-    case NS_STYLE_ORIENT_VERTICAL:
+    case StyleOrient::Vertical:
       return true;
-    case NS_STYLE_ORIENT_INLINE:
+    case StyleOrient::Inline:
       return GetWritingMode().IsVertical();
-    case NS_STYLE_ORIENT_BLOCK:
+    case StyleOrient::Block:
       return !GetWritingMode().IsVertical();
   }
   NS_NOTREACHED("unexpected -moz-orient value");
   return false;
 }
 
 // static
 bool
--- a/layout/style/nsCSSProps.cpp
+++ b/layout/style/nsCSSProps.cpp
@@ -1781,20 +1781,20 @@ const KTableEntry nsCSSProps::kObjectFit
   { eCSSKeyword_contain,    NS_STYLE_OBJECT_FIT_CONTAIN },
   { eCSSKeyword_cover,      NS_STYLE_OBJECT_FIT_COVER },
   { eCSSKeyword_none,       NS_STYLE_OBJECT_FIT_NONE },
   { eCSSKeyword_scale_down, NS_STYLE_OBJECT_FIT_SCALE_DOWN },
   { eCSSKeyword_UNKNOWN,    -1 }
 };
 
 const KTableEntry nsCSSProps::kOrientKTable[] = {
-  { eCSSKeyword_inline,     NS_STYLE_ORIENT_INLINE },
-  { eCSSKeyword_block,      NS_STYLE_ORIENT_BLOCK },
-  { eCSSKeyword_horizontal, NS_STYLE_ORIENT_HORIZONTAL },
-  { eCSSKeyword_vertical,   NS_STYLE_ORIENT_VERTICAL },
+  { eCSSKeyword_inline,     StyleOrient::Inline },
+  { eCSSKeyword_block,      StyleOrient::Block },
+  { eCSSKeyword_horizontal, StyleOrient::Horizontal },
+  { eCSSKeyword_vertical,   StyleOrient::Vertical },
   { eCSSKeyword_UNKNOWN,    -1 }
 };
 
 // Same as kBorderStyleKTable except 'hidden'.
 const KTableEntry nsCSSProps::kOutlineStyleKTable[] = {
   { eCSSKeyword_none,   NS_STYLE_BORDER_STYLE_NONE },
   { eCSSKeyword_auto,   NS_STYLE_BORDER_STYLE_AUTO },
   { eCSSKeyword_dotted, NS_STYLE_BORDER_STYLE_DOTTED },
@@ -2124,19 +2124,19 @@ const KTableEntry nsCSSProps::kUserInput
   { eCSSKeyword_none,     StyleUserInput::None },
   { eCSSKeyword_enabled,  StyleUserInput::Enabled },
   { eCSSKeyword_disabled, StyleUserInput::Disabled },
   { eCSSKeyword_auto,     StyleUserInput::Auto },
   { eCSSKeyword_UNKNOWN,  -1 }
 };
 
 const KTableEntry nsCSSProps::kUserModifyKTable[] = {
-  { eCSSKeyword_read_only,  NS_STYLE_USER_MODIFY_READ_ONLY },
-  { eCSSKeyword_read_write, NS_STYLE_USER_MODIFY_READ_WRITE },
-  { eCSSKeyword_write_only, NS_STYLE_USER_MODIFY_WRITE_ONLY },
+  { eCSSKeyword_read_only,  StyleUserModify::ReadOnly },
+  { eCSSKeyword_read_write, StyleUserModify::ReadWrite },
+  { eCSSKeyword_write_only, StyleUserModify::WriteOnly },
   { eCSSKeyword_UNKNOWN,    -1 }
 };
 
 const KTableEntry nsCSSProps::kUserSelectKTable[] = {
   { eCSSKeyword_none,       StyleUserSelect::None },
   { eCSSKeyword_auto,       StyleUserSelect::Auto },
   { eCSSKeyword_text,       StyleUserSelect::Text },
   { eCSSKeyword_element,    StyleUserSelect::Element },
@@ -2184,19 +2184,19 @@ const KTableEntry nsCSSProps::kWidthKTab
   { eCSSKeyword__moz_max_content, NS_STYLE_WIDTH_MAX_CONTENT },
   { eCSSKeyword__moz_min_content, NS_STYLE_WIDTH_MIN_CONTENT },
   { eCSSKeyword__moz_fit_content, NS_STYLE_WIDTH_FIT_CONTENT },
   { eCSSKeyword__moz_available, NS_STYLE_WIDTH_AVAILABLE },
   { eCSSKeyword_UNKNOWN, -1 }
 };
 
 const KTableEntry nsCSSProps::kWindowDraggingKTable[] = {
-  { eCSSKeyword_default, NS_STYLE_WINDOW_DRAGGING_DEFAULT },
-  { eCSSKeyword_drag, NS_STYLE_WINDOW_DRAGGING_DRAG },
-  { eCSSKeyword_no_drag, NS_STYLE_WINDOW_DRAGGING_NO_DRAG },
+  { eCSSKeyword_default, StyleWindowDragging::Default },
+  { eCSSKeyword_drag, StyleWindowDragging::Drag },
+  { eCSSKeyword_no_drag, StyleWindowDragging::NoDrag },
   { eCSSKeyword_UNKNOWN, -1 }
 };
 
 const KTableEntry nsCSSProps::kWindowShadowKTable[] = {
   { eCSSKeyword_none, NS_STYLE_WINDOW_SHADOW_NONE },
   { eCSSKeyword_default, NS_STYLE_WINDOW_SHADOW_DEFAULT },
   { eCSSKeyword_menu, NS_STYLE_WINDOW_SHADOW_MENU },
   { eCSSKeyword_tooltip, NS_STYLE_WINDOW_SHADOW_TOOLTIP },
--- a/layout/style/nsRuleNode.cpp
+++ b/layout/style/nsRuleNode.cpp
@@ -1413,16 +1413,19 @@ struct SetEnumValueHelper
   DEFINE_ENUM_CLASS_SETTER(StyleBoxSizing, Content, Border)
   DEFINE_ENUM_CLASS_SETTER(StyleClear, None, Both)
   DEFINE_ENUM_CLASS_SETTER(StyleFillRule, Nonzero, Evenodd)
   DEFINE_ENUM_CLASS_SETTER(StyleFloat, None, InlineEnd)
   DEFINE_ENUM_CLASS_SETTER(StyleFloatEdge, ContentBox, MarginBox)
   DEFINE_ENUM_CLASS_SETTER(StyleUserFocus, None, SelectMenu)
   DEFINE_ENUM_CLASS_SETTER(StyleUserSelect, None, MozText)
   DEFINE_ENUM_CLASS_SETTER(StyleUserInput, None, Auto)
+  DEFINE_ENUM_CLASS_SETTER(StyleUserModify, ReadOnly, WriteOnly)
+  DEFINE_ENUM_CLASS_SETTER(StyleWindowDragging, Default, NoDrag)
+  DEFINE_ENUM_CLASS_SETTER(StyleOrient, Inline, Vertical)
 #ifdef MOZ_XUL
   DEFINE_ENUM_CLASS_SETTER(StyleDisplay, None, Popup)
 #else
   DEFINE_ENUM_CLASS_SETTER(StyleDisplay, None, InlineBox)
 #endif
 
 #undef DEF_SET_ENUMERATED_VALUE
 };
@@ -5115,17 +5118,17 @@ nsRuleNode::ComputeUserInterfaceData(voi
            parentUI->mUserInput,
            StyleUserInput::Auto);
 
   // user-modify: enum, inherit, initial
   SetValue(*aRuleData->ValueForUserModify(),
            ui->mUserModify, conditions,
            SETVAL_ENUMERATED | SETVAL_UNSET_INHERIT,
            parentUI->mUserModify,
-           NS_STYLE_USER_MODIFY_READ_ONLY);
+           StyleUserModify::ReadOnly);
 
   // user-focus: enum, inherit, initial
   SetValue(*aRuleData->ValueForUserFocus(),
            ui->mUserFocus, conditions,
            SETVAL_ENUMERATED | SETVAL_UNSET_INHERIT,
            parentUI->mUserFocus,
            StyleUserFocus::None);
 
@@ -5170,17 +5173,17 @@ nsRuleNode::ComputeUIResetData(void* aSt
            SETVAL_INTEGER | SETVAL_UNSET_INITIAL,
            parentUI->mForceBrokenImageIcon, 0);
 
   // -moz-window-dragging: enum, inherit, initial
   SetValue(*aRuleData->ValueForWindowDragging(),
            ui->mWindowDragging, conditions,
            SETVAL_ENUMERATED | SETVAL_UNSET_INITIAL,
            parentUI->mWindowDragging,
-           NS_STYLE_WINDOW_DRAGGING_DEFAULT);
+           StyleWindowDragging::Default);
 
   // -moz-window-shadow: enum, inherit, initial
   SetValue(*aRuleData->ValueForWindowShadow(),
            ui->mWindowShadow, conditions,
            SETVAL_ENUMERATED | SETVAL_UNSET_INITIAL,
            parentUI->mWindowShadow,
            NS_STYLE_WINDOW_SHADOW_DEFAULT);
 
@@ -6447,17 +6450,17 @@ nsRuleNode::ComputeDisplayData(void* aSt
            parentDisplay->mTransformBox,
            NS_STYLE_TRANSFORM_BOX_BORDER_BOX);
 
   // orient: enum, inherit, initial
   SetValue(*aRuleData->ValueForOrient(),
            display->mOrient, conditions,
            SETVAL_ENUMERATED | SETVAL_UNSET_INITIAL,
            parentDisplay->mOrient,
-           NS_STYLE_ORIENT_INLINE);
+           StyleOrient::Inline);
 
   // shape-outside: none | [ <basic-shape> || <shape-box> ] | <image>
   const nsCSSValue* shapeOutsideValue = aRuleData->ValueForShapeOutside();
   switch (shapeOutsideValue->GetUnit()) {
     case eCSSUnit_Null:
       break;
     case eCSSUnit_None:
     case eCSSUnit_Initial:
--- a/layout/style/nsStyleConsts.h
+++ b/layout/style/nsStyleConsts.h
@@ -215,30 +215,36 @@ enum class StyleUserSelect : uint8_t {
 enum class StyleUserInput : uint8_t {
   None,
   Enabled,
   Disabled,
   Auto,
 };
 
 // user-modify
-#define NS_STYLE_USER_MODIFY_READ_ONLY   0
-#define NS_STYLE_USER_MODIFY_READ_WRITE  1
-#define NS_STYLE_USER_MODIFY_WRITE_ONLY  2
+enum class StyleUserModify : uint8_t {
+  ReadOnly,
+  ReadWrite,
+  WriteOnly,
+};
 
 // -moz-window-dragging
-#define NS_STYLE_WINDOW_DRAGGING_DEFAULT 0
-#define NS_STYLE_WINDOW_DRAGGING_DRAG    1
-#define NS_STYLE_WINDOW_DRAGGING_NO_DRAG 2
+enum class StyleWindowDragging : uint8_t {
+  Default,
+  Drag,
+  NoDrag,
+};
 
 // orient
-#define NS_STYLE_ORIENT_INLINE     0
-#define NS_STYLE_ORIENT_BLOCK      1
-#define NS_STYLE_ORIENT_HORIZONTAL 2
-#define NS_STYLE_ORIENT_VERTICAL   3
+enum class StyleOrient : uint8_t {
+  Inline,
+  Block,
+  Horizontal,
+  Vertical,
+};
 
 #define NS_RADIUS_FARTHEST_SIDE 0
 #define NS_RADIUS_CLOSEST_SIDE  1
 
 // stack-sizing
 #define NS_STYLE_STACK_SIZING_IGNORE         0
 #define NS_STYLE_STACK_SIZING_STRETCH_TO_FIT 1
 
--- a/layout/style/nsStyleStruct.cpp
+++ b/layout/style/nsStyleStruct.cpp
@@ -3128,17 +3128,17 @@ nsStyleDisplay::nsStyleDisplay(StyleStru
   , mBreakType(StyleClear::None)
   , mBreakInside(NS_STYLE_PAGE_BREAK_AUTO)
   , mBreakBefore(false)
   , mBreakAfter(false)
   , mOverflowX(NS_STYLE_OVERFLOW_VISIBLE)
   , mOverflowY(NS_STYLE_OVERFLOW_VISIBLE)
   , mOverflowClipBox(NS_STYLE_OVERFLOW_CLIP_BOX_PADDING_BOX)
   , mResize(NS_STYLE_RESIZE_NONE)
-  , mOrient(NS_STYLE_ORIENT_INLINE)
+  , mOrient(StyleOrient::Inline)
   , mIsolation(NS_STYLE_ISOLATION_AUTO)
   , mTopLayer(NS_STYLE_TOP_LAYER_NONE)
   , mWillChangeBitField(0)
   , mTouchAction(NS_STYLE_TOUCH_ACTION_AUTO)
   , mScrollBehavior(NS_STYLE_SCROLL_BEHAVIOR_AUTO)
   , mScrollSnapTypeX(NS_STYLE_SCROLL_SNAP_TYPE_NONE)
   , mScrollSnapTypeY(NS_STYLE_SCROLL_SNAP_TYPE_NONE)
   , mScrollSnapPointsX(eStyleUnit_None)
@@ -4005,17 +4005,17 @@ nsCursorImage::operator==(const nsCursor
   return mHaveHotspot == aOther.mHaveHotspot &&
          mHotspotX == aOther.mHotspotX &&
          mHotspotY == aOther.mHotspotY &&
          EqualImages(mImage, aOther.mImage);
 }
 
 nsStyleUserInterface::nsStyleUserInterface(StyleStructContext aContext)
   : mUserInput(StyleUserInput::Auto)
-  , mUserModify(NS_STYLE_USER_MODIFY_READ_ONLY)
+  , mUserModify(StyleUserModify::ReadOnly)
   , mUserFocus(StyleUserFocus::None)
   , mPointerEvents(NS_STYLE_POINTER_EVENTS_AUTO)
   , mCursor(NS_STYLE_CURSOR_AUTO)
 {
   MOZ_COUNT_CTOR(nsStyleUserInterface);
 }
 
 nsStyleUserInterface::nsStyleUserInterface(const nsStyleUserInterface& aSource)
@@ -4079,17 +4079,17 @@ nsStyleUserInterface::CalcDifference(con
 //-----------------------
 // nsStyleUIReset
 //
 
 nsStyleUIReset::nsStyleUIReset(StyleStructContext aContext)
   : mUserSelect(StyleUserSelect::Auto)
   , mForceBrokenImageIcon(0)
   , mIMEMode(NS_STYLE_IME_MODE_AUTO)
-  , mWindowDragging(NS_STYLE_WINDOW_DRAGGING_DEFAULT)
+  , mWindowDragging(StyleWindowDragging::Default)
   , mWindowShadow(NS_STYLE_WINDOW_SHADOW_DEFAULT)
 {
   MOZ_COUNT_CTOR(nsStyleUIReset);
 }
 
 nsStyleUIReset::nsStyleUIReset(const nsStyleUIReset& aSource)
   : mUserSelect(aSource.mUserSelect)
   , mForceBrokenImageIcon(aSource.mForceBrokenImageIcon)
--- a/layout/style/nsStyleStruct.h
+++ b/layout/style/nsStyleStruct.h
@@ -2815,17 +2815,17 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsSt
   mozilla::StyleClear mBreakType;  // [reset]
   uint8_t mBreakInside;         // [reset] NS_STYLE_PAGE_BREAK_AUTO/AVOID
   bool mBreakBefore;    // [reset]
   bool mBreakAfter;     // [reset]
   uint8_t mOverflowX;           // [reset] see nsStyleConsts.h
   uint8_t mOverflowY;           // [reset] see nsStyleConsts.h
   uint8_t mOverflowClipBox;     // [reset] see nsStyleConsts.h
   uint8_t mResize;              // [reset] see nsStyleConsts.h
-  uint8_t mOrient;              // [reset] see nsStyleConsts.h
+  mozilla::StyleOrient mOrient; // [reset] see nsStyleConsts.h
   uint8_t mIsolation;           // [reset] see nsStyleConsts.h
   uint8_t mTopLayer;            // [reset] see nsStyleConsts.h
   uint8_t mWillChangeBitField;  // [reset] see nsStyleConsts.h. Stores a
                                 // bitfield representation of the properties
                                 // that are frequently queried. This should
                                 // match mWillChange. Also tracks if any of the
                                 // properties in the will-change list require
                                 // a stacking context.
@@ -3317,21 +3317,21 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsSt
   static nsChangeHint DifferenceAlwaysHandledForDescendants() {
     // CalcDifference never returns the reflow hints that are sometimes
     // handled for descendants as hints not handled for descendants.
     return nsChangeHint_NeedReflow |
            nsChangeHint_ReflowChangesSizeOrPosition |
            nsChangeHint_ClearAncestorIntrinsics;
   }
 
-  mozilla::StyleUserSelect mUserSelect;   // [reset] (selection-style)
-  uint8_t   mForceBrokenImageIcon; // [reset]  (0 if not forcing, otherwise forcing)
-  uint8_t   mIMEMode;         // [reset]
-  uint8_t   mWindowDragging;  // [reset]
-  uint8_t   mWindowShadow;    // [reset]
+  mozilla::StyleUserSelect     mUserSelect;     // [reset](selection-style)
+  uint8_t mForceBrokenImageIcon; // [reset] (0 if not forcing, otherwise forcing)
+  uint8_t                      mIMEMode;        // [reset]
+  mozilla::StyleWindowDragging mWindowDragging; // [reset]
+  uint8_t                      mWindowShadow;   // [reset]
 };
 
 struct nsCursorImage
 {
   bool mHaveHotspot;
   float mHotspotX, mHotspotY;
 
   nsCursorImage();
@@ -3393,17 +3393,17 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsSt
   }
   static nsChangeHint DifferenceAlwaysHandledForDescendants() {
     // CalcDifference never returns the reflow hints that are sometimes
     // handled for descendants as hints not handled for descendants.
     return nsChangeHint_NeedReflow;
   }
 
   mozilla::StyleUserInput   mUserInput;       // [inherited]
-  uint8_t                   mUserModify;      // [inherited] (modify-content)
+  mozilla::StyleUserModify  mUserModify;      // [inherited] (modify-content)
   mozilla::StyleUserFocus   mUserFocus;       // [inherited] (auto-select)
   uint8_t                   mPointerEvents;   // [inherited] see nsStyleConsts.h
 
   uint8_t mCursor;                            // [inherited] See nsStyleConsts.h
   nsTArray<nsCursorImage> mCursorImages;      // [inherited] images and coords
 
   inline uint8_t GetEffectivePointerEvents(nsIFrame* aFrame) const;
 };
--- a/modules/libpref/init/all.js
+++ b/modules/libpref/init/all.js
@@ -183,16 +183,23 @@ pref("dom.permissions.revoke.enable", fa
 
 // Enable Performance Observer API
 #ifdef NIGHTLY_BUILD
 pref("dom.enable_performance_observer", true);
 #else
 pref("dom.enable_performance_observer", false);
 #endif
 
+// Enable requestIdleCallback API
+#ifdef NIGHTLY_BUILD
+pref("dom.requestIdleCallback.enabled", true);
+#else
+pref("dom.requestIdleCallback.enabled", false);
+#endif
+
 // Whether the Gamepad API is enabled
 pref("dom.gamepad.enabled", true);
 pref("dom.gamepad.test.enabled", false);
 #ifdef RELEASE_OR_BETA
 pref("dom.gamepad.non_standard_events.enabled", false);
 #else
 pref("dom.gamepad.non_standard_events.enabled", true);
 #endif
@@ -2687,16 +2694,24 @@ pref("layout.display-list.dump-content",
 pref("layout.frame_rate.precise", false);
 
 // pref to control whether layout warnings that are hit quite often are enabled
 pref("layout.spammy_warnings.enabled", false);
 
 // Should we fragment floats inside CSS column layout?
 pref("layout.float-fragments-inside-column.enabled", true);
 
+// The number of frames times the frame rate is the time required to
+// pass without painting used to guess that we'll not paint again soon
+pref("layout.idle_period.required_quiescent_frames", 2);
+
+// The amount of time (milliseconds) needed between an idle period's
+// end and the start of the next tick to avoid jank.
+pref("layout.idle_period.time_limit", 3);
+
 // Is support for the Web Animations API enabled?
 // Before enabling this by default, make sure also CSSPseudoElement interface
 // has been spec'ed properly, or we should add a separate pref for
 // CSSPseudoElement interface. See Bug 1174575 for further details.
 #ifdef RELEASE_OR_BETA
 pref("dom.animations-api.core.enabled", false);
 #else
 pref("dom.animations-api.core.enabled", true);
@@ -2736,16 +2751,22 @@ pref("dom.max_chrome_script_run_time", 2
 pref("dom.max_script_run_time", 10);
 
 // Stop all scripts in a compartment when the "stop script" dialog is used.
 pref("dom.global_stop_script", true);
 
 // If true, ArchiveReader will be enabled
 pref("dom.archivereader.enabled", false);
 
+// Time (milliseconds) between throttled idle callbacks.
+pref("dom.idle_period.throttled_length", 10000);
+
+// The amount of idle time (milliseconds) reserved for a long idle period
+pref("idle_queue.long_period", 50);
+
 // Hang monitor timeout after which we kill the browser, in seconds
 // (0 is disabled)
 // Disabled on all platforms per bug 705748 until the found issues are
 // resolved.
 pref("hangmonitor.timeout", 0);
 
 pref("plugins.load_appdir_plugins", false);
 // If true, plugins will be click to play
--- a/security/manager/locales/en-US/chrome/pippki/pippki.properties
+++ b/security/manager/locales/en-US/chrome/pippki/pippki.properties
@@ -4,16 +4,18 @@
 
 CertPassPrompt=Please enter the Personal Security Password for the PSM Private Keys security device.
 
 # LOCALIZATION NOTE(certWithSerial): Used for semi-uniquely representing a cert.
 # %1$S is the serial number of the cert in AA:BB:CC hex format.
 certWithSerial=Certificate with serial number: %1$S
 
 # Download Cert dialog
+# LOCALIZATION NOTE(newCAMessage1):
+# %S is a string representative of the certificate being downloaded/imported.
 newCAMessage1=Do you want to trust ā€œ%Sā€ for the following purposes?
 unnamedCA=Certificate Authority (unnamed)
 
 # For editing cert trust
 editTrustCA=The certificate ā€œ%Sā€ represents a Certificate Authority.
 
 # For Deleting Certificates
 deleteSslCertConfirm3=Are you sure you want to delete these server exceptions?
--- a/security/manager/pki/nsNSSDialogs.cpp
+++ b/security/manager/pki/nsNSSDialogs.cpp
@@ -86,71 +86,87 @@ nsNSSDialogs::SetPassword(nsIInterfaceRe
   rv = block->GetInt(1, &status);
   if (NS_FAILED(rv)) return rv;
 
   *_canceled = (status == 0)?true:false;
 
   return rv;
 }
 
-NS_IMETHODIMP 
-nsNSSDialogs::ConfirmDownloadCACert(nsIInterfaceRequestor *ctx, 
-                                    nsIX509Cert *cert,
-                                    uint32_t *_trust,
-                                    bool *_retval)
+NS_IMETHODIMP
+nsNSSDialogs::ConfirmDownloadCACert(nsIInterfaceRequestor* ctx,
+                                    nsIX509Cert* cert,
+                            /*out*/ uint32_t* trust,
+                            /*out*/ bool* importConfirmed)
 {
-  nsresult rv;
+  // |ctx| is allowed to be null.
+  NS_ENSURE_ARG(cert);
+  NS_ENSURE_ARG(trust);
+  NS_ENSURE_ARG(importConfirmed);
 
-  nsCOMPtr<nsIMutableArray> dlgArray = nsArrayBase::Create();
-  if (!dlgArray) {
+  nsCOMPtr<nsIMutableArray> argArray = nsArrayBase::Create();
+  if (!argArray) {
     return NS_ERROR_FAILURE;
   }
-  rv = dlgArray->AppendElement(cert, false);
+
+  nsresult rv = argArray->AppendElement(cert, false);
   if (NS_FAILED(rv)) {
     return rv;
   }
-  nsCOMPtr<nsIDialogParamBlock> dlgParamBlock(
-    do_CreateInstance(NS_DIALOGPARAMBLOCK_CONTRACTID));
-  if (!dlgParamBlock) {
-    return NS_ERROR_FAILURE;
-  }
-  rv = dlgParamBlock->SetObjects(dlgArray);
+
+  nsCOMPtr<nsIWritablePropertyBag2> retVals = new nsHashPropertyBag();
+  rv = argArray->AppendElement(retVals, false);
   if (NS_FAILED(rv)) {
     return rv;
   }
 
   // Get the parent window for the dialog
   nsCOMPtr<mozIDOMWindowProxy> parent = do_GetInterface(ctx);
-  rv = nsNSSDialogHelper::openDialog(parent, 
+  rv = nsNSSDialogHelper::openDialog(parent,
                                      "chrome://pippki/content/downloadcert.xul",
-                                     dlgParamBlock);
+                                     argArray);
+  if (NS_FAILED(rv)) {
+    return rv;
+  }
+
+  rv = retVals->GetPropertyAsBool(NS_LITERAL_STRING("importConfirmed"),
+                                  importConfirmed);
   if (NS_FAILED(rv)) {
     return rv;
   }
 
-  int32_t status;
-  int32_t ssl, email, objsign;
+  *trust = nsIX509CertDB::UNTRUSTED;
+  if (!*importConfirmed) {
+    return NS_OK;
+  }
 
-  rv = dlgParamBlock->GetInt(1, &status);
-  if (NS_FAILED(rv)) return rv;
-  rv = dlgParamBlock->GetInt(2, &ssl);
-  if (NS_FAILED(rv)) return rv;
-  rv = dlgParamBlock->GetInt(3, &email);
-  if (NS_FAILED(rv)) return rv;
-  rv = dlgParamBlock->GetInt(4, &objsign);
-  if (NS_FAILED(rv)) return rv;
- 
-  *_trust = nsIX509CertDB::UNTRUSTED;
-  *_trust |= (ssl) ? nsIX509CertDB::TRUSTED_SSL : 0;
-  *_trust |= (email) ? nsIX509CertDB::TRUSTED_EMAIL : 0;
-  *_trust |= (objsign) ? nsIX509CertDB::TRUSTED_OBJSIGN : 0;
+  bool trustForSSL = false;
+  rv = retVals->GetPropertyAsBool(NS_LITERAL_STRING("trustForSSL"),
+                                  &trustForSSL);
+  if (NS_FAILED(rv)) {
+    return rv;
+  }
+  bool trustForEmail = false;
+  rv = retVals->GetPropertyAsBool(NS_LITERAL_STRING("trustForEmail"),
+                                  &trustForEmail);
+  if (NS_FAILED(rv)) {
+    return rv;
+  }
+  bool trustForObjSign = false;
+  rv = retVals->GetPropertyAsBool(NS_LITERAL_STRING("trustForObjSign"),
+                                  &trustForObjSign);
+  if (NS_FAILED(rv)) {
+    return rv;
+  }
 
-  *_retval = (status != 0);
+  *trust |= trustForSSL ? nsIX509CertDB::TRUSTED_SSL : 0;
+  *trust |= trustForEmail ? nsIX509CertDB::TRUSTED_EMAIL : 0;
+  *trust |= trustForObjSign ? nsIX509CertDB::TRUSTED_OBJSIGN : 0;
 
-  return rv;
+  return NS_OK;
 }
 
 NS_IMETHODIMP
 nsNSSDialogs::ChooseCertificate(nsIInterfaceRequestor* ctx,
                                 const nsACString& hostname,
                                 int32_t port,
                                 const nsACString& organization,
                                 const nsACString& issuerOrg,
--- a/security/manager/pki/resources/content/downloadcert.js
+++ b/security/manager/pki/resources/content/downloadcert.js
@@ -1,55 +1,92 @@
 /* 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-globals-from pippki.js */
 "use strict";
 
-const nsIDialogParamBlock = Components.interfaces.nsIDialogParamBlock;
-const nsIX509Cert = Components.interfaces.nsIX509Cert;
-
-var params;
-var caName;
-var cert;
+/**
+ * @file Implements the functionality of downloadcert.xul: a dialog that allows
+ *       a user to confirm whether to import a certificate, and if so what trust
+ *       to give it.
+ * @argument {nsISupports} window.arguments[0]
+ *           Certificate to confirm import of, queryable to nsIX509Cert.
+ * @argument {nsISupports} window.arguments[1]
+ *           Object to set the return values of calling the dialog on, queryable
+ *           to the underlying type of DownloadCertReturnValues.
+ */
 
-function onLoad()
-{
-  params = window.arguments[0].QueryInterface(nsIDialogParamBlock);
-  cert = params.objects.queryElementAt(0, nsIX509Cert);
+/**
+ * @typedef DownloadCertReturnValues
+ * @type nsIWritablePropertyBag2
+ * @property {Boolean} importConfirmed
+ *           Set to true if the user confirmed import of the cert and accepted
+ *           the dialog, false otherwise.
+ * @property {Boolean} trustForSSL
+ *           Set to true if the cert should be trusted for SSL, false otherwise.
+ *           Undefined value if |importConfirmed| is not true.
+ * @property {Boolean} trustForEmail
+ *           Set to true if the cert should be trusted for e-mail, false
+ *           otherwise. Undefined value if |importConfirmed| is not true.
+ * @property {Boolean} trustForObjSign
+ *           Set to true if the cert should be trusted for object signing, false
+ *           otherwise. Undefined value if |importConfirmed| is not true.
+ */
 
-  var bundle = document.getElementById("pippki_bundle");
+const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
+
+/**
+ * The cert to potentially import.
+ * @type nsIX509Cert
+ */
+var gCert;
 
-  caName = cert.commonName;
+/**
+ * onload() handler.
+ */
+function onLoad() {
+  gCert = window.arguments[0].QueryInterface(Ci.nsIX509Cert);
+
+  let bundle = document.getElementById("pippki_bundle");
+  let caName = gCert.commonName;
   if (caName.length == 0) {
     caName = bundle.getString("unnamedCA");
   }
 
-  var message2 = bundle.getFormattedString("newCAMessage1", [caName]);
-  setText("message2", message2);
+  setText("trustHeader", bundle.getFormattedString("newCAMessage1", [caName]));
 }
 
-function viewCert()
-{
-  viewCertHelper(window, cert);
+/**
+ * Handler for the "View Cert" button.
+ */
+function viewCert() {
+  viewCertHelper(window, gCert);
 }
 
-function doOK()
-{
+/**
+ * ondialogaccept() handler.
+ *
+ * @returns {Boolean} true to make the dialog close, false otherwise.
+ */
+function onDialogAccept() {
   let checkSSL = document.getElementById("trustSSL");
   let checkEmail = document.getElementById("trustEmail");
   let checkObjSign = document.getElementById("trustObjSign");
 
-  // Signal which trust bits the user wanted to enable.
-  params.SetInt(2, checkSSL.checked ? 1 : 0);
-  params.SetInt(3, checkEmail.checked ? 1 : 0);
-  params.SetInt(4, checkObjSign.checked ? 1 : 0);
-
-  // Signal that the user accepted.
-  params.SetInt(1, 1);
+  let retVals = window.arguments[1].QueryInterface(Ci.nsIWritablePropertyBag2);
+  retVals.setPropertyAsBool("importConfirmed", true);
+  retVals.setPropertyAsBool("trustForSSL", checkSSL.checked);
+  retVals.setPropertyAsBool("trustForEmail", checkEmail.checked);
+  retVals.setPropertyAsBool("trustForObjSign", checkObjSign.checked);
   return true;
 }
 
-function doCancel()
-{
-  params.SetInt(1, 0); // Signal that the user cancelled.
+/**
+ * ondialogcancel() handler.
+ *
+ * @returns {Boolean} true to make the dialog close, false otherwise.
+ */
+function onDialogCancel() {
+  let retVals = window.arguments[1].QueryInterface(Ci.nsIWritablePropertyBag2);
+  retVals.setPropertyAsBool("importConfirmed", false);
   return true;
 }
--- a/security/manager/pki/resources/content/downloadcert.xul
+++ b/security/manager/pki/resources/content/downloadcert.xul
@@ -2,23 +2,24 @@
 <!-- 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/. -->
 
 <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
 
 <!DOCTYPE dialog SYSTEM "chrome://pippki/locale/pippki.dtd">
 
-<dialog id="download_cert" title="&downloadCert.title;"
-  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"      
-  style="width: 46em;"
-  buttons="accept,cancel"
-  ondialogaccept="return doOK();"
-  ondialogcancel="return doCancel();"
-  onload="onLoad();">
+<dialog id="download_cert"
+        title="&downloadCert.title;"
+        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+        style="width: 46em;"
+        buttons="accept,cancel"
+        ondialogaccept="return onDialogAccept();"
+        ondialogcancel="return onDialogCancel();"
+        onload="onLoad();">
 
 <stringbundle id="pippki_bundle" src="chrome://pippki/locale/pippki.properties"/>
 
 <script type="application/javascript" src="chrome://pippki/content/downloadcert.js"/>
 <script type="application/javascript" src="chrome://pippki/content/pippki.js"/>
 
 
   <!--  Let 'em know what they're doing -->
@@ -30,44 +31,39 @@
 
   <!--  checkboxes for trust bits
      -  "do you want to?"
      -  * trust for SSL
      -  * trust for email
      -  * trust for object signing
     -->
   <vbox>
-    <description id="message2"/>
+    <description id="trustHeader"/>
     <checkbox label="&downloadCert.trustSSL;"
               id="trustSSL"/>
     <checkbox label="&downloadCert.trustEmail;"
               id="trustEmail"/>
     <checkbox label="&downloadCert.trustObjSign;"
               id="trustObjSign"/>
   </vbox>
 
   <separator/>
 
-  <!--  buttons for viewing cert and policies
-     -  "suggested you view the following:"
-     -  <>  view cert
-     -  <>  view policy
-    -->
   <vbox>
     <description>&downloadCert.message3;</description>
     <separator/>
     <grid>
       <columns>
         <column/>
         <column/>
       </columns>
       <rows>
         <row>
           <button id="viewC-button"
                   label="&downloadCert.viewCert.label;"
-                  oncommand="viewCert();"/> 
+                  oncommand="viewCert();"/>
           <description style="margin: 4px;">&downloadCert.viewCert.text;</description>
         </row>
       </rows>
     </grid>
   </vbox>
 
 </dialog>
--- a/security/manager/ssl/StaticHPKPins.h
+++ b/security/manager/ssl/StaticHPKPins.h
@@ -1159,9 +1159,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 = 463;
 
 static const int32_t kUnknownId = -1;
 
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1486214077846000);
+static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1486299968306000);
--- a/security/manager/ssl/nsSTSPreloadList.errors
+++ b/security/manager/ssl/nsSTSPreloadList.errors
@@ -22,38 +22,40 @@ 25daysof.io: could not connect to host
 2859cc.com: could not connect to host
 2or3.tk: could not connect to host
 300651.ru: did not receive HSTS header
 302.nyc: could not connect to host
 360ds.co.in: could not connect to host
 360gradus.com: did not receive HSTS header
 365.or.jp: did not receive HSTS header
 3chit.cf: could not connect to host
-4-it.de: could not connect to host
 420dongstorm.com: could not connect to host
 42ms.org: could not connect to host
 4455software.com: did not receive HSTS header
 4679.space: could not connect to host
 47ronin.com: did not receive HSTS header
-4elements.com: max-age too low: 0
+4elements.com: did not receive HSTS header
 4eyes.ch: did not receive HSTS header
 4mm.org: did not receive HSTS header
 4sqsu.eu: could not connect to host
 50millionablaze.org: did not receive HSTS header
 56ct.com: could not connect to host
 60ych.net: did not receive HSTS header
 7kovrikov.ru: did not receive HSTS header
 808.lv: could not connect to host
 83i.net: could not connect to host
 8ack.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 121"  data: no]
 911911.pw: could not connect to host
 922.be: could not connect to host
 9point6.com: could not connect to host
 a-plus.space: could not connect to host
 a9c.co: could not connect to host
+aaeblog.com: could not connect to host
+aaeblog.net: could not connect to host
+aaeblog.org: could not connect to host
 aapp.space: could not connect to host
 aaronkimmig.de: could not connect to host
 abearofsoap.com: did not receive HSTS header
 abecodes.net: did not receive HSTS header
 abilitylist.org: did not receive HSTS header
 abioniere.de: could not connect to host
 about.ge: could not connect to host
 aboutyou-deals.de: did not receive HSTS header
@@ -71,16 +73,17 @@ acslimited.co.uk: did not receive HSTS h
 activeweb.top: could not connect to host
 activiti.alfresco.com: did not receive HSTS header
 acuve.jp: could not connect to host
 ada.is: max-age too low: 2592000
 adams.net: max-age too low: 0
 adamwk.com: did not receive HSTS header
 adboos.com: did not receive HSTS header
 addvocate.com: could not connect to host
+adelevie.com: could not connect to host
 aderal.io: could not connect to host
 adevel.eu: could not connect to host
 adhs-chaoten.net: did not receive HSTS header
 admin.google.com: did not receive HSTS header (error ignored - included regardless)
 admsel.ec: could not connect to host
 adopteunsiteflash.com: did not receive HSTS header
 adquisitio.co.uk: could not connect to host
 adquisitio.de: could not connect to host
@@ -96,17 +99,16 @@ aether.pw: could not connect to host
 aevpn.net: could not connect to host
 affinitysync.com: could not connect to host
 aficionados.com.br: did not receive HSTS header
 afp548.tk: could not connect to host
 afrodigital.uk: could not connect to host
 agbremen.de: did not receive HSTS header
 agevio.com: could not connect to host
 agilebits.net: could not connect to host
-agonswim.com: did not receive HSTS header
 agrimap.com: did not receive HSTS header
 agrios.de: could not connect to host
 agro-id.gov.ua: could not connect to host
 ahabingo.com: did not receive HSTS header
 ahri.ovh: could not connect to host
 airbnb.com: did not receive HSTS header
 aircomms.com: did not receive HSTS header
 aishnair.com: could not connect to host
@@ -120,32 +122,31 @@ alainwolf.net: could not connect to host
 alair.cn: 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
 alarmsystemreviews.com: did not receive HSTS header
 albertopimienta.com: did not receive HSTS header
 alcazaar.com: could not connect to host
 alecvannoten.be: did not receive HSTS header
-alenan.org: could not connect to host
 alessandro.pw: did not receive HSTS header
 alethearose.com: did not receive HSTS header
 alexandre.sh: did not receive HSTS header
 alexisabarca.com: did not receive HSTS header
 alfredxing.com: did not receive HSTS header
 alkami.com: did not receive HSTS header
 all-subtitles.com: did not receive HSTS header
 allforyou.at: could not connect to host
 allinnote.com: could not connect to host
 allstarswithus.com: could not connect to host
 alpha.irccloud.com: could not connect to host
 alphabit-secure.com: could not connect to host
 alphabuild.io: did not receive HSTS header
 alphalabs.xyz: could not connect to host
-alterbaum.net: could not connect to host
+alterbaum.net: did not receive HSTS header
 altfire.ca: could not connect to host
 altmv.com: max-age too low: 7776000
 am3.se: could not connect to host
 amaforums.org: could not connect to host
 american-truck-simulator.de: could not connect to host
 american-truck-simulator.net: could not connect to host
 americanworkwear.nl: did not receive HSTS header
 amigogeek.net: could not connect to host
@@ -184,27 +185,28 @@ anook.com: max-age too low: 0
 ant.land: could not connect to host
 antimine.kr: could not connect to host
 antocom.com: did not receive HSTS header
 antoniomarques.eu: did not receive HSTS header
 antoniorequena.com.ve: max-age too low: 0
 antscript.com: did not receive HSTS header
 any.pm: could not connect to host
 anycoin.me: could not connect to host
+aojiao.org: did not receive HSTS header
 apachelounge.com: did not receive HSTS header
 apeasternpower.com: max-age too low: 0
 api.lookout.com: could not connect to host
 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)
-apnakliyat.com: did not receive HSTS header
 aponkral.net: did not receive HSTS header
 aponkralsunucu.com: did not receive HSTS header
 app.lookout.com: could not connect to host
 app.manilla.com: could not connect to host
+appart.ninja: could not connect to host
 appengine.google.com: did not receive HSTS header (error ignored - included regardless)
 applez.xyz: could not connect to host
 applic8.com: did not receive HSTS header
 appraisal-comps.com: could not connect to host
 appreciationkards.com: could not connect to host
 approlys.fr: did not receive HSTS header
 apps-for-fishing.com: could not connect to host
 appseccalifornia.org: did not receive HSTS header
@@ -228,30 +230,28 @@ asasuou.pw: could not connect to host
 asc16.com: could not connect to host
 asdpress.cn: could not connect to host
 asmui.ml: could not connect to host
 ass.org.au: did not receive HSTS header
 assdecoeur.org: could not connect to host
 asset-alive.com: did not receive HSTS header
 asset-alive.net: did not receive HSTS header
 astrolpost.com: could not connect to host
-at.search.yahoo.com: did not receive HSTS header
 atavio.at: could not connect to host
 atavio.ch: could not connect to host
 atavio.de: did not receive HSTS header
 athenelive.com: could not connect to host
 athul.xyz: did not receive HSTS header
 atlex.nl: did not receive HSTS header
 atomik.pro: could not connect to host
 atop.io: could not connect to host
 attimidesigns.com: did not receive HSTS header
 au.search.yahoo.com: max-age too low: 172800
 aubiosales.com: did not receive HSTS header
 auditmatrix.com: did not receive HSTS header
-auf-feindgebiet.de: could not connect to host
 aujapan.ru: could not connect to host
 aurainfosec.com.au: could not connect to host
 ausnah.me: could not connect to host
 auszeit.bio: did not receive HSTS header
 auth.mail.ru: did not receive HSTS header
 authentication.io: could not connect to host
 authint.com: could not connect to host
 auto-serwis.zgorzelec.pl: did not receive HSTS header
@@ -264,33 +264,35 @@ auverbox.ovh: did not receive HSTS heade
 av.de: did not receive HSTS header
 avec-ou-sans-ordonnance.fr: could not connect to host
 avinet.com: max-age too low: 0
 awg-mode.de: did not receive HSTS header
 axado.com.br: did not receive HSTS header
 axeny.com: did not receive HSTS header
 az.search.yahoo.com: did not receive HSTS header
 azprep.us: could not connect to host
+azuxul.fr: could not connect to host
 b3orion.com: max-age too low: 0
 babak.de: did not receive HSTS header
 babelfisch.eu: could not connect to host
 baby-click.de: could not connect to host
 babybic.hu: did not receive HSTS header
 babyhouse.xyz: could not connect to host
 babysaying.me: could not connect to host
 back-bone.nl: did not receive HSTS header
 badcronjob.com: could not connect to host
-badf00d.de: could not connect to host
+badhusky.com: could not connect to host
 baff.lu: did not receive HSTS header
 baiduaccount.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
 bandb.xyz: could not connect to host
 barely.sexy: did not receive HSTS header
+bashc.at: could not connect to host
 bashcode.ninja: could not connect to host
 basicsolutionsus.com: did not receive HSTS header
 bassh.net: did not receive HSTS header
 baumstark.ca: did not receive HSTS header
 bazarstupava.sk: did not receive HSTS header
 bbb1991.me: could not connect to host
 bcbsmagentprofile.com: could not connect to host
 bccx.com: could not connect to host
@@ -304,17 +306,16 @@ beach-inspector.com: did not receive HST
 beachi.es: could not connect to host
 beaglewatch.com: did not receive HSTS header
 beastowner.com: did not receive HSTS header
 beavers.io: could not connect to host
 bebesurdoue.com: could not connect to host
 bedeta.de: could not connect to host
 bedreid.dk: did not receive HSTS header
 bedrijvenadministratie.nl: did not receive HSTS header
-befundup.com: could not connect to host
 beholdthehurricane.com: could not connect to host
 beier.io: could not connect to host
 belairsewvac.com: did not receive HSTS header
 belics.com: did not receive HSTS header
 belliash.eu.org: could not connect to host
 belltower.io: could not connect to host
 beneffy.com: did not receive HSTS header
 benk.press: could not connect to host
@@ -345,17 +346,16 @@ bikermusic.net: did not receive HSTS hea
 bikiniseli.com: could not connect to host
 bildiri.ci: did not receive HSTS header
 bildschirmflackern.de: did not receive HSTS header
 billin.net: did not receive HSTS header
 billkiss.com: max-age too low: 300
 billninja.com: could not connect to host
 binderapp.net: could not connect to host
 biophysik-ssl.de: did not receive HSTS header
-biou.me: could not connect to host
 birkman.com: did not receive HSTS header
 bismarck.moe: did not receive HSTS header
 bitchan.it: could not connect to host
 bitcoinworld.me: could not connect to host
 bitf.ly: could not connect to host
 bitfactory.ws: could not connect to host
 bitfarm-archiv.com: did not receive HSTS header
 bitfarm-archiv.de: did not receive HSTS header
@@ -374,26 +374,23 @@ blackdragoninc.org: could not connect to
 blacklane.com: did not receive HSTS header
 blackly.uk: could not connect to host
 blackpayment.ru: could not connect to host
 blackunicorn.wtf: could not connect to host
 blantik.net: could not connect to host
 blaudev.es: could not connect to host
 blenheimchalcot.com: did not receive HSTS header
 blha303.com.au: could not connect to host
-blieque.co.uk: could not connect to host
 blindsexdate.nl: could not connect to host
 blog.cyveillance.com: did not receive HSTS header
 blog.lookout.com: did not receive HSTS header
 bloglikepro.com: could not connect to host
 blubbablasen.de: could not connect to host
 blucas.org: did not receive HSTS header
-bluefuzz.nl: could not connect to host
 blueliv.com: did not receive HSTS header
-bluescloud.xyz: could not connect to host
 bluetenmeer.com: did not receive HSTS header
 bm-trading.nl: did not receive HSTS header
 bngsecure.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 121"  data: no]
 bobiji.com: did not receive HSTS header
 bockenauer.at: max-age too low: 0
 bodo-wolff.de: could not connect to host
 bodyblog.nl: did not receive HSTS header
 bodybuilding-legends.com: could not connect to host
@@ -473,17 +470,16 @@ cadao.me: did not receive HSTS header
 cadusilva.com: did not receive HSTS header
 cafe-scientifique.org.ec: could not connect to host
 caim.cz: did not receive HSTS header
 caizx.com: did not receive HSTS header
 cajapopcorn.com: did not receive HSTS header
 cake.care: could not connect to host
 calgaryconstructionjobs.com: could not connect to host
 calix.com: max-age too low: 0
-call.me: did not receive HSTS header
 calltrackingreports.com: could not connect to host
 calvin.me: max-age too low: 2592000
 calvinallen.net: could not connect to host
 calyxinstitute.org: [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 121"  data: no]
 canadiangamblingchoice.com: did not receive HSTS header
 cancelmyprofile.com: did not receive HSTS header
 candicontrols.com: did not receive HSTS header
 candratech.com: could not connect to host
@@ -503,17 +499,16 @@ casedi.org: max-age too low: 0
 casinostest.com: did not receive HSTS header
 casovi.cf: could not connect to host
 catcontent.cloud: could not connect to host
 catinmay.com: did not receive HSTS header
 catnapstudios.com: could not connect to host
 caveclan.org: did not receive HSTS header
 cavedroid.xyz: could not connect to host
 cbhq.net: could not connect to host
-ccayearbook.com: could not connect to host
 ccsys.com: could not connect to host
 cctech.ph: did not receive HSTS header
 cd.search.yahoo.com: did not receive HSTS header
 cd0.us: could not connect to host
 cdnb.co: could not connect to host
 cdndepo.com: could not connect to host
 cdreporting.co.uk: did not receive HSTS header
 cejhon.cz: could not connect to host
@@ -533,31 +528,32 @@ championsofregnum.com: did not receive H
 changelab.cc: max-age too low: 0
 chaos.fail: did not receive HSTS header
 chargejuice.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 charmyadesara.com: did not receive HSTS header
 charnleyhouse.co.uk: max-age too low: 604800
 chartpen.com: did not receive HSTS header
 chartstoffarm.de: max-age too low: 10
 chatbot.me: did not receive HSTS header
+chateau-belvoir.com: did not receive HSTS header
 chateauconstellation.ch: did not receive HSTS header
 chatup.cf: could not connect to host
 chaulootz.com: could not connect to host
 chebedara.com: could not connect to host
 checkout.google.com: did not receive HSTS header (error ignored - included regardless)
 cheerflow.com: could not connect to host
 cheesetart.my: could not connect to host
 chejianer.cn: did not receive HSTS header
 cherysunzhang.com: max-age too low: 7776000
 chestnut.cf: did not receive HSTS header
 chihiro.xyz: could not connect to host
 chijiokeindustries.co.uk: did not receive HSTS header
 childcaresolutionscny.org: did not receive HSTS header
 chirgui.eu: could not connect to host
-chiru.no: did not receive HSTS header
+chiru.no: could not connect to host
 chm.vn: did not receive HSTS header
 chontalpa.pw: could not connect to host
 chotu.net: could not connect to host
 chris-web.info: could not connect to host
 chriskyrouac.com: could not connect to host
 christiaandruif.nl: could not connect to host
 christianbargon.de: could not connect to host
 christianbro.gq: could not connect to host
@@ -609,17 +605,16 @@ co50.com: did not receive HSTS header
 cocaine-import.agency: 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.fm: could not connect to host
 code.google.com: did not receive HSTS header (error ignored - included regardless)
 codeco.pw: could not connect to host
 codeforce.io: did not receive HSTS header
-codepult.com: could not connect to host
 codepx.com: did not receive HSTS header
 codewiththepros.org: could not connect to host
 codiva.io: max-age too low: 2592000
 coffeeetc.co.uk: did not receive HSTS header
 coffeestrategies.com: max-age too low: 2592000
 coiffeurschnittstelle.ch: did not receive HSTS header
 coindam.com: could not connect to host
 colisfrais.com: did not receive HSTS header
@@ -631,16 +626,17 @@ coloradocomputernetworking.net: could no
 colorbrush.ru: did not receive HSTS header
 comfortticket.de: did not receive HSTS header
 comicspines.com: could not connect to host
 comiteshopping.com: could not connect to host
 compalytics.com: could not connect to host
 completionist.audio: could not connect to host
 computeremergency.com.au: did not receive HSTS header
 concord-group.co.jp: did not receive HSTS header
+condesaelectronics.com: could not connect to host
 confirm365.com: could not connect to host
 conformal.com: could not connect to host
 consciousandglamorous.com: could not connect to host
 console.python.org: did not receive HSTS header
 constructionjobs.com: did not receive HSTS header
 content-api-dev.azurewebsites.net: could not connect to host
 continuumgaming.com: could not connect to host
 controlcenter.gigahost.dk: did not receive HSTS header
@@ -771,29 +767,30 @@ dedicatutiempo.es: could not connect to 
 deepcovelabs.net: could not connect to host
 deepserve.info: could not connect to host
 degroetenvanrosaline.nl: did not receive HSTS header
 deight.co: could not connect to host
 dekasan.ru: could not connect to host
 deliverance.co.uk: could not connect to host
 deltaconcepts.de: did not receive HSTS header
 deltanet-production.de: did not receive HSTS header
-delvj.org: could not connect to host
 demilitarized.ninja: could not connect to host
 democracychronicles.com: did not receive HSTS header
 denh.am: did not receive HSTS header
 denisjean.fr: could not connect to host
+dennisdoes.net: did not receive HSTS header
 dentaldomain.org: did not receive HSTS header
 dentaldomain.ph: did not receive HSTS header
 depijl-mz.nl: did not receive HSTS header
 depixion.agency: could not connect to host
 dequehablamos.es: could not connect to host
 derevtsov.com: did not receive HSTS header
 derwolfe.net: did not receive HSTS header
 desiccantpackets.com: did not receive HSTS header
+designed-cybersecurity.com: could not connect to host
 destinationbijoux.fr: could not connect to host
 detector.exposed: could not connect to host
 detutorial.com: max-age too low: 0
 devh.de: did not receive HSTS header
 devincrow.me: could not connect to host
 devinfo.net: did not receive HSTS header
 devuan.org: did not receive HSTS header
 diablotine.rocks: could not connect to host
@@ -812,18 +809,18 @@ dislocated.de: did not receive HSTS head
 dissimulo.me: could not connect to host
 distractionco.de: could not connect to host
 dittvertshus.no: could not connect to host
 dizihocasi.com: did not receive HSTS header
 dizorg.net: could not connect to host
 dj4et.de: could not connect to host
 djz4music.com: did not receive HSTS header
 dl.google.com: did not receive HSTS header (error ignored - included regardless)
-dlld.com: could not connect to host
 dn42.eu: could not connect to host
+dn42.us: did not receive HSTS header
 dns.google.com: did not receive HSTS header (error ignored - included regardless)
 do-do.tk: could not connect to host
 do.search.yahoo.com: did not receive HSTS header
 dobet.in: could not connect to host
 docket.news: could not connect to host
 docs.google.com: did not receive HSTS header (error ignored - included regardless)
 doeswindowssuckforeveryoneorjustme.com: could not connect to host
 dogbox.se: did not receive HSTS header
@@ -832,22 +829,22 @@ dokan.online: did not receive HSTS heade
 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: could not connect to host
 domaris.de: did not receive HSTS header
 dominique-mueller.de: did not receive HSTS header
 donzelot.co.uk: max-age too low: 3600
 doomleika.com: could not connect to host
-dopesoft.de: could not connect to host
 dopost.it: could not connect to host
 doridian.com: could not connect to host
 doridian.de: could not connect to host
 doridian.net: did not receive HSTS header
 doridian.org: could not connect to host
+dossplumbing.co.za: did not receive HSTS header
 dotadata.me: could not connect to host
 download.jitsi.org: did not receive HSTS header
 downsouthweddings.com.au: did not receive HSTS header
 doyoucheck.com: did not receive HSTS header
 dpratt.de: could not connect to host
 dprd-wonogirikab.go.id: did not receive HSTS header
 dragonisles.net: could not connect to host
 dragons-of-highlands.cz: could not connect to host
@@ -865,22 +862,20 @@ droidboss.com: could not connect to host
 dropcam.com: did not receive HSTS header
 drtroyhendrickson.com: could not connect to host
 drumbandesperanto.nl: could not connect to host
 dshiv.io: could not connect to host
 dubrovskiy.net: could not connect to host
 dubrovskiy.pro: could not connect to host
 duesee.org: could not connect to host
 duria.de: max-age too low: 3600
-dutch1.nl: did not receive HSTS header
 dwhd.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 dycontrol.de: could not connect to host
 dylanscott.com.au: did not receive HSTS header
 dynamize.solutions: did not receive HSTS header
-dziekonski.com: could not connect to host
 dzimejl.sk: did not receive HSTS header
 dzlibs.io: could not connect to host
 e-aut.net: could not connect to host
 e-deca2.org: did not receive HSTS header
 earga.sm: could not connect to host
 earlybirdsnacks.com: did not receive HSTS header
 easychiller.org: could not connect to host
 easyhaul.com: did not receive HSTS header
@@ -931,17 +926,16 @@ emilyhorsman.com: could not connect to h
 emjainteractive.com: did not receive HSTS header
 emmable.com: could not connect to host
 emnitech.com: could not connect to host
 empleostampico.com: did not receive HSTS header
 enargia.jp: max-age too low: 0
 encode.space: did not receive HSTS header
 encoder.pw: could not connect to host
 encrypted.google.com: did not receive HSTS header (error ignored - included regardless)
-endlessdiy.ca: could not connect to host
 endzeit-architekten.com: did not receive HSTS header
 engelwerbung.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 121"  data: no]
 enigmail.net: did not receive HSTS header
 enteente.club: could not connect to host
 enteente.space: could not connect to host
 enterdev.co: did not receive HSTS header
 enterprise-threat-monitor.com: max-age too low: 0
 enterprisey.enterprises: [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 121"  data: no]
@@ -964,27 +958,27 @@ eriix.org: could not connect to host
 eromixx.com: did not receive HSTS header
 erotalia.es: could not connect to host
 eroticen.com: did not receive HSTS header
 erotische-aanbiedingen.nl: could not connect to host
 errlytics.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 121"  data: no]
 errolz.com: could not connect to host
 errors.zenpayroll.com: could not connect to host
 esclear.de: did not receive HSTS header
-escotour.com: did not receive HSTS header
+escotour.com: could not connect to host
 esec.rs: did not receive HSTS header
 espra.com: could not connect to host
 essexcosmeticdentists.co.uk: did not receive HSTS header
 essexghosthunters.co.uk: did not receive HSTS header
 estan.cn: did not receive HSTS header
 estilosapeca.com: could not connect to host
 et-buchholz.de: could not connect to host
 etdonline.co.uk: could not connect to host
 eternitylove.us: could not connect to host
-ethack.org: did not receive HSTS header
+ethack.org: [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 121"  data: no]
 etsysecure.com: could not connect to host
 etula.ga: could not connect to host
 euanbaines.com: could not connect to host
 eucl3d.com: did not receive HSTS header
 eulerpi.io: could not connect to host
 euph.eu: could not connect to host
 euren.se: could not connect to host
 euroshop24.net: could not connect to host
@@ -996,25 +990,25 @@ evin.ml: could not connect to host
 evites.me: could not connect to host
 evomon.com: could not connect to host
 evossd.tk: could not connect to host
 exceltobarcode.com: did not receive HSTS header
 exfiles.cz: did not receive HSTS header
 exgravitus.com: could not connect to host
 exitus.jp: max-age too low: 0
 exno.co: could not connect to host
+exousiakaidunamis.xyz: did not receive HSTS header
 expertmile.com: did not receive HSTS header
 expoundite.net: did not receive HSTS header
 expressfinance.co.za: did not receive HSTS header
-extreemhost.nl: could not connect to host
+extreemhost.nl: did not receive HSTS header
 extremenetworking.net: could not connect to host
 exy.pw: could not connect to host
 exyplis.com: did not receive HSTS header
 eyeglassuniverse.com: did not receive HSTS header
-eytosh.net: could not connect to host
 ez.fi: could not connect to host
 ezimoeko.net: could not connect to host
 ezmod.org: could not connect to host
 eztv.ch: did not receive HSTS header
 f-s-u.co.uk: could not connect to host
 f00.ca: could not connect to host
 fabhub.io: could not connect to host
 fabianfischer.de: did not receive HSTS header
@@ -1048,16 +1042,17 @@ feliwyn.fr: did not receive HSTS header
 feminists.co: could not connect to host
 fenteo.com: could not connect to host
 feragon.net: max-age too low: 84600
 feriahuamantla.com: did not receive HSTS header
 festember.com: did not receive HSTS header
 fexmen.com: could not connect to host
 fhdhelp.de: could not connect to host
 fhdhilft.de: could not connect to host
+fifieldtech.com: could not connect to host
 fiftyshadesofluca.ml: could not connect to host
 fig.co: did not receive HSTS header
 fightr.co: could not connect to host
 filmipop.com: max-age too low: 0
 finalgear.com: did not receive HSTS header
 finanzkontor.net: could not connect to host
 findmybottleshop.com.au: did not receive HSTS header
 findtutorsnearme.com: did not receive HSTS header
@@ -1067,31 +1062,32 @@ firebaseio-demo.com: could not connect t
 firebaseio.com: could not connect to host (error ignored - included regardless)
 firefall.rocks: could not connect to host
 firemail.io: could not connect to host
 firstforex.co.uk: did not receive HSTS header
 fish2.me: did not receive HSTS header
 fit4medien.de: did not receive HSTS header
 fitnesswerk.de: could not connect to host
 fivestarsitters.com: did not receive HSTS header
-fixatom.com: did not receive HSTS header
+fixatom.com: max-age too low: 604800
 fixingdns.com: did not receive HSTS header
 fj.search.yahoo.com: did not receive HSTS header
 flags.ninja: could not connect to host
 flamewall.net: could not connect to host
 flawcheck.com: did not receive HSTS header
 fliexer.com: did not receive HSTS header
 floless.co.uk: 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
 flouartistique.ch: could not connect to host
 flow.su: could not connect to host
 flowersandclouds.com: could not connect to host
 flushstudios.com: did not receive HSTS header
+fly.moe: could not connect to host
 flyaces.com: did not receive HSTS header
 flyss.net: did not receive HSTS header
 fm83.nl: did not receive HSTS header
 fndout.com: did not receive HSTS header
 fnvsecurity.com: could not connect to host
 fonetiq.io: could not connect to host
 food4health.guide: could not connect to host
 footballmapped.com: could not connect to host
@@ -1126,17 +1122,16 @@ frezbo.com: did not receive HSTS header
 friendica.ch: could not connect to host
 frizo.com: did not receive HSTS header
 froggstack.de: did not receive HSTS header
 frontmin.com: did not receive HSTS header
 frost-ci.xyz: could not connect to host
 fruitusers.com: could not connect to host
 frusky.net: could not connect to host
 ftctele.com: did not receive HSTS header
-fundacionhijosdelsol.org: could not connect to host
 funkyweddingideas.com.au: could not connect to host
 funrun.com: did not receive HSTS header
 furiffic.com: did not receive HSTS header
 furry.be: max-age too low: 86400
 fusionmate.com: could not connect to host
 futbol11.com: did not receive HSTS header
 futuretechnologi.es: could not connect to host
 fx-rk.com: did not receive HSTS header
@@ -1160,17 +1155,16 @@ gamehacks.me: could not connect to host
 gameink.net: max-age too low: 0
 gamenected.com: could not connect to host
 gamenected.de: could not connect to host
 gamerslair.org: did not receive HSTS header
 gamesdepartment.co.uk: max-age too low: 0
 gamingmedia.eu: could not connect to host
 gampenhof.de: did not receive HSTS header
 gaptek.id: did not receive HSTS header
-gar-nich.net: could not connect to host
 gatilagata.com.br: did not receive HSTS header
 gdpventure.com: max-age too low: 0
 gedankenbude.info: did not receive HSTS header
 geekcast.co.uk: could not connect to host
 geli-graphics.com: did not receive HSTS header
 gem-indonesia.net: could not connect to host
 genuu.com: could not connect to host
 genuxation.com: could not connect to host
@@ -1188,17 +1182,16 @@ getlifti.com: did not receive HSTS heade
 getlolaccount.com: could not connect to host
 getmassage.com.ng: did not receive HSTS header
 getsello.com: did not receive HSTS header
 getwashdaddy.com: could not connect to host
 gfhgiro.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 121"  data: no]
 gfm.tech: could not connect to host
 gfournier.ca: could not connect to host
 gfwsb.ml: could not connect to host
-ggx.us: could not connect to host
 gheorghesarcov.ga: could not connect to host
 gheorghesarcov.tk: could not connect to host
 giakki.eu: could not connect to host
 gigacloud.org: did not receive HSTS header
 gilgaz.com: did not receive HSTS header
 gilly.berlin: did not receive HSTS header
 gingali.de: did not receive HSTS header
 gipsamsfashion.com: could not connect to host
@@ -1211,17 +1204,16 @@ gl.search.yahoo.com: did not receive HST
 glass.google.com: did not receive HSTS header (error ignored - included regardless)
 glentakahashi.com: max-age too low: 0
 glitzmirror.com: could not connect to host
 globalexpert.co.nz: could not connect to host
 globalittech.com: could not connect to host
 globalmusic.ga: could not connect to host
 gloomyvancouver.com: did not receive HSTS header
 glws.org: [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 121"  data: no]
-glyph.ws: could not connect to host
 gm.search.yahoo.com: did not receive HSTS header
 gmail.com: did not receive HSTS header (error ignored - included regardless)
 gmantra.org: could not connect to host
 gmoes.at: max-age too low: 600000
 go.ax: did not receive HSTS header
 goabonga.com: could not connect to host
 goaltree.ch: did not receive HSTS header
 goarmy.eu: [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 121"  data: no]
@@ -1237,16 +1229,17 @@ gold24.in: did not receive HSTS header
 goldendata.io: could not connect to host
 golocal-media.de: did not receive HSTS header
 gonzalosanchez.mx: did not receive HSTS header
 goodenough.nz: did not receive HSTS header
 goodwin43.ru: did not receive HSTS header
 google: could not connect to host (error ignored - included regardless)
 googlemail.com: did not receive HSTS header (error ignored - included regardless)
 googleplex.com: could not connect to host (error ignored - included regardless)
+goolok.com: did not receive HSTS header
 gorilla-gym.site: could not connect to host
 goto.google.com: did not receive HSTS header (error ignored - included regardless)
 gottcode.org: did not receive HSTS header
 govillemo.ca: did not receive HSTS header
 gowe.wang: could not connect to host
 gparent.org: did not receive HSTS header
 gpsfix.cz: could not connect to host
 gpstuner.com: did not receive HSTS header
@@ -1262,16 +1255,17 @@ greenvines.com.tw: did not receive HSTS 
 gregorytlee.me: did not receive HSTS header
 greplin.com: could not connect to host
 grigalanzsoftware.com: could not connect to host
 groups.google.com: did not receive HSTS header (error ignored - included regardless)
 grunex.com: did not receive HSTS header
 gryffin.ga: could not connect to host
 gryffin.ml: could not connect to host
 gryffin.tk: could not connect to host
+gs-net.at: could not connect to host
 gsm-map.com: could not connect to host
 gtanda.tk: could not connect to host
 gtlfsonlinepay.com: did not receive HSTS header
 gtraxapp.com: could not connect to host
 guava.studio: did not receive HSTS header
 guhenry3.tk: could not connect to host
 guilde-vindicta.fr: did not receive HSTS header
 gunnarhafdal.com: did not receive HSTS header
@@ -1285,16 +1279,17 @@ gyboche.com: could not connect to host
 gyboche.science: could not connect to host
 gycis.me: could not connect to host
 gypthecat.com: max-age too low: 604800
 gyz.io: could not connect to host
 h2check.org: could not connect to host
 habanaavenue.com: did not receive HSTS header
 hablemosdetecnologia.com.ve: could not connect to host
 hack.li: could not connect to host
+hackcraft.net: could not connect to host
 hacker.one: could not connect to host
 hackerforever.com: did not receive HSTS header
 hackerone-ext-adroll.com: could not connect to host
 hackerpoints.com: could not connect to host
 hackit.im: could not connect to host
 hadzic.co: could not connect to host
 hahayidu.org: could not connect to host
 haitschi.com: could not connect to host
@@ -1341,17 +1336,16 @@ 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 121"  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
 hermes-net.de: did not receive HSTS header
 herpaderp.net: did not receive HSTS header
 herzbotschaft.de: did not receive HSTS header
-hethely.ch: could not connect to host
 hex2013.com: did not receive HSTS header
 heycms.com: could not connect to host
 hibilog.com: could not connect to host
 hicn.gq: could not connect to host
 hiddendepth.ie: max-age too low: 0
 hiddenmail.xyz: could not connect to host
 highseer.com: did not receive HSTS header
 highsurf-miyazaki.com: did not receive HSTS header
@@ -1390,35 +1384,38 @@ houkago-step.com: did not receive HSTS h
 housemaadiah.org: did not receive HSTS header
 housingstudents.org.uk: could not connect to host
 howrandom.org: could not connect to host
 hr-intranet.com: did not receive HSTS header
 hsir.me: could not connect to host
 hsts.date: could not connect to host
 http418.xyz: could not connect to host
 hu.search.yahoo.com: did not receive HSTS header
+huang.nu: could not connect to host
 huarongdao.com: did not receive HSTS header
 hugosleep.com.au: did not receive HSTS header
 humblefinances.com: could not connect to host
 humeurs.net: could not connect to host
 humpteedumptee.in: did not receive HSTS header
 hurricanelabs.com: did not receive HSTS header
+huskyinc.us: could not connect to host
 hydra.ws: could not connect to host
+hyper69.com: did not receive HSTS header
 i-jp.net: could not connect to host
 i-partners.sk: did not receive HSTS header
 iamokay.nl: did not receive HSTS header
 iamveto.com: could not connect to host
 iapws.com: did not receive HSTS header
 iban.is: could not connect to host
 iceloch.com: could not connect to host
 icewoman.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 ichnichtskaufmann.de: could not connect to host
 icreative.nl: did not receive HSTS header
 ictual.com: max-age too low: 0
-icusignature.com: did not receive HSTS header
+icusignature.com: could not connect to host
 id-co.in: could not connect to host
 id-conf.com: could not connect to host
 idacmedia.com: max-age too low: 5184000
 ideal-envelopes.co.uk: did not receive HSTS header
 ideasmeetingpoint.com: could not connect to host
 ideation-inc.co.jp: did not receive HSTS header
 identitylabs.uk: did not receive HSTS header
 idgsupply.com: could not connect to host
@@ -1539,17 +1536,17 @@ izdiwho.com: could not connect to host
 izzzorgconcerten.nl: could not connect to host
 ja-publications.com: did not receive HSTS header
 jaba.hosting: did not receive HSTS header
 jabbari.io: did not receive HSTS header
 jabber.at: could not connect to host
 jackalworks.com: could not connect to host
 jacobparry.ca: did not receive HSTS header
 jahliveradio.com: could not connect to host
-jakenbake.com: did not receive HSTS header
+jakenbake.com: could not connect to host
 jakubtopic.cz: could not connect to host
 jamesbradach.com: did not receive HSTS header
 jamesburton.london: could not connect to host
 jamesbywater.me: could not connect to host
 jamesbywater.me.uk: could not connect to host
 jamesconroyfinn.com: did not receive HSTS header
 jamesdoell.com: could not connect to host
 jamesdoylephoto.com: did not receive HSTS header
@@ -1598,102 +1595,103 @@ jimas.eu: did not receive HSTS header
 jimmycai.org: max-age too low: 10368000
 jinbo123.com: did not receive HSTS header
 jkb.pics: could not connect to host
 jkbuster.com: could not connect to host
 jmdekker.it: could not connect to host
 joakimalgroy.com: could not connect to host
 jobmedic.com: did not receive HSTS header
 joedavison.me: could not connect to host
+jogi-server.de: could not connect to host
 johnbrownphotography.ch: did not receive HSTS header
 johners.me: could not connect to host
 johners.tech: did not receive HSTS header
 johnrom.com: did not receive HSTS header
 jonas-keidel.de: did not receive HSTS header
 jonasgroth.se: max-age too low: 2592000
 jonathan.ir: could not connect to host
 jonathancarter.org: [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 121"  data: no]
 jonn.me: could not connect to host
 joostbovee.nl: did not receive HSTS header
 joran.org: could not connect to host
 joretapo.fr: could not connect to host
 jornane.nl: could not connect to host
 josahrens.me: could not connect to host
 joshstroup.me: could not connect to host
 jottit.com: could not connect to host
-joworld.net: could not connect to host
 jpbike.cz: could not connect to host
 jrc9.ca: did not receive HSTS header
 jrgold.me: could not connect to host
 jrvar.com: did not receive HSTS header
 jsanders.us: did not receive HSTS header
 jualautoclave.com: did not receive HSTS header
 jualssh.com: could not connect to host
 juliamweber.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 121"  data: no]
-julian-kipka.de: did not receive HSTS header
+julian-kipka.de: could not connect to host
 jumbox.xyz: could not connect to host
 junaos.xyz: did not receive HSTS header
 junge-selbsthilfe.info: could not connect to host
 junqtion.com: could not connect to host
 jupp0r.de: 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
 juwairen.cn: could not connect to host
 jvoice.net: could not connect to host
-jwilsson.com: could not connect to host
 jwilsson.me: could not connect to host
 jxm.in: could not connect to host
 k-dev.de: could not connect to host
 ka-clan.com: could not connect to host
 kabuabc.com: did not receive HSTS header
 kadioglumakina.com.tr: did not receive HSTS header
 kahopoon.net: could not connect to host
 kaisers.de: did not receive HSTS header
 kalami.nl: did not receive HSTS header
 kamikano.com: could not connect to host
+kanehusky.com: could not connect to host
 kaplatz.is: could not connect to host
 kapucini.si: max-age too low: 0
 karaoketonight.com: could not connect to host
 katiaetdavid.fr: could not connect to host
 katproxy.online: could not connect to host
 katproxy.site: could not connect to host
 katproxy.tech: could not connect to host
+kaufkraftkiel.de: could not connect to host
 kausch.at: could not connect to host
 kawaii.io: max-age too low: 2592000
 kawaiiku.com: could not connect to host
 kawaiiku.de: could not connect to host
 kayon.cf: could not connect to host
 kdata.it: did not receive HSTS header
 kdm-online.de: did not receive HSTS header
 keeley.gq: could not connect to host
 keeley.ml: could not connect to host
 keeleysam.me: could not connect to host
 keepclean.me: could not connect to host
 kerangalam.com: did not receive HSTS header
 kerksanders.nl: did not receive HSTS header
 kermadec.net: could not connect to host
 kernl.us: did not receive HSTS header
-kevinapease.com: max-age too low: 0
+kevinapease.com: could not connect to host
 keymaster.lookout.com: did not receive HSTS header
 kg-rating.com: did not receive HSTS header
 kgxtech.com: max-age too low: 2592000
 kickass.al: could not connect to host
 kid-dachau.de: did not receive HSTS header
 kiel-media.de: did not receive HSTS header
 kimpost.org: could not connect to host
 kinderwagen-test24.de: could not connect to host
 kingmanhall.org: could not connect to host
+kini24.ru: could not connect to host
 kinnon.enterprises: could not connect to host
 kinogb.net: max-age too low: 0
 kionetworks.com: did not receive HSTS header
 kirkforcongress.com: could not connect to host
 kirkforsenate.com: did not receive HSTS header
 kirkpatrickdavis.com: could not connect to host
-kisa.io: could not connect to host
 kissart.net: did not receive HSTS header
 kisun.co.jp: did not receive HSTS header
 kitakemon.com: could not connect to host
 kitchenpunx.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 121"  data: no]
 kitk.at: could not connect to host
 kitsta.com: could not connect to host
 kiwiirc.com: max-age too low: 5256000
 kizil.net: could not connect to host
@@ -1761,27 +1759,28 @@ lalaya.fr: could not connect to host
 lambdafive.co.uk: could not connect to host
 lampl.info: did not receive HSTS header
 landscape.canonical.com: max-age too low: 2592000
 langenbach.rocks: could not connect to host
 langhun.me: did not receive HSTS header
 laobox.fr: did not receive HSTS header
 laozhu.me: could not connect to host
 laserfuchs.de: did not receive HSTS header
-lask.in: did not receive HSTS header
+lask.in: could not connect to host
 latinred.com: did not receive HSTS header
 latus.xyz: could not connect to host
 lauftrainer-ausbildung.com: did not receive HSTS header
 lavval.com: could not connect to host
 laxatus.com: did not receive HSTS header
 laxiongames.es: could not connect to host
 laylo.nl: did not receive HSTS header
 lbrt.xyz: could not connect to host
 ldarby.me.uk: could not connect to host
 leadership9.com: could not connect to host
+leardev.de: did not receive HSTS header
 learnfrenchfluently.com: did not receive HSTS header
 learningorder.com: could not connect to host
 ledgerscope.net: could not connect to host
 legarage.org: did not receive HSTS header
 leinir.dk: max-age too low: 86400
 leitner.com.au: did not receive HSTS header
 leiyun.me: did not receive HSTS header
 lellyboi.ml: could not connect to host
@@ -1803,17 +1802,16 @@ letras.mus.br: did not receive HSTS head
 letustravel.tk: could not connect to host
 lfullerdesign.com: did not receive HSTS header
 lgiswa.com.au: did not receive HSTS header
 lgrs.com.au: did not receive HSTS header
 lgts.se: could not connect to host
 li.search.yahoo.com: did not receive HSTS header
 liaillustr.at: did not receive HSTS header
 liaoshuma.com: could not connect to host
-libbitcoin.org: could not connect to host
 libertyrp.org: could not connect to host
 libnull.com: could not connect to host
 library.linode.com: did not receive HSTS header
 librechan.net: could not connect to host
 lifeguard.aecom.com: did not receive HSTS header
 lifeinitsownway.com: did not receive HSTS header
 lifestylehunter.co.uk: did not receive HSTS header
 lifetimemoneymachine.com: did not receive HSTS header
@@ -1882,56 +1880,60 @@ lunix.io: did not receive HSTS header
 luoe.ml: could not connect to host
 luoxiao.im: could not connect to host
 lusis.fr: did not receive HSTS header
 lusis.net: did not receive HSTS header
 lustrumxi.nl: could not connect to host
 luxus-russen.de: did not receive HSTS header
 luxwatch.com: could not connect to host
 lv.search.yahoo.com: did not receive HSTS header
+lwl.moe: could not connect to host
 lzkill.com: did not receive HSTS header
+lzzr.me: could not connect to host
 m-ali.xyz: did not receive HSTS header
 m.gparent.org: could not connect to host
 m3-gmbh.de: did not receive HSTS header
 m82labs.com: did not receive HSTS header
 maarten.nyc: did not receive HSTS header
 maartenvandekamp.nl: did not receive HSTS header
 macbolo.com: could not connect to host
 macchaberrycream.com: could not connect to host
 macchedil.com: did not receive HSTS header
 machon.biz: could not connect to host
+macker.io: could not connect to host
 madars.org: did not receive HSTS header
 maddin.ga: could not connect to host
 madebymagnitude.com: did not receive HSTS header
 maderwin.com: did not receive HSTS header
 madusecurity.com: could not connect to host
 mafamane.com: could not connect to host
 mafiareturns.com: max-age too low: 2592000
 magenx.com: did not receive HSTS header
 mahamed91.pw: could not connect to host
 mail-settings.google.com: did not receive HSTS header (error ignored - included regardless)
 mail.google.com: did not receive HSTS header (error ignored - included regardless)
-mail4you.in: could not connect to host
 maildragon.com: could not connect to host
+mainlywrenches.co: could not connect to host
 makeitdynamic.com: could not connect to host
 makerstuff.net: did not receive HSTS header
 malerversand.de: did not receive HSTS header
 malwre.io: could not connect to host
 mamaison.io: could not connect to host
 mamaxi.org: did not receive HSTS header
 mammothmail.com: could not connect to host
 mammothmail.net: could not connect to host
 mammothmail.org: could not connect to host
 managemynetsuite.com: could not connect to host
 mansion-note.com: could not connect to host
 maowtm.org: could not connect to host
 marchagen.nl: did not receive HSTS header
 marcontrol.com: did not receive HSTS header
 marcuskoh.com: could not connect to host
 marie-curie.fr: could not connect to host
+marinazarza.es: could not connect to host
 markaconnor.com: could not connect to host
 markayapilandirma.com: did not receive HSTS header
 markepps.com: could not connect to host
 market.android.com: did not receive HSTS header (error ignored - included regardless)
 markrego.com: could not connect to host
 markus-dev.com: did not receive HSTS header
 markusweimar.de: did not receive HSTS header
 marleyresort.com: did not receive HSTS header
@@ -1979,17 +1981,16 @@ megasslstore.com: did not receive HSTS h
 megaxchange.com: did not receive HSTS header
 meghudson.com: could not connect to host
 mein-gesundheitsmanager.com: did not receive HSTS header
 meincenter-meinemeinung.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 121"  data: no]
 meinebo.it: could not connect to host
 meizufans.eu: [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 121"  data: no]
 melted.pw: could not connect to host
 members.mayfirst.org: did not receive HSTS header
-mensagemdaluz.com: could not connect to host
 mensmaximus.de: did not receive HSTS header
 menthix.net: could not connect to host
 mereckas.com: did not receive HSTS header
 meritz.rocks: could not connect to host
 merson.me: could not connect to host
 meshok.ru: did not receive HSTS header
 mesmoque.com: did not receive HSTS header
 meta-db.com: could not connect to host
@@ -2073,16 +2074,18 @@ moriz.net: could not connect to host
 morningcalculation.com: could not connect to host
 morotech.com.br: max-age too low: 2592000
 morpork.xyz: could not connect to host
 mortgagecentersmo.com: did not receive HSTS header
 mostwuat.com: could not connect to host
 motherbase.io: could not connect to host
 motionpicturesolutions.com: could not connect to host
 motocyklovedily.cz: did not receive HSTS header
+motoryz.com: could not connect to host
+motoryz.nl: could not connect to host
 mottvd.com: could not connect to host
 moula.com.au: did not receive HSTS header
 mountainadventureseminars.com: did not receive HSTS header
 mountainmusicpromotions.com: did not receive HSTS header
 moviesabout.net: could not connect to host
 movlib.org: could not connect to host
 moy.cat: could not connect to host
 mp3juices.is: could not connect to host
@@ -2138,16 +2141,18 @@ naiharngym.com: did not receive HSTS hea
 najedlo.sk: did not receive HSTS header
 nakliyatsirketi.biz: could not connect to host
 nalifornia.com: did not receive HSTS header
 nametaken-cloud.duckdns.org: could not connect to host
 nanogeneinc.com: could not connect to host
 nargileh.nl: could not connect to host
 natalia.io: could not connect to host
 natalt.org: did not receive HSTS header
+natenom.com: could not connect to host
+natenom.name: could not connect to host
 nathanmfarrugia.com: did not receive HSTS header
 naturesystems.cz: max-age too low: 0
 natuurbehangnederland.nl: could not connect to host
 nauck.org: did not receive HSTS header
 nav.jobs: could not connect to host
 naval.tf: could not connect to host
 navigate-it-services.de: max-age too low: 0
 navjobs.com: did not receive HSTS header
@@ -2163,17 +2168,17 @@ neko-system.com: did not receive HSTS he
 nemno.de: could not connect to host
 nemovement.org: did not receive HSTS header
 neonisi.com: could not connect to host
 nepustil.net: did not receive HSTS header
 neris.io: could not connect to host
 nerven.se: could not connect to host
 nestedquotes.ca: could not connect to host
 netbox.cc: could not connect to host
-netherwind.eu: did not receive HSTS header
+netherwind.eu: could not connect to host
 netlilo.com: could not connect to host
 netsight.org: could not connect to host
 netzbit.de: could not connect to host
 netzpolitik.org: did not receive HSTS header
 netztest.at: did not receive HSTS header
 neueonlinecasino2016.com: could not connect to host
 neuralgic.net: could not connect to host
 neutralox.com: max-age too low: 3600
@@ -2192,19 +2197,21 @@ ngine.ch: did not receive HSTS header
 nginxnudes.com: could not connect to host
 ni.search.yahoo.com: did not receive HSTS header
 nibiisclaim.com: could not connect to host
 nicestresser.fr: could not connect to host
 nicky.io: did not receive HSTS header
 nicolasbettag.me: did not receive HSTS header
 niconiconi.xyz: could not connect to host
 niconode.com: did not receive HSTS header
+nien.chat: could not connect to host
 nightx.uk: could not connect to host
 niho.jp: [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 121"  data: no]
 nikomo.fi: could not connect to host
+nilrem.org: 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
 nmctest.net: could not connect to host
 nnya.cat: did not receive HSTS header
 no17sifangjie.cc: could not connect to host
 nocallaghan.com: could not connect to host
@@ -2216,17 +2223,17 @@ noima.com: did not receive HSTS header
 nolatepayments.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 121"  data: no]
 nolte.work: could not connect to host
 nomorebytes.de: did not receive HSTS header
 nope.website: could not connect to host
 nopex.no: could not connect to host
 nopol.de: did not receive HSTS header
 norb.at: could not connect to host
 nosecretshop.com: did not receive HSTS header
-nouvelle-vague-saint-cast.fr: could not connect to host
+nouvelle-vague-saint-cast.fr: did not receive HSTS header
 novacoast.com: did not receive HSTS header
 novatrucking.de: could not connect to host
 nowak.ninja: did not receive HSTS header
 noworrywp.com: could not connect to host
 np.search.yahoo.com: did not receive HSTS header
 npol.de: did not receive HSTS header
 ntbs.pro: could not connect to host
 nu3.at: did not receive HSTS header
@@ -2331,16 +2338,17 @@ ossbinaries.com: could not connect to ho
 osteammate.com: did not receive HSTS header
 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 121"  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 121"  data: no]
 otichi.com: did not receive HSTS header
 ottospora.nl: could not connect to host
 ourbank.com: did not receive HSTS header
+ourcloud.at: could not connect to host
 outetc.com: could not connect to host
 outreachbuddy.com: could not connect to host
 outsider.im: 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
 oversight.io: could not connect to host
 overthinkingit.com: max-age too low: 3600
@@ -2356,17 +2364,17 @@ pader-deko.de: [Exception... "Component 
 paestbin.com: could not connect to host
 pagetoimage.com: could not connect to host
 paisaone.com: did not receive HSTS header
 paku.me: could not connect to host
 pamsoft.pl: max-age too low: 0
 panaceallc.net: could not connect to host
 panelomix.net: could not connect to host
 paneu.de: could not connect to host
-pants-off.xyz: could not connect to host
+pants-off.xyz: did not receive HSTS header
 pantsu.cat: did not receive HSTS header
 papeda.net: did not receive HSTS header
 papercard.co.uk: did not receive HSTS header
 papierniak.net: could not connect to host
 parent5446.us: could not connect to host
 parentmail.co.uk: did not receive HSTS header
 particonpsplus.it: could not connect to host
 partijtjevoordevrijheid.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 121"  data: no]
@@ -2391,16 +2399,18 @@ paulewen.ca: could not connect to host
 paulyang.cn: did not receive HSTS header
 paxwinkel.nl: did not receive HSTS header
 pay.gigahost.dk: did not receive HSTS header
 payments.google.com: did not receive HSTS header (error ignored - included regardless)
 payroll.ch: did not receive HSTS header
 pbapp.net: did not receive HSTS header
 pbprint.ru: max-age too low: 0
 pc-nf.de: could not connect to host
+pchax.net: did not receive HSTS header
+peervpn.net: 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 121"  data: no]
 pekkapikkarainen.fi: could not connect to host
 pekkarik.ru: could not connect to host
 pentagram.me: could not connect to host
 pepperhead.com: could not connect to host
 pepperworldhotshop.de: did not receive HSTS header
 perfectionis.me: could not connect to host
 performous.org: could not connect to host
@@ -2415,16 +2425,17 @@ petchart.net: could not connect to host
 petja.me: could not connect to host
 petplum.com: did not receive HSTS header
 petrachuk.ru: did not receive HSTS header
 petravdbos.nl: did not receive HSTS header
 petrolplus.ru: did not receive HSTS header
 pettsy.com: could not connect to host
 pewboards.com: could not connect to host
 pgpm.io: could not connect to host
+philadelphia.com.mx: could not connect to host
 phongmay24h.com: could not connect to host
 phurl.de: could not connect to host
 pickr.co: could not connect to host
 picotronic.biz: could not connect to host
 picscare.co.uk: did not receive HSTS header
 piligrimname.com: could not connect to host
 pinesandneedles.com: did not receive HSTS header
 pippen.io: could not connect to host
@@ -2435,17 +2446,17 @@ piratenlogin.de: could not connect to ho
 pirati.cz: max-age too low: 604800
 pirlitu.com: did not receive HSTS header
 pisidia.de: could not connect to host
 pittonpreschool.com: did not receive HSTS header
 pixel.google.com: did not receive HSTS header (error ignored - included regardless)
 pixelcode.com.au: max-age too low: 0
 pixelhero.co.uk: did not receive HSTS header
 pixi.me: could not connect to host
-pj83.duckdns.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
+pj83.duckdns.org: could not connect to host
 pk.search.yahoo.com: did not receive HSTS header
 placollection.org: could not connect to host
 platform.lookout.com: could not connect to host
 play.google.com: did not receive HSTS header (error ignored - included regardless)
 playmaker.io: could not connect to host
 playnation.io: did not receive HSTS header
 plogable.co: could not connect to host
 plothost.com: did not receive HSTS header
@@ -2461,16 +2472,17 @@ politologos.org: could not connect to ho
 polypho.nyc: could not connect to host
 pompompoes.com: could not connect to host
 pontokay.com.br: did not receive HSTS header
 pontualcomp.com: max-age too low: 2592000
 poolsandstuff.com: did not receive HSTS header
 poris.web.id: did not receive HSTS header
 portalplatform.net: did not receive HSTS header
 poshpak.com: did not receive HSTS header
+post4me.at: could not connect to host
 posterspy.com: did not receive HSTS header
 postscheduler.org: could not connect to host
 posylka.de: did not receive HSTS header
 poussinooz.fr: could not connect to host
 povitria.net: could not connect to host
 powerplannerapp.com: did not receive HSTS header
 powerxequality.com: could not connect to host
 ppr-truby.ru: could not connect to host
@@ -2550,16 +2562,17 @@ radicaleducation.net: could not connect 
 radiormi.com: did not receive HSTS header
 rafaelcz.de: could not connect to host
 rainbowbarracuda.com: could not connect to host
 ramonj.nl: could not connect to host
 rankthespot.com: did not receive HSTS header
 rapidresearch.me: could not connect to host
 rapidthunder.io: could not connect to host
 rasing.me: could not connect to host
+raspass.me: could not connect to host
 ratajczak.fr: could not connect to host
 raulfraile.net: could not connect to host
 rawet.se: did not receive HSTS header
 rawstorieslondon.com: could not connect to host
 raydobe.me: could not connect to host
 rc4.io: did not receive HSTS header
 rcafox.com: could not connect to host
 rcpcbd.com: did not receive HSTS header
@@ -2622,16 +2635,17 @@ riskmgt.com.au: could not connect to hos
 rj.gg: could not connect to host
 rk6.cz: could not connect to host
 rkmantpur.org: did not receive HSTS header
 rme.li: did not receive HSTS header
 roan24.pl: did not receive HSTS header
 robertglastra.com: could not connect to host
 robigalia.org: did not receive HSTS header
 robin.info: could not connect to host
+robohash.org: could not connect to host
 rochman.id: could not connect to host
 rocketmill.co.uk: max-age too low: 0
 rocksberg.net: did not receive HSTS header
 roddis.net: did not receive HSTS header
 rodney.id.au: did not receive HSTS header
 rodosto.com: did not receive HSTS header
 roeper.party: could not connect to host
 romans-place.me.uk: could not connect to host
@@ -2646,17 +2660,16 @@ roundtheme.com: did not receive HSTS hea
 rout0r.org: did not receive HSTS header
 rouvray.org: could not connect to host
 rr.in.th: could not connect to host
 rrke.cc: did not receive HSTS header
 rsajeey.info: could not connect to host
 rsauget.fr: could not connect to host
 rsf.io: could not connect to host
 rsmaps.org: could not connect to host
-rssr.se: could not connect to host
 rubbereggs.ca: could not connect to host
 rubberfurs.org: max-age too low: 86400
 rubecodeberg.com: could not connect to host
 rubenschulz.nl: did not receive HSTS header
 ruborr.se: did not receive HSTS header
 rubyshop.nl: max-age too low: 604800
 rudeotter.com: did not receive HSTS header
 rudloff.pro: did not receive HSTS header
@@ -2773,16 +2786,18 @@ serized.pw: 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
 seryo.moe: could not connect to host
 setphaserstostun.org: could not connect to host
 setuid.de: could not connect to host
 setuid.io: did not receive HSTS header
 seyahatsagliksigortalari.com: could not connect to host
+seyr.it: could not connect to host
+seyr.me: could not connect to host
 shadoom.com: did not receive HSTS header
 shadowmorph.info: did not receive HSTS header
 shadowsocks.net: could not connect to host
 shakepeers.org: did not receive HSTS header
 shakespearesolutions.com.au: did not receive HSTS header
 shanesage.com: could not connect to host
 shaobin.wang: could not connect to host
 shareimg.xyz: did not receive HSTS header
@@ -2792,17 +2807,16 @@ shauncrowley.co.uk: could not connect to
 shaunwheelhou.se: could not connect to host
 shawnh.net: could not connect to host
 shellsec.pw: did not receive HSTS header
 shibe.club: could not connect to host
 shiftins.com: did not receive HSTS header
 shiinko.com: could not connect to host
 shinju.moe: could not connect to host
 shiona.xyz: did not receive HSTS header
-shipping24h.com: could not connect to host
 shocksrv.com: did not receive HSTS header
 shooshosha.com: 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
 shortr.li: could not connect to host
 showkeeper.tv: did not receive HSTS header
 shukatsu-note.com: could not connect to host
@@ -2859,16 +2873,17 @@ smartcoin.com.br: could not connect to h
 smartofficesandsmarthomes.com: did not receive HSTS header
 smatch.com: did not receive HSTS header
 smet.us: could not connect to host
 smirkingwhorefromhighgarden.pro: could not connect to host
 smkn1lengkong.sch.id: did not receive HSTS header
 smksi2.com: max-age too low: 0
 smusg.com: did not receive HSTS header
 snailing.org: could not connect to host
+snapappointments.com: did not receive HSTS header
 snapappts.com: could not connect to host
 snapworks.net: did not receive HSTS header
 sneberger.cz: [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 121"  data: no]
 snel4u.nl: could not connect to host
 snelwerk.be: did not receive HSTS header
 sng.my: could not connect to host
 snoqualmiefiber.org: did not receive HSTS header
 sobabox.ru: could not connect to host
@@ -2895,16 +2910,17 @@ someshit.xyz: could not connect to host
 somethingnew.xyz: did not receive HSTS header
 songzhuolun.com: did not receive HSTS header
 sonic.sk: max-age too low: 0
 sotiran.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 121"  data: no]
 sotor.de: did not receive HSTS header
 soulboy.io: did not receive HSTS header
 soulema.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 121"  data: no]
 soulfulglamour.uk: could not connect to host
+sour.is: did not receive HSTS header
 sourcelair.com: did not receive HSTS header
 southside-crew.club: could not connect to host
 southworcestershiregpservices.co.uk: could not connect to host
 souyar.de: could not connect to host
 souyar.net: could not connect to host
 souyar.us: could not connect to host
 sovereignshare.com: could not connect to host
 sown.dyndns.org: could not connect to host
@@ -2935,44 +2951,44 @@ spreadsheets.google.com: did not receive
 spreed.me: did not receive HSTS header
 spritchard.photos: max-age too low: 0
 sproutconnections.com: did not receive HSTS header
 sprybear.com: did not receive HSTS header
 square.gs: could not connect to host
 squatldf.org: [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 121"  data: no]
 sqzryang.com: max-age too low: 604800
 srevilak.net: did not receive HSTS header
+sritest.io: did not receive HSTS header
 srna.sk: could not connect to host
 srrr.ca: could not connect to host
 ss.wtf: did not receive HSTS header
-sscd.no: could not connect to host
 ssersay.com: did not receive HSTS header
 ssl.panoramio.com: did not receive HSTS header
 ssl.rip: could not connect to host
 sslhosting.cz: could not connect to host
 ssmato.me: could not connect to host
 ssnc.org: max-age too low: 300
 sss3s.com: could not connect to host
 stabletoken.com: could not connect to host
 stadjerspasonline.nl: could not connect to host
-stadtbauwerk.at: could not connect to host
 stateofexception.io: could not connect to host
 static.or.at: did not receive HSTS header
 staticanime.net: could not connect to host
 stationaryjourney.com: did not receive HSTS header
 stationnementdenuit.ca: did not receive HSTS header
 statuschecks.net: could not connect to host
 stefany.eu: could not connect to host
 stephanierxo.com: did not receive HSTS header
 stephenandburns.com: did not receive HSTS header
 stevensononthe.net: did not receive HSTS header
 stewartremodelingadvantage.com: could not connect to host
 stick2bike.de: did not receive HSTS header
 stig.io: did not receive HSTS header
 stigroom.com: could not connect to host
+stirlingpoon.xyz: could not connect to host
 stkbn.com: did not receive HSTS header
 stmbgr.com: could not connect to host
 stn.me.uk: did not receive HSTS header
 stnl.de: could not connect to host
 stocktrade.de: could not connect to host
 stoffe-monster.de: did not receive HSTS header
 stopwoodfin.org: could not connect to host
 storecove.com: did not receive HSTS header
@@ -2987,18 +3003,18 @@ streams.dyndns.org: could not connect to
 strictlysudo.com: could not connect to host
 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
 studentresearcher.org: did not receive HSTS header
 studentskydenik.cz: could not connect to host
 studenttravel.cz: did not receive HSTS header
+studio-panic.com: could not connect to host
 studydrive.net: did not receive HSTS header
-studyhub.cf: could not connect to host
 stugb.de: did not receive HSTS header
 stupendous.net: could not connect to host
 stw-group.at: could not connect to host
 subbing.work: could not connect to host
 subdimension.org: could not connect to host
 subtitle.rip: could not connect to host
 sudo.im: could not connect to host
 sudo.li: did not receive HSTS header
@@ -3028,26 +3044,26 @@ sxbk.pw: could not connect to host
 syam.cc: could not connect to host
 sydgrabber.tk: could not connect to host
 sylvanorder.com: could not connect to host
 synackr.com: could not connect to host
 syncer.jp: did not receive HSTS header
 syncserve.net: did not receive HSTS header
 syneic.com: did not receive HSTS header
 syno.gq: could not connect to host
-sys.tf: could not connect to host
 sysadmin.xyz: could not connect to host
 sysmike.de: could not connect to host
 syso.name: could not connect to host
 szaszm.tk: max-age too low: 0
 szaydon.me: could not connect to host
 t.facebook.com: did not receive HSTS header
 taabe.xyz: did not receive HSTS header
 tablet.facebook.com: did not receive HSTS header
 tacomafia.net: did not receive HSTS header
+tadigitalstore.com: could not connect to host
 tafoma.com: did not receive HSTS header
 tageau.com: could not connect to host
 taglondon.org: did not receive HSTS header
 tails.com.ar: could not connect to host
 talk.google.com: did not receive HSTS header (error ignored - included regardless)
 talktwincities.com: could not connect to host
 tallr.se: could not connect to host
 tallshoe.com: could not connect to host
@@ -3077,24 +3093,24 @@ teamblueridge.org: could not connect to 
 teamsocial.co: did not receive HSTS header
 teamzeus.cz: 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
 techmatehq.com: could not connect to host
 technosavvyport.com: did not receive HSTS header
 techvalue.gr: did not receive HSTS header
-techwords.io: [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 121"  data: no]
 tegelsensanitaironline.nl: did not receive HSTS header
 tekshrek.com: max-age too low: 0
 temehu.com: did not receive HSTS header
 tempcraft.net: could not connect to host
 tendertool.nl: could not connect to host
 tenni.xyz: could not connect to host
 tensionup.com: could not connect to host
+tepid.org: could not connect to host
 terrax.berlin: could not connect to host
 terrax.info: could not connect to host
 testandroid.xyz: could not connect to host
 testbawks.com: did not receive HSTS header
 testnode.xyz: could not connect to host
 teunstuinposters.nl: did not receive HSTS header
 textoplano.xyz: could not connect to host
 textracer.dk: could not connect to host
@@ -3104,17 +3120,16 @@ tffans.com: did not receive HSTS header
 tfl.lu: did not receive HSTS header
 tgr.re: could not connect to host
 thaedal.net: could not connect to host
 thai.land: could not connect to host
 the-sky-of-valkyries.com: could not connect to host
 theater.cf: could not connect to host
 thebrotherswarde.com: could not connect to host
 theclementinebutchers.com: could not connect to host
-theclubjersey.com: did not receive HSTS header
 thecoffeehouse.xyz: could not connect to host
 thediaryofadam.com: did not receive HSTS header
 theendofzion.com: did not receive HSTS header
 thefarbeyond.com: could not connect to host
 thefootballanalyst.com: could not connect to host
 thehiddenbay.me: could not connect to host
 thehiddenbay.net: could not connect to host
 thehistory.me: could not connect to host
@@ -3129,16 +3144,17 @@ thepartywarehouse.co.uk: did not receive
 thepiratebay.al: could not connect to host
 therapyportal.com: did not receive HSTS header
 therewill.be: could not connect to host
 thestack.xyz: could not connect to host
 thestagchorleywood.co.uk: did not receive HSTS header
 thetomharling.com: max-age too low: 86400
 theurbanyoga.com: did not receive HSTS header
 thevintagenews.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 121"  data: no]
+thezero.org: could not connect to host
 thezonders.com: did not receive HSTS header
 thierfreund.de: could not connect to host
 thierryhayoz.ch: could not connect to host
 thijsalders.nl: did not receive HSTS header
 thinkcoding.de: could not connect to host
 thinkcoding.org: could not connect to host
 thinlyveiledcontempt.com: could not connect to host
 thirdpartytrade.com: did not receive HSTS header
@@ -3159,32 +3175,33 @@ timestamp.io: did not receive HSTS heade
 timotrans.de: did not receive HSTS header
 timotrans.eu: did not receive HSTS header
 timwittenberg.com: could not connect to host
 tipsyk.ru: could not connect to host
 tirex.media: did not receive HSTS header
 tittelbach.at: did not receive HSTS header
 titties.ml: could not connect to host
 tjs.me: could not connect to host
-tkarstens.de: could not connect to host
+tkarstens.de: did not receive HSTS header
 tlo.hosting: could not connect to host
 tlo.network: could not connect to host
 tls.li: could not connect to host
 tm-solutions.eu: [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 121"  data: no]
 tmprod.com: did not receive HSTS header
 tncnanet.com.br: could not connect to host
 tnrsca.jp: did not receive HSTS header
 tobiasmathes.com: could not connect to host
 tobiasmathes.name: could not connect to host
 tobiasofficial.at: could not connect to host
 todo.is: did not receive HSTS header
 todobazar.es: could not connect to host
 tokyopopline.com: did not receive HSTS header
 tollmanz.com: did not receive HSTS header
 tomeara.net: could not connect to host
+tomend.es: could not connect to host
 tomharling.co.uk: max-age too low: 86400
 tomharling.uk: max-age too low: 86400
 tommsy.com: did not receive HSTS header
 tonburi.jp: did not receive HSTS header
 tonyfantjr.com: could not connect to host
 toomanypillows.com: could not connect to host
 topbargains.com.au: did not receive HSTS header
 topmarine.se: could not connect to host
@@ -3205,29 +3222,27 @@ tpe-edu.com: could not connect to host
 track.plus: could not connect to host
 tracktivity.com.au: did not receive HSTS header
 tradingcentre.com.au: did not receive HSTS header
 tradinghope.com: could not connect to host
 trakfusion.com: could not connect to host
 translate.googleapis.com: did not receive HSTS header (error ignored - included regardless)
 transportal.sk: did not receive HSTS header
 trendberry.ru: did not receive HSTS header
-trik.es: [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 121"  data: no]
 trinityaffirmations.com: max-age too low: 0
 trinitycore.org: max-age too low: 2592000
 tripdelta.com: did not receive HSTS header
 trixies-wish.nz: could not connect to host
 trusitio.com: could not connect to host
 trustmeimfancy.com: could not connect to host
 trybind.com: could not connect to host
 ts2.se: did not receive HSTS header
 tsecy.com: did not receive HSTS header
 tsgoc.com: did not receive HSTS header
 tssouthernpower.com: max-age too low: 0
-ttt.tt: could not connect to host
 tuingereedschappen.net: could not connect to host
 tuningblog.eu: did not receive HSTS header
 turnik-67.ru: could not connect to host
 tuturulianda.com: could not connect to host
 tuvalie.com: could not connect to host
 tuxcall.de: could not connect to host
 tv.search.yahoo.com: could not connect to host
 tvtubeflix.com: did not receive HSTS header
@@ -3276,17 +3291,16 @@ unicooo.com: could not connect to host
 unison.com: could not connect to host
 unitedcyberdevelopment.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 121"  data: no]
 unitel2000.de: could not connect to host
 university4industry.com: did not receive HSTS header
 universogay.com: did not receive HSTS header
 univz.com: could not connect to host
 unknownphenomena.net: could not connect to host
 unravel.ie: did not receive HSTS header
-unsystem.net: could not connect to host
 unterschicht.tv: could not connect to host
 unwiredbrain.com: could not connect to host
 uonstaffhub.com: could not connect to host
 uow.ninja: could not connect to host
 upaknship.com: did not receive HSTS header
 upani.net: could not connect to host
 upldr.pw: could not connect to host
 upr.com.ua: could not connect to host
@@ -3310,17 +3324,16 @@ valethound.com: could not connect to hos
 valis.sx: could not connect to host
 valkyrja.xyz: did not receive HSTS header
 valleyridgepta.org: could not connect to host
 vallis.net: could not connect to host
 vanderkley.it: could not connect to host
 vanetv.com: could not connect to host
 vanitas.xyz: could not connect to host
 vanitynailworkz.com: could not connect to host
-vanmalland.com: could not connect to host
 vansieleghem.com: could not connect to host
 vasanth.org: did not receive HSTS header
 vbh2o.com: did not receive HSTS header
 vbulletin-russia.com: could not connect to host
 vbulletinrussia.com: could not connect to host
 vcdove.com: could not connect to host
 vcr.re: could not connect to host
 vdcomp.cz: could not connect to host
@@ -3426,33 +3439,36 @@ westerhoud.nl: did not receive HSTS head
 wettbuero.de: did not receive HSTS header
 wetten.eu: did not receive HSTS header
 wettertoertchen.com: did not receive HSTS header
 wetttipps.com: did not receive HSTS header
 wetttipps.de: did not receive HSTS header
 wevahoo.com: could not connect to host
 whats.io: could not connect to host
 whatsstalk.me: could not connect to host
+whatwg.org: could not connect to host
 when-release.com: did not receive HSTS header
 whiterabbitcakery.com: could not connect to host
 whitestagforge.com: could not connect to host
 whoclicks.net: could not connect to host
 whoisapi.online: could not connect to host
 wholebites.com: did not receive HSTS header
 whoshotya.de: did not receive HSTS header
 whysuck.com: could not connect to host
 whyworldhot.com: could not connect to host
 wienholding.at: max-age too low: 0
 wieninternational.at: could not connect to host
 wiire.me: could not connect to host
 wikidsystems.com: could not connect to host
 wilf1rst.com: could not connect to host
 william.si: did not receive HSTS header
 willosagiede.com: did not receive HSTS header
+wills.co.tt: could not connect to host
 winclient.cn: did not receive HSTS header
+windhaven.nl: could not connect to host
 winecodeavocado.com: did not receive HSTS header
 winpack.cf: could not connect to host
 winpack.eu.org: could not connect to host
 winsec.nl: did not receive HSTS header
 winshiplending.com: did not receive HSTS header
 winterschoen.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 121"  data: no]
 wirc.gr: could not connect to host
 wiseloan.com: did not receive HSTS header
@@ -3465,25 +3481,25 @@ witzemaschine.com: max-age too low: 0
 wiz.biz: could not connect to host
 wlzhiyin.cn: could not connect to host
 wm-talk.net: did not receive HSTS header
 wohnungsbau-ludwigsburg.de: did not receive HSTS header
 woima.fi: max-age too low: 604800
 wolfesden.com: could not connect to host
 womosale.de: could not connect to host
 wonderfall.xyz: did not receive HSTS header
-wonderlandmovies.de: could not connect to host
 woording.com: could not connect to host
 woresite.jp: did not receive HSTS header
 workfone.io: did not receive HSTS header
 workwithgo.com: could not connect to host
 wowapi.org: could not connect to host
 wphostingspot.com: did not receive HSTS header
+wpinfos.de: could not connect to host
 wpmetadatastandardsproject.org: could not connect to host
-wql.zj.cn: did not receive HSTS header
+wql.zj.cn: [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 121"  data: no]
 writeapp.me: did not receive HSTS header
 wsscompany.com.ve: could not connect to host
 wufu.org: did not receive HSTS header
 wuhengmin.com: did not receive HSTS header
 wurzelzwerg.net: could not connect to host
 www.apollo-auto.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 121"  data: no]
 www.braintreepayments.com: did not receive HSTS header
 www.calyxinstitute.org: [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 121"  data: no]
@@ -3506,35 +3522,30 @@ www.paycheckrecords.com: did not receive
 www.rme.li: did not receive HSTS header
 www.sandbox.mydigipass.com: could not connect to host
 www.surfeasy.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
 x2w.io: could not connect to host
 xa.search.yahoo.com: did not receive HSTS header
-xalqbank-online.az: did not receive HSTS header
 xandocs.com: could not connect to host
 xatr0z.org: could not connect to host
 xavierbarroso.com: could not connect to host
 xcoop.me: could not connect to host
 xellos.ga: could not connect to host
 xellos.ml: could not connect to host
 xenesisziarovky.sk: could not connect to host
 xett.com: did not receive HSTS header
 xfive.de: did not receive HSTS header
 xiaody.me: could not connect to host
 xiaolvmu.me: could not connect to host
 xiaoxiao.im: did not receive HSTS header
 xisa.it: could not connect to host
 xiyu.moe: could not connect to host
-xn--3lqp21gwna.xn--fiqs8s: did not receive HSTS header
-xn--3lqp21gwna.xn--fiqz9s: did not receive HSTS header
-xn--3lqt7ir4md4tzwa.cn: did not receive HSTS header
-xn--3lqt7ir4md4tzwa.xn--fiqs8s: did not receive HSTS header
 xn--4dbjwf8c.cf: could not connect to host
 xn--4dbjwf8c.ga: could not connect to host
 xn--4dbjwf8c.gq: could not connect to host
 xn--4dbjwf8c.tk: could not connect to host
 xn--79q87uvkclvgd56ahq5a.net: did not receive HSTS header
 xn--7rvz7ku3ppnr.jp: did not receive HSTS header
 xn--9pr52k0p5a.com: did not receive HSTS header
 xn--datenrettung-mnchen-jbc.com: did not receive HSTS header
@@ -3578,16 +3589,17 @@ ynode.co: did not receive HSTS header
 ynsn.nl: did not receive HSTS header
 yokeepo.com: max-age too low: 0
 yoloboatrentals.com: did not receive HSTS header
 yoloprod.fr: could not connect to host
 yoloseo.com: could not connect to host
 youcontrol.ru: could not connect to host
 yourstrongbox.com: could not connect to host
 yout.com: max-age too low: 60000
+yoyoost.duckdns.org: could not connect to host
 ypiresia.fr: could not connect to host
 yu.gg: did not receive HSTS header
 yuhen.ru: did not receive HSTS header
 yunzhu.li: did not receive HSTS header
 yunzhu.org: could not connect to host
 yzal.io: could not connect to host
 z33.ch: did not receive HSTS header
 z3liff.com: could not connect to host
@@ -3612,17 +3624,16 @@ zera.com.au: could not connect to host
 zett4.me: did not receive HSTS header
 zh.search.yahoo.com: did not receive HSTS header
 zhaojin97.cn: max-age too low: 604800
 zhendingresources.com: max-age too low: 0
 zigcore.com.br: could not connect to host
 zirtue.io: could not connect to host
 zking.ga: could not connect to host
 zocken.com: could not connect to host
-zombiesecured.com: could not connect to host
 zomerschoen.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 121"  data: no]
 zoneminder.com: did not receive HSTS header
 zoo24.de: did not receive HSTS header
 zoomingin.net: max-age too low: 2592000
 zoznamrealit.sk: did not receive HSTS header
 zqhong.com: could not connect to host
 zrn.in: did not receive HSTS header
 ztan.tk: could not connect to host
--- 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(1488633269518000);
+const PRTime gPreloadListExpirationTime = INT64_C(1488719159983000);
 
 static const char kSTSHostTable[] = {
   /* "007sascha.de", true */ '0', '0', '7', 's', 'a', 's', 'c', 'h', 'a', '.', 'd', 'e', '\0',
   /* "00f.net", true */ '0', '0', 'f', '.', 'n', 'e', 't', '\0',
   /* "01electronica.com.ar", true */ '0', '1', 'e', 'l', 'e', 'c', 't', 'r', 'o', 'n', 'i', 'c', 'a', '.', 'c', 'o', 'm', '.', 'a', 'r', '\0',
   /* "01seguridad.com.ar", true */ '0', '1', 's', 'e', 'g', 'u', 'r', 'i', 'd', 'a', 'd', '.', 'c', 'o', 'm', '.', 'a', 'r', '\0',
   /* "050media.nl", true */ '0', '5', '0', 'm', 'e', 'd', 'i', 'a', '.', 'n', 'l', '\0',
   /* "0513c.com", true */ '0', '5', '1', '3', 'c', '.', 'c', 'o', 'm', '\0',
@@ -130,16 +130,17 @@ static const char kSTSHostTable[] = {
   /* "3click-loan.com", true */ '3', 'c', 'l', 'i', 'c', 'k', '-', 'l', 'o', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "3delivered.com", true */ '3', 'd', 'e', 'l', 'i', 'v', 'e', 'r', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "3do3dont.com", true */ '3', 'd', 'o', '3', 'd', 'o', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "3r.org.uk", true */ '3', 'r', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "3s-hosting.de", true */ '3', 's', '-', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'd', 'e', '\0',
   /* "3sreporting.com", true */ '3', 's', 'r', 'e', 'p', 'o', 'r', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "3timegear.com", true */ '3', 't', 'i', 'm', 'e', 'g', 'e', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "3yearloans.com", true */ '3', 'y', 'e', 'a', 'r', 'l', 'o', 'a', 'n', 's', '.', 'c', 'o', 'm', '\0',
+  /* "4-it.de", true */ '4', '-', 'i', 't', '.', 'd', 'e', '\0',
   /* "403.ch", true */ '4', '0', '3', '.', 'c', 'h', '\0',
   /* "404.sh", true */ '4', '0', '4', '.', 's', 'h', '\0',
   /* "404404.info", true */ '4', '0', '4', '4', '0', '4', '.', 'i', 'n', 'f', 'o', '\0',
   /* "4096bit.de", true */ '4', '0', '9', '6', 'b', 'i', 't', '.', 'd', 'e', '\0',
   /* "41844.de", true */ '4', '1', '8', '4', '4', '.', 'd', 'e', '\0',
   /* "4500.co.il", true */ '4', '5', '0', '0', '.', 'c', 'o', '.', 'i', 'l', '\0',
   /* "4cclothing.com", true */ '4', 'c', 'c', 'l', 'o', 't', 'h', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "4d2.xyz", true */ '4', 'd', '2', '.', 'x', 'y', 'z', '\0',
@@ -188,19 +189,16 @@ static const char kSTSHostTable[] = {
   /* "99511.fi", true */ '9', '9', '5', '1', '1', '.', 'f', 'i', '\0',
   /* "99rst.org", true */ '9', '9', 'r', 's', 't', '.', 'o', 'r', 'g', '\0',
   /* "9tolife.be", true */ '9', 't', 'o', 'l', 'i', 'f', 'e', '.', 'b', 'e', '\0',
   /* "9vx.org", true */ '9', 'v', 'x', '.', 'o', 'r', 'g', '\0',
   /* "a-theme.com", true */ 'a', '-', 't', 'h', 'e', 'm', 'e', '.', 'c', 'o', 'm', '\0',
   /* "a200k.xyz", true */ 'a', '2', '0', '0', 'k', '.', 'x', 'y', 'z', '\0',
   /* "a2nutrition.com.au", true */ 'a', '2', 'n', 'u', 't', 'r', 'i', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "aa-tour.ru", true */ 'a', 'a', '-', 't', 'o', 'u', 'r', '.', 'r', 'u', '\0',
-  /* "aaeblog.com", true */ 'a', 'a', 'e', 'b', 'l', 'o', 'g', '.', 'c', 'o', 'm', '\0',
-  /* "aaeblog.net", true */ 'a', 'a', 'e', 'b', 'l', 'o', 'g', '.', 'n', 'e', 't', '\0',
-  /* "aaeblog.org", true */ 'a', 'a', 'e', 'b', 'l', 'o', 'g', '.', 'o', 'r', 'g', '\0',
   /* "aanmpc.com", true */ 'a', 'a', 'n', 'm', 'p', 'c', '.', 'c', 'o', 'm', '\0',
   /* "aaoo.net", true */ 'a', 'a', 'o', 'o', '.', 'n', 'e', 't', '\0',
   /* "aapas.org.ar", true */ 'a', 'a', 'p', 'a', 's', '.', 'o', 'r', 'g', '.', 'a', 'r', '\0',
   /* "aaron-gustafson.com", true */ 'a', 'a', 'r', 'o', 'n', '-', 'g', 'u', 's', 't', 'a', 'f', 's', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "aaronsilber.me", true */ 'a', 'a', 'r', 'o', 'n', 's', 'i', 'l', 'b', 'e', 'r', '.', 'm', 'e', '\0',
   /* "aatf.us", true */ 'a', 'a', 't', 'f', '.', 'u', 's', '\0',
   /* "aati.info", true */ 'a', 'a', 't', 'i', '.', 'i', 'n', 'f', 'o', '\0',
   /* "abacustech.co.jp", true */ 'a', 'b', 'a', 'c', 'u', 's', 't', 'e', 'c', 'h', '.', 'c', 'o', '.', 'j', 'p', '\0',
@@ -298,17 +296,16 @@ static const char kSTSHostTable[] = {
   /* "adblockextreme.org", true */ 'a', 'd', 'b', 'l', 'o', 'c', 'k', 'e', 'x', 't', 'r', 'e', 'm', 'e', '.', 'o', 'r', 'g', '\0',
   /* "addaxpetroleum.com", true */ 'a', 'd', 'd', 'a', 'x', 'p', 'e', 't', 'r', 'o', 'l', 'e', 'u', 'm', '.', 'c', 'o', 'm', '\0',
   /* "adderall.space", true */ 'a', 'd', 'd', 'e', 'r', 'a', 'l', 'l', '.', 's', 'p', 'a', 'c', 'e', '\0',
   /* "addstar.jp", true */ 'a', 'd', 'd', 's', 't', 'a', 'r', '.', 'j', 'p', '\0',
   /* "addtoany.com", true */ 'a', 'd', 'd', 't', 'o', 'a', 'n', 'y', '.', 'c', 'o', 'm', '\0',
   /* "adduono.com", true */ 'a', 'd', 'd', 'u', 'o', 'n', 'o', '.', 'c', 'o', 'm', '\0',
   /* "adec-emsa.ae", true */ 'a', 'd', 'e', 'c', '-', 'e', 'm', 's', 'a', '.', 'a', 'e', '\0',
   /* "adelaides.com", true */ 'a', 'd', 'e', 'l', 'a', 'i', 'd', 'e', 's', '.', 'c', 'o', 'm', '\0',
-  /* "adelevie.com", true */ 'a', 'd', 'e', 'l', 'e', 'v', 'i', 'e', '.', 'c', 'o', 'm', '\0',
   /* "adfa-1.com", true */ 'a', 'd', 'f', 'a', '-', '1', '.', 'c', 'o', 'm', '\0',
   /* "adhoc.is", true */ 'a', 'd', 'h', 'o', 'c', '.', 'i', 's', '\0',
   /* "adigitali.biz", true */ 'a', 'd', 'i', 'g', 'i', 't', 'a', 'l', 'i', '.', 'b', 'i', 'z', '\0',
   /* "adimaja.com", true */ 'a', 'd', 'i', 'm', 'a', 'j', 'a', '.', 'c', 'o', 'm', '\0',
   /* "adiponectinsupplement.info", true */ 'a', 'd', 'i', 'p', 'o', 'n', 'e', 'c', 't', 'i', 'n', 's', 'u', 'p', 'p', 'l', 'e', 'm', 'e', 'n', 't', '.', 'i', 'n', 'f', 'o', '\0',
   /* "adiponectinsupplement.net", true */ 'a', 'd', 'i', 'p', 'o', 'n', 'e', 'c', 't', 'i', 'n', 's', 'u', 'p', 'p', 'l', 'e', 'm', 'e', 'n', 't', '.', 'n', 'e', 't', '\0',
   /* "adjagu.org", true */ 'a', 'd', 'j', 'a', 'g', 'u', '.', 'o', 'r', 'g', '\0',
   /* "adlershop.ch", true */ 'a', 'd', 'l', 'e', 'r', 's', 'h', 'o', 'p', '.', 'c', 'h', '\0',
@@ -369,16 +366,17 @@ static const char kSTSHostTable[] = {
   /* "afvallendoeje.nu", true */ 'a', 'f', 'v', 'a', 'l', 'l', 'e', 'n', 'd', 'o', 'e', 'j', 'e', '.', 'n', 'u', '\0',
   /* "agalaxyfarfaraway.co.uk", false */ 'a', 'g', 'a', 'l', 'a', 'x', 'y', 'f', 'a', 'r', 'f', 'a', 'r', 'a', 'w', 'a', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "agdalieso.com.ba", true */ 'a', 'g', 'd', 'a', 'l', 'i', 'e', 's', 'o', '.', 'c', 'o', 'm', '.', 'b', 'a', '\0',
   /* "ageg.ca", true */ 'a', 'g', 'e', 'g', '.', 'c', 'a', '\0',
   /* "agenda-loto.net", true */ 'a', 'g', 'e', 'n', 'd', 'a', '-', 'l', 'o', 't', 'o', '.', 'n', 'e', 't', '\0',
   /* "aggr.pw", true */ 'a', 'g', 'g', 'r', '.', 'p', 'w', '\0',
   /* "agilebits.com", true */ 'a', 'g', 'i', 'l', 'e', 'b', 'i', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "agileui.com", true */ 'a', 'g', 'i', 'l', 'e', 'u', 'i', '.', 'c', 'o', 'm', '\0',
+  /* "agonswim.com", false */ 'a', 'g', 'o', 'n', 's', 'w', 'i', 'm', '.', 'c', 'o', 'm', '\0',
   /* "agotnes.com", true */ 'a', 'g', 'o', 't', 'n', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "agowa338.de", true */ 'a', 'g', 'o', 'w', 'a', '3', '3', '8', '.', 'd', 'e', '\0',
   /* "agroline.by", true */ 'a', 'g', 'r', 'o', 'l', 'i', 'n', 'e', '.', 'b', 'y', '\0',
   /* "agwa.name", true */ 'a', 'g', 'w', 'a', '.', 'n', 'a', 'm', 'e', '\0',
   /* "ahd.com", true */ 'a', 'h', 'd', '.', 'c', 'o', 'm', '\0',
   /* "ahero4all.org", true */ 'a', 'h', 'e', 'r', 'o', '4', 'a', 'l', 'l', '.', 'o', 'r', 'g', '\0',
   /* "ahkubiak.ovh", true */ 'a', 'h', 'k', 'u', 'b', 'i', 'a', 'k', '.', 'o', 'v', 'h', '\0',
   /* "ahmad.works", true */ 'a', 'h', 'm', 'a', 'd', '.', 'w', 'o', 'r', 'k', 's', '\0',
@@ -451,16 +449,17 @@ static const char kSTSHostTable[] = {
   /* "alcorao.org", true */ 'a', 'l', 'c', 'o', 'r', 'a', 'o', '.', 'o', 'r', 'g', '\0',
   /* "aldes.co.za", true */ 'a', 'l', 'd', 'e', 's', '.', 'c', 'o', '.', 'z', 'a', '\0',
   /* "aleax.me", true */ 'a', 'l', 'e', 'a', 'x', '.', 'm', 'e', '\0',
   /* "alecpap.com", true */ 'a', 'l', 'e', 'c', 'p', 'a', 'p', '.', 'c', 'o', 'm', '\0',
   /* "alecpapierniak.com", true */ 'a', 'l', 'e', 'c', 'p', 'a', 'p', 'i', 'e', 'r', 'n', 'i', 'a', 'k', '.', 'c', 'o', 'm', '\0',
   /* "alecrust.com", true */ 'a', 'l', 'e', 'c', 'r', 'u', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "aleksib.fi", true */ 'a', 'l', 'e', 'k', 's', 'i', 'b', '.', 'f', 'i', '\0',
   /* "alela.fr", true */ 'a', 'l', 'e', 'l', 'a', '.', 'f', 'r', '\0',
+  /* "alenan.org", true */ 'a', 'l', 'e', 'n', 'a', 'n', '.', 'o', 'r', 'g', '\0',
   /* "alertwire.com", true */ 'a', 'l', 'e', 'r', 't', 'w', 'i', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "alex-ross.co.uk", true */ 'a', 'l', 'e', 'x', '-', 'r', 'o', 's', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "alexanderschimpf.de", true */ 'a', 'l', 'e', 'x', 'a', 'n', 'd', 'e', 'r', 's', 'c', 'h', 'i', 'm', 'p', 'f', '.', 'd', 'e', '\0',
   /* "alexandra-schulze.de", true */ 'a', 'l', 'e', 'x', 'a', 'n', 'd', 'r', 'a', '-', 's', 'c', 'h', 'u', 'l', 'z', 'e', '.', 'd', 'e', '\0',
   /* "alexbaker.org", true */ 'a', 'l', 'e', 'x', 'b', 'a', 'k', 'e', 'r', '.', 'o', 'r', 'g', '\0',
   /* "alexberts.ch", true */ 'a', 'l', 'e', 'x', 'b', 'e', 'r', 't', 's', '.', 'c', 'h', '\0',
   /* "alexei.su", true */ 'a', 'l', 'e', 'x', 'e', 'i', '.', 's', 'u', '\0',
   /* "alexgaynor.net", true */ 'a', 'l', 'e', 'x', 'g', 'a', 'y', 'n', 'o', 'r', '.', 'n', 'e', 't', '\0',
@@ -673,17 +672,16 @@ static const char kSTSHostTable[] = {
   /* "anyprime.net", true */ 'a', 'n', 'y', 'p', 'r', 'i', 'm', 'e', '.', 'n', 'e', 't', '\0',
   /* "anystack.xyz", true */ 'a', 'n', 'y', 's', 't', 'a', 'c', 'k', '.', 'x', 'y', 'z', '\0',
   /* "anytonetech.com", true */ 'a', 'n', 'y', 't', 'o', 'n', 'e', 't', 'e', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "anyways.at", true */ 'a', 'n', 'y', 'w', 'a', 'y', 's', '.', 'a', 't', '\0',
   /* "anzeiger.ag", true */ 'a', 'n', 'z', 'e', 'i', 'g', 'e', 'r', '.', 'a', 'g', '\0',
   /* "ao-dev.com", true */ 'a', 'o', '-', 'd', 'e', 'v', '.', 'c', 'o', 'm', '\0',
   /* "ao2.it", true */ 'a', 'o', '2', '.', 'i', 't', '\0',
   /* "aojf.fr", true */ 'a', 'o', 'j', 'f', '.', 'f', 'r', '\0',
-  /* "aojiao.org", true */ 'a', 'o', 'j', 'i', 'a', 'o', '.', 'o', 'r', 'g', '\0',
   /* "aopedeure.nl", true */ 'a', 'o', 'p', 'e', 'd', 'e', 'u', 'r', 'e', '.', 'n', 'l', '\0',
   /* "aosc.io", false */ 'a', 'o', 's', 'c', '.', 'i', 'o', '\0',
   /* "aosus.org", true */ 'a', 'o', 's', 'u', 's', '.', 'o', 'r', 'g', '\0',
   /* "aovcentrum.nl", true */ 'a', 'o', 'v', 'c', 'e', 'n', 't', 'r', 'u', 'm', '.', 'n', 'l', '\0',
   /* "apachehaus.de", false */ 'a', 'p', 'a', 'c', 'h', 'e', 'h', 'a', 'u', 's', '.', 'd', 'e', '\0',
   /* "apadvantage.com", true */ 'a', 'p', 'a', 'd', 'v', 'a', 'n', 't', 'a', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "aperture-laboratories.science", true */ 'a', 'p', 'e', 'r', 't', 'u', 'r', 'e', '-', 'l', 'a', 'b', 'o', 'r', 'a', 't', 'o', 'r', 'i', 'e', 's', '.', 's', 'c', 'i', 'e', 'n', 'c', 'e', '\0',
   /* "aperturesciencelabs.de", true */ 'a', 'p', 'e', 'r', 't', 'u', 'r', 'e', 's', 'c', 'i', 'e', 'n', 'c', 'e', 'l', 'a', 'b', 's', '.', 'd', 'e', '\0',
@@ -697,25 +695,25 @@ static const char kSTSHostTable[] = {
   /* "api.xero.com", false */ 'a', 'p', 'i', '.', 'x', 'e', 'r', 'o', '.', 'c', 'o', 'm', '\0',
   /* "apis.google.com", true */ 'a', 'p', 'i', 's', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "apis.world", true */ 'a', 'p', 'i', 's', '.', 'w', 'o', 'r', 'l', 'd', '\0',
   /* "apk4fun.com", true */ 'a', 'p', 'k', '4', 'f', 'u', 'n', '.', 'c', 'o', 'm', '\0',
   /* "aplpackaging.co.uk", true */ 'a', 'p', 'l', 'p', 'a', 'c', 'k', 'a', 'g', 'i', 'n', 'g', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "apmg-certified.com", true */ 'a', 'p', 'm', 'g', '-', 'c', 'e', 'r', 't', 'i', 'f', 'i', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "apmg-cyber.com", true */ 'a', 'p', 'm', 'g', '-', 'c', 'y', 'b', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "apn-einstellungen.de", true */ 'a', 'p', 'n', '-', 'e', 'i', 'n', 's', 't', 'e', 'l', 'l', 'u', 'n', 'g', 'e', 'n', '.', 'd', 'e', '\0',
+  /* "apnakliyat.com", false */ 'a', 'p', 'n', 'a', 'k', 'l', 'i', 'y', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "apolloyl.com", true */ 'a', 'p', 'o', 'l', 'l', 'o', 'y', 'l', '.', 'c', 'o', 'm', '\0',
   /* "aponow.de", true */ 'a', 'p', 'o', 'n', 'o', 'w', '.', 'd', 'e', '\0',
   /* "aposke.com", true */ 'a', 'p', 'o', 's', 'k', 'e', '.', 'c', 'o', 'm', '\0',
   /* "apothes.is", true */ 'a', 'p', 'o', 't', 'h', 'e', 's', '.', 'i', 's', '\0',
   /* "app-arena.com", true */ 'a', 'p', 'p', '-', 'a', 'r', 'e', 'n', 'a', '.', 'c', 'o', 'm', '\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',
-  /* "appart.ninja", true */ 'a', 'p', 'p', 'a', 'r', 't', '.', 'n', 'i', 'n', 'j', 'a', '\0',
   /* "appartementhaus-badria.de", true */ 'a', 'p', 'p', 'a', 'r', 't', 'e', 'm', 'e', 'n', 't', 'h', 'a', 'u', 's', '-', 'b', 'a', 'd', 'r', 'i', 'a', '.', 'd', 'e', '\0',
   /* "appchive.net", true */ 'a', 'p', 'p', 'c', 'h', 'i', 'v', 'e', '.', 'n', 'e', 't', '\0',
   /* "appdrinks.com", true */ 'a', 'p', 'p', 'd', 'r', 'i', 'n', 'k', 's', '.', 'c', 'o', 'm', '\0',
   /* "appelboomdefilm.nl", true */ 'a', 'p', 'p', 'e', 'l', 'b', 'o', 'o', 'm', 'd', 'e', 'f', 'i', 'l', 'm', '.', 'n', 'l', '\0',
   /* "appengine.google.com", true */ 'a', 'p', 'p', 'e', 'n', 'g', 'i', 'n', 'e', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "apperio.com", true */ 'a', 'p', 'p', 'e', 'r', 'i', 'o', '.', 'c', 'o', 'm', '\0',
   /* "appharbor.com", true */ 'a', 'p', 'p', 'h', 'a', 'r', 'b', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "apple-watch-zubehoer.de", true */ 'a', 'p', 'p', 'l', 'e', '-', 'w', 'a', 't', 'c', 'h', '-', 'z', 'u', 'b', 'e', 'h', 'o', 'e', 'r', '.', 'd', 'e', '\0',
@@ -853,16 +851,17 @@ static const char kSTSHostTable[] = {
   /* "asr.rocks", true */ 'a', 's', 'r', '.', 'r', 'o', 'c', 'k', 's', '\0',
   /* "asrob.eu", true */ 'a', 's', 'r', 'o', 'b', '.', 'e', 'u', '\0',
   /* "assekuranzjobs.de", true */ 'a', 's', 's', 'e', 'k', 'u', 'r', 'a', 'n', 'z', 'j', 'o', 'b', 's', '.', 'd', 'e', '\0',
   /* "assemble-together.org", true */ 'a', 's', 's', 'e', 'm', 'b', 'l', 'e', '-', 't', 'o', 'g', 'e', 't', 'h', 'e', 'r', '.', 'o', 'r', 'g', '\0',
   /* "astengox.com", true */ 'a', 's', 't', 'e', 'n', 'g', 'o', 'x', '.', 'c', 'o', 'm', '\0',
   /* "astromelody.com", true */ 'a', 's', 't', 'r', 'o', 'm', 'e', 'l', 'o', 'd', 'y', '.', 'c', 'o', 'm', '\0',
   /* "asun.co", true */ 'a', 's', 'u', 'n', '.', 'c', 'o', '\0',
   /* "asurepay.cc", true */ 'a', 's', 'u', 'r', 'e', 'p', 'a', 'y', '.', 'c', 'c', '\0',
+  /* "at.search.yahoo.com", false */ 'a', 't', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "atbeckett.com", true */ 'a', 't', 'b', 'e', 'c', 'k', 'e', 't', 't', '.', 'c', 'o', 'm', '\0',
   /* "atc.io", true */ 'a', 't', 'c', '.', 'i', 'o', '\0',
   /* "atchleyjazz.com", true */ 'a', 't', 'c', 'h', 'l', 'e', 'y', 'j', 'a', 'z', 'z', '.', 'c', 'o', 'm', '\0',
   /* "atchleyjazz.org", true */ 'a', 't', 'c', 'h', 'l', 'e', 'y', 'j', 'a', 'z', 'z', '.', 'o', 'r', 'g', '\0',
   /* "atchleylab.org", true */ 'a', 't', 'c', 'h', 'l', 'e', 'y', 'l', 'a', 'b', '.', 'o', 'r', 'g', '\0',
   /* "ateli.com", true */ 'a', 't', 'e', 'l', 'i', '.', 'c', 'o', 'm', '\0',
   /* "atelier-naruby.cz", true */ 'a', 't', 'e', 'l', 'i', 'e', 'r', '-', 'n', 'a', 'r', 'u', 'b', 'y', '.', 'c', 'z', '\0',
   /* "atelierdesflammesnoires.fr", true */ 'a', 't', 'e', 'l', 'i', 'e', 'r', 'd', 'e', 's', 'f', 'l', 'a', 'm', 'm', 'e', 's', 'n', 'o', 'i', 'r', 'e', 's', '.', 'f', 'r', '\0',
@@ -898,16 +897,17 @@ static const char kSTSHostTable[] = {
   /* "attorney.org.il", true */ 'a', 't', 't', 'o', 'r', 'n', 'e', 'y', '.', 'o', 'r', 'g', '.', 'i', 'l', '\0',
   /* "au2pb.net", true */ 'a', 'u', '2', 'p', 'b', '.', 'n', 'e', 't', '\0',
   /* "aucubin.moe", true */ 'a', 'u', 'c', 'u', 'b', 'i', 'n', '.', 'm', 'o', 'e', '\0',
   /* "audiense.com", true */ 'a', 'u', 'd', 'i', 'e', 'n', 's', 'e', '.', 'c', 'o', 'm', '\0',
   /* "audio-detector.com", true */ 'a', 'u', 'd', 'i', 'o', '-', 'd', 'e', 't', 'e', 'c', 't', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "audiovisualdevices.com.au", true */ 'a', 'u', 'd', 'i', 'o', 'v', 'i', 's', 'u', 'a', 'l', 'd', 'e', 'v', 'i', 'c', 'e', 's', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "audisto.com", true */ 'a', 'u', 'd', 'i', 's', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "auditos.com", true */ 'a', 'u', 'd', 'i', 't', 'o', 's', '.', 'c', 'o', 'm', '\0',
+  /* "auf-feindgebiet.de", true */ 'a', 'u', 'f', '-', 'f', 'e', 'i', 'n', 'd', 'g', 'e', 'b', 'i', 'e', 't', '.', 'd', 'e', '\0',
   /* "aufmerksamkeitsstudie.com", true */ 'a', 'u', 'f', 'm', 'e', 'r', 'k', 's', 'a', 'm', 'k', 'e', 'i', 't', 's', 's', 't', 'u', 'd', 'i', 'e', '.', 'c', 'o', 'm', '\0',
   /* "augaware.org", true */ 'a', 'u', 'g', 'a', 'w', 'a', 'r', 'e', '.', 'o', 'r', 'g', '\0',
   /* "augias.org", true */ 'a', 'u', 'g', 'i', 'a', 's', '.', 'o', 'r', 'g', '\0',
   /* "augiero.it", true */ 'a', 'u', 'g', 'i', 'e', 'r', 'o', '.', 'i', 't', '\0',
   /* "augustian-life.cz", true */ 'a', 'u', 'g', 'u', 's', 't', 'i', 'a', 'n', '-', 'l', 'i', 'f', 'e', '.', 'c', 'z', '\0',
   /* "augustiner-kantorei-erfurt.de", true */ 'a', 'u', 'g', 'u', 's', 't', 'i', 'n', 'e', 'r', '-', 'k', 'a', 'n', 't', 'o', 'r', 'e', 'i', '-', 'e', 'r', 'f', 'u', 'r', 't', '.', 'd', 'e', '\0',
   /* "augustiner-kantorei.de", true */ 'a', 'u', 'g', 'u', 's', 't', 'i', 'n', 'e', 'r', '-', 'k', 'a', 'n', 't', 'o', 'r', 'e', 'i', '.', 'd', 'e', '\0',
   /* "aukaraoke.su", true */ 'a', 'u', 'k', 'a', 'r', 'a', 'o', 'k', 'e', '.', 's', 'u', '\0',
@@ -973,17 +973,16 @@ static const char kSTSHostTable[] = {
   /* "azabani.com", true */ 'a', 'z', 'a', 'b', 'a', 'n', 'i', '.', 'c', 'o', 'm', '\0',
   /* "azazy.net", true */ 'a', 'z', 'a', 'z', 'y', '.', 'n', 'e', 't', '\0',
   /* "azimut.fr", true */ 'a', 'z', 'i', 'm', 'u', 't', '.', 'f', 'r', '\0',
   /* "azino777.ru", true */ 'a', 'z', 'i', 'n', 'o', '7', '7', '7', '.', 'r', 'u', '\0',
   /* "azirevpn.com", true */ 'a', 'z', 'i', 'r', 'e', 'v', 'p', 'n', '.', 'c', 'o', 'm', '\0',
   /* "azlk-team.ru", true */ 'a', 'z', 'l', 'k', '-', 't', 'e', 'a', 'm', '.', 'r', 'u', '\0',
   /* "azort.com", true */ 'a', 'z', 'o', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "aztrix.me", true */ 'a', 'z', 't', 'r', 'i', 'x', '.', 'm', 'e', '\0',
-  /* "azuxul.fr", true */ 'a', 'z', 'u', 'x', 'u', 'l', '.', 'f', 'r', '\0',
   /* "azzag.co.uk", true */ 'a', 'z', 'z', 'a', 'g', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "azzorti.com", false */ 'a', 'z', 'z', 'o', 'r', 't', 'i', '.', 'c', 'o', 'm', '\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',
   /* "b2and.com", false */ 'b', '2', 'a', 'n', 'd', '.', 'c', 'o', 'm', '\0',
   /* "b303.me", true */ 'b', '3', '0', '3', '.', 'm', 'e', '\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',
@@ -998,19 +997,19 @@ static const char kSTSHostTable[] = {
   /* "backmountaingas.com", true */ 'b', 'a', 'c', 'k', 'm', 'o', 'u', 'n', 't', 'a', 'i', 'n', 'g', 'a', 's', '.', 'c', 'o', 'm', '\0',
   /* "backscattering.de", true */ 'b', 'a', 'c', 'k', 's', 'c', 'a', 't', 't', 'e', 'r', 'i', 'n', 'g', '.', 'd', 'e', '\0',
   /* "backschues.net", true */ 'b', 'a', 'c', 'k', 's', 'c', 'h', 'u', 'e', 's', '.', 'n', 'e', 't', '\0',
   /* "bacon-monitoring.org", true */ 'b', 'a', 'c', 'o', 'n', '-', 'm', 'o', 'n', 'i', 't', 'o', 'r', 'i', 'n', 'g', '.', 'o', 'r', 'g', '\0',
   /* "bacontreeconsulting.com", true */ 'b', 'a', 'c', 'o', 'n', 't', 'r', 'e', 'e', 'c', 'o', 'n', 's', 'u', 'l', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "bacula.jp", true */ 'b', 'a', 'c', 'u', 'l', 'a', '.', 'j', 'p', '\0',
   /* "bad.horse", true */ 'b', 'a', 'd', '.', 'h', 'o', 'r', 's', 'e', '\0',
   /* "badbee.cc", true */ 'b', 'a', 'd', 'b', 'e', 'e', '.', 'c', 'c', '\0',
+  /* "badf00d.de", true */ 'b', 'a', 'd', 'f', '0', '0', 'd', '.', 'd', 'e', '\0',
   /* "badges.fedoraproject.org", true */ 'b', 'a', 'd', 'g', 'e', 's', '.', 'f', 'e', 'd', 'o', 'r', 'a', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
   /* "badges.stg.fedoraproject.org", true */ 'b', 'a', 'd', 'g', 'e', 's', '.', 's', 't', 'g', '.', 'f', 'e', 'd', 'o', 'r', 'a', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
-  /* "badhusky.com", true */ 'b', 'a', 'd', 'h', 'u', 's', 'k', 'y', '.', 'c', 'o', 'm', '\0',
   /* "badkamergigant.com", true */ 'b', 'a', 'd', 'k', 'a', 'm', 'e', 'r', 'g', 'i', 'g', 'a', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "badlink.org", true */ 'b', 'a', 'd', 'l', 'i', 'n', 'k', '.', 'o', 'r', 'g', '\0',
   /* "badoo.com", true */ 'b', 'a', 'd', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "baer.im", true */ 'b', 'a', 'e', 'r', '.', 'i', 'm', '\0',
   /* "baer.one", true */ '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", true */ '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',
@@ -1072,17 +1071,16 @@ static const char kSTSHostTable[] = {
   /* "barslecht.com", true */ 'b', 'a', 'r', 's', 'l', 'e', 'c', 'h', 't', '.', 'c', 'o', 'm', '\0',
   /* "barslecht.nl", true */ 'b', 'a', 'r', 's', 'l', 'e', 'c', 'h', 't', '.', 'n', 'l', '\0',
   /* "bartel.ws", true */ 'b', 'a', 'r', 't', 'e', 'l', '.', 'w', 's', '\0',
   /* "bartelt.name", true */ 'b', 'a', 'r', 't', 'e', 'l', 't', '.', 'n', 'a', 'm', 'e', '\0',
   /* "bartlamboo.nl", true */ 'b', 'a', 'r', 't', 'l', 'a', 'm', 'b', 'o', 'o', '.', 'n', 'l', '\0',
   /* "bartula.de", true */ 'b', 'a', 'r', 't', 'u', 'l', 'a', '.', 'd', 'e', '\0',
   /* "baruch.me", true */ 'b', 'a', 'r', 'u', 'c', 'h', '.', 'm', 'e', '\0',
   /* "barunisystems.com", true */ 'b', 'a', 'r', 'u', 'n', 'i', 's', 'y', 's', 't', 'e', 'm', 's', '.', 'c', 'o', 'm', '\0',
-  /* "bashc.at", true */ 'b', 'a', 's', 'h', 'c', '.', 'a', 't', '\0',
   /* "basilisk.io", true */ 'b', 'a', 's', 'i', 'l', 'i', 's', 'k', '.', 'i', 'o', '\0',
   /* "baskettemple.com", true */ 'b', 'a', 's', 'k', 'e', 't', 't', 'e', 'm', 'p', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "basnieuwenhuizen.nl", true */ 'b', 'a', 's', 'n', 'i', 'e', 'u', 'w', 'e', 'n', 'h', 'u', 'i', 'z', 'e', 'n', '.', 'n', 'l', '\0',
   /* "basnoslovno.com.ua", true */ 'b', 'a', 's', 'n', 'o', 's', 'l', 'o', 'v', 'n', 'o', '.', 'c', 'o', 'm', '.', 'u', 'a', '\0',
   /* "basnoslovno.ru", true */ 'b', 'a', 's', 'n', 'o', 's', 'l', 'o', 'v', 'n', 'o', '.', 'r', 'u', '\0',
   /* "bastianstalder.ch", true */ 'b', 'a', 's', 't', 'i', 'a', 'n', 's', 't', 'a', 'l', 'd', 'e', 'r', '.', 'c', 'h', '\0',
   /* "batfoundry.com", true */ 'b', 'a', 't', 'f', 'o', 'u', 'n', 'd', 'r', 'y', '.', 'c', 'o', 'm', '\0',
   /* "batschu.de", true */ 'b', 'a', 't', 's', 'c', 'h', 'u', '.', 'd', 'e', '\0',
@@ -1137,16 +1135,17 @@ static const char kSTSHostTable[] = {
   /* "beercandle.com", true */ 'b', 'e', 'e', 'r', 'c', 'a', 'n', 'd', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "beerians.com", true */ 'b', 'e', 'e', 'r', 'i', 'a', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "beerradar.no", true */ 'b', 'e', 'e', 'r', 'r', 'a', 'd', 'a', 'r', '.', 'n', 'o', '\0',
   /* "beerradar.party", true */ 'b', 'e', 'e', 'r', 'r', 'a', 'd', 'a', 'r', '.', 'p', 'a', 'r', 't', 'y', '\0',
   /* "beetman.net", true */ 'b', 'e', 'e', 't', 'm', 'a', 'n', '.', 'n', 'e', 't', '\0',
   /* "beeznest.com", true */ 'b', 'e', 'e', 'z', 'n', 'e', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "beframed.ch", true */ 'b', 'e', 'f', 'r', 'a', 'm', 'e', 'd', '.', 'c', 'h', '\0',
   /* "befundonline.de", true */ 'b', 'e', 'f', 'u', 'n', 'd', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'd', 'e', '\0',
+  /* "befundup.com", true */ 'b', 'e', 'f', 'u', 'n', 'd', 'u', 'p', '.', 'c', 'o', 'm', '\0',
   /* "behere.be", true */ 'b', 'e', 'h', 'e', 'r', 'e', '.', 'b', 'e', '\0',
   /* "behoerden-online-dienste.de", true */ 'b', 'e', 'h', 'o', 'e', 'r', 'd', 'e', 'n', '-', 'o', 'n', 'l', 'i', 'n', 'e', '-', 'd', 'i', 'e', 'n', 's', 't', 'e', '.', 'd', 'e', '\0',
   /* "beijing.dating", true */ 'b', 'e', 'i', 'j', 'i', 'n', 'g', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "beijinglug.club", true */ 'b', 'e', 'i', 'j', 'i', 'n', 'g', 'l', 'u', 'g', '.', 'c', 'l', 'u', 'b', '\0',
   /* "beikeil.de", true */ 'b', 'e', 'i', 'k', 'e', 'i', 'l', '.', 'd', 'e', '\0',
   /* "beinad.com", true */ 'b', 'e', 'i', 'n', 'a', 'd', '.', 'c', 'o', 'm', '\0',
   /* "beinad.ru", true */ 'b', 'e', 'i', 'n', 'a', 'd', '.', 'r', 'u', '\0',
   /* "belani.eu", true */ 'b', 'e', 'l', 'a', 'n', 'i', '.', 'e', 'u', '\0',
@@ -1309,16 +1308,17 @@ static const char kSTSHostTable[] = {
   /* "biogeniq.ca", true */ 'b', 'i', 'o', 'g', 'e', 'n', 'i', 'q', '.', 'c', 'a', '\0',
   /* "bioknowme.com", true */ 'b', 'i', 'o', 'k', 'n', 'o', 'w', 'm', 'e', '.', 'c', 'o', 'm', '\0',
   /* "biolindo.com", false */ 'b', 'i', 'o', 'l', 'i', 'n', 'd', 'o', '.', 'c', 'o', 'm', '\0',
   /* "bionicspirit.com", true */ 'b', 'i', 'o', 'n', 'i', 'c', 's', 'p', 'i', 'r', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "biosbits.org", true */ 'b', 'i', 'o', 's', 'b', 'i', 't', 's', '.', 'o', 'r', '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',
   /* "biosphere.cc", true */ 'b', 'i', 'o', 's', 'p', 'h', 'e', 'r', 'e', '.', 'c', 'c', '\0',
+  /* "biou.me", true */ 'b', 'i', 'o', 'u', '.', 'm', 'e', '\0',
   /* "bip.gov.sa", false */ 'b', 'i', 'p', '.', 'g', 'o', 'v', '.', 's', 'a', '\0',
   /* "birdfeeder.online", true */ 'b', 'i', 'r', 'd', 'f', 'e', 'e', 'd', 'e', 'r', '.', 'o', 'n', 'l', 'i', 'n', 'e', '\0',
   /* "birkhoff.me", true */ 'b', 'i', 'r', 'k', 'h', 'o', 'f', 'f', '.', 'm', 'e', '\0',
   /* "birminghamsunset.com", true */ 'b', 'i', 'r', 'm', 'i', 'n', 'g', 'h', 'a', 'm', 's', 'u', 'n', 's', 'e', 't', '.', 'c', 'o', 'm', '\0',
   /* "bit-rapid.com", true */ 'b', 'i', 't', '-', 'r', 'a', 'p', 'i', 'd', '.', 'c', 'o', 'm', '\0',
   /* "bit-sentinel.com", true */ 'b', 'i', 't', '-', 's', 'e', 'n', 't', 'i', 'n', 'e', 'l', '.', 'c', 'o', 'm', '\0',
   /* "bit.voyage", true */ 'b', 'i', 't', '.', 'v', 'o', 'y', 'a', 'g', 'e', '\0',
   /* "bit8.com", true */ 'b', 'i', 't', '8', '.', 'c', 'o', 'm', '\0',
@@ -1427,16 +1427,17 @@ static const char kSTSHostTable[] = {
   /* "blendle.nl", true */ 'b', 'l', 'e', 'n', 'd', 'l', 'e', '.', 'n', 'l', '\0',
   /* "blendlecdn.com", true */ 'b', 'l', 'e', 'n', 'd', 'l', 'e', 'c', 'd', 'n', '.', 'c', 'o', 'm', '\0',
   /* "blendr.com", true */ 'b', 'l', 'e', 'n', 'd', 'r', '.', 'c', 'o', 'm', '\0',
   /* "blessedguy.com", true */ 'b', 'l', 'e', 's', 's', 'e', 'd', 'g', 'u', 'y', '.', 'c', 'o', 'm', '\0',
   /* "blessedguy.net", true */ 'b', 'l', 'e', 's', 's', 'e', 'd', 'g', 'u', 'y', '.', 'n', 'e', 't', '\0',
   /* "blessnet.jp", true */ 'b', 'l', 'e', 's', 's', 'n', 'e', 't', '.', 'j', 'p', '\0',
   /* "blewebprojects.com", true */ 'b', 'l', 'e', 'w', 'e', 'b', 'p', 'r', 'o', 'j', 'e', 'c', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "blichmann.eu", true */ 'b', 'l', 'i', 'c', 'h', 'm', 'a', 'n', 'n', '.', 'e', 'u', '\0',
+  /* "blieque.co.uk", true */ 'b', 'l', 'i', 'e', 'q', 'u', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "blingsparkleshine.com", true */ 'b', 'l', 'i', 'n', 'g', 's', 'p', 'a', 'r', 'k', 'l', 'e', 's', 'h', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "blinkenlight.co.uk", true */ 'b', 'l', 'i', 'n', 'k', 'e', 'n', 'l', 'i', 'g', 'h', 't', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "blinkenlight.com.au", true */ 'b', 'l', 'i', 'n', 'k', 'e', 'n', 'l', 'i', 'g', 'h', 't', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "blio.tk", true */ 'b', 'l', 'i', 'o', '.', 't', 'k', '\0',
   /* "blissjoe.com", true */ 'b', 'l', 'i', 's', 's', 'j', 'o', 'e', '.', 'c', 'o', 'm', '\0',
   /* "blissplan.com", true */ 'b', 'l', 'i', 's', 's', 'p', 'l', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "blitzprog.org", true */ 'b', 'l', 'i', 't', 'z', 'p', 'r', 'o', 'g', '.', 'o', 'r', 'g', '\0',
   /* "blizz.news", true */ 'b', 'l', 'i', 'z', 'z', '.', 'n', 'e', 'w', 's', '\0',
@@ -1455,23 +1456,25 @@ static const char kSTSHostTable[] = {
   /* "blowjs.com", true */ 'b', 'l', 'o', 'w', 'j', 's', '.', 'c', 'o', 'm', '\0',
   /* "blubberladen.de", true */ 'b', 'l', 'u', 'b', 'b', 'e', 'r', 'l', 'a', 'd', 'e', 'n', '.', 'd', 'e', '\0',
   /* "blue-labs.org", true */ 'b', 'l', 'u', 'e', '-', 'l', 'a', 'b', 's', '.', 'o', 'r', 'g', '\0',
   /* "blue-leaf81.net", true */ 'b', 'l', 'u', 'e', '-', 'l', 'e', 'a', 'f', '8', '1', '.', 'n', 'e', 't', '\0',
   /* "blue42.net", true */ 'b', 'l', 'u', 'e', '4', '2', '.', 'n', 'e', 't', '\0',
   /* "bluebill.net", true */ 'b', 'l', 'u', 'e', 'b', 'i', 'l', 'l', '.', 'n', 'e', 't', '\0',
   /* "bluechilli.com", true */ 'b', 'l', 'u', 'e', 'c', 'h', 'i', 'l', 'l', 'i', '.', 'c', 'o', 'm', '\0',
   /* "blueflare.org", true */ 'b', 'l', 'u', 'e', 'f', 'l', 'a', 'r', 'e', '.', 'o', 'r', 'g', '\0',
+  /* "bluefuzz.nl", true */ 'b', 'l', 'u', 'e', 'f', 'u', 'z', 'z', '.', 'n', 'l', '\0',
   /* "blueglobalmedia.com", true */ 'b', 'l', 'u', 'e', 'g', 'l', 'o', 'b', 'a', 'l', 'm', 'e', 'd', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "blueimp.net", true */ 'b', 'l', 'u', 'e', 'i', 'm', 'p', '.', 'n', 'e', 't', '\0',
   /* "bluemosh.com", true */ 'b', 'l', 'u', 'e', 'm', 'o', 's', 'h', '.', 'c', 'o', 'm', '\0',
   /* "blueperil.de", true */ 'b', 'l', 'u', 'e', 'p', 'e', 'r', 'i', 'l', '.', 'd', 'e', '\0',
   /* "bluepoint.foundation", true */ 'b', 'l', 'u', 'e', 'p', 'o', 'i', 'n', 't', '.', 'f', 'o', 'u', 'n', 'd', 'a', 't', 'i', 'o', 'n', '\0',
   /* "bluepoint.institute", true */ 'b', 'l', 'u', 'e', 'p', 'o', 'i', 'n', 't', '.', 'i', 'n', 's', 't', 'i', 't', 'u', 't', 'e', '\0',
   /* "bluepoint.one", true */ 'b', 'l', 'u', 'e', 'p', 'o', 'i', 'n', 't', '.', 'o', 'n', 'e', '\0',
+  /* "bluescloud.xyz", true */ 'b', 'l', 'u', 'e', 's', 'c', 'l', 'o', 'u', 'd', '.', 'x', 'y', 'z', '\0',
   /* "bluex.im", true */ 'b', 'l', 'u', 'e', 'x', '.', 'i', 'm', '\0',
   /* "bluex.info", true */ 'b', 'l', 'u', 'e', 'x', '.', 'i', 'n', 'f', 'o', '\0',
   /* "bluex.net", true */ 'b', 'l', 'u', 'e', 'x', '.', 'n', 'e', 't', '\0',
   /* "bluex.org", true */ 'b', 'l', 'u', 'e', 'x', '.', 'o', 'r', 'g', '\0',
   /* "blumenfeldart.com", true */ 'b', 'l', 'u', 'm', 'e', 'n', 'f', 'e', 'l', 'd', 'a', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "blumiges-fischbachtal.de", true */ 'b', 'l', 'u', 'm', 'i', 'g', 'e', 's', '-', 'f', 'i', 's', 'c', 'h', 'b', 'a', 'c', 'h', 't', 'a', 'l', '.', 'd', 'e', '\0',
   /* "blupig.net", true */ 'b', 'l', 'u', 'p', 'i', 'g', '.', 'n', 'e', 't', '\0',
   /* "blurringexistence.net", true */ 'b', 'l', 'u', 'r', 'r', 'i', 'n', 'g', 'e', 'x', 'i', 's', 't', 'e', 'n', 'c', 'e', '.', 'n', 'e', 't', '\0',
@@ -1778,16 +1781,17 @@ static const char kSTSHostTable[] = {
   /* "calaborlawnews.com", true */ 'c', 'a', 'l', 'a', 'b', 'o', 'r', 'l', 'a', 'w', 'n', 'e', 'w', 's', '.', 'c', 'o', 'm', '\0',
   /* "calc.pw", true */ 'c', 'a', 'l', 'c', '.', 'p', 'w', '\0',
   /* "calculator-imt.com", true */ 'c', 'a', 'l', 'c', 'u', 'l', 'a', 't', 'o', 'r', '-', 'i', 'm', 't', '.', 'c', 'o', 'm', '\0',
   /* "calculator.tf", true */ 'c', 'a', 'l', 'c', 'u', 'l', 'a', 't', 'o', 'r', '.', 't', 'f', '\0',
   /* "calebmorris.com", false */ 'c', 'a', 'l', 'e', 'b', 'm', 'o', 'r', 'r', 'i', 's', '.', 'c', 'o', 'm', '\0',
   /* "calgoty.com", true */ 'c', 'a', 'l', 'g', 'o', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "calibreapp.com", false */ 'c', 'a', 'l', 'i', 'b', 'r', 'e', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "calibso.net", true */ 'c', 'a', 'l', 'i', 'b', 's', 'o', '.', 'n', 'e', 't', '\0',
+  /* "call.me", false */ 'c', 'a', 'l', 'l', '.', 'm', 'e', '\0',
   /* "callcap.com", false */ 'c', 'a', 'l', 'l', 'c', 'a', 'p', '.', 'c', 'o', 'm', '\0',
   /* "callear.org", true */ 'c', 'a', 'l', 'l', 'e', 'a', 'r', '.', 'o', 'r', 'g', '\0',
   /* "callhub.io", true */ 'c', 'a', 'l', 'l', 'h', 'u', 'b', '.', 'i', 'o', '\0',
   /* "callision.com", true */ 'c', 'a', 'l', 'l', 'i', 's', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "callsigns.ca", true */ 'c', 'a', 'l', 'l', 's', 'i', 'g', 'n', 's', '.', 'c', 'a', '\0',
   /* "calomel.org", true */ 'c', 'a', 'l', 'o', 'm', 'e', 'l', '.', 'o', 'r', 'g', '\0',
   /* "calories.org", true */ 'c', 'a', 'l', 'o', 'r', 'i', 'e', 's', '.', 'o', 'r', 'g', '\0',
   /* "caltonnutrition.com", true */ 'c', 'a', 'l', 't', 'o', 'n', 'n', 'u', 't', 'r', 'i', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
@@ -1904,16 +1908,17 @@ static const char kSTSHostTable[] = {
   /* "catsmagic.pp.ua", true */ 'c', 'a', 't', 's', 'm', 'a', 'g', 'i', 'c', '.', 'p', 'p', '.', 'u', 'a', '\0',
   /* "cattivo.nl", true */ 'c', 'a', 't', 't', 'i', 'v', 'o', '.', 'n', 'l', '\0',
   /* "cavac.at", true */ 'c', 'a', 'v', 'a', 'c', '.', 'a', 't', '\0',
   /* "cazes.info", true */ 'c', 'a', 'z', 'e', 's', '.', 'i', 'n', 'f', 'o', '\0',
   /* "cbamo.org", true */ 'c', 'b', 'a', 'm', 'o', '.', 'o', 'r', 'g', '\0',
   /* "cbbank.com", true */ 'c', 'b', 'b', 'a', 'n', 'k', '.', 'c', 'o', 'm', '\0',
   /* "cbecrft.net", true */ 'c', 'b', 'e', 'c', 'r', 'f', 't', '.', 'n', 'e', 't', '\0',
   /* "cbtistexcalac.mx", true */ 'c', 'b', 't', 'i', 's', 't', 'e', 'x', 'c', 'a', 'l', 'a', 'c', '.', 'm', 'x', '\0',
+  /* "ccayearbook.com", true */ 'c', 'c', 'a', 'y', 'e', 'a', 'r', 'b', 'o', 'o', 'k', '.', 'c', 'o', 'm', '\0',
   /* "ccblog.de", true */ 'c', 'c', 'b', 'l', 'o', 'g', '.', 'd', 'e', '\0',
   /* "ccgn.co", true */ 'c', 'c', 'g', 'n', '.', 'c', 'o', '\0',
   /* "ccja.ro", false */ 'c', 'c', 'j', 'a', '.', 'r', 'o', '\0',
   /* "cdkeykopen.com", true */ 'c', 'd', 'k', 'e', 'y', 'k', 'o', 'p', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "cdkeyworld.de", true */ 'c', 'd', 'k', 'e', 'y', 'w', 'o', 'r', 'l', 'd', '.', 'd', 'e', '\0',
   /* "cdlcenter.com", true */ 'c', 'd', 'l', 'c', 'e', 'n', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "cdnjs.com", true */ 'c', 'd', 'n', 'j', 's', '.', 'c', 'o', 'm', '\0',
   /* "cdt.org", true */ 'c', 'd', 't', '.', 'o', 'r', 'g', '\0',
@@ -1992,17 +1997,16 @@ static const char kSTSHostTable[] = {
   /* "charlesbwise.com", true */ 'c', 'h', 'a', 'r', 'l', 'e', 's', 'b', 'w', 'i', 's', 'e', '.', 'c', 'o', 'm', '\0',
   /* "charlierogers.co.uk", true */ 'c', 'h', 'a', 'r', 'l', 'i', 'e', 'r', 'o', 'g', 'e', 'r', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "charlierogers.com", true */ 'c', 'h', 'a', 'r', 'l', 'i', 'e', 'r', 'o', 'g', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "charmander.me", true */ 'c', 'h', 'a', 'r', 'm', 'a', 'n', 'd', 'e', 'r', '.', 'm', 'e', '\0',
   /* "charteroak.org", true */ 'c', 'h', 'a', 'r', 't', 'e', 'r', 'o', 'a', 'k', '.', 'o', 'r', 'g', '\0',
   /* "chat-porc.eu", true */ 'c', 'h', 'a', 't', '-', 'p', 'o', 'r', 'c', '.', 'e', 'u', '\0',
   /* "chatbelgie.eu", true */ 'c', 'h', 'a', 't', 'b', 'e', 'l', 'g', 'i', 'e', '.', 'e', 'u', '\0',
   /* "chatear.social", true */ 'c', 'h', 'a', 't', 'e', 'a', 'r', '.', 's', 'o', 'c', 'i', 'a', 'l', '\0',
-  /* "chateau-belvoir.com", true */ 'c', 'h', 'a', 't', 'e', 'a', 'u', '-', 'b', 'e', 'l', 'v', 'o', 'i', 'r', '.', 'c', 'o', 'm', '\0',
   /* "chatme.im", false */ 'c', 'h', 'a', 't', 'm', 'e', '.', 'i', 'm', '\0',
   /* "chatnederland.eu", true */ 'c', 'h', 'a', 't', 'n', 'e', 'd', 'e', 'r', 'l', 'a', 'n', 'd', '.', 'e', 'u', '\0',
   /* "chaz6.com", true */ 'c', 'h', 'a', 'z', '6', '.', 'c', 'o', 'm', '\0',
   /* "chazay.net", true */ 'c', 'h', 'a', 'z', 'a', 'y', '.', 'n', 'e', 't', '\0',
   /* "chcemvediet.sk", true */ 'c', 'h', 'c', 'e', 'm', 'v', 'e', 'd', 'i', 'e', 't', '.', 's', 'k', '\0',
   /* "chch.it", true */ 'c', 'h', 'c', 'h', '.', 'i', 't', '\0',
   /* "cheapestgamecards.de", true */ 'c', 'h', 'e', 'a', 'p', 'e', 's', 't', 'g', 'a', 'm', 'e', 'c', 'a', 'r', 'd', 's', '.', 'd', 'e', '\0',
   /* "cheapestgamecards.nl", true */ 'c', 'h', 'e', 'a', 'p', 'e', 's', 't', 'g', 'a', 'm', 'e', 'c', 'a', 'r', 'd', 's', '.', 'n', 'l', '\0',
@@ -2252,16 +2256,17 @@ static const char kSTSHostTable[] = {
   /* "codefoundry.it", false */ 'c', 'o', 'd', 'e', 'f', 'o', 'u', 'n', 'd', 'r', 'y', '.', 'i', 't', '\0',
   /* "codeit.guru", true */ 'c', 'o', 'd', 'e', 'i', 't', '.', 'g', 'u', 'r', 'u', '\0',
   /* "codelayer.ca", true */ 'c', 'o', 'd', 'e', 'l', 'a', 'y', 'e', 'r', '.', 'c', 'a', '\0',
   /* "codelove.de", true */ 'c', 'o', 'd', 'e', 'l', 'o', 'v', 'e', '.', 'd', 'e', '\0',
   /* "codeplay.org", true */ 'c', 'o', 'd', 'e', 'p', 'l', 'a', 'y', '.', 'o', 'r', 'g', '\0',
   /* "codepoet.de", true */ 'c', 'o', 'd', 'e', 'p', 'o', 'e', 't', '.', 'd', 'e', '\0',
   /* "codepoints.net", true */ 'c', 'o', 'd', 'e', 'p', 'o', 'i', 'n', 't', 's', '.', 'n', 'e', 't', '\0',
   /* "codepref.com", true */ 'c', 'o', 'd', 'e', 'p', 'r', 'e', 'f', '.', 'c', 'o', 'm', '\0',
+  /* "codepult.com", true */ 'c', 'o', 'd', 'e', 'p', 'u', 'l', 't', '.', 'c', 'o', 'm', '\0',
   /* "codereview.appspot.com", false */ 'c', 'o', 'd', 'e', 'r', 'e', 'v', 'i', 'e', 'w', '.', 'a', 'p', 'p', 's', 'p', 'o', 't', '.', 'c', 'o', 'm', '\0',
   /* "codereview.chromium.org", false */ 'c', 'o', 'd', 'e', 'r', 'e', 'v', 'i', 'e', 'w', '.', 'c', 'h', 'r', 'o', 'm', 'i', 'u', 'm', '.', 'o', 'r', 'g', '\0',
   /* "coderhangout.com", true */ 'c', 'o', 'd', 'e', 'r', 'h', 'a', 'n', 'g', 'o', 'u', 't', '.', 'c', 'o', 'm', '\0',
   /* "codesport.io", true */ 'c', 'o', 'd', 'e', 's', 'p', 'o', 'r', 't', '.', 'i', 'o', '\0',
   /* "codeux.com", true */ 'c', 'o', 'd', 'e', 'u', 'x', '.', 'c', 'o', 'm', '\0',
   /* "codewild.de", true */ 'c', 'o', 'd', 'e', 'w', 'i', 'l', 'd', '.', 'd', 'e', '\0',
   /* "codeyellow.nl", true */ 'c', 'o', 'd', 'e', 'y', 'e', 'l', 'l', 'o', 'w', '.', 'n', 'l', '\0',
   /* "coding.net", true */ 'c', 'o', 'd', 'i', 'n', 'g', '.', 'n', 'e', 't', '\0',
@@ -2347,17 +2352,16 @@ static const char kSTSHostTable[] = {
   /* "compucorner.com.mx", true */ 'c', 'o', 'm', 'p', 'u', 'c', 'o', 'r', 'n', 'e', 'r', '.', 'c', 'o', 'm', '.', 'm', 'x', '\0',
   /* "compucorner.mx", true */ 'c', 'o', 'm', 'p', 'u', 'c', 'o', 'r', 'n', 'e', 'r', '.', 'm', 'x', '\0',
   /* "computerhilfe-feucht.de", true */ 'c', 'o', 'm', 'p', 'u', 't', 'e', 'r', 'h', 'i', 'l', 'f', 'e', '-', 'f', 'e', 'u', 'c', 'h', 't', '.', 'd', 'e', '\0',
   /* "computersystems.guru", true */ 'c', 'o', 'm', 'p', 'u', 't', 'e', 'r', 's', 'y', 's', 't', 'e', 'm', 's', '.', 'g', 'u', 'r', 'u', '\0',
   /* "comssa.org.au", true */ 'c', 'o', 'm', 's', 's', 'a', '.', 'o', 'r', 'g', '.', 'a', 'u', '\0',
   /* "concentrade.de", true */ 'c', 'o', 'n', 'c', 'e', 'n', 't', 'r', 'a', 'd', 'e', '.', 'd', 'e', '\0',
   /* "conclave.global", true */ 'c', 'o', 'n', 'c', 'l', 'a', 'v', 'e', '.', 'g', 'l', 'o', 'b', 'a', 'l', '\0',
   /* "condepenalba.com", true */ 'c', 'o', 'n', 'd', 'e', 'p', 'e', 'n', 'a', 'l', 'b', 'a', '.', 'c', 'o', 'm', '\0',
-  /* "condesaelectronics.com", true */ 'c', 'o', 'n', 'd', 'e', 's', 'a', 'e', 'l', 'e', 'c', 't', 'r', 'o', 'n', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "condosforcash.com", true */ 'c', 'o', 'n', 'd', 'o', 's', 'f', 'o', 'r', 'c', 'a', 's', 'h', '.', 'c', 'o', 'm', '\0',
   /* "confiancefoundation.org", true */ 'c', 'o', 'n', 'f', 'i', 'a', 'n', 'c', 'e', 'f', 'o', 'u', 'n', 'd', 'a', 't', 'i', 'o', 'n', '.', 'o', 'r', 'g', '\0',
   /* "config.schokokeks.org", false */ 'c', 'o', 'n', 'f', 'i', 'g', '.', 's', 'c', 'h', 'o', 'k', 'o', 'k', 'e', 'k', 's', '.', 'o', 'r', 'g', '\0',
   /* "confiwall.de", true */ 'c', 'o', 'n', 'f', 'i', 'w', 'a', 'l', 'l', '.', 'd', 'e', '\0',
   /* "conflux.tw", true */ 'c', 'o', 'n', 'f', 'l', 'u', 'x', '.', 't', 'w', '\0',
   /* "confucio.cl", true */ 'c', 'o', 'n', 'f', 'u', 'c', 'i', 'o', '.', 'c', 'l', '\0',
   /* "connect.dating", true */ 'c', 'o', 'n', 'n', 'e', 'c', 't', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "connect.ua", false */ 'c', 'o', 'n', 'n', 'e', 'c', 't', '.', 'u', 'a', '\0',
@@ -2852,31 +2856,31 @@ static const char kSTSHostTable[] = {
   /* "deinballon.de", true */ 'd', 'e', 'i', 'n', 'b', 'a', 'l', 'l', 'o', 'n', '.', 'd', 'e', '\0',
   /* "dejandayoff.com", true */ 'd', 'e', 'j', 'a', 'n', 'd', 'a', 'y', 'o', 'f', 'f', '.', 'c', 'o', 'm', '\0',
   /* "delayrefunds.co.uk", true */ 'd', 'e', 'l', 'a', 'y', 'r', 'e', 'f', 'u', 'n', 'd', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "delfic.org", true */ 'd', 'e', 'l', 'f', 'i', 'c', '.', 'o', 'r', 'g', '\0',
   /* "deliciisanatoase.ro", true */ 'd', 'e', 'l', 'i', 'c', 'i', 'i', 's', 'a', 'n', 'a', 't', 'o', 'a', 's', 'e', '.', 'r', 'o', '\0',
   /* "deliciousmedia.co.uk", true */ 'd', 'e', 'l', 'i', 'c', 'i', 'o', 'u', 's', 'm', 'e', 'd', 'i', 'a', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "delphine.dance", true */ 'd', 'e', 'l', 'p', 'h', 'i', 'n', 'e', '.', 'd', 'a', 'n', 'c', 'e', '\0',
   /* "delta-data.ch", true */ 'd', 'e', 'l', 't', 'a', '-', 'd', 'a', 't', 'a', '.', 'c', 'h', '\0',
+  /* "delvj.org", true */ 'd', 'e', 'l', 'v', 'j', '.', 'o', 'r', 'g', '\0',
   /* "dementiapraecox.de", true */ 'd', 'e', 'm', 'e', 'n', 't', 'i', 'a', 'p', 'r', 'a', 'e', 'c', 'o', 'x', '.', 'd', 'e', '\0',
   /* "demo.swedbank.se", true */ 'd', 'e', 'm', 'o', '.', 's', 'w', 'e', 'd', 'b', 'a', 'n', 'k', '.', 's', 'e', '\0',
   /* "democracy.io", true */ 'd', 'e', 'm', 'o', 'c', 'r', 'a', 'c', 'y', '.', 'i', 'o', '\0',
   /* "demomanca.com", true */ 'd', 'e', 'm', 'o', 'm', 'a', 'n', 'c', 'a', '.', 'c', 'o', 'm', '\0',
   /* "demotops.com", false */ 'd', 'e', 'm', 'o', 't', 'o', 'p', 's', '.', 'c', 'o', 'm', '\0',
   /* "demuzere.be", true */ 'd', 'e', 'm', 'u', 'z', 'e', 'r', 'e', '.', 'b', 'e', '\0',
   /* "demuzere.com", true */ 'd', 'e', 'm', 'u', 'z', 'e', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "demuzere.eu", true */ 'd', 'e', 'm', 'u', 'z', 'e', 'r', 'e', '.', 'e', 'u', '\0',
   /* "demuzere.net", true */ 'd', 'e', 'm', 'u', 'z', 'e', 'r', 'e', '.', 'n', 'e', 't', '\0',
   /* "demuzere.org", true */ 'd', 'e', 'm', 'u', 'z', 'e', 'r', 'e', '.', 'o', 'r', 'g', '\0',
   /* "denabot.pw", true */ 'd', 'e', 'n', 'a', 'b', 'o', 't', '.', 'p', 'w', '\0',
   /* "denardbrewing.com", true */ 'd', 'e', 'n', 'a', 'r', 'd', 'b', 'r', 'e', 'w', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "dengchangdong.com", true */ 'd', 'e', 'n', 'g', 'c', 'h', 'a', 'n', 'g', 'd', 'o', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "denimio.com", true */ 'd', 'e', 'n', 'i', 'm', 'i', 'o', '.', 'c', 'o', 'm', '\0',
-  /* "dennisdoes.net", true */ 'd', 'e', 'n', 'n', 'i', 's', 'd', 'o', 'e', 's', '.', 'n', 'e', 't', '\0',
   /* "denniskoot.nl", true */ 'd', 'e', 'n', 'n', 'i', 's', 'k', 'o', 'o', 't', '.', 'n', 'l', '\0',
   /* "dennogumi.org", true */ 'd', 'e', 'n', 'n', 'o', 'g', 'u', 'm', 'i', '.', 'o', 'r', 'g', '\0',
   /* "dentallaborgeraeteservice.de", true */ 'd', 'e', 'n', 't', 'a', 'l', 'l', 'a', 'b', 'o', 'r', 'g', 'e', 'r', 'a', 'e', 't', 'e', 's', 'e', 'r', 'v', 'i', 'c', 'e', '.', 'd', 'e', '\0',
   /* "dentistglasgow.com", true */ 'd', 'e', 'n', 't', 'i', 's', 't', 'g', 'l', 'a', 's', 'g', 'o', 'w', '.', 'c', 'o', 'm', '\0',
   /* "dentrassi.de", true */ 'd', 'e', 'n', 't', 'r', 'a', 's', 's', 'i', '.', 'd', 'e', '\0',
   /* "dentystabirmingham.co.uk", true */ 'd', 'e', 'n', 't', 'y', 's', 't', 'a', 'b', 'i', 'r', 'm', 'i', 'n', 'g', 'h', 'a', 'm', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "denverprophit.us", true */ 'd', 'e', 'n', 'v', 'e', 'r', 'p', 'r', 'o', 'p', 'h', 'i', 't', '.', 'u', 's', '\0',
   /* "depeche-mode.moscow", true */ 'd', 'e', 'p', 'e', 'c', 'h', 'e', '-', 'm', 'o', 'd', 'e', '.', 'm', 'o', 's', 'c', 'o', 'w', '\0',
@@ -2890,17 +2894,16 @@ static const char kSTSHostTable[] = {
   /* "derekkent.com", true */ 'd', 'e', 'r', 'e', 'k', 'k', 'e', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "dergeilstestammderwelt.de", true */ 'd', 'e', 'r', 'g', 'e', 'i', 'l', 's', 't', 'e', 's', 't', 'a', 'm', 'm', 'd', 'e', 'r', 'w', 'e', 'l', 't', '.', 'd', 'e', '\0',
   /* "derhil.de", true */ 'd', 'e', 'r', 'h', 'i', 'l', '.', 'd', 'e', '\0',
   /* "dermapuur.nl", true */ 'd', 'e', 'r', 'm', 'a', 'p', 'u', 'u', 'r', '.', 'n', 'l', '\0',
   /* "deroo.org", true */ 'd', 'e', 'r', 'o', 'o', '.', 'o', 'r', 'g', '\0',
   /* "derp.army", true */ 'd', 'e', 'r', 'p', '.', 'a', 'r', 'm', 'y', '\0',
   /* "derreichesack.com", true */ 'd', 'e', 'r', 'r', 'e', 'i', 'c', 'h', 'e', 's', 'a', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "dersoundhunter.de", true */ 'd', 'e', 'r', 's', 'o', 'u', 'n', 'd', 'h', 'u', 'n', 't', 'e', 'r', '.', 'd', 'e', '\0',
-  /* "designed-cybersecurity.com", true */ 'd', 'e', 's', 'i', 'g', 'n', 'e', 'd', '-', 'c', 'y', 'b', 'e', 'r', 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "designgears.com", true */ 'd', 'e', 's', 'i', 'g', 'n', 'g', 'e', 'a', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "designhotel-kronjuwel.de", true */ 'd', 'e', 's', 'i', 'g', 'n', 'h', 'o', 't', 'e', 'l', '-', 'k', 'r', 'o', 'n', 'j', 'u', 'w', 'e', 'l', '.', 'd', 'e', '\0',
   /* "designsbyjanith.com", true */ 'd', 'e', 's', 'i', 'g', 'n', 's', 'b', 'y', 'j', 'a', 'n', 'i', 't', 'h', '.', 'c', 'o', 'm', '\0',
   /* "designthinking.or.jp", false */ 'd', 'e', 's', 'i', 'g', 'n', 't', 'h', 'i', 'n', 'k', 'i', 'n', 'g', '.', 'o', 'r', '.', 'j', 'p', '\0',
   /* "designville.cz", true */ 'd', 'e', 's', 'i', 'g', 'n', 'v', 'i', 'l', 'l', 'e', '.', 'c', 'z', '\0',
   /* "designville.sk", true */ 'd', 'e', 's', 'i', 'g', 'n', 'v', 'i', 'l', 'l', 'e', '.', 's', 'k', '\0',
   /* "desmaakvanplanten.be", true */ 'd', 'e', 's', 'm', 'a', 'a', 'k', 'v', 'a', 'n', 'p', 'l', 'a', 'n', 't', 'e', 'n', '.', 'b', 'e', '\0',
   /* "despora.de", true */ 'd', 'e', 's', 'p', 'o', 'r', 'a', '.', 'd', 'e', '\0',
@@ -3070,16 +3073,17 @@ static const char kSTSHostTable[] = {
   /* "djul.net", true */ 'd', 'j', 'u', 'l', '.', 'n', 'e', 't', '\0',
   /* "djxmmx.net", false */ 'd', 'j', 'x', 'm', 'm', 'x', '.', 'n', 'e', 't', '\0',
   /* "dk.search.yahoo.com", false */ 'd', 'k', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "dkds.us", true */ 'd', 'k', 'd', 's', '.', 'u', 's', '\0',
   /* "dl.google.com", true */ 'd', 'l', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "dlaspania.pl", true */ 'd', 'l', 'a', 's', 'p', 'a', 'n', 'i', 'a', '.', 'p', 'l', '\0',
   /* "dlc.viasinc.com", true */ 'd', 'l', 'c', '.', 'v', 'i', 'a', 's', 'i', 'n', 'c', '.', 'c', 'o', 'm', '\0',
   /* "dlemper.de", true */ 'd', 'l', 'e', 'm', 'p', 'e', 'r', '.', 'd', 'e', '\0',
+  /* "dlld.com", true */ 'd', 'l', 'l', 'd', '.', 'c', 'o', 'm', '\0',
   /* "dlouwrink.nl", true */ 'd', 'l', 'o', 'u', 'w', 'r', 'i', 'n', 'k', '.', 'n', 'l', '\0',
   /* "dlscomputers.com.au", true */ 'd', 'l', 's', 'c', 'o', 'm', 'p', 'u', 't', 'e', 'r', 's', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "dm.lookout.com", false */ 'd', 'm', '.', 'l', 'o', 'o', 'k', 'o', 'u', 't', '.', 'c', 'o', 'm', '\0',
   /* "dm.mylookout.com", false */ 'd', 'm', '.', 'm', 'y', 'l', 'o', 'o', 'k', 'o', 'u', 't', '.', 'c', 'o', 'm', '\0',
   /* "dm7ds.de", true */ 'd', 'm', '7', 'd', 's', '.', 'd', 'e', '\0',
   /* "dmarc.dk", true */ 'd', 'm', 'a', 'r', 'c', '.', 'd', 'k', '\0',
   /* "dmcibulldog.com", true */ 'd', 'm', 'c', 'i', 'b', 'u', 'l', 'l', 'd', 'o', 'g', '.', 'c', 'o', 'm', '\0',
   /* "dmeevalumate.com", true */ 'd', 'm', 'e', 'e', 'v', 'a', 'l', 'u', 'm', 'a', 't', 'e', '.', 'c', 'o', 'm', '\0',
@@ -3087,17 +3091,16 @@ static const char kSTSHostTable[] = {
   /* "dmi.es", true */ 'd', 'm', 'i', '.', 'e', 's', '\0',
   /* "dmix.ca", true */ 'd', 'm', 'i', 'x', '.', 'c', 'a', '\0',
   /* "dmlogic.com", true */ 'd', 'm', 'l', 'o', 'g', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "dmtry.me", true */ 'd', 'm', 't', 'r', 'y', '.', 'm', 'e', '\0',
   /* "dmwall.cn", true */ 'd', 'm', 'w', 'a', 'l', 'l', '.', 'c', 'n', '\0',
   /* "dmxledlights.com", true */ 'd', 'm', 'x', 'l', 'e', 'd', 'l', 'i', 'g', 'h', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "dmz.ninja", true */ 'd', 'm', 'z', '.', 'n', 'i', 'n', 'j', 'a', '\0',
   /* "dn3s.me", true */ 'd', 'n', '3', 's', '.', 'm', 'e', '\0',
-  /* "dn42.us", true */ 'd', 'n', '4', '2', '.', 'u', 's', '\0',
   /* "dna.li", true */ 'd', 'n', 'a', '.', 'l', 'i', '\0',
   /* "dnc.org.nz", true */ 'd', 'n', 'c', '.', 'o', 'r', 'g', '.', 'n', 'z', '\0',
   /* "dndtools.net", true */ 'd', 'n', 'd', 't', 'o', 'o', 'l', 's', '.', 'n', 'e', 't', '\0',
   /* "dne.lu", true */ 'd', 'n', 'e', '.', 'l', 'u', '\0',
   /* "dnmlab.it", true */ 'd', 'n', 'm', 'l', 'a', 'b', '.', 'i', 't', '\0',
   /* "dns-control.eu", true */ 'd', 'n', 's', '-', 'c', 'o', 'n', 't', 'r', 'o', 'l', '.', 'e', 'u', '\0',
   /* "dns.google.com", true */ 'd', 'n', 's', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "dnscrypt.org", true */ 'd', 'n', 's', 'c', 'r', 'y', 'p', 't', '.', 'o', 'r', 'g', '\0',
@@ -3167,20 +3170,20 @@ static const char kSTSHostTable[] = {
   /* "doobydude.us", true */ 'd', 'o', 'o', 'b', 'y', 'd', 'u', 'd', 'e', '.', 'u', 's', '\0',
   /* "doodledraw.ninja", true */ 'd', 'o', 'o', 'd', 'l', 'e', 'd', 'r', 'a', 'w', '.', 'n', 'i', 'n', 'j', 'a', '\0',
   /* "dooku.cz", true */ 'd', 'o', 'o', 'k', 'u', '.', 'c', 'z', '\0',
   /* "dooleytackaberry.com", true */ 'd', 'o', 'o', 'l', 'e', 'y', 't', 'a', 'c', 'k', 'a', 'b', 'e', 'r', 'r', 'y', '.', 'c', 'o', 'm', '\0',
   /* "doomsworld.com", true */ 'd', 'o', 'o', 'm', 's', 'w', 'o', 'r', 'l', 'd', '.', 'c', 'o', 'm', '\0',
   /* "doooonoooob.com", true */ 'd', 'o', 'o', 'o', 'o', 'n', 'o', 'o', 'o', 'o', 'b', '.', 'c', 'o', 'm', '\0',
   /* "doordecor.bg", true */ 'd', 'o', 'o', 'r', 'd', 'e', 'c', 'o', 'r', '.', 'b', 'g', '\0',
   /* "doorflow.com", true */ 'd', 'o', 'o', 'r', 'f', 'l', 'o', 'w', '.', 'c', 'o', 'm', '\0',
+  /* "dopesoft.de", true */ 'd', 'o', 'p', 'e', 's', 'o', 'f', 't', '.', 'd', 'e', '\0',
   /* "doppenpost.nl", true */ 'd', 'o', 'p', 'p', 'e', 'n', 'p', 'o', 's', 't', '.', 'n', 'l', '\0',
   /* "dorianharmans.nl", true */ 'd', 'o', 'r', 'i', 'a', 'n', 'h', 'a', 'r', 'm', 'a', 'n', 's', '.', 'n', 'l', '\0',
   /* "dorianmuthig.com", true */ 'd', 'o', 'r', 'i', 'a', 'n', 'm', 'u', 't', 'h', 'i', 'g', '.', 'c', 'o', 'm', '\0',
-  /* "dossplumbing.co.za", true */ 'd', 'o', 's', 's', 'p', 'l', 'u', 'm', 'b', 'i', 'n', 'g', '.', 'c', 'o', '.', 'z', 'a', '\0',
   /* "dot.ro", true */ 'd', 'o', 't', '.', 'r', 'o', '\0',
   /* "dot42.no", true */ 'd', 'o', 't', '4', '2', '.', 'n', 'o', '\0',
   /* "dotbigbang.com", true */ 'd', 'o', 't', 'b', 'i', 'g', 'b', 'a', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "dotbox.org", true */ 'd', 'o', 't', 'b', 'o', 'x', '.', 'o', 'r', 'g', '\0',
   /* "dothebangthingsalon.com", true */ 'd', 'o', 't', 'h', 'e', 'b', 'a', 'n', 'g', 't', 'h', 'i', 'n', 'g', 's', 'a', 'l', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "dotkod.com", true */ 'd', 'o', 't', 'k', 'o', 'd', '.', 'c', 'o', 'm', '\0',
   /* "dotkod.pl", true */ 'd', 'o', 't', 'k', 'o', 'd', '.', 'p', 'l', '\0',
   /* "dotrox.net", true */ 'd', 'o', 't', 'r', 'o', 'x', '.', 'n', 'e', 't', '\0',
@@ -3276,16 +3279,17 @@ static const char kSTSHostTable[] = {
   /* "duncancmt.com", true */ 'd', 'u', 'n', 'c', 'a', 'n', 'c', 'm', 't', '.', 'c', 'o', 'm', '\0',
   /* "dune.io", true */ 'd', 'u', 'n', 'e', '.', 'i', 'o', '\0',
   /* "dunea.nl", true */ 'd', 'u', 'n', 'e', 'a', '.', 'n', 'l', '\0',
   /* "duo.money", true */ 'd', 'u', 'o', '.', 'm', 'o', 'n', 'e', 'y', '\0',
   /* "durangoenergyllc.com", true */ 'd', 'u', 'r', 'a', 'n', 'g', 'o', 'e', 'n', 'e', 'r', 'g', 'y', 'l', 'l', 'c', '.', 'c', 'o', 'm', '\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.com", true */ 'd', 'u', 't', 'c', 'h', 'r', 'a', 'n', 'k', '.', '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',
   /* "duuu.ch", true */ 'd', 'u', 'u', 'u', '.', 'c', 'h', '\0',
   /* "dvbris.co.uk", true */ 'd', 'v', 'b', 'r', 'i', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
@@ -3301,16 +3305,17 @@ static const char kSTSHostTable[] = {
   /* "dyktig.as", true */ 'd', 'y', 'k', 't', 'i', 'g', '.', 'a', 's', '\0',
   /* "dymersion.com", true */ 'd', 'y', 'm', 'e', 'r', 's', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "dyn-nserve.net", true */ 'd', 'y', 'n', '-', 'n', 's', 'e', 'r', 'v', 'e', '.', 'n', 'e', 't', '\0',
   /* "dyn.im", true */ 'd', 'y', 'n', '.', 'i', 'm', '\0',
   /* "dynaloop.net", true */ 'd', 'y', 'n', 'a', 'l', 'o', 'o', 'p', '.', 'n', 'e', 't', '\0',
   /* "dynamicnet.net", false */ 'd', 'y', 'n', 'a', 'm', 'i', 'c', 'n', 'e', 't', '.', 'n', 'e', 't', '\0',
   /* "dynamicsnetwork.net", true */ 'd', 'y', 'n', 'a', 'm', 'i', 'c', 's', 'n', 'e', 't', 'w', 'o', 'r', 'k', '.', 'n', 'e', 't', '\0',
   /* "dyrenesverden.no", true */ 'd', 'y', 'r', 'e', 'n', 'e', 's', 'v', 'e', 'r', 'd', 'e', 'n', '.', 'n', 'o', '\0',
+  /* "dziekonski.com", true */ 'd', 'z', 'i', 'e', 'k', 'o', 'n', 's', 'k', 'i', '.', 'c', 'o', 'm', '\0',
   /* "dzyabchenko.com", true */ 'd', 'z', 'y', 'a', 'b', 'c', 'h', 'e', 'n', 'k', 'o', '.', 'c', 'o', 'm', '\0',
   /* "e-kontakti.fi", true */ 'e', '-', 'k', 'o', 'n', 't', 'a', 'k', 't', 'i', '.', 'f', 'i', '\0',
   /* "e-lifetechnology.com", true */ 'e', '-', 'l', 'i', 'f', 'e', 't', 'e', 'c', 'h', 'n', 'o', 'l', 'o', 'g', 'y', '.', 'c', 'o', 'm', '\0',
   /* "e-mak.eu", true */ 'e', '-', 'm', 'a', 'k', '.', 'e', 'u', '\0',
   /* "e-sa.com", true */ 'e', '-', 's', 'a', '.', 'c', 'o', 'm', '\0',
   /* "e-teacher.pl", true */ 'e', '-', 't', 'e', 'a', 'c', 'h', 'e', 'r', '.', 'p', 'l', '\0',
   /* "e-tmf.org", true */ 'e', '-', 't', 'm', 'f', '.', 'o', 'r', 'g', '\0',
   /* "e-tresor.at", true */ 'e', '-', 't', 'r', 'e', 's', 'o', 'r', '.', 'a', 't', '\0',
@@ -3552,16 +3557,17 @@ static const char kSTSHostTable[] = {
   /* "encryptallthethings.net", true */ 'e', 'n', 'c', 'r', 'y', 'p', 't', 'a', 'l', 'l', 't', 'h', 'e', 't', 'h', 'i', 'n', 'g', 's', '.', 'n', 'e', 't', '\0',
   /* "encrypted.google.com", true */ 'e', 'n', 'c', 'r', 'y', 'p', 't', 'e', 'd', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "encryptedaudience.com", true */ 'e', 'n', 'c', 'r', 'y', 'p', 't', 'e', 'd', 'a', 'u', 'd', 'i', 'e', 'n', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "encryptio.com", true */ 'e', 'n', 'c', 'r', 'y', 'p', 't', 'i', 'o', '.', 'c', 'o', 'm', '\0',
   /* "end.pp.ua", true */ 'e', 'n', 'd', '.', 'p', 'p', '.', 'u', 'a', '\0',
   /* "endeal.nl", true */ 'e', 'n', 'd', 'e', 'a', 'l', '.', 'n', 'l', '\0',
   /* "ender.co.at", true */ 'e', 'n', 'd', 'e', 'r', '.', 'c', 'o', '.', 'a', 't', '\0',
   /* "endlessdark.net", true */ 'e', 'n', 'd', 'l', 'e', 's', 's', 'd', 'a', 'r', 'k', '.', 'n', 'e', 't', '\0',
+  /* "endlessdiy.ca", true */ 'e', 'n', 'd', 'l', 'e', 's', 's', 'd', 'i', 'y', '.', 'c', 'a', '\0',
   /* "endlesshorizon.net", true */ 'e', 'n', 'd', 'l', 'e', 's', 's', 'h', 'o', 'r', 'i', 'z', 'o', 'n', '.', 'n', 'e', 't', '\0',
   /* "endlesstone.com", true */ 'e', 'n', 'd', 'l', 'e', 's', 's', 't', 'o', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "endofnet.org", true */ 'e', 'n', 'd', 'o', 'f', 'n', 'e', 't', '.', 'o', 'r', 'g', '\0',
   /* "endohaus.ca", true */ 'e', 'n', 'd', 'o', 'h', 'a', 'u', 's', '.', 'c', 'a', '\0',
   /* "endohaus.com", true */ 'e', 'n', 'd', 'o', 'h', 'a', 'u', 's', '.', 'c', 'o', 'm', '\0',
   /* "endohaus.eu", true */ 'e', 'n', 'd', 'o', 'h', 'a', 'u', 's', '.', 'e', 'u', '\0',
   /* "endohaus.us", true */ 'e', 'n', 'd', 'o', 'h', 'a', 'u', 's', '.', 'u', 's', '\0',
   /* "enecoshop.nl", true */ 'e', 'n', 'e', 'c', 'o', 's', 'h', 'o', 'p', '.', 'n', 'l', '\0',
@@ -3770,17 +3776,16 @@ static const char kSTSHostTable[] = {
   /* "exekutori.com", true */ 'e', 'x', 'e', 'k', 'u', 't', 'o', 'r', 'i', '.', 'c', 'o', 'm', '\0',
   /* "exemples-de-stands.com", true */ 'e', 'x', 'e', 'm', 'p', 'l', 'e', 's', '-', 'd', 'e', '-', 's', 't', 'a', 'n', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "exeria.de", true */ 'e', 'x', 'e', 'r', 'i', 'a', '.', 'd', 'e', '\0',
   /* "exgaywatch.com", true */ 'e', 'x', 'g', 'a', 'y', 'w', 'a', 't', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "exiahost.com", true */ 'e', 'x', 'i', 'a', 'h', 'o', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "exon.io", true */ 'e', 'x', 'o', 'n', '.', 'i', 'o', '\0',
   /* "exoscale.ch", true */ 'e', 'x', 'o', 's', 'c', 'a', 'l', 'e', '.', 'c', 'h', '\0',
   /* "exoticads.com", true */ 'e', 'x', 'o', 't', 'i', 'c', 'a', 'd', 's', '.', 'c', 'o', 'm', '\0',
-  /* "exousiakaidunamis.xyz", true */ 'e', 'x', 'o', 'u', 's', 'i', 'a', 'k', 'a', 'i', 'd', 'u', 'n', 'a', 'm', 'i', 's', '.', 'x', 'y', 'z', '\0',
   /* "exp.de", true */ 'e', 'x', 'p', '.', 'd', 'e', '\0',
   /* "expatads.com", true */ 'e', 'x', 'p', 'a', 't', 'a', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "experienceoz.com.au", true */ 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'o', 'z', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "experteasy.com.au", true */ 'e', 'x', 'p', 'e', 'r', 't', 'e', 'a', 's', 'y', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "experts-en-gestion.fr", true */ 'e', 'x', 'p', 'e', 'r', 't', 's', '-', 'e', 'n', '-', 'g', 'e', 's', 't', 'i', 'o', 'n', '.', 'f', 'r', '\0',
   /* "explodie.org", true */ 'e', 'x', 'p', 'l', 'o', 'd', 'i', 'e', '.', 'o', 'r', 'g', '\0',
   /* "exploit.cz", true */ 'e', 'x', 'p', 'l', 'o', 'i', 't', '.', 'c', 'z', '\0',
   /* "exploit.party", true */ 'e', 'x', 'p', 'l', 'o', 'i', 't', '.', 'p', 'a', 'r', 't', 'y', '\0',
@@ -3797,16 +3802,17 @@ static const char kSTSHostTable[] = {
   /* "extratorrents.tech", true */ 'e', 'x', 't', 'r', 'a', 't', 'o', 'r', 'r', 'e', 'n', 't', 's', '.', 't', 'e', 'c', 'h', '\0',
   /* "extreme-gaming.de", true */ 'e', 'x', 't', 'r', 'e', 'm', 'e', '-', 'g', 'a', 'm', 'i', 'n', 'g', '.', 'd', 'e', '\0',
   /* "extreme-gaming.us", true */ 'e', 'x', 't', 'r', 'e', 'm', 'e', '-', 'g', 'a', 'm', 'i', 'n', 'g', '.', 'u', 's', '\0',
   /* "eyasc.nl", true */ 'e', 'y', 'a', 's', 'c', '.', 'n', 'l', '\0',
   /* "eydesignguidelines.com", true */ 'e', 'y', 'd', 'e', 's', 'i', 'g', 'n', 'g', 'u', 'i', 'd', 'e', 'l', 'i', 'n', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "eye-carat.com", true */ 'e', 'y', 'e', '-', 'c', 'a', 'r', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "eyedarts.com", true */ 'e', 'y', 'e', 'd', 'a', 'r', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "eyeonid.com", true */ 'e', 'y', 'e', 'o', 'n', 'i', 'd', '.', 'c', 'o', 'm', '\0',
+  /* "eytosh.net", true */ 'e', 'y', 't', 'o', 's', 'h', '.', 'n', 'e', 't', '\0',
   /* "eyyit.com", false */ 'e', 'y', 'y', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "ezequiel-garzon.net", true */ 'e', 'z', 'e', 'q', 'u', 'i', 'e', 'l', '-', 'g', 'a', 'r', 'z', 'o', 'n', '.', 'n', 'e', 't', '\0',
   /* "ezhik-din.ru", true */ 'e', 'z', 'h', 'i', 'k', '-', 'd', 'i', 'n', '.', 'r', 'u', '\0',
   /* "ezrefurb.co.uk", true */ 'e', 'z', 'r', 'e', 'f', 'u', 'r', 'b', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "f-be.com", true */ 'f', '-', 'b', 'e', '.', 'c', 'o', 'm', '\0',
   /* "f-droid.org", true */ 'f', '-', 'd', 'r', 'o', 'i', 'd', '.', 'o', 'r', 'g', '\0',
   /* "f-thie.de", true */ 'f', '-', 't', 'h', 'i', 'e', '.', 'd', 'e', '\0',
   /* "f00.fr", true */ 'f', '0', '0', '.', 'f', 'r', '\0',
@@ -3962,17 +3968,16 @@ static const char kSTSHostTable[] = {
   /* "fidanza.eu", true */ 'f', 'i', 'd', 'a', 'n', 'z', 'a', '.', 'e', 'u', '\0',
   /* "fidel.uk", true */ 'f', 'i', 'd', 'e', 'l', '.', 'u', 'k', '\0',
   /* "fidelapp.com", true */ 'f', 'i', 'd', 'e', 'l', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "fiendishmasterplan.com", true */ 'f', 'i', 'e', 'n', 'd', 'i', 's', 'h', 'm', 'a', 's', 't', 'e', 'r', 'p', 'l', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "fierlafijn.net", true */ 'f', 'i', 'e', 'r', 'l', 'a', 'f', 'i', 'j', 'n', '.', 'n', 'e', 't', '\0',
   /* "fierman.eu", false */ 'f', 'i', 'e', 'r', 'm', 'a', 'n', '.', 'e', 'u', '\0',
   /* "fierman.net", false */ 'f', 'i', 'e', 'r', 'm', 'a', 'n', '.', 'n', 'e', 't', '\0',
   /* "fierman.us", false */ 'f', 'i', 'e', 'r', 'm', 'a', 'n', '.', 'u', 's', '\0',
-  /* "fifieldtech.com", true */ 'f', 'i', 'f', 'i', 'e', 'l', 'd', 't', 'e', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "figurasdelinguagem.com.br", true */ 'f', 'i', 'g', 'u', 'r', 'a', 's', 'd', 'e', 'l', 'i', 'n', 'g', 'u', 'a', 'g', 'e', 'm', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "figuurzagers.nl", false */ 'f', 'i', 'g', 'u', 'u', 'r', 'z', 'a', 'g', 'e', 'r', 's', '.', 'n', 'l', '\0',
   /* "fiilr.com", true */ 'f', 'i', 'i', 'l', 'r', '.', 'c', 'o', 'm', '\0',
   /* "fiix.io", true */ 'f', 'i', 'i', 'x', '.', 'i', 'o', '\0',
   /* "fiken.no", true */ 'f', 'i', 'k', 'e', 'n', '.', 'n', 'o', '\0',
   /* "fiksel.info", true */ 'f', 'i', 'k', 's', 'e', 'l', '.', 'i', 'n', 'f', 'o', '\0',
   /* "fikt.space", true */ 'f', 'i', 'k', 't', '.', 's', 'p', 'a', 'c', 'e', '\0',
   /* "file-pdf.it", true */ 'f', 'i', 'l', 'e', '-', 'p', 'd', 'f', '.', 'i', 't', '\0',
@@ -4088,17 +4093,16 @@ static const char kSTSHostTable[] = {
   /* "flowlo.me", true */ 'f', 'l', 'o', 'w', 'l', 'o', '.', 'm', 'e', '\0',
   /* "flox.io", true */ 'f', 'l', 'o', 'x', '.', 'i', 'o', '\0',
   /* "flra.gov", true */ 'f', 'l', 'r', 'a', '.', 'g', 'o', 'v', '\0',
   /* "fluidojobs.com", true */ 'f', 'l', 'u', 'i', 'd', 'o', 'j', 'o', 'b', 's', '.', 'c', 'o', 'm', '\0',
   /* "flukethoughts.com", true */ 'f', 'l', 'u', 'k', 'e', 't', 'h', 'o', 'u', 'g', 'h', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "fluxent.de", false */ 'f', 'l', 'u', 'x', 'e', 'n', 't', '.', 'd', 'e', '\0',
   /* "fluxfingers.net", true */ 'f', 'l', 'u', 'x', 'f', 'i', 'n', 'g', 'e', 'r', 's', '.', 'n', 'e', 't', '\0',
   /* "fluxforge.com", true */ 'f', 'l', 'u', 'x', 'f', 'o', 'r', 'g', 'e', '.', 'c', 'o', 'm', '\0',
-  /* "fly.moe", true */ 'f', 'l', 'y', '.', 'm', 'o', 'e', '\0',
   /* "flynn.io", true */ 'f', 'l', 'y', 'n', 'n', '.', 'i', 'o', '\0',
   /* "flyserver.co.il", true */ 'f', 'l', 'y', 's', 'e', 'r', 'v', 'e', 'r', '.', 'c', 'o', '.', 'i', 'l', '\0',
   /* "fm.ie", true */ 'f', 'm', '.', 'i', 'e', '\0',
   /* "fmarchal.fr", true */ 'f', 'm', 'a', 'r', 'c', 'h', 'a', 'l', '.', 'f', 'r', '\0',
   /* "fnb-griffinonline.com", true */ 'f', 'n', 'b', '-', 'g', 'r', 'i', 'f', 'f', 'i', 'n', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "fniephaus.com", true */ 'f', 'n', 'i', 'e', 'p', 'h', 'a', 'u', 's', '.', 'c', 'o', 'm', '\0',
   /* "fnordserver.eu", true */ 'f', 'n', 'o', 'r', 'd', 's', 'e', 'r', 'v', 'e', 'r', '.', 'e', 'u', '\0',
   /* "fnzc.co.nz", true */ 'f', 'n', 'z', 'c', '.', 'c', 'o', '.', 'n', 'z', '\0',
@@ -4274,16 +4278,17 @@ static const char kSTSHostTable[] = {
   /* "fugle.de", true */ 'f', 'u', 'g', 'l', 'e', '.', 'd', 'e', '\0',
   /* "fuglede.dk", true */ 'f', 'u', 'g', 'l', 'e', 'd', 'e', '.', 'd', 'k', '\0',
   /* "fukushima-web.com", true */ 'f', 'u', 'k', 'u', 's', 'h', 'i', 'm', 'a', '-', 'w', 'e', 'b', '.', 'c', 'o', 'm', '\0',
   /* "fumblers.ca", true */ 'f', 'u', 'm', 'b', 'l', 'e', 'r', 's', '.', 'c', 'a', '\0',
   /* "fumiware.com", true */ 'f', 'u', 'm', 'i', 'w', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "fumo.se", true */ 'f', 'u', 'm', 'o', '.', 's', 'e', '\0',
   /* "funchestra.at", false */ 'f', 'u', 'n', 'c', 'h', 'e', 's', 't', 'r', 'a', '.', 'a', 't', '\0',
   /* "functions-online.com", true */ 'f', 'u', 'n', 'c', 't', 'i', 'o', 'n', 's', '-', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
+  /* "fundacionhijosdelsol.org", true */ 'f', 'u', 'n', 'd', 'a', 'c', 'i', 'o', 'n', 'h', 'i', 'j', 'o', 's', 'd', 'e', 'l', 's', 'o', 'l', '.', 'o', 'r', 'g', '\0',
   /* "fundays.nl", true */ 'f', 'u', 'n', 'd', 'a', 'y', 's', '.', 'n', 'l', '\0',
   /* "funderburg.me", true */ 'f', 'u', 'n', 'd', 'e', 'r', 'b', 'u', 'r', 'g', '.', 'm', 'e', '\0',
   /* "fundingempire.com", true */ 'f', 'u', 'n', 'd', 'i', 'n', 'g', 'e', 'm', 'p', 'i', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "funi4u.com", true */ 'f', 'u', 'n', 'i', '4', 'u', '.', 'c', 'o', 'm', '\0',
   /* "funktionel.co", true */ 'f', 'u', 'n', 'k', 't', 'i', 'o', 'n', 'e', 'l', '.', 'c', 'o', '\0',
   /* "funnyang.com", true */ 'f', 'u', 'n', 'n', 'y', 'a', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "furgo.love", true */ 'f', 'u', 'r', 'g', 'o', '.', 'l', 'o', 'v', 'e', '\0',
   /* "furkancaliskan.com", true */ 'f', 'u', 'r', 'k', 'a', 'n', 'c', 'a', 'l', 'i', 's', 'k', 'a', 'n', '.', 'c', 'o', 'm', '\0',
@@ -4369,16 +4374,17 @@ static const char kSTSHostTable[] = {
   /* "gamesurferapp.com", true */ 'g', 'a', 'm', 'e', 's', 'u', 'r', 'f', 'e', 'r', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "gamingreinvented.com", true */ 'g', 'a', 'm', 'i', 'n', 'g', 'r', 'e', 'i', 'n', 'v', 'e', 'n', 't', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "gamingzoneservers.com", true */ 'g', 'a', 'm', 'i', 'n', 'g', 'z', 'o', 'n', 'e', 's', 'e', 'r', 'v', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "gamishou.fr", true */ 'g', 'a', 'm', 'i', 's', 'h', 'o', 'u', '.', 'f', 'r', '\0',
   /* "gamoloco.com", true */ 'g', 'a', 'm', 'o', 'l', 'o', 'c', 'o', '.', 'c', 'o', 'm', '\0',
   /* "gancedo.com.es", true */ 'g', 'a', 'n', 'c', 'e', 'd', 'o', '.', 'c', 'o', 'm', '.', 'e', 's', '\0',
   /* "ganhonet.com.br", true */ 'g', 'a', 'n', 'h', 'o', 'n', 'e', 't', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "gapdirect.com", true */ 'g', 'a', 'p', 'd', 'i', 'r', 'e', 'c', 't', '.', 'c', 'o', 'm', '\0',
+  /* "gar-nich.net", true */ 'g', 'a', 'r', '-', 'n', 'i', 'c', 'h', '.', 'n', 'e', 't', '\0',
   /* "garagegoossens.be", true */ 'g', 'a', 'r', 'a', 'g', 'e', 'g', 'o', 'o', 's', 's', 'e', 'n', 's', '.', 'b', 'e', '\0',
   /* "garantieabschluss.de", false */ 'g', 'a', 'r', 'a', 'n', 't', 'i', 'e', 'a', 'b', 's', 'c', 'h', 'l', 'u', 's', 's', '.', 'd', 'e', '\0',
   /* "garbage-juice.com", true */ 'g', 'a', 'r', 'b', 'a', 'g', 'e', '-', 'j', 'u', 'i', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "garciamartin.me", true */ 'g', 'a', 'r', 'c', 'i', 'a', 'm', 'a', 'r', 't', 'i', 'n', '.', 'm', 'e', '\0',
   /* "garden-life.org", true */ 'g', 'a', 'r', 'd', 'e', 'n', '-', 'l', 'i', 'f', 'e', '.', 'o', 'r', 'g', '\0',
   /* "garden.trade", true */ 'g', 'a', 'r', 'd', 'e', 'n', '.', 't', 'r', 'a', 'd', 'e', '\0',
   /* "garderobche.eu", true */ 'g', 'a', 'r', 'd', 'e', 'r', 'o', 'b', 'c', 'h', 'e', '.', 'e', 'u', '\0',
   /* "garedtech.com", true */ 'g', 'a', 'r', 'e', 'd', 't', 'e', 'c', 'h', '.', 'c', 'o', 'm', '\0',
@@ -4507,16 +4513,17 @@ static const char kSTSHostTable[] = {
   /* "getts.ro", true */ 'g', 'e', 't', 't', 's', '.', 'r', 'o', '\0',
   /* "getvdownloader.com", true */ 'g', 'e', 't', 'v', 'd', 'o', 'w', 'n', 'l', 'o', 'a', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "gflclan.ru", true */ 'g', 'f', 'l', 'c', 'l', 'a', 'n', '.', 'r', 'u', '\0',
   /* "ggmmontascale.it", true */ 'g', 'g', 'm', 'm', 'o', 'n', 't', 'a', 's', 'c', 'a', 'l', 'e', '.', 'i', 't', '\0',
   /* "ggp2.com", true */ 'g', 'g', 'p', '2', '.', 'c', 'o', 'm', '\0',
   /* "ggservers.com", true */ 'g', 'g', 's', 'e', 'r', 'v', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "ggss.cf", true */ 'g', 'g', 's', 's', '.', 'c', 'f', '\0',
   /* "ggss.ml", true */ 'g', 'g', 's', 's', '.', 'm', 'l', '\0',
+  /* "ggx.us", true */ 'g', 'g', 'x', '.', 'u', 's', '\0',
   /* "gh16.com.ar", true */ 'g', 'h', '1', '6', '.', 'c', 'o', 'm', '.', 'a', 'r', '\0',
   /* "gha.st", true */ 'g', 'h', 'a', '.', 's', 't', '\0',
   /* "ghcif.de", true */ 'g', 'h', 'c', 'i', 'f', '.', 'd', 'e', '\0',
   /* "gheorghe-sarcov.ga", true */ 'g', 'h', 'e', 'o', 'r', 'g', 'h', 'e', '-', 's', 'a', 'r', 'c', 'o', 'v', '.', 'g', 'a', '\0',
   /* "ghostblog.info", true */ 'g', 'h', 'o', 's', 't', 'b', 'l', 'o', 'g', '.', 'i', 'n', 'f', 'o', '\0',
   /* "ghostwritershigh.com", true */ 'g', 'h', 'o', 's', 't', 'w', 'r', 'i', 't', 'e', 'r', 's', 'h', 'i', 'g', 'h', '.', 'c', 'o', 'm', '\0',
   /* "ghrelinblocker.info", true */ 'g', 'h', 'r', 'e', 'l', 'i', 'n', 'b', 'l', 'o', 'c', 'k', 'e', 'r', '.', 'i', 'n', 'f', 'o', '\0',
   /* "giacomodrago.com", true */ 'g', 'i', 'a', 'c', 'o', 'm', 'o', 'd', 'r', 'a', 'g', 'o', '.', 'c', 'o', 'm', '\0',
@@ -4577,16 +4584,17 @@ static const char kSTSHostTable[] = {
   /* "globalonetechnology.com", true */ 'g', 'l', 'o', 'b', 'a', 'l', 'o', 'n', 'e', 't', 'e', 'c', 'h', 'n', 'o', 'l', 'o', 'g', 'y', '.', 'c', 'o', 'm', '\0',
   /* "globalperspectivescanada.com", true */ 'g', 'l', 'o', 'b', 'a', 'l', 'p', 'e', 'r', 's', 'p', 'e', 'c', 't', 'i', 'v', 'e', 's', 'c', 'a', 'n', 'a', 'd', 'a', '.', 'c', 'o', 'm', '\0',
   /* "globalsites.nl", false */ 'g', 'l', 'o', 'b', 'a', 'l', 's', 'i', 't', 'e', 's', '.', 'n', 'l', '\0',
   /* "globuli-info.de", true */ 'g', 'l', 'o', 'b', 'u', 'l', 'i', '-', 'i', 'n', 'f', 'o', '.', 'd', 'e', '\0',
   /* "glopoi.com", true */ 'g', 'l', 'o', 'p', 'o', 'i', '.', 'c', 'o', 'm', '\0',
   /* "glossopnorthendafc.co.uk", true */ 'g', 'l', 'o', 's', 's', 'o', 'p', 'n', 'o', 'r', 't', 'h', 'e', 'n', 'd', 'a', 'f', 'c', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "glotter.com", true */ 'g', 'l', 'o', 't', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "glubbforum.de", true */ 'g', 'l', 'u', 'b', 'b', 'f', 'o', 'r', 'u', 'm', '.', 'd', 'e', '\0',
+  /* "glyph.ws", true */ 'g', 'l', 'y', 'p', 'h', '.', 'w', 's', '\0',
   /* "gm-assicurazioni.it", true */ 'g', 'm', '-', 'a', 's', 's', 'i', 'c', 'u', 'r', 'a', 'z', 'i', 'o', 'n', 'i', '.', 'i', 't', '\0',
   /* "gmail.com", false */ 'g', 'm', 'a', 'i', 'l', '.', 'c', 'o', 'm', '\0',
   /* "gmbh-kiekin.de", true */ 'g', 'm', 'b', 'h', '-', 'k', 'i', 'e', 'k', 'i', 'n', '.', 'd', 'e', '\0',
   /* "gmcd.co", true */ 'g', 'm', 'c', 'd', '.', 'c', 'o', '\0',
   /* "gmdu.net", true */ 'g', 'm', 'd', 'u', '.', 'n', 'e', 't', '\0',
   /* "gmta.nl", true */ 'g', 'm', 't', 'a', '.', 'n', 'l', '\0',
   /* "gmw-hannover.de", true */ 'g', 'm', 'w', '-', 'h', 'a', 'n', 'n', 'o', 'v', 'e', 'r', '.', 'd', 'e', '\0',
   /* "gmw-ingenieurbuero.de", true */ 'g', 'm', 'w', '-', 'i', 'n', 'g', 'e', 'n', 'i', 'e', 'u', 'r', 'b', 'u', 'e', 'r', 'o', '.', 'd', 'e', '\0',
@@ -4625,17 +4633,16 @@ static const char kSTSHostTable[] = {
   /* "gong8.win", true */ 'g', 'o', 'n', 'g', '8', '.', 'w', 'i', 'n', '\0',
   /* "gooby.co", true */ 'g', 'o', 'o', 'b', 'y', '.', 'c', 'o', '\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',
   /* "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',
-  /* "goolok.com", true */ 'g', 'o', 'o', 'l', 'o', 'k', '.', 'c', 'o', 'm', '\0',
   /* "goozz.nl", true */ 'g', 'o', 'o', 'z', 'z', '.', 'n', 'l', '\0',
   /* "gopay.cz", true */ 'g', 'o', 'p', 'a', 'y', '.', 'c', 'z', '\0',
   /* "gopokego.cz", true */ 'g', 'o', 'p', 'o', 'k', 'e', 'g', 'o', '.', 'c', 'z', '\0',
   /* "gordonobrecht.com", true */ 'g', 'o', 'r', 'd', 'o', 'n', 'o', 'b', 'r', 'e', 'c', 'h', 't', '.', 'c', 'o', 'm', '\0',
   /* "gorf.chat", true */ 'g', 'o', 'r', 'f', '.', 'c', 'h', 'a', 't', '\0',
   /* "gorgiaxx.com", true */ 'g', 'o', 'r', 'g', 'i', 'a', 'x', 'x', '.', 'c', 'o', 'm', '\0',
   /* "gorod74.ru", true */ 'g', 'o', 'r', 'o', 'd', '7', '4', '.', 'r', 'u', '\0',
   /* "gorschenin.com", true */ 'g', 'o', 'r', 's', 'c', 'h', 'e', 'n', 'i', 'n', '.', 'c', 'o', 'm', '\0',
@@ -4766,17 +4773,16 @@ static const char kSTSHostTable[] = {
   /* "groupebaillargeon.com", true */ 'g', 'r', 'o', 'u', 'p', 'e', 'b', 'a', 'i', 'l', 'l', 'a', 'r', 'g', 'e', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "groups.google.com", true */ 'g', 'r', 'o', 'u', 'p', 's', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "grozip.com", true */ 'g', 'r', 'o', 'z', 'i', 'p', '.', 'c', 'o', 'm', '\0',
   /* "grsecurity.net", true */ 'g', 'r', 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', '.', 'n', 'e', 't', '\0',
   /* "gruelang.org", true */ 'g', 'r', 'u', 'e', 'l', 'a', 'n', 'g', '.', 'o', 'r', 'g', '\0',
   /* "grunwasser.fr", true */ 'g', 'r', 'u', 'n', 'w', 'a', 's', 's', 'e', 'r', '.', 'f', 'r', '\0',
   /* "grusig-geil.ch", true */ 'g', 'r', 'u', 's', 'i', 'g', '-', 'g', 'e', 'i', 'l', '.', 'c', 'h', '\0',
   /* "grytics.com", true */ 'g', 'r', 'y', 't', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
-  /* "gs-net.at", true */ 'g', 's', '-', 'n', 'e', 't', '.', 'a', 't', '\0',
   /* "gsimagebank.co.uk", true */ 'g', 's', 'i', 'm', 'a', 'g', 'e', 'b', 'a', 'n', 'k', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "gsnort.com", true */ 'g', 's', 'n', 'o', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "gsrc.io", true */ 'g', 's', 'r', 'c', '.', 'i', 'o', '\0',
   /* "gta-arabs.com", true */ 'g', 't', 'a', '-', 'a', 'r', 'a', 'b', 's', '.', 'c', 'o', 'm', '\0',
   /* "gtamodshop.org", true */ 'g', 't', 'a', 'm', 'o', 'd', 's', 'h', 'o', 'p', '.', 'o', 'r', 'g', '\0',
   /* "gtchipsi.org", true */ 'g', 't', 'c', 'h', 'i', 'p', 's', 'i', '.', 'o', 'r', 'g', '\0',
   /* "gtech.work", true */ 'g', 't', 'e', 'c', 'h', '.', 'w', 'o', 'r', 'k', '\0',
   /* "gtldna.com", true */ 'g', 't', 'l', 'd', 'n', 'a', '.', 'c', 'o', 'm', '\0',
@@ -4838,17 +4844,16 @@ static const char kSTSHostTable[] = {
   /* "h404bi.com", true */ 'h', '4', '0', '4', 'b', 'i', '.', 'c', 'o', 'm', '\0',
   /* "haarkliniek.com", true */ 'h', 'a', 'a', 'r', 'k', 'l', 'i', 'n', 'i', 'e', 'k', '.', 'c', 'o', 'm', '\0',
   /* "haavard.me", true */ 'h', 'a', 'a', 'v', 'a', 'r', 'd', '.', 'm', 'e', '\0',
   /* "habarisoft.com", true */ 'h', 'a', 'b', 'a', 'r', 'i', 's', 'o', 'f', 't', '.', 'c', 'o', 'm', '\0',
   /* "habbo.life", true */ 'h', 'a', 'b', 'b', 'o', '.', 'l', 'i', 'f', 'e', '\0',
   /* "habbotalk.nl", true */ 'h', 'a', 'b', 'b', 'o', 't', 'a', 'l', 'k', '.', 'n', 'l', '\0',
   /* "hachre.de", false */ 'h', 'a', 'c', 'h', 'r', 'e', '.', 'd', 'e', '\0',
   /* "hack.cz", true */ 'h', 'a', 'c', 'k', '.', 'c', 'z', '\0',
-  /* "hackcraft.net", true */ 'h', 'a', 'c', 'k', 'c', 'r', 'a', 'f', 't', '.', 'n', 'e', 't', '\0',
   /* "hackenkunjeleren.nl", true */ 'h', 'a', 'c', 'k', 'e', 'n', 'k', 'u', 'n', 'j', 'e', 'l', 'e', 'r', 'e', 'n', '.', 'n', 'l', '\0',
   /* "hackenturet.dk", true */ 'h', 'a', 'c', 'k', 'e', 'n', 't', 'u', 'r', 'e', 't', '.', 'd', 'k', '\0',
   /* "hacker.parts", true */ 'h', 'a', 'c', 'k', 'e', 'r', '.', 'p', 'a', 'r', 't', 's', '\0',
   /* "hacker1.com", true */ 'h', 'a', 'c', 'k', 'e', 'r', '1', '.', 'c', 'o', 'm', '\0',
   /* "hackerchai.com", true */ 'h', 'a', 'c', 'k', 'e', 'r', 'c', 'h', 'a', 'i', '.', 'c', 'o', 'm', '\0',
   /* "hackernet.se", true */ 'h', 'a', 'c', 'k', 'e', 'r', 'n', 'e', 't', '.', 's', 'e', '\0',
   /* "hackerone-user-content.com", true */ 'h', 'a', 'c', 'k', 'e', 'r', 'o', 'n', 'e', '-', 'u', 's', 'e', 'r', '-', 'c', 'o', 'n', 't', 'e', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "hackerone.com", true */ 'h', 'a', 'c', 'k', 'e', 'r', 'o', 'n', 'e', '.', 'c', 'o', 'm', '\0',
@@ -5038,16 +5043,17 @@ static const char kSTSHostTable[] = {
   /* "herds.eu", true */ 'h', 'e', 'r', 'd', 's', '.', 'e', 'u', '\0',
   /* "heritagedentistry.ca", true */ 'h', 'e', 'r', 'i', 't', 'a', 'g', 'e', 'd', 'e', 'n', 't', 'i', 's', 't', 'r', 'y', '.', 'c', 'a', '\0',
   /* "herocentral.de", true */ 'h', 'e', 'r', 'o', 'c', 'e', 'n', 't', 'r', 'a', 'l', '.', 'd', 'e', '\0',
   /* "herr-webdesign.de", true */ 'h', 'e', 'r', 'r', '-', 'w', 'e', 'b', 'd', 'e', 's', 'i', 'g', 'n', '.', 'd', 'e', '\0',
   /* "herrenfahrt.com", true */ 'h', 'e', 'r', 'r', 'e', 'n', 'f', 'a', 'h', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "herringsresidence.be", true */ 'h', 'e', 'r', 'r', 'i', 'n', 'g', 's', 'r', 'e', 's', 'i', 'd', 'e', 'n', 'c', 'e', '.', 'b', 'e', '\0',
   /* "herrsmith.com", true */ 'h', 'e', 'r', 'r', 's', 'm', 'i', 't', 'h', '.', 'c', 'o', 'm', '\0',
   /* "hesaplama.net", true */ 'h', 'e', 's', 'a', 'p', 'l', 'a', 'm', 'a', '.', 'n', 'e', 't', '\0',
+  /* "hethely.ch", true */ 'h', 'e', 't', 'h', 'e', 'l', 'y', '.', 'c', 'h', '\0',
   /* "hetmer.com", true */ 'h', 'e', 't', 'm', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "heute-kaufen.de", true */ 'h', 'e', 'u', 't', 'e', '-', 'k', 'a', 'u', 'f', 'e', 'n', '.', 'd', 'e', '\0',
   /* "heutger.net", true */ 'h', 'e', 'u', 't', 'g', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "hexacon.io", true */ 'h', 'e', 'x', 'a', 'c', 'o', 'n', '.', 'i', 'o', '\0',
   /* "hexagon-e.com", true */ 'h', 'e', 'x', 'a', 'g', 'o', 'n', '-', 'e', '.', 'c', 'o', 'm', '\0',
   /* "hexed.it", true */ 'h', 'e', 'x', 'e', 'd', '.', 'i', 't', '\0',
   /* "hexicurity.com", true */ 'h', 'e', 'x', 'i', 'c', 'u', 'r', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "hexid.me", true */ 'h', 'e', 'x', 'i', 'd', '.', 'm', 'e', '\0',
@@ -5218,17 +5224,16 @@ static const char kSTSHostTable[] = {
   /* "html5.org", true */ 'h', 't', 'm', 'l', '5', '.', 'o', 'r', 'g', '\0',
   /* "htmlacademy.ru", true */ 'h', 't', 'm', 'l', 'a', 'c', 'a', 'd', 'e', 'm', 'y', '.', 'r', 'u', '\0',
   /* "htmue.org", true */ 'h', 't', 'm', 'u', 'e', '.', 'o', 'r', 'g', '\0',
   /* "httpsecurityreport.com", true */ 'h', 't', 't', 'p', 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', 'r', 'e', 'p', 'o', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "httpstatuscode418.xyz", true */ 'h', 't', 't', 'p', 's', 't', 'a', 't', 'u', 's', 'c', 'o', 'd', 'e', '4', '1', '8', '.', 'x', 'y', 'z', '\0',
   /* "httpswatch.ca", true */ 'h', 't', 't', 'p', 's', 'w', 'a', 't', 'c', 'h', '.', 'c', 'a', '\0',
   /* "httpswatch.com", true */ 'h', 't', 't', 'p', 's', 'w', 'a', 't', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "huagati.com", true */ 'h', 'u', 'a', 'g', 'a', 't', 'i', '.', 'c', 'o', 'm', '\0',
-  /* "huang.nu", true */ 'h', 'u', 'a', 'n', 'g', '.', 'n', 'u', '\0',
   /* "huaxueba.com", true */ 'h', 'u', 'a', 'x', 'u', 'e', 'b', 'a', '.', 'c', 'o', 'm', '\0',
   /* "hubert.systems", true */ 'h', 'u', 'b', 'e', 'r', 't', '.', 's', 'y', 's', 't', 'e', 'm', 's', '\0',
   /* "hudingyuan.cn", true */ 'h', 'u', 'd', 'i', 'n', 'g', 'y', 'u', 'a', 'n', '.', 'c', 'n', '\0',
   /* "huersch.com", true */ 'h', 'u', 'e', 'r', 's', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "huffduffer.com", true */ 'h', 'u', 'f', 'f', 'd', 'u', 'f', 'f', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "hugocollignon.fr", false */ 'h', 'u', 'g', 'o', 'c', 'o', 'l', 'l', 'i', 'g', 'n', 'o', 'n', '.', 'f', 'r', '\0',
   /* "hugofs.com", true */ 'h', 'u', 'g', 'o', 'f', 's', '.', 'c', 'o', 'm', '\0',
   /* "huihui.moe", true */ 'h', 'u', 'i', 'h', 'u', 'i', '.', 'm', 'o', 'e', '\0',
@@ -5241,31 +5246,29 @@ static const char kSTSHostTable[] = {
   /* "hupp.se", true */ 'h', 'u', 'p', 'p', '.', 's', 'e', '\0',
   /* "hurd.is", true */ 'h', 'u', 'r', 'd', '.', 'i', 's', '\0',
   /* "huren.nl", true */ 'h', 'u', 'r', 'e', 'n', '.', 'n', 'l', '\0',
   /* "husakbau.at", true */ 'h', 'u', 's', 'a', 'k', 'b', 'a', 'u', '.', 'a', 't', '\0',
   /* "hushfile.it", true */ 'h', 'u', 's', 'h', 'f', 'i', 'l', 'e', '.', 'i', 't', '\0',
   /* "husic.net", true */ 'h', 'u', 's', 'i', 'c', '.', 'n', 'e', 't', '\0',
   /* "husky.xyz", true */ 'h', 'u', 's', 'k', 'y', '.', 'x', 'y', 'z', '\0',
   /* "huskybutt.dog", true */ 'h', 'u', 's', 'k', 'y', 'b', 'u', 't', 't', '.', 'd', 'o', 'g', '\0',
-  /* "huskyinc.us", true */ 'h', 'u', 's', 'k', 'y', 'i', 'n', 'c', '.', 'u', 's', '\0',
   /* "hussam.eu.org", true */ 'h', 'u', 's', 's', 'a', 'm', '.', 'e', 'u', '.', 'o', 'r', 'g', '\0',
   /* "huutonauru.net", true */ 'h', 'u', 'u', 't', 'o', 'n', 'a', 'u', 'r', 'u', '.', 'n', 'e', 't', '\0',
   /* "hwag-pb.de", true */ 'h', 'w', 'a', 'g', '-', 'p', 'b', '.', 'd', 'e', '\0',
   /* "hx53.de", true */ 'h', 'x', '5', '3', '.', 'd', 'e', '\0',
   /* "hxying.com", true */ 'h', 'x', 'y', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "hydrocloud.net", true */ 'h', 'y', 'd', 'r', 'o', 'c', 'l', 'o', 'u', 'd', '.', 'n', 'e', 't', '\0',
   /* "hydrozone.fr", true */ 'h', 'y', 'd', 'r', 'o', 'z', 'o', 'n', 'e', '.', 'f', 'r', '\0',
   /* "hyk.me", true */ 'h', 'y', 'k', '.', 'm', 'e', '\0',
   /* "hymerscollege.co.uk", true */ 'h', 'y', 'm', 'e', 'r', 's', 'c', 'o', 'l', 'l', 'e', 'g', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "hynek.me", true */ 'h', 'y', 'n', 'e', 'k', '.', 'm', 'e', '\0',
   /* "hypemgmt.com", true */ 'h', 'y', 'p', 'e', 'm', 'g', 'm', 't', '.', 'c', 'o', 'm', '\0',
   /* "hyper-matrix.org", true */ 'h', 'y', 'p', 'e', 'r', '-', 'm', 'a', 't', 'r', 'i', 'x', '.', 'o', 'r', 'g', '\0',
   /* "hyper-text.org", true */ 'h', 'y', 'p', 'e', 'r', '-', 't', 'e', 'x', 't', '.', 'o', 'r', 'g', '\0',
-  /* "hyper69.com", true */ 'h', 'y', 'p', 'e', 'r', '6', '9', '.', 'c', 'o', 'm', '\0',
   /* "hypotecnicentrum.cz", true */ 'h', 'y', 'p', 'o', 't', 'e', 'c', 'n', 'i', 'c', 'e', 'n', 't', 'r', 'u', 'm', '.', 'c', 'z', '\0',
   /* "hzsh.xyz", true */ 'h', 'z', 's', 'h', '.', 'x', 'y', 'z', '\0',
   /* "i--b.com", true */ 'i', '-', '-', 'b', '.', 'c', 'o', 'm', '\0',
   /* "i-stats.net", true */ 'i', '-', 's', 't', 'a', 't', 's', '.', 'n', 'e', 't', '\0',
   /* "i10z.com", false */ 'i', '1', '0', 'z', '.', 'c', 'o', 'm', '\0',
   /* "i1314.gdn", true */ 'i', '1', '3', '1', '4', '.', 'g', 'd', 'n', '\0',
   /* "i5y.co.uk", true */ 'i', '5', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "i95.me", false */ 'i', '9', '5', '.', 'm', 'e', '\0',
@@ -5901,17 +5904,16 @@ static const char kSTSHostTable[] = {
   /* "joduska.me", true */ 'j', 'o', 'd', 'u', 's', 'k', 'a', '.', 'm', 'e', '\0',
   /* "jodyboucher.com", true */ 'j', 'o', 'd', 'y', 'b', 'o', 'u', 'c', 'h', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "joe-pagan.com", true */ 'j', 'o', 'e', '-', 'p', 'a', 'g', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "joehenry.co.uk", true */ 'j', 'o', 'e', 'h', 'e', 'n', 'r', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "joelj.org", true */ 'j', 'o', 'e', 'l', 'j', '.', 'o', 'r', 'g', '\0',
   /* "joepitt.co.uk", false */ 'j', 'o', 'e', 'p', 'i', 't', 't', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "joerss.at", true */ 'j', 'o', 'e', 'r', 's', 's', '.', 'a', 't', '\0',
   /* "joestead.codes", true */ 'j', 'o', 'e', 's', 't', 'e', 'a', 'd', '.', 'c', 'o', 'd', 'e', 's', '\0',
-  /* "jogi-server.de", true */ 'j', 'o', 'g', 'i', '-', 's', 'e', 'r', 'v', 'e', 'r', '.', 'd', 'e', '\0',
   /* "jogorama.com.br", false */ 'j', 'o', 'g', 'o', 'r', 'a', 'm', 'a', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "johannes-sprink.de", true */ 'j', 'o', 'h', 'a', 'n', 'n', 'e', 's', '-', 's', 'p', 'r', 'i', 'n', 'k', '.', 'd', 'e', '\0',
   /* "johannes.io", true */ 'j', 'o', 'h', 'a', 'n', 'n', 'e', 's', '.', 'i', 'o', '\0',
   /* "johannes.wtf", true */ 'j', 'o', 'h', 'a', 'n', 'n', 'e', 's', '.', 'w', 't', 'f', '\0',
   /* "johnblackbourn.com", true */ 'j', 'o', 'h', 'n', 'b', 'l', 'a', 'c', 'k', 'b', 'o', 'u', 'r', 'n', '.', 'c', 'o', 'm', '\0',
   /* "johndong.net", true */ 'j', 'o', 'h', 'n', 'd', 'o', 'n', 'g', '.', 'n', 'e', 't', '\0',
   /* "johngallias.com", true */ 'j', 'o', 'h', 'n', 'g', 'a', 'l', 'l', 'i', 'a', 's', '.', 'c', 'o', 'm', '\0',
   /* "johnguant.com", true */ 'j', 'o', 'h', 'n', 'g', 'u', 'a', 'n', 't', '.', 'c', 'o', 'm', '\0',
@@ -5957,16 +5959,17 @@ static const char kSTSHostTable[] = {
   /* "josephrees.uk", true */ 'j', 'o', 's', 'e', 'p', 'h', 'r', 'e', 'e', 's', '.', 'u', 'k', '\0',
   /* "joshgrancell.com", false */ 'j', 'o', 's', 'h', 'g', 'r', 'a', 'n', 'c', 'e', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "joshi.su", true */ 'j', 'o', 's', 'h', 'i', '.', 's', 'u', '\0',
   /* "joshtriplett.org", true */ 'j', 'o', 's', 'h', 't', 'r', 'i', 'p', 'l', 'e', 't', 't', '.', 'o', 'r', 'g', '\0',
   /* "joshuarogers.net", true */ 'j', 'o', 's', 'h', 'u', 'a', 'r', 'o', 'g', 'e', 'r', 's', '.', 'n', 'e', 't', '\0',
   /* "josip.at", true */ 'j', 'o', 's', 'i', 'p', '.', 'a', 't', '\0',
   /* "jotpics.com", true */ 'j', 'o', 't', 'p', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "jovic.hamburg", true */ 'j', 'o', 'v', 'i', 'c', '.', 'h', 'a', 'm', 'b', 'u', 'r', 'g', '\0',
+  /* "joworld.net", true */ 'j', 'o', 'w', 'o', 'r', 'l', 'd', '.', 'n', 'e', 't', '\0',
   /* "joyceclerkx.com", true */ 'j', 'o', 'y', 'c', 'e', 'c', 'l', 'e', 'r', 'k', 'x', '.', 'c', 'o', 'm', '\0',
   /* "joyofcookingandbaking.com", true */ 'j', 'o', 'y', 'o', 'f', 'c', 'o', 'o', 'k', 'i', 'n', 'g', 'a', 'n', 'd', 'b', 'a', 'k', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "joyqi.com", true */ 'j', 'o', 'y', 'q', 'i', '.', 'c', 'o', 'm', '\0',
   /* "jpaglier.com", true */ 'j', 'p', 'a', 'g', 'l', 'i', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "jpcdi.com", true */ 'j', 'p', 'c', 'd', 'i', '.', 'c', 'o', 'm', '\0',
   /* "jpeaches.xyz", true */ 'j', 'p', 'e', 'a', 'c', 'h', 'e', 's', '.', 'x', 'y', 'z', '\0',
   /* "jpeg.io", true */ 'j', 'p', 'e', 'g', '.', 'i', 'o', '\0',
   /* "jproxx.com", true */ 'j', 'p', 'r', 'o', 'x', 'x', '.', 'c', 'o', 'm', '\0',
@@ -6017,16 +6020,17 @@ static const char kSTSHostTable[] = {
   /* "justinlemay.com", true */ 'j', 'u', 's', 't', 'i', 'n', 'l', 'e', 'm', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "justmy.website", true */ 'j', 'u', 's', 't', 'm', 'y', '.', 'w', 'e', 'b', 's', 'i', 't', 'e', '\0',
   /* "justpaste.it", true */ 'j', 'u', 's', 't', 'p', 'a', 's', 't', 'e', '.', 'i', 't', '\0',
   /* "justupdate.me", true */ 'j', 'u', 's', 't', 'u', 'p', 'd', 'a', 't', 'e', '.', 'm', 'e', '\0',
   /* "justyy.com", true */ 'j', 'u', 's', 't', 'y', 'y', '.', 'c', 'o', 'm', '\0',
   /* "jutella.de", true */ 'j', 'u', 't', 'e', 'l', 'l', 'a', '.', 'd', 'e', '\0',
   /* "juzgalo.com", true */ 'j', 'u', 'z', 'g', 'a', 'l', 'o', '.', 'c', 'o', 'm', '\0',
   /* "jva-wuerzburg.de", true */ 'j', 'v', 'a', '-', 'w', 'u', 'e', 'r', 'z', 'b', 'u', 'r', 'g', '.', 'd', 'e', '\0',
+  /* "jwilsson.com", true */ 'j', 'w', 'i', 'l', 's', 's', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "jwnotifier.org", true */ 'j', 'w', 'n', 'o', 't', 'i', 'f', 'i', 'e', 'r', '.', 'o', 'r', 'g', '\0',
   /* "jym.fit", true */ 'j', 'y', 'm', '.', 'f', 'i', 't', '\0',
   /* "jyoti-fairworks.org", true */ 'j', 'y', 'o', 't', 'i', '-', 'f', 'a', 'i', 'r', 'w', 'o', 'r', 'k', 's', '.', 'o', 'r', 'g', '\0',
   /* "jysperm.me", true */ 'j', 'y', 's', 'p', 'e', 'r', 'm', '.', 'm', 'e', '\0',
   /* "jznet.org", true */ 'j', 'z', 'n', 'e', 't', '.', 'o', 'r', 'g', '\0',
   /* "k-netz.de", true */ 'k', '-', 'n', 'e', 't', 'z', '.', 'd', 'e', '\0',
   /* "k-tube.com", true */ 'k', '-', 't', 'u', 'b', 'e', '.', 'c', 'o', 'm', '\0',
   /* "k2mts.org", true */ 'k', '2', 'm', 't', 's', '.', 'o', 'r', 'g', '\0',
@@ -6061,17 +6065,16 @@ static const char kSTSHostTable[] = {
   /* "kaloix.de", true */ 'k', 'a', 'l', 'o', 'i', 'x', '.', 'd', 'e', '\0',
   /* "kamcvicit.sk", true */ 'k', 'a', 'm', 'c', 'v', 'i', 'c', 'i', 't', '.', 's', 'k', '\0',
   /* "kamikatse.net", true */ 'k', 'a', 'm', 'i', 'k', 'a', 't', 's', 'e', '.', 'n', 'e', 't', '\0',
   /* "kamitech.ch", true */ 'k', 'a', 'm', 'i', 't', 'e', 'c', 'h', '.', 'c', 'h', '\0',
   /* "kamixa.se", true */ 'k', 'a', 'm', 'i', 'x', 'a', '.', 's', 'e', '\0',
   /* "kana.me", true */ 'k', 'a', 'n', 'a', '.', 'm', 'e', '\0',
   /* "kanar.nl", true */ 'k', 'a', 'n', 'a', 'r', '.', 'n', 'l', '\0',
   /* "kandalife.com", true */ 'k', 'a', 'n', 'd', 'a', 'l', 'i', 'f', 'e', '.', 'c', 'o', 'm', '\0',
-  /* "kanehusky.com", true */ 'k', 'a', 'n', 'e', 'h', 'u', 's', 'k', 'y', '.', 'c', 'o', 'm', '\0',
   /* "kaneo-gmbh.de", true */ 'k', 'a', 'n', 'e', 'o', '-', 'g', 'm', 'b', 'h', '.', 'd', 'e', '\0',
   /* "kangarooislandholidayaccommodation.com.au", true */ 'k', 'a', 'n', 'g', 'a', 'r', 'o', 'o', 'i', 's', 'l', 'a', 'n', 'd', 'h', 'o', 'l', 'i', 'd', 'a', 'y', 'a', 'c', 'c', 'o', 'm', 'm', 'o', 'd', 'a', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "kaniklani.co.za", true */ 'k', 'a', 'n', 'i', 'k', 'l', 'a', 'n', 'i', '.', 'c', 'o', '.', 'z', 'a', '\0',
   /* "kanna.cf", true */ 'k', 'a', 'n', 'n', 'a', '.', 'c', 'f', '\0',
   /* "kannchen.de", true */ 'k', 'a', 'n', 'n', 'c', 'h', 'e', 'n', '.', 'd', 'e', '\0',
   /* "kanotijd.nl", true */ 'k', 'a', 'n', 'o', 't', 'i', 'j', 'd', '.', 'n', 'l', '\0',
   /* "kantankye.nl", true */ 'k', 'a', 'n', 't', 'a', 'n', 'k', 'y', 'e', '.', 'n', 'l', '\0',
   /* "kantanmt.com", true */ 'k', 'a', 'n', 't', 'a', 'n', 'm', 't', '.', 'c', 'o', 'm', '\0',
@@ -6114,17 +6117,16 @@ static const char kSTSHostTable[] = {
   /* "katnunn.co.uk", true */ 'k', 'a', 't', 'n', 'u', 'n', 'n', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "katproxy.al", true */ 'k', 'a', 't', 'p', 'r', 'o', 'x', 'y', '.', 'a', 'l', '\0',
   /* "katproxy.top", true */ 'k', 'a', 't', 'p', 'r', 'o', 'x', 'y', '.', 't', 'o', 'p', '\0',
   /* "kattelans.eu", true */ 'k', 'a', 't', 't', 'e', 'l', 'a', 'n', 's', '.', 'e', 'u', '\0',
   /* "katyl.info", true */ 'k', 'a', 't', 'y', 'l', '.', 'i', 'n', 'f', 'o', '\0',
   /* "kau-boys.com", true */ 'k', 'a', 'u', '-', 'b', 'o', 'y', 's', '.', 'c', 'o', 'm', '\0',
   /* "kau-boys.de", true */ 'k', 'a', 'u', '-', 'b', 'o', 'y', 's', '.', 'd', 'e', '\0',
   /* "kaufberatung.community", true */ 'k', 'a', 'u', 'f', 'b', 'e', 'r', 'a', 't', 'u', 'n', 'g', '.', 'c', 'o', 'm', 'm', 'u', 'n', 'i', 't', 'y', '\0',
-  /* "kaufkraftkiel.de", true */ 'k', 'a', 'u', 'f', 'k', 'r', 'a', 'f', 't', 'k', 'i', 'e', 'l', '.', 'd', 'e', '\0',
   /* "kavik.no", true */ 'k', 'a', 'v', 'i', 'k', '.', 'n', 'o', '\0',
   /* "kavovary-kava.cz", true */ 'k', 'a', 'v', 'o', 'v', 'a', 'r', 'y', '-', 'k', 'a', 'v', 'a', '.', 'c', 'z', '\0',
   /* "kazandaemon.ru", true */ 'k', 'a', 'z', 'a', 'n', 'd', 'a', 'e', 'm', 'o', 'n', '.', 'r', 'u', '\0',
   /* "kazenojiyu.fr", true */ 'k', 'a', 'z', 'e', 'n', 'o', 'j', 'i', 'y', 'u', '.', 'f', 'r', '\0',
   /* "kb3.net", true */ 'k', 'b', '3', '.', 'n', 'e', 't', '\0',
   /* "kba-online.de", true */ 'k', 'b', 'a', '-', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'd', 'e', '\0',
   /* "kbcequitas.hu", true */ 'k', 'b', 'c', 'e', 'q', 'u', 'i', 't', 'a', 's', '.', 'h', 'u', '\0',
   /* "kbit.dk", true */ 'k', 'b', 'i', 't', '.', 'd', 'k', '\0',
@@ -6229,17 +6231,16 @@ static const char kSTSHostTable[] = {
   /* "kinderly.co.uk", true */ 'k', 'i', 'n', 'd', 'e', 'r', 'l', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "kindleworth.com", true */ 'k', 'i', 'n', 'd', 'l', 'e', 'w', 'o', 'r', 't', 'h', '.', 'c', 'o', 'm', '\0',
   /* "kindlyfire.com", true */ 'k', 'i', 'n', 'd', 'l', 'y', 'f', 'i', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "kindof.ninja", true */ 'k', 'i', 'n', 'd', 'o', 'f', '.', 'n', 'i', 'n', 'j', 'a', '\0',
   /* "kingant.net", true */ 'k', 'i', 'n', 'g', 'a', 'n', 't', '.', 'n', 'e', 't', '\0',
   /* "kinganywhere.eu", true */ 'k', 'i', 'n', 'g', 'a', 'n', 'y', 'w', 'h', 'e', 'r', 'e', '.', 'e', 'u', '\0',
   /* "kingbird.me", true */ 'k', 'i', 'n', 'g', 'b', 'i', 'r', 'd', '.', 'm', 'e', '\0',
   /* "kingqueen.org.uk", true */ 'k', 'i', 'n', 'g', 'q', 'u', 'e', 'e', 'n', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
-  /* "kini24.ru", true */ 'k', 'i', 'n', 'i', '2', '4', '.', 'r', 'u', '\0',
   /* "kinkdr.com", true */ 'k', 'i', 'n', 'k', 'd', 'r', '.', 'c', 'o', 'm', '\0',
   /* "kinkenonline.com", true */ 'k', 'i', 'n', 'k', 'e', 'n', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "kinomoto.me", true */ 'k', 'i', 'n', 'o', 'm', 'o', 't', 'o', '.', 'm', 'e', '\0',
   /* "kinomoto.ovh", true */ 'k', 'i', 'n', 'o', 'm', 'o', 't', 'o', '.', 'o', 'v', 'h', '\0',
   /* "kinsights.com", false */ 'k', 'i', 'n', 's', 'i', 'g', 'h', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "kintawifi.com", true */ 'k', 'i', 'n', 't', 'a', 'w', 'i', 'f', 'i', '.', 'c', 'o', 'm', '\0',
   /* "kintone.com", true */ 'k', 'i', 'n', 't', 'o', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "kintore.tv", true */ 'k', 'i', 'n', 't', 'o', 'r', 'e', '.', 't', 'v', '\0',
@@ -6254,16 +6255,17 @@ static const char kSTSHostTable[] = {
   /* "kirei.se", true */ 'k', 'i', 'r', 'e', 'i', '.', 's', 'e', '\0',
   /* "kirinas.com", true */ 'k', 'i', 'r', 'i', 'n', 'a', 's', '.', 'c', 'o', 'm', '\0',
   /* "kirkovsky.com", true */ 'k', 'i', 'r', 'k', 'o', 'v', 's', 'k', 'y', '.', 'c', 'o', 'm', '\0',
   /* "kirsch-gestaltung.de", true */ 'k', 'i', 'r', 's', 'c', 'h', '-', 'g', 'e', 's', 't', 'a', 'l', 't', 'u', 'n', 'g', '.', 'd', 'e', '\0',
   /* "kirschbaum.me", true */ 'k', 'i', 'r', 's', 'c', 'h', 'b', 'a', 'u', 'm', '.', 'm', 'e', '\0',
   /* "kirstenbos.ca", true */ 'k', 'i', 'r', 's', 't', 'e', 'n', 'b', 'o', 's', '.', 'c', 'a', '\0',
   /* "kirstin-peters.de", true */ 'k', 'i', 'r', 's', 't', 'i', 'n', '-', 'p', 'e', 't', 'e', 'r', 's', '.', 'd', 'e', '\0',
   /* "kis-toitoidixi.de", true */ 'k', 'i', 's', '-', 't', 'o', 'i', 't', 'o', 'i', 'd', 'i', 'x', 'i', '.', 'd', 'e', '\0',
+  /* "kisa.io", true */ 'k', 'i', 's', 'a', '.', 'i', 'o', '\0',
   /* "kisalt.im", true */ 'k', 'i', 's', 'a', 'l', 't', '.', 'i', 'm', '\0',
   /* "kissflow.com", true */ 'k', 'i', 's', 's', 'f', 'l', 'o', 'w', '.', 'c', 'o', 'm', '\0',
   /* "kisskiss.ch", true */ 'k', 'i', 's', 's', 'k', 'i', 's', 's', '.', 'c', 'h', '\0',
   /* "kisstyle.ru", true */ 'k', 'i', 's', 's', 't', 'y', 'l', 'e', '.', 'r', 'u', '\0',
   /* "kita.id", true */ 'k', 'i', 't', 'a', '.', 'i', 'd', '\0',
   /* "kitabgaul.com", true */ 'k', 'i', 't', 'a', 'b', 'g', 'a', 'u', 'l', '.', 'c', 'o', 'm', '\0',
   /* "kitsostech.com", true */ 'k', 'i', 't', 's', 'o', 's', 't', 'e', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "kittmedia.com", true */ 'k', 'i', 't', 't', 'm', 'e', 'd', 'i', 'a', '.', 'c', 'o', 'm', '\0',
@@ -6337,17 +6339,17 @@ static const char kSTSHostTable[] = {
   /* "kokensupport.com", true */ 'k', 'o', 'k', 'e', 'n', 's', 'u', 'p', 'p', 'o', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "koketteriet.se", true */ 'k', 'o', 'k', 'e', 't', 't', 'e', 'r', 'i', 'e', 't', '.', 's', 'e', '\0',
   /* "koldanews.com", true */ 'k', 'o', 'l', 'd', 'a', 'n', 'e', 'w', 's', '.', 'c', 'o', 'm', '\0',
   /* "kollawat.me", true */ 'k', 'o', 'l', 'l', 'a', 'w', 'a', 't', '.', 'm', 'e', '\0',
   /* "kolmann.at", true */ 'k', 'o', 'l', 'm', 'a', 'n', 'n', '.', 'a', 't', '\0',
   /* "kolmann.eu", true */ 'k', 'o', 'l', 'm', 'a', 'n', 'n', '.', 'e', 'u', '\0',
   /* "koluke.co", true */ 'k', 'o', 'l', 'u', 'k', 'e', '.', 'c', 'o', '\0',
   /* "koluke.com", true */ 'k', 'o', 'l', 'u', 'k', 'e', '.', 'c', 'o', 'm', '\0',
-  /* "komandakovalchuk.com", true */ 'k', 'o', 'm', 'a', 'n', 'd', 'a', 'k', 'o', 'v', 'a', 'l', 'c', 'h', 'u', 'k', '.', 'c', 'o', 'm', '\0',
+  /* "komandakovalchuk.com", false */ 'k', 'o', 'm', 'a', 'n', 'd', 'a', 'k', 'o', 'v', 'a', 'l', 'c', 'h', 'u', 'k', '.', 'c', 'o', 'm', '\0',
   /* "komget.net", true */ 'k', 'o', 'm', 'g', 'e', 't', '.', 'n', 'e', 't', '\0',
   /* "komicloud.com", true */ 'k', 'o', 'm', 'i', 'c', 'l', 'o', 'u', 'd', '.', 'c', 'o', 'm', '\0',
   /* "komidoc.com", true */ 'k', 'o', 'm', 'i', 'd', 'o', 'c', '.', 'c', 'o', 'm', '\0',
   /* "komiksbaza.pl", true */ 'k', 'o', 'm', 'i', 'k', 's', 'b', 'a', 'z', 'a', '.', 'p', 'l', '\0',
   /* "komischkeszeug.de", true */ 'k', 'o', 'm', 'i', 's', 'c', 'h', 'k', 'e', 's', 'z', 'e', 'u', 'g', '.', 'd', 'e', '\0',
   /* "kommune42.org", true */ 'k', 'o', 'm', 'm', 'u', 'n', 'e', '4', '2', '.', 'o', 'r', 'g', '\0',
   /* "komoju.com", true */ 'k', 'o', 'm', 'o', 'j', 'u', '.', 'c', 'o', 'm', '\0',
   /* "kompetenzkurs.de", true */ 'k', 'o', 'm', 'p', 'e', 't', 'e', 'n', 'z', 'k', 'u', 'r', 's', '.', 'd', 'e', '\0',
@@ -6595,17 +6597,16 @@ static const char kSTSHostTable[] = {
   /* "leadbook.ru", true */ 'l', 'e', 'a', 'd', 'b', 'o', 'o', 'k', '.', 'r', 'u', '\0',
   /* "leadingsalons.com", true */ 'l', 'e', 'a', 'd', 'i', 'n', 'g', 's', 'a', 'l', 'o', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "leakedminecraft.net", true */ 'l', 'e', 'a', 'k', 'e', 'd', 'm', 'i', 'n', 'e', 'c', 'r', 'a', 'f', 't', '.', 'n', 'e', 't', '\0',
   /* "leakforums.net", true */ 'l', 'e', 'a', 'k', 'f', 'o', 'r', 'u', 'm', 's', '.', 'n', 'e', 't', '\0',
   /* "leakreporter.net", true */ 'l', 'e', 'a', 'k', 'r', 'e', 'p', 'o', 'r', 't', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "leanclub.org", true */ 'l', 'e', 'a', 'n', 'c', 'l', 'u', 'b', '.', 'o', 'r', 'g', '\0',
   /* "leandre.cn", true */ 'l', 'e', 'a', 'n', 'd', 'r', 'e', '.', 'c', 'n', '\0',
   /* "leanplando.com", true */ 'l', 'e', 'a', 'n', 'p', 'l', 'a', 'n', 'd', 'o', '.', 'c', 'o', 'm', '\0',
-  /* "leardev.de", false */ 'l', 'e', 'a', 'r', 'd', 'e', 'v', '.', 'd', 'e', '\0',
   /* "learnedovo.com", true */ 'l', 'e', 'a', 'r', 'n', 'e', 'd', 'o', 'v', 'o', '.', 'c', 'o', 'm', '\0',
   /* "learnflakes.net", true */ 'l', 'e', 'a', 'r', 'n', 'f', 'l', 'a', 'k', 'e', 's', '.', 'n', 'e', 't', '\0',
   /* "learntube.cz", true */ 'l', 'e', 'a', 'r', 'n', 't', 'u', 'b', 'e', '.', 'c', 'z', '\0',
   /* "leatherfurnitureexpo.com", true */ 'l', 'e', 'a', 't', 'h', 'e', 'r', 'f', 'u', 'r', 'n', 'i', 't', 'u', 'r', 'e', 'e', 'x', 'p', 'o', '.', 'c', 'o', 'm', '\0',
   /* "leaversmith.com", true */ 'l', 'e', 'a', 'v', 'e', 'r', 's', 'm', 'i', 't', 'h', '.', 'c', 'o', 'm', '\0',
   /* "lebanesearmy.gov.lb", true */ 'l', 'e', 'b', 'a', 'n', 'e', 's', 'e', 'a', 'r', 'm', 'y', '.', 'g', 'o', 'v', '.', 'l', 'b', '\0',
   /* "lebarmy.gov.lb", true */ 'l', 'e', 'b', 'a', 'r', 'm', 'y', '.', 'g', 'o', 'v', '.', 'l', 'b', '\0',
   /* "leblanc.io", true */ 'l', 'e', 'b', 'l', 'a', 'n', 'c', '.', 'i', 'o', '\0',
@@ -6676,16 +6677,17 @@ static const char kSTSHostTable[] = {
   /* "lewislaw.com", true */ 'l', 'e', 'w', 'i', 's', 'l', 'a', 'w', '.', 'c', 'o', 'm', '\0',
   /* "lexway.pk", true */ 'l', 'e', 'x', 'w', 'a', 'y', '.', 'p', 'k', '\0',
   /* "lfgss.com", true */ 'l', 'f', 'g', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "lhalbert.xyz", true */ 'l', 'h', 'a', 'l', 'b', 'e', 'r', 't', '.', 'x', 'y', 'z', '\0',
   /* "li-ke.co.jp", true */ 'l', 'i', '-', 'k', 'e', '.', 'c', 'o', '.', 'j', 'p', '\0',
   /* "liam-w.com", true */ 'l', 'i', 'a', 'm', '-', 'w', '.', 'c', 'o', 'm', '\0',
   /* "liamjack.fr", true */ 'l', 'i', 'a', 'm', 'j', 'a', 'c', 'k', '.', 'f', 'r', '\0',
   /* "liangji.com.tw", true */ 'l', 'i', 'a', 'n', 'g', 'j', 'i', '.', 'c', 'o', 'm', '.', 't', 'w', '\0',
+  /* "libbitcoin.org", true */ 'l', 'i', 'b', 'b', 'i', 't', 'c', 'o', 'i', 'n', '.', 'o', 'r', 'g', '\0',
   /* "libertas-tech.com", true */ 'l', 'i', 'b', 'e', 'r', 't', 'a', 's', '-', 't', 'e', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "libfte.org", true */ 'l', 'i', 'b', 'f', 't', 'e', '.', 'o', 'r', 'g', '\0',
   /* "libraryfreedomproject.org", false */ 'l', 'i', 'b', 'r', 'a', 'r', 'y', 'f', 'r', 'e', 'e', 'd', 'o', 'm', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
   /* "libreboot.org", true */ 'l', 'i', 'b', 'r', 'e', 'b', 'o', 'o', 't', '.', 'o', 'r', 'g', '\0',
   /* "librelamp.com", true */ 'l', 'i', 'b', 'r', 'e', 'l', 'a', 'm', 'p', '.', 'c', 'o', 'm', '\0',
   /* "librends.org", true */ 'l', 'i', 'b', 'r', 'e', 'n', 'd', 's', '.', 'o', 'r', 'g', '\0',
   /* "libscode.com", true */ 'l', 'i', 'b', 's', 'c', 'o', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "libskia.so", true */ 'l', 'i', 'b', 's', 'k', 'i', 'a', '.', 's', 'o', '\0',
@@ -6765,17 +6767,17 @@ static const char kSTSHostTable[] = {
   /* "lister-kirchweg.de", true */ 'l', 'i', 's', 't', 'e', 'r', '-', 'k', 'i', 'r', 'c', 'h', 'w', 'e', 'g', '.', 'd', 'e', '\0',
   /* "listminut.be", true */ 'l', 'i', 's', 't', 'm', 'i', 'n', 'u', 't', '.', 'b', 'e', '\0',
   /* "lists.fedoraproject.org", true */ 'l', 'i', 's', 't', 's', '.', 'f', 'e', 'd', 'o', 'r', 'a', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
   /* "lists.mayfirst.org", false */ 'l', 'i', 's', 't', 's', '.', 'm', 'a', 'y', 'f', 'i', 'r', 's', 't', '.', 'o', 'r', 'g', '\0',
   /* "lists.stg.fedoraproject.org", true */ 'l', 'i', 's', 't', 's', '.', 's', 't', 'g', '.', 'f', 'e', 'd', 'o', 'r', 'a', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
   /* "litchidova.nl", true */ 'l', 'i', 't', 'c', 'h', 'i', 'd', 'o', 'v', 'a', '.', 'n', 'l', '\0',
   /* "litevault.net", true */ 'l', 'i', 't', 'e', 'v', 'a', 'u', 'l', 't', '.', 'n', 'e', 't', '\0',
   /* "litfin.name", true */ 'l', 'i', 't', 'f', 'i', 'n', '.', 'n', 'a', 'm', 'e', '\0',
-  /* "lithesalar.se", true */ 'l', 'i', 't', 'h', 'e', 's', 'a', 'l', 'a', 'r', '.', 's', 'e', '\0',
+  /* "lithesalar.se", false */ 'l', 'i', 't', 'h', 'e', 's', 'a', 'l', 'a', 'r', '.', 's', 'e', '\0',
   /* "little.pw", true */ 'l', 'i', 't', 't', 'l', 'e', '.', 'p', 'w', '\0',
   /* "littlefreelibrary.org", true */ 'l', 'i', 't', 't', 'l', 'e', 'f', 'r', 'e', 'e', 'l', 'i', 'b', 'r', 'a', 'r', 'y', '.', 'o', 'r', 'g', '\0',
   /* "litvideoserver.de", true */ 'l', 'i', 't', 'v', 'i', 'd', 'e', 'o', 's', 'e', 'r', 'v', 'e', 'r', '.', 'd', 'e', '\0',
   /* "liud.im", true */ 'l', 'i', 'u', 'd', '.', 'i', 'm', '\0',
   /* "liudon.org", true */ 'l', 'i', 'u', 'd', 'o', 'n', '.', 'o', 'r', 'g', '\0',
   /* "livecards.co.uk", true */ 'l', 'i', 'v', 'e', 'c', 'a', 'r', 'd', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "livedesign.at", true */ 'l', 'i', 'v', 'e', 'd', 'e', 's', 'i', 'g', 'n', '.', 'a', 't', '\0',
   /* "liveforspeed.se", true */ 'l', 'i', 'v', 'e', 'f', 'o', 'r', 's', 'p', 'e', 'e', 'd', '.', 's', 'e', '\0',
@@ -6958,30 +6960,28 @@ static const char kSTSHostTable[] = {
   /* "luukklene.nl", true */ 'l', 'u', 'u', 'k', 'k', 'l', 'e', 'n', 'e', '.', 'n', 'l', '\0',
   /* "luuppi.fi", true */ 'l', 'u', 'u', 'p', 'p', 'i', '.', 'f', 'i', '\0',
   /* "luxsci.com", true */ 'l', 'u', 'x', 's', 'c', 'i', '.', 'c', 'o', 'm', '\0',
   /* "luxvacuos.net", true */ 'l', 'u', 'x', 'v', 'a', 'c', 'u', 'o', 's', '.', 'n', 'e', 't', '\0',
   /* "luzat.com", true */ 'l', 'u', 'z', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "lv0.it", true */ 'l', 'v', '0', '.', 'i', 't', '\0',
   /* "lvrsystems.com", true */ 'l', 'v', 'r', 's', 'y', 's', 't', 'e', 'm', 's', '.', 'c', 'o', 'm', '\0',
   /* "lwl-foej-bewerbung.de", true */ 'l', 'w', 'l', '-', 'f', 'o', 'e', 'j', '-', 'b', 'e', 'w', 'e', 'r', 'b', 'u', 'n', 'g', '.', 'd', 'e', '\0',
-  /* "lwl.moe", true */ 'l', 'w', 'l', '.', 'm', 'o', 'e', '\0',
   /* "lwl12.com", true */ 'l', 'w', 'l', '1', '2', '.', 'c', 'o', 'm', '\0',
   /* "lyfbits.com", true */ 'l', 'y', 'f', 'b', 'i', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "lymia.moe", true */ 'l', 'y', 'm', 'i', 'a', '.', 'm', 'o', 'e', '\0',
   /* "lynero.dk", true */ 'l', 'y', 'n', 'e', 'r', 'o', '.', 'd', 'k', '\0',
   /* "lyness.io", true */ 'l', 'y', 'n', 'e', 's', 's', '.', 'i', 'o', '\0',
   /* "lynkos.com", true */ 'l', 'y', 'n', 'k', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "lynthium.com", true */ 'l', 'y', 'n', 't', 'h', 'i', 'u', 'm', '.', 'c', 'o', 'm', '\0',
   /* "lynx.nl", true */ 'l', 'y', 'n', 'x', '.', 'n', 'l', '\0',
   /* "lynxbroker.de", true */ 'l', 'y', 'n', 'x', 'b', 'r', 'o', 'k', 'e', 'r', '.', 'd', 'e', '\0',
   /* "lyonl.com", true */ 'l', 'y', 'o', 'n', 'l', '.', 'c', 'o', 'm', '\0',
   /* "lyst.co.uk", true */ 'l', 'y', 's', 't', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "lyx.dk", true */ 'l', 'y', 'x', '.', 'd', 'k', '\0',
-  /* "lzzr.me", true */ 'l', 'z', 'z', 'r', '.', 'm', 'e', '\0',
   /* "m-edmondson.co.uk", true */ 'm', '-', 'e', 'd', 'm', 'o', 'n', 'd', 's', 'o', 'n', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "m-plan.com", true */ 'm', '-', 'p', 'l', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "m.facebook.com", false */ 'm', '.', 'f', 'a', 'c', 'e', 'b', 'o', 'o', 'k', '.', 'c', 'o', 'm', '\0',
   /* "m.mail.ru", true */ 'm', '.', 'm', 'a', 'i', 'l', '.', 'r', 'u', '\0',
   /* "m.nu", true */ 'm', '.', 'n', 'u', '\0',
   /* "m0wef.uk", true */ 'm', '0', 'w', 'e', 'f', '.', 'u', 'k', '\0',
   /* "m2epro.com", true */ 'm', '2', 'e', 'p', 'r', 'o', '.', 'c', 'o', 'm', '\0',
   /* "m2tc.fr", true */ 'm', '2', 't', 'c', '.', 'f', 'r', '\0',
@@ -6991,17 +6991,16 @@ static const char kSTSHostTable[] = {
   /* "mac1.net", true */ 'm', 'a', 'c', '1', '.', 'n', 'e', 't', '\0',
   /* "macaque.io", false */ 'm', 'a', 'c', 'a', 'q', 'u', 'e', '.', 'i', 'o', '\0',
   /* "macdj.tk", true */ 'm', 'a', 'c', 'd', 'j', '.', 't', 'k', '\0',
   /* "macgeneral.de", true */ 'm', 'a', 'c', 'g', 'e', 'n', 'e', 'r', 'a', 'l', '.', 'd', 'e', '\0',
   /* "mach-politik.ch", true */ 'm', 'a', 'c', 'h', '-', 'p', 'o', 'l', 'i', 't', 'i', 'k', '.', 'c', 'h', '\0',
   /* "machbach.com", true */ 'm', 'a', 'c', 'h', 'b', 'a', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "machtweb.de", true */ 'm', 'a', 'c', 'h', 't', 'w', 'e', 'b', '.', 'd', 'e', '\0',
   /* "macinyasha.net", true */ 'm', 'a', 'c', 'i', 'n', 'y', 'a', 's', 'h', 'a', '.', 'n', 'e', 't', '\0',
-  /* "macker.io", true */ 'm', 'a', 'c', 'k', 'e', 'r', '.', 'i', 'o', '\0',
   /* "maclemon.at", true */ 'm', 'a', 'c', 'l', 'e', 'm', 'o', 'n', '.', 'a', 't', '\0',
   /* "macleod.io", true */ 'm', 'a', 'c', 'l', 'e', 'o', 'd', '.', 'i', 'o', '\0',
   /* "macnemo.de", true */ 'm', 'a', 'c', 'n', 'e', 'm', 'o', '.', 'd', 'e', '\0',
   /* "maco.org.uk", true */ 'm', 'a', 'c', 'o', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "macosxfilerecovery.com", true */ 'm', 'a', 'c', 'o', 's', 'x', 'f', 'i', 'l', 'e', 'r', 'e', 'c', 'o', 'v', 'e', 'r', 'y', '.', 'c', 'o', 'm', '\0',
   /* "maddi.biz", true */ 'm', 'a', 'd', 'd', 'i', '.', 'b', 'i', 'z', '\0',
   /* "madebyshore.com", true */ 'm', 'a', 'd', 'e', 'b', 'y', 's', 'h', 'o', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "madeglobal.com", true */ 'm', 'a', 'd', 'e', 'g', 'l', 'o', 'b', 'a', 'l', '.', 'c', 'o', 'm', '\0',
@@ -7027,29 +7026,29 @@ static const char kSTSHostTable[] = {
   /* "mahefa.co.uk", true */ 'm', 'a', 'h', 'e', 'f', 'a', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "mahrer.net", true */ 'm', 'a', 'h', 'r', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "maidofhonorcleaning.net", true */ 'm', 'a', 'i', 'd', 'o', 'f', 'h', 'o', 'n', 'o', 'r', 'c', 'l', 'e', 'a', 'n', 'i', 'n', 'g', '.', 'n', 'e', 't', '\0',
   /* "mail-rotter.de", true */ 'm', 'a', 'i', 'l', '-', 'r', 'o', 't', 't', 'e', 'r', '.', 'd', 'e', '\0',
   /* "mail-settings.google.com", true */ 'm', 'a', 'i', 'l', '-', 's', 'e', 't', 't', 'i', 'n', 'g', 's', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "mail.de", true */ 'm', 'a', 'i', 'l', '.', 'd', 'e', '\0',
   /* "mail.google.com", true */ 'm', 'a', 'i', 'l', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "mail.yahoo.com", false */ 'm', 'a', 'i', 'l', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
+  /* "mail4you.in", true */ 'm', 'a', 'i', 'l', '4', 'y', 'o', 'u', '.', 'i', 'n', '\0',
   /* "mailbox.org", true */ 'm', 'a', 'i', 'l', 'b', 'o', 'x', '.', 'o', 'r', 'g', '\0',
   /* "mailchuck.com", true */ 'm', 'a', 'i', 'l', 'c', 'h', 'u', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "mailer-dot.de", true */ 'm', 'a', 'i', 'l', 'e', 'r', '-', 'd', 'o', 't', '.', 'd', 'e', '\0',
   /* "mailfence.com", true */ 'm', 'a', 'i', 'l', 'f', 'e', 'n', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "mailgarant.nl", true */ 'm', 'a', 'i', 'l', 'g', 'a', 'r', 'a', 'n', 't', '.', 'n', 'l', '\0',
   /* "mailhost.it", true */ 'm', 'a', 'i', 'l', 'h', 'o', 's', 't', '.', 'i', 't', '\0',
   /* "mailinabox.email", true */ 'm', 'a', 'i', 'l', 'i', 'n', 'a', 'b', 'o', 'x', '.', 'e', 'm', 'a', 'i', 'l', '\0',
   /* "mailing-jbgg.com", true */ 'm', 'a', 'i', 'l', 'i', 'n', 'g', '-', 'j', 'b', 'g', 'g', '.', 'c', 'o', 'm', '\0',
   /* "mailmag.net", true */ 'm', 'a', 'i', 'l', 'm', 'a', 'g', '.', 'n', 'e', 't', '\0',
   /* "mailpenny.com", true */ 'm', 'a', 'i', 'l', 'p', 'e', 'n', 'n', 'y', '.', 'c', 'o', 'm', '\0',
   /* "mainframeserver.space", true */ 'm', 'a', 'i', 'n', 'f', 'r', 'a', 'm', 'e', 's', 'e', 'r', 'v', 'e', 'r', '.', 's', 'p', 'a', 'c', 'e', '\0',
   /* "mainlined.org", true */ 'm', 'a', 'i', 'n', 'l', 'i', 'n', 'e', 'd', '.', 'o', 'r', 'g', '\0',
-  /* "mainlywrenches.co", true */ 'm', 'a', 'i', 'n', 'l', 'y', 'w', 'r', 'e', 'n', 'c', 'h', 'e', 's', '.', 'c', 'o', '\0',
   /* "mainzelmaennchen.net", true */ 'm', 'a', 'i', 'n', 'z', 'e', 'l', 'm', 'a', 'e', 'n', 'n', 'c', 'h', 'e', 'n', '.', 'n', 'e', 't', '\0',
   /* "maisgasolina.com", true */ 'm', 'a', 'i', 's', 'g', 'a', 's', 'o', 'l', 'i', 'n', 'a', '.', 'c', 'o', 'm', '\0',
   /* "majaweb.cz", true */ 'm', 'a', 'j', 'a', 'w', 'e', 'b', '.', 'c', 'z', '\0',
   /* "majesnix.org", true */ 'm', 'a', 'j', 'e', 's', 'n', 'i', 'x', '.', 'o', 'r', 'g', '\0',
   /* "make-pizza.info", true */ 'm', 'a', 'k', 'e', '-', 'p', 'i', 'z', 'z', 'a', '.', 'i', 'n', 'f', 'o', '\0',
   /* "makedin.net", true */ 'm', 'a', 'k', 'e', 'd', 'i', 'n', '.', 'n', 'e', 't', '\0',
   /* "makeuplove.nl", true */ 'm', 'a', 'k', 'e', 'u', 'p', 'l', 'o', 'v', 'e', '.', 'n', 'l', '\0',
   /* "makeyourank.com", true */ 'm', 'a', 'k', 'e', 'y', 'o', 'u', 'r', 'a', 'n', 'k', '.', 'c', 'o', 'm', '\0',
@@ -7128,17 +7127,16 @@ static const char kSTSHostTable[] = {
   /* "mareklecian.cz", true */ 'm', 'a', 'r', 'e', 'k', 'l', 'e', 'c', 'i', 'a', 'n', '.', 'c', 'z', '\0',
   /* "mariannematthew.com", true */ 'm', 'a', 'r', 'i', 'a', 'n', 'n', 'e', 'm', 'a', 't', 't', 'h', 'e', 'w', '.', 'c', 'o', 'm', '\0',
   /* "mariaolesen.dk", true */ 'm', 'a', 'r', 'i', 'a', 'o', 'l', 'e', 's', 'e', 'n', '.', 'd', 'k', '\0',
   /* "marie-elisabeth.dk", true */ 'm', 'a', 'r', 'i', 'e', '-', 'e', 'l', 'i', 's', 'a', 'b', 'e', 't', 'h', '.', 'd', 'k', '\0',
   /* "marie.club", true */ 'm', 'a', 'r', 'i', 'e', '.', 'c', 'l', 'u', 'b', '\0',
   /* "mariemiramont.fr", true */ 'm', 'a', 'r', 'i', 'e', 'm', 'i', 'r', 'a', 'm', 'o', 'n', 't', '.', 'f', 'r', '\0',
   /* "marikafranke.de", true */ 'm', 'a', 'r', 'i', 'k', 'a', 'f', 'r', 'a', 'n', 'k', 'e', '.', 'd', 'e', '\0',
   /* "marilsnijders.nl", true */ 'm', 'a', 'r', 'i', 'l', 's', 'n', 'i', 'j', 'd', 'e', 'r', 's', '.', 'n', 'l', '\0',
-  /* "marinazarza.es", true */ 'm', 'a', 'r', 'i', 'n', 'a', 'z', 'a', 'r', 'z', 'a', '.', 'e', 's', '\0',
   /* "marinelausa.com", true */ 'm', 'a', 'r', 'i', 'n', 'e', 'l', 'a', 'u', 's', 'a', '.', 'c', 'o', 'm', '\0',
   /* "marines-shop.com", true */ 'm', 'a', 'r', 'i', 'n', 'e', 's', '-', 's', 'h', 'o', 'p', '.', 'c', 'o', 'm', '\0',
   /* "mariviolin.com", true */ 'm', 'a', 'r', 'i', 'v', 'i', 'o', 'l', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "mark-a-hydrant.com", true */ 'm', 'a', 'r', 'k', '-', 'a', '-', 'h', 'y', 'd', 'r', 'a', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "mark-semmler.de", true */ 'm', 'a', 'r', 'k', '-', 's', 'e', 'm', 'm', 'l', 'e', 'r', '.', 'd', 'e', '\0',
   /* "markcp.me", true */ 'm', 'a', 'r', 'k', 'c', 'p', '.', 'm', 'e', '\0',
   /* "market.android.com", true */ 'm', 'a', 'r', 'k', 'e', 't', '.', 'a', 'n', 'd', 'r', 'o', 'i', 'd', '.', 'c', 'o', 'm', '\0',
   /* "marketingdesignu.cz", true */ 'm', 'a', 'r', 'k', 'e', 't', 'i', 'n', 'g', 'd', 'e', 's', 'i', 'g', 'n', 'u', '.', 'c', 'z', '\0',
@@ -7352,16 +7350,17 @@ static const char kSTSHostTable[] = {
   /* "members-only-shopping.com", true */ 'm', 'e', 'm', 'b', 'e', 'r', 's', '-', 'o', 'n', 'l', 'y', '-', 's', 'h', 'o', 'p', 'p', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "members.nearlyfreespeech.net", false */ 'm', 'e', 'm', 'b', 'e', 'r', 's', '.', 'n', 'e', 'a', 'r', 'l', 'y', 'f', 'r', 'e', 'e', 's', 'p', 'e', 'e', 'c', 'h', '.', 'n', 'e', 't', '\0',
   /* "memdoc.org", true */ 'm', 'e', 'm', 'd', 'o', 'c', '.', 'o', 'r', 'g', '\0',
   /* "meme.institute", true */ 'm', 'e', 'm', 'e', '.', 'i', 'n', 's', 't', 'i', 't', 'u', 't', 'e', '\0',
   /* "memeblast.ninja", true */ 'm', 'e', 'm', 'e', 'b', 'l', 'a', 's', 't', '.', 'n', 'i', 'n', 'j', 'a', '\0',
   /* "memo-linux.com", true */ 'm', 'e', 'm', 'o', '-', 'l', 'i', 'n', 'u', 'x', '.', 'c', 'o', 'm', '\0',
   /* "mencap.org.uk", true */ 'm', 'e', 'n', 'c', 'a', 'p', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "mensagemaniversario.com.br", true */ 'm', 'e', 'n', 's', 'a', 'g', 'e', 'm', 'a', 'n', 'i', 'v', 'e', 'r', 's', 'a', 'r', 'i', 'o', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
+  /* "mensagemdaluz.com", true */ 'm', 'e', 'n', 's', 'a', 'g', 'e', 'm', 'd', 'a', 'l', 'u', 'z', '.', 'c', 'o', 'm', '\0',
   /* "mentax.net", false */ 'm', 'e', 'n', 't', 'a', 'x', '.', 'n', 'e', 't', '\0',
   /* "mentiq.az", true */ 'm', 'e', 'n', 't', 'i', 'q', '.', 'a', 'z', '\0',
   /* "mentorithm.com", true */ 'm', 'e', 'n', 't', 'o', 'r', 'i', 't', 'h', 'm', '.', 'c', 'o', 'm', '\0',
   /* "mentz.info", true */ 'm', 'e', 'n', 't', 'z', '.', 'i', 'n', 'f', 'o', '\0',
   /* "menudrivetest.com", true */ 'm', 'e', 'n', 'u', 'd', 'r', 'i', 'v', 'e', 't', 'e', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "menuonlineordering.com", true */ 'm', 'e', 'n', 'u', 'o', 'n', 'l', 'i', 'n', 'e', 'o', 'r', 'd', 'e', 'r', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "menzel-motors.com", true */ 'm', 'e', 'n', 'z', 'e', 'l', '-', 'm', 'o', 't', 'o', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "menzietti.it", true */ 'm', 'e', 'n', 'z', 'i', 'e', 't', 't', 'i', '.', 'i', 't', '\0',
@@ -7674,18 +7673,16 @@ static const char kSTSHostTable[] = {
   /* "mornings.com", true */ 'm', 'o', 'r', 'n', 'i', 'n', 'g', 's', '.', 'c', 'o', 'm', '\0',
   /* "morteruelo.net", true */ 'm', 'o', 'r', 't', 'e', 'r', 'u', 'e', 'l', 'o', '.', 'n', 'e', 't', '\0',
   /* "morz.org", true */ 'm', 'o', 'r', 'z', '.', 'o', 'r', 'g', '\0',
   /* "mosstier.com", true */ 'm', 'o', 's', 's', 't', 'i', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "mostlyharmless.at", true */ 'm', 'o', 's', 't', 'l', 'y', 'h', 'a', 'r', 'm', 'l', 'e', 's', 's', '.', 'a', 't', '\0',
   /* "motd.ch", true */ 'm', 'o', 't', 'd', '.', 'c', 'h', '\0',
   /* "mothereff.in", true */ 'm', 'o', 't', 'h', 'e', 'r', 'e', 'f', 'f', '.', 'i', 'n', '\0',
   /* "motionfreight.com", true */ 'm', 'o', 't', 'i', 'o', 'n', 'f', 'r', 'e', 'i', 'g', 'h', 't', '.', 'c', 'o', 'm', '\0',
-  /* "motoryz.com", true */ 'm', 'o', 't', 'o', 'r', 'y', 'z', '.', 'c', 'o', 'm', '\0',
-  /* "motoryz.nl", true */ 'm', 'o', 't', 'o', 'r', 'y', 'z', '.', 'n', 'l', '\0',
   /* "moulinaparoles.ca", true */ 'm', 'o', 'u', 'l', 'i', 'n', 'a', 'p', 'a', 'r', 'o', 'l', 'e', 's', '.', 'c', 'a', '\0',
   /* "mountainactivitysection.org.uk", true */ 'm', 'o', 'u', 'n', 't', 'a', 'i', 'n', 'a', 'c', 't', 'i', 'v', 'i', 't', 'y', 's', 'e', 'c', 't', 'i', 'o', 'n', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "mountainroseherbs.com", true */ 'm', 'o', 'u', 'n', 't', 'a', 'i', 'n', 'r', 'o', 's', 'e', 'h', 'e', 'r', 'b', 's', '.', 'c', 'o', 'm', '\0',
   /* "movabletype.net", true */ 'm', 'o', 'v', 'a', 'b', 'l', 'e', 't', 'y', 'p', 'e', '.', 'n', 'e', 't', '\0',
   /* "moveek.com", true */ 'm', 'o', 'v', 'e', 'e', 'k', '.', 'c', 'o', 'm', '\0',
   /* "movember.com", false */ 'm', 'o', 'v', 'e', 'm', 'b', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "movepin.com", true */ 'm', 'o', 'v', 'e', 'p', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "movie4kto.site", true */ 'm', 'o', 'v', 'i', 'e', '4', 'k', 't', 'o', '.', 's', 'i', 't', 'e', '\0',
@@ -7916,18 +7913,16 @@ static const char kSTSHostTable[] = {
   /* "narthollis.net", true */ 'n', 'a', 'r', 't', 'h', 'o', 'l', 'l', 'i', 's', '.', 'n', 'e', 't', '\0',
   /* "nartuk.com.ua", false */ 'n', 'a', 'r', 't', 'u', 'k', '.', 'c', 'o', 'm', '.', 'u', 'a', '\0',
   /* "nascher.org", true */ 'n', 'a', 's', 'c', 'h', 'e', 'r', '.', 'o', 'r', 'g', '\0',
   /* "nasreddine.xyz", true */ 'n', 'a', 's', 'r', 'e', 'd', 'd', 'i', 'n', 'e', '.', 'x', 'y', 'z', '\0',
   /* "nasrsolar.com", true */ 'n', 'a', 's', 'r', 's', 'o', 'l', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "nassi.me", true */ 'n', 'a', 's', 's', 'i', '.', 'm', 'e', '\0',
   /* "natalia-fadeeva.ru", true */ 'n', 'a', 't', 'a', 'l', 'i', 'a', '-', 'f', 'a', 'd', 'e', 'e', 'v', 'a', '.', 'r', 'u', '\0',
   /* "natanaelys.com", true */ 'n', 'a', 't', 'a', 'n', 'a', 'e', 'l', 'y', 's', '.', 'c', 'o', 'm', '\0',
-  /* "natenom.com", true */ 'n', 'a', 't', 'e', 'n', 'o', 'm', '.', 'c', 'o', 'm', '\0',
-  /* "natenom.name", true */ 'n', 'a', 't', 'e', 'n', 'o', 'm', '.', 'n', 'a', 'm', 'e', '\0',
   /* "nathan.io", true */ 'n', 'a', 't', 'h', 'a', 'n', '.', 'i', 'o', '\0',
   /* "nathankonopinski.com", true */ 'n', 'a', 't', 'h', 'a', 'n', 'k', 'o', 'n', 'o', 'p', 'i', 'n', 's', 'k', 'i', '.', 'c', 'o', 'm', '\0',
   /* "nathansmetana.com", true */ 'n', 'a', 't', 'h', 'a', 'n', 's', 'm', 'e', 't', 'a', 'n', 'a', '.', 'c', 'o', 'm', '\0',
   /* "nationalcentereg.org", true */ 'n', 'a', 't', 'i', 'o', 'n', 'a', 'l', 'c', 'e', 'n', 't', 'e', 'r', 'e', 'g', '.', 'o', 'r', 'g', '\0',
   /* "nationalcrimecheck.com.au", true */ 'n', 'a', 't', 'i', 'o', 'n', 'a', 'l', 'c', 'r', 'i', 'm', 'e', 'c', 'h', 'e', 'c', 'k', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "nationalpriorities.org", true */ 'n', 'a', 't', 'i', 'o', 'n', 'a', 'l', 'p', 'r', 'i', 'o', 'r', 'i', 't', 'i', 'e', 's', '.', 'o', 'r', 'g', '\0',
   /* "natsumihoshino.com", true */ 'n', 'a', 't', 's', 'u', 'm', 'i', 'h', 'o', 's', 'h', 'i', 'n', 'o', '.', 'c', 'o', 'm', '\0',
   /* "natural-progesterone.net", true */ 'n', 'a', 't', 'u', 'r', 'a', 'l', '-', 'p', 'r', 'o', 'g', 'e', 's', 't', 'e', 'r', 'o', 'n', 'e', '.', 'n', 'e', 't', '\0',
@@ -8118,17 +8113,16 @@ static const char kSTSHostTable[] = {
   /* "nicolaw.uk", true */ 'n', 'i', 'c', 'o', 'l', 'a', 'w', '.', 'u', 'k', '\0',
   /* "nidro.de", true */ 'n', 'i', 'd', 'r', 'o', '.', 'd', 'e', '\0',
   /* "nidux.com", true */ 'n', 'i', 'd', 'u', 'x', '.', 'c', 'o', 'm', '\0',
   /* "niduxcomercial.com", true */ 'n', 'i', 'd', 'u', 'x', 'c', 'o', 'm', 'e', 'r', 'c', 'i', 'a', 'l', '.', 'c', 'o', 'm', '\0',
   /* "niederohmig.de", true */ 'n', 'i', 'e', 'd', 'e', 'r', 'o', 'h', 'm', 'i', 'g', '.', 'd', 'e', '\0',
   /* "niedersetz.de", true */ 'n', 'i', 'e', 'd', 'e', 'r', 's', 'e', 't', 'z', '.', 'd', 'e', '\0',
   /* "niehage.name", true */ 'n', 'i', 'e', 'h', 'a', 'g', 'e', '.', 'n', 'a', 'm', 'e', '\0',
   /* "nien.cf", true */ 'n', 'i', 'e', 'n', '.', 'c', 'f', '\0',
-  /* "nien.chat", true */ 'n', 'i', 'e', 'n', '.', 'c', 'h', 'a', 't', '\0',
   /* "nien.com", true */ 'n', 'i', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "nien.com.tw", true */ 'n', 'i', 'e', 'n', '.', 'c', 'o', 'm', '.', 't', 'w', '\0',
   /* "nien.org", true */ 'n', 'i', 'e', 'n', '.', 'o', 'r', 'g', '\0',
   /* "nien.taipei", true */ 'n', 'i', 'e', 'n', '.', 't', 'a', 'i', 'p', 'e', 'i', '\0',
   /* "nien.tk", true */ 'n', 'i', 'e', 'n', '.', 't', 'k', '\0',
   /* "nienfun.com", true */ 'n', 'i', 'e', 'n', 'f', 'u', 'n', '.', 'c', 'o', 'm', '\0',
   /* "nierenpraxis-dr-merkel.de", true */ 'n', 'i', 'e', 'r', 'e', 'n', 'p', 'r', 'a', 'x', 'i', 's', '-', 'd', 'r', '-', 'm', 'e', 'r', 'k', 'e', 'l', '.', 'd', 'e', '\0',
   /* "nierenpraxis-merkel.de", true */ 'n', 'i', 'e', 'r', 'e', 'n', 'p', 'r', 'a', 'x', 'i', 's', '-', 'm', 'e', 'r', 'k', 'e', 'l', '.', 'd', 'e', '\0',
@@ -8147,17 +8141,16 @@ static const char kSTSHostTable[] = {
   /* "nikklassen.ca", true */ 'n', 'i', 'k', 'k', 'l', 'a', 's', 's', 'e', 'n', '.', 'c', 'a', '\0',
   /* "nikksno.io", true */ 'n', 'i', 'k', 'k', 's', 'n', 'o', '.', 'i', 'o', '\0',
   /* "niklaslindblad.se", true */ 'n', 'i', 'k', 'l', 'a', 's', 'l', 'i', 'n', 'd', 'b', 'l', 'a', 'd', '.', 's', 'e', '\0',
   /* "nikobradshaw.com", true */ 'n', 'i', 'k', 'o', 'b', 'r', 'a', 'd', 's', 'h', 'a', 'w', '.', 'c', 'o', 'm', '\0',
   /* "nikolasbradshaw.com", true */ 'n', 'i', 'k', 'o', 'l', 'a', 's', 'b', 'r', 'a', 'd', 's', 'h', 'a', 'w', '.', 'c', 'o', 'm', '\0',
   /* "nikolasgrottendieck.com", true */ 'n', 'i', 'k', 'o', 'l', 'a', 's', 'g', 'r', 'o', 't', 't', 'e', 'n', 'd', 'i', 'e', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "nil.gs", true */ 'n', 'i', 'l', '.', 'g', 's', '\0',
   /* "niloxy.com", true */ 'n', 'i', 'l', 'o', 'x', 'y', '.', 'c', 'o', 'm', '\0',
-  /* "nilrem.org", true */ 'n', 'i', 'l', 'r', 'e', 'm', '.', 'o', 'r', 'g', '\0',
   /* "nimeshjm.com", true */ 'n', 'i', 'm', 'e', 's', 'h', 'j', 'm', '.', 'c', 'o', 'm', '\0',
   /* "ninchat.com", true */ 'n', 'i', 'n', 'c', 'h', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "ninchisho-online.com", true */ 'n', 'i', 'n', 'c', 'h', 'i', 's', 'h', 'o', '-', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "nine-hells.net", false */ 'n', 'i', 'n', 'e', '-', 'h', 'e', 'l', 'l', 's', '.', 'n', 'e', 't', '\0',
   /* "ninespec.com", true */ 'n', 'i', 'n', 'e', 's', 'p', 'e', 'c', '.', 'c', 'o', 'm', '\0',
   /* "ninjan.co", true */ 'n', 'i', 'n', 'j', 'a', 'n', '.', 'c', 'o', '\0',
   /* "ninthfloor.org", true */ 'n', 'i', 'n', 't', 'h', 'f', 'l', 'o', 'o', 'r', '.', 'o', 'r', 'g', '\0',
   /* "ninux.ch", false */ 'n', 'i', 'n', 'u', 'x', '.', 'c', 'h', '\0',
@@ -8529,17 +8522,16 @@ static const char kSTSHostTable[] = {
   /* "otoy.com", true */ 'o', 't', 'o', 'y', '.', 'c', 'o', 'm', '\0',
   /* "otpsmart.com.ua", true */ 'o', 't', 'p', 's', 'm', 'a', 'r', 't', '.', 'c', 'o', 'm', '.', 'u', 'a', '\0',
   /* "otrm.de", true */ 'o', 't', 'r', 'm', '.', 'd', 'e', '\0',
   /* "otrsdemo.hu", true */ 'o', 't', 'r', 's', 'd', 'e', 'm', 'o', '.', 'h', 'u', '\0',
   /* "ottoproject.io", true */ 'o', 't', 't', 'o', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'i', 'o', '\0',
   /* "otvaracie-hodiny.sk", true */ 'o', 't', 'v', 'a', 'r', 'a', 'c', 'i', 'e', '-', 'h', 'o', 'd', 'i', 'n', 'y', '.', 's', 'k', '\0',
   /* "otya.me", true */ 'o', 't', 'y', 'a', '.', 'm', 'e', '\0',
   /* "ouaibe.qc.ca", true */ 'o', 'u', 'a', 'i', 'b', 'e', '.', 'q', 'c', '.', 'c', 'a', '\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',
   /* "outdoorproducts.com", true */ 'o', 'u', 't', 'd', 'o', 'o', 'r', 'p', 'r', 'o', 'd', 'u', 'c', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "outgress.com", true */ 'o', 'u', 't', 'g', 'r', 'e', 's', 's', '.', 'c', 'o', 'm', '\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',
   /* "outurnate.com", true */ 'o', 'u', 't', 'u', 'r', 'n', 'a', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "overalglas.nl", true */ 'o', 'v', 'e', 'r', 'a', 'l', 'g', 'l', 'a', 's', '.', 'n', 'l', '\0',
@@ -8711,17 +8703,16 @@ static const char kSTSHostTable[] = {
   /* "payupay.ru", true */ 'p', 'a', 'y', 'u', 'p', 'a', 'y', '.', 'r', 'u', '\0',
   /* "pbraunschdash.com", true */ 'p', 'b', 'r', 'a', 'u', 'n', 's', 'c', 'h', 'd', 'a', 's', 'h', '.', 'c', 'o', 'm', '\0',
   /* "pbscreens.com", true */ 'p', 'b', 's', 'c', 'r', 'e', 'e', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "pccentral.nl", true */ 'p', 'c', 'c', 'e', 'n', 't', 'r', 'a', 'l', '.', 'n', 'l', '\0',
   /* "pcel.com", true */ 'p', 'c', 'e', 'l', '.', 'c', 'o', 'm', '\0',
   /* "pcfeuerwehr.de", true */ 'p', 'c', 'f', 'e', 'u', 'e', 'r', 'w', 'e', 'h', 'r', '.', 'd', 'e', '\0',
   /* "pcforum.sk", true */ 'p', 'c', 'f', 'o', 'r', 'u', 'm', '.', 's', 'k', '\0',
   /* "pcfun.net", true */ 'p', 'c', 'f', 'u', 'n', '.', 'n', 'e', 't', '\0',
-  /* "pchax.net", true */ 'p', 'c', 'h', 'a', 'x', '.', 'n', 'e', 't', '\0',
   /* "pciconcursos.com.br", true */ 'p', 'c', 'i', 'c', 'o', 'n', 'c', 'u', 'r', 's', 'o', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "pclob.gov", true */ 'p', 'c', 'l', 'o', 'b', '.', 'g', 'o', 'v', '\0',
   /* "pcloud.com", true */ 'p', 'c', 'l', 'o', 'u', 'd', '.', 'c', 'o', 'm', '\0',
   /* "pcnotdienst-oldenburg-rastede.de", true */ 'p', 'c', 'n', 'o', 't', 'd', 'i', 'e', 'n', 's', 't', '-', 'o', 'l', 'd', 'e', 'n', 'b', 'u', 'r', 'g', '-', 'r', 'a', 's', 't', 'e', 'd', 'e', '.', 'd', 'e', '\0',
   /* "pctonic.net", true */ 'p', 'c', 't', 'o', 'n', 'i', 'c', '.', 'n', 'e', 't', '\0',
   /* "pdamsidoarjo.co.id", true */ 'p', 'd', 'a', 'm', 's', 'i', 'd', 'o', 'a', 'r', 'j', 'o', '.', 'c', 'o', '.', 'i', 'd', '\0',
   /* "pdevio.com", true */ 'p', 'd', 'e', 'v', 'i', 'o', '.', 'c', 'o', 'm', '\0',
   /* "pdf.yt", true */ 'p', 'd', 'f', '.', 'y', 't', '\0',
@@ -8732,17 +8723,16 @@ static const char kSTSHostTable[] = {
   /* "peakapp.nl", true */ 'p', 'e', 'a', 'k', 'a', 'p', 'p', '.', 'n', 'l', '\0',
   /* "pear2pear.de", true */ 'p', 'e', 'a', 'r', '2', 'p', 'e', 'a', 'r', '.', 'd', 'e', '\0',
   /* "pedicureduiven.nl", true */ 'p', 'e', 'd', 'i', 'c', 'u', 'r', 'e', 'd', 'u', 'i', 'v', 'e', 'n', '.', 'n', 'l', '\0',
   /* "pedrosluiter.nl", true */ 'p', 'e', 'd', 'r', 'o', 's', 'l', 'u', 'i', 't', 'e', 'r', '.', 'n', 'l', '\0',
   /* "pedroventura.com", true */ 'p', 'e', 'd', 'r', 'o', 'v', 'e', 'n', 't', 'u', 'r', 'a', '.', 'c', 'o', 'm', '\0',
   /* "peercraft.com", true */ 'p', 'e', 'e', 'r', 'c', 'r', 'a', 'f', 't', '.', 'c', 'o', 'm', '\0',
   /* "peerherrmann.de", true */ 'p', 'e', 'e', 'r', 'h', 'e', 'r', 'r', 'm', 'a', 'n', 'n', '.', 'd', 'e', '\0',
   /* "peername.com", true */ 'p', 'e', 'e', 'r', 'n', 'a', 'm', 'e', '.', 'c', 'o', 'm', '\0',
-  /* "peervpn.net", true */ 'p', 'e', 'e', 'r', 'v', 'p', 'n', '.', 'n', 'e', 't', '\0',
   /* "peetah.com", true */ 'p', 'e', 'e', 't', 'a', 'h', '.', 'c', 'o', 'm', '\0',
   /* "pegas-studio.net", true */ 'p', 'e', 'g', 'a', 's', '-', 's', 't', 'u', 'd', 'i', 'o', '.', 'n', 'e', 't', '\0',
   /* "peifi.de", true */ 'p', 'e', 'i', 'f', 'i', '.', 'd', 'e', '\0',
   /* "pekoe.se", true */ 'p', 'e', 'k', 'o', 'e', '.', 's', 'e', '\0',
   /* "pelanucto.cz", true */ 'p', 'e', 'l', 'a', 'n', 'u', 'c', 't', 'o', '.', 'c', 'z', '\0',
   /* "peliculasaudiolatinoonline.com", true */ 'p', 'e', 'l', 'i', 'c', 'u', 'l', 'a', 's', 'a', 'u', 'd', 'i', 'o', 'l', 'a', 't', 'i', 'n', 'o', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "penablog.com", true */ 'p', 'e', 'n', 'a', 'b', 'l', 'o', 'g', '.', 'c', 'o', 'm', '\0',
   /* "pencepay.com", true */ 'p', 'e', 'n', 'c', 'e', 'p', 'a', 'y', '.', 'c', 'o', 'm', '\0',
@@ -8825,17 +8815,16 @@ static const char kSTSHostTable[] = {
   /* "pharynks.com", true */ 'p', 'h', 'a', 'r', 'y', 'n', 'k', 's', '.', 'c', 'o', 'm', '\0',
   /* "phcnetworks.net", true */ 'p', 'h', 'c', 'n', 'e', 't', 'w', 'o', 'r', 'k', 's', '.', 'n', 'e', 't', '\0',
   /* "phenomeno-porto.com", true */ 'p', 'h', 'e', 'n', 'o', 'm', 'e', 'n', 'o', '-', 'p', 'o', 'r', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "phenomeno.nl", true */ 'p', 'h', 'e', 'n', 'o', 'm', 'e', 'n', 'o', '.', 'n', 'l', '\0',
   /* "phenomenoporto.com", true */ 'p', 'h', 'e', 'n', 'o', 'm', 'e', 'n', 'o', 'p', 'o', 'r', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "phenomenoporto.nl", true */ 'p', 'h', 'e', 'n', 'o', 'm', 'e', 'n', 'o', 'p', 'o', 'r', 't', 'o', '.', 'n', 'l', '\0',
   /* "phi-works.com", true */ 'p', 'h', 'i', '-', 'w', 'o', 'r', 'k', 's', '.', 'c', 'o', 'm', '\0',
   /* "phil.tw", true */ 'p', 'h', 'i', 'l', '.', 't', 'w', '\0',
-  /* "philadelphia.com.mx", true */ 'p', 'h', 'i', 'l', 'a', 'd', 'e', 'l', 'p', 'h', 'i', 'a', '.', 'c', 'o', 'm', '.', 'm', 'x', '\0',
   /* "philadelphiadancefoundation.org", true */ 'p', 'h', 'i', 'l', 'a', 'd', 'e', 'l', 'p', 'h', 'i', 'a', 'd', 'a', 'n', 'c', 'e', 'f', 'o', 'u', 'n', 'd', 'a', 't', 'i', 'o', 'n', '.', 'o', 'r', 'g', '\0',
   /* "philipkohn.com", true */ 'p', 'h', 'i', 'l', 'i', 'p', 'k', 'o', 'h', 'n', '.', 'c', 'o', 'm', '\0',
   /* "philipmordue.co.uk", true */ 'p', 'h', 'i', 'l', 'i', 'p', 'm', 'o', 'r', 'd', 'u', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "phillmoore.com", true */ 'p', 'h', 'i', 'l', 'l', 'm', 'o', 'o', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "phillprice.com", true */ 'p', 'h', 'i', 'l', 'l', 'p', 'r', 'i', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "philosopherswool.com", true */ 'p', 'h', 'i', 'l', 'o', 's', 'o', 'p', 'h', 'e', 'r', 's', 'w', 'o', 'o', 'l', '.', 'c', 'o', 'm', '\0',
   /* "philosophyguides.org", true */ 'p', 'h', 'i', 'l', 'o', 's', 'o', 'p', 'h', 'y', 'g', 'u', 'i', 'd', 'e', 's', '.', 'o', 'r', 'g', '\0',
   /* "philphonic.de", true */ 'p', 'h', 'i', 'l', 'p', 'h', 'o', 'n', 'i', 'c', '.', 'd', 'e', '\0',
@@ -9058,17 +9047,16 @@ static const char kSTSHostTable[] = {
   /* "portercup.com", true */ 'p', 'o', 'r', 't', 'e', 'r', 'c', 'u', 'p', '.', 'c', 'o', 'm', '\0',
   /* "portofrotterdam.com", true */ 'p', 'o', 'r', 't', 'o', 'f', 'r', 'o', 't', 't', 'e', 'r', 'd', 'a', 'm', '.', 'c', 'o', 'm', '\0',
   /* "portosonline.pl", true */ 'p', 'o', 'r', 't', 'o', 's', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'p', 'l', '\0',
   /* "portraitsystem.biz", true */ 'p', 'o', 'r', 't', 'r', 'a', 'i', 't', 's', 'y', 's', 't', 'e', 'm', '.', 'b', 'i', 'z', '\0',
   /* "portvaletickets.com", true */ 'p', 'o', 'r', 't', 'v', 'a', 'l', 'e', 't', 'i', 'c', 'k', 'e', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "porybox.com", true */ 'p', 'o', 'r', 'y', 'b', 'o', 'x', '.', 'c', 'o', 'm', '\0',
   /* "positivesobrietyinstitute.com", true */ 'p', 'o', 's', 'i', 't', 'i', 'v', 'e', 's', 'o', 'b', 'r', 'i', 'e', 't', 'y', 'i', 'n', 's', 't', 'i', 't', 'u', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "posobota.cz", true */ 'p', 'o', 's', 'o', 'b', 'o', 't', 'a', '.', 'c', 'z', '\0',
-  /* "post4me.at", true */ 'p', 'o', 's', 't', '4', 'm', 'e', '.', 'a', 't', '\0',
   /* "postal.dk", true */ 'p', 'o', 's', 't', 'a', 'l', '.', 'd', 'k', '\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',
   /* "postcodegarant.nl", true */ 'p', 'o', 's', 't', 'c', 'o', 'd', 'e', 'g', 'a', 'r', 'a', 'n', 't', '.', 'n', 'l', '\0',
   /* "postcodewise.co.uk", true */ 'p', 'o', 's', 't', 'c', 'o', 'd', 'e', 'w', 'i', 's', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "posteo.de", false */ 'p', 'o', 's', 't', 'e', 'o', '.', 'd', 'e', '\0',
   /* "postfinance.ch", true */ 'p', 'o', 's', 't', 'f', 'i', 'n', 'a', 'n', 'c', 'e', '.', 'c', 'h', '\0',
   /* "postn.eu", true */ 'p', 'o', 's', 't', 'n', '.', 'e', 'u', '\0',
@@ -9446,17 +9434,16 @@ static const char kSTSHostTable[] = {
   /* "rannseier.org", true */ 'r', 'a', 'n', 'n', 's', 'e', 'i', 'e', 'r', '.', 'o', 'r', 'g', '\0',
   /* "rantanda.com", true */ 'r', 'a', 'n', 't', 'a', 'n', 'd', 'a', '.', 'c', 'o', 'm', '\0',
   /* "ranzbak.nl", true */ 'r', 'a', 'n', 'z', 'b', 'a', 'k', '.', 'n', 'l', '\0',
   /* "rapenroer.nl", true */ 'r', 'a', 'p', 'e', 'n', 'r', 'o', 'e', 'r', '.', 'n', 'l', '\0',
   /* "raphael.li", true */ 'r', 'a', 'p', 'h', 'a', 'e', 'l', '.', 'l', 'i', '\0',
   /* "rapido.nu", true */ 'r', 'a', 'p', 'i', 'd', 'o', '.', 'n', 'u', '\0',
   /* "rapidshit.net", true */ 'r', 'a', 'p', 'i', 'd', 's', 'h', 'i', 't', '.', 'n', 'e', 't', '\0',
   /* "rasebo.ro", true */ 'r', 'a', 's', 'e', 'b', 'o', '.', 'r', 'o', '\0',
-  /* "raspass.me", true */ 'r', 'a', 's', 'p', 'a', 's', 's', '.', 'm', 'e', '\0',
   /* "raspberry.us", true */ 'r', 'a', 's', 'p', 'b', 'e', 'r', 'r', 'y', '.', 'u', 's', '\0',
   /* "rastreador.com.es", true */ 'r', 'a', 's', 't', 'r', 'e', 'a', 'd', 'o', 'r', '.', 'c', 'o', 'm', '.', 'e', 's', '\0',
   /* "ratd.net", true */ 'r', 'a', 't', 'd', '.', 'n', 'e', 't', '\0',
   /* "rate-esport.de", true */ 'r', 'a', 't', 'e', '-', 'e', 's', 'p', 'o', 'r', 't', '.', 'd', 'e', '\0',
   /* "rationalops.com", true */ 'r', 'a', 't', 'i', 'o', 'n', 'a', 'l', 'o', 'p', 's', '.', 'c', 'o', 'm', '\0',
   /* "ratuseks.com", false */ 'r', 'a', 't', 'u', 's', 'e', 'k', 's', '.', 'c', 'o', 'm', '\0',
   /* "ratuseks.net", false */ 'r', 'a', 't', 'u', 's', 'e', 'k', 's', '.', 'n', 'e', 't', '\0',
   /* "ratuseks.us", false */ 'r', 'a', 't', 'u', 's', 'e', 'k', 's', '.', 'u', 's', '\0',
@@ -9741,17 +9728,16 @@ static const char kSTSHostTable[] = {
   /* "robertof.ovh", true */ 'r', 'o', 'b', 'e', 'r', 't', 'o', 'f', '.', 'o', 'v', 'h', '\0',
   /* "robhorstmanshof.nl", true */ 'r', 'o', 'b', 'h', 'o', 'r', 's', 't', 'm', 'a', 'n', 's', 'h', 'o', 'f', '.', 'n', 'l', '\0',
   /* "robi-net.it", true */ 'r', 'o', 'b', 'i', '-', 'n', 'e', 't', '.', 'i', 't', '\0',
   /* "robinadr.com", true */ 'r', 'o', 'b', 'i', 'n', 'a', 'd', 'r', '.', 'c', 'o', 'm', '\0',
   /* "robinhoodbingo.com", true */ 'r', 'o', 'b', 'i', 'n', 'h', 'o', 'o', 'd', 'b', 'i', 'n', 'g', 'o', '.', 'c', 'o', 'm', '\0',
   /* "robinsonyu.com", true */ 'r', 'o', 'b', 'i', 'n', 's', 'o', 'n', 'y', 'u', '.', 'c', 'o', 'm', '\0',
   /* "robinwinslow.uk", true */ 'r', 'o', 'b', 'i', 'n', 'w', 'i', 'n', 's', 'l', 'o', 'w', '.', 'u', 'k', '\0',
   /* "robodeidentidad.gov", true */ 'r', 'o', 'b', 'o', 'd', 'e', 'i', 'd', 'e', 'n', 't', 'i', 'd', 'a', 'd', '.', 'g', 'o', 'v', '\0',
-  /* "robohash.org", true */ 'r', 'o', 'b', 'o', 'h', 'a', 's', 'h', '.', 'o', 'r', 'g', '\0',
   /* "robspc.repair", true */ 'r', 'o', 'b', 's', 'p', 'c', '.', 'r', 'e', 'p', 'a', 'i', 'r', '\0',
   /* "robteix.com", true */ 'r', 'o', 'b', 't', 'e', 'i', 'x', '.', 'c', 'o', 'm', '\0',
   /* "robtex.com", true */ 'r', 'o', 'b', 't', 'e', 'x', '.', 'c', 'o', 'm', '\0',
   /* "robtex.net", true */ 'r', 'o', 'b', 't', 'e', 'x', '.', 'n', 'e', 't', '\0',
   /* "robtex.org", true */ 'r', 'o', 'b', 't', 'e', 'x', '.', 'o', 'r', 'g', '\0',
   /* "robud.info", true */ 'r', 'o', 'b', 'u', 'd', '.', 'i', 'n', 'f', 'o', '\0',
   /* "rockcanyonbank.com", true */ 'r', 'o', 'c', 'k', 'c', 'a', 'n', 'y', 'o', 'n', 'b', 'a', 'n', 'k', '.', 'c', 'o', 'm', '\0',
   /* "rockeyscrivo.com", true */ 'r', 'o', 'c', 'k', 'e', 'y', 's', 'c', 'r', 'i', 'v', 'o', '.', 'c', 'o', 'm', '\0',
@@ -9831,16 +9817,17 @@ static const char kSTSHostTable[] = {
   /* "rpgmaker.es", true */ 'r', 'p', 'g', 'm', 'a', 'k', 'e', 'r', '.', 'e', 's', '\0',
   /* "rpy.xyz", true */ 'r', 'p', 'y', '.', 'x', 'y', 'z', '\0',
   /* "rq-labo.jp", true */ 'r', 'q', '-', 'l', 'a', 'b', 'o', '.', 'j', 'p', '\0',
   /* "rr105.de", true */ 'r', 'r', '1', '0', '5', '.', 'd', 'e', '\0',
   /* "rring.me", true */ 'r', 'r', 'i', 'n', 'g', '.', 'm', 'e', '\0',
   /* "rsampaio.info", true */ 'r', 's', 'a', 'm', 'p', 'a', 'i', 'o', '.', 'i', 'n', 'f', 'o', '\0',
   /* "rsblake.net", true */ 'r', 's', 'b', 'l', 'a', 'k', 'e', '.', 'n', 'e', 't', '\0',
   /* "rsi.im", false */ 'r', 's', 'i', '.', 'i', 'm', '\0',
+  /* "rssr.se", true */ 'r', 's', 's', 'r', '.', 's', 'e', '\0',
   /* "rsync.eu", true */ 'r', 's', 'y', 'n', 'c', '.', 'e', 'u', '\0',
   /* "rtcx.net", true */ 'r', 't', 'c', 'x', '.', 'n', 'e', 't', '\0',
   /* "rtd.uk.com", true */ 'r', 't', 'd', '.', 'u', 'k', '.', 'c', 'o', 'm', '\0',
   /* "rtek.se", true */ 'r', 't', 'e', 'k', '.', 's', 'e', '\0',
   /* "rtfpessoa.xyz", true */ 'r', 't', 'f', 'p', 'e', 's', 's', 'o', 'a', '.', 'x', 'y', 'z', '\0',
   /* "ru-sprachstudio.ch", true */ 'r', 'u', '-', 's', 'p', 'r', 'a', 'c', 'h', 's', 't', 'u', 'd', 'i', 'o', '.', 'c', 'h', '\0',
   /* "ru.search.yahoo.com", false */ 'r', 'u', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "ruanmi.de", true */ 'r', 'u', 'a', 'n', 'm', 'i', '.', 'd', 'e', '\0',
@@ -10274,18 +10261,16 @@ static const char kSTSHostTable[] = {
   /* "settberg.de", true */ 's', 'e', 't', 't', 'b', 'e', 'r', 'g', '.', 'd', 'e', '\0',
   /* "settleapp.co", true */ 's', 'e', 't', 't', 'l', 'e', 'a', 'p', 'p', '.', 'c', 'o', '\0',
   /* "setuid0.kr", true */ 's', 'e', 't', 'u', 'i', 'd', '0', '.', 'k', 'r', '\0',
   /* "sevenmatches.com", true */ 's', 'e', 'v', 'e', 'n', 'm', 'a', 't', 'c', 'h', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "severntrentinsuranceportal.com", true */ 's', 'e', 'v', 'e', 'r', 'n', 't', 'r', 'e', 'n', 't', 'i', 'n', 's', 'u', 'r', 'a', 'n', 'c', 'e', 'p', 'o', 'r', 't', 'a', 'l', '.', 'c', 'o', 'm', '\0',
   /* "sevsopr.ru", true */ 's', 'e', 'v', 's', 'o', 'p', 'r', '.', 'r', 'u', '\0',
   /* "sexwork.net", true */ 's', 'e', 'x', 'w', 'o', 'r', 'k', '.', 'n', 'e', 't', '\0',
   /* "sexy-store.nl", true */ 's', 'e', 'x', 'y', '-', 's', 't', 'o', 'r', 'e', '.', 'n', 'l', '\0',
-  /* "seyr.it", true */ 's', 'e', 'y', 'r', '.', 'i', 't', '\0',
-  /* "seyr.me", true */ 's', 'e', 'y', 'r', '.', 'm', 'e', '\0',
   /* "sfsltd.com", true */ 's', 'f', 's', 'l', 't', 'd', '.', 'c', 'o', 'm', '\0',
   /* "sftool.gov", true */ 's', 'f', 't', 'o', 'o', 'l', '.', 'g', 'o', 'v', '\0',
   /* "sg.search.yahoo.com", false */ 's', 'g', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "sgcaccounts.co.uk", true */ 's', 'g', 'c', 'a', 'c', 'c', 'o', 'u', 'n', 't', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "sgtcodfish.com", true */ 's', 'g', 't', 'c', 'o', 'd', 'f', 'i', 's', 'h', '.', 'c', 'o', 'm', '\0',
   /* "sh-network.de", false */ 's', 'h', '-', 'n', 'e', 't', 'w', 'o', 'r', 'k', '.', 'd', 'e', '\0',
   /* "shaaaaaaaaaaaaa.com", true */ 's', 'h', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', '.', 'c', 'o', 'm', '\0',
   /* "shadex.net", true */ 's', 'h', 'a', 'd', 'e', 'x', '.', 'n', 'e', 't', '\0',
@@ -10335,16 +10320,17 @@ static const char kSTSHostTable[] = {
   /* "shiawasedo.co.jp", true */ 's', 'h', 'i', 'a', 'w', 'a', 's', 'e', 'd', 'o', '.', 'c', 'o', '.', 'j', 'p', '\0',
   /* "shiftplanning.com", true */ 's', 'h', 'i', 'f', 't', 'p', 'l', 'a', 'n', 'n', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "shinebijoux.com.br", true */ 's', 'h', 'i', 'n', 'e', 'b', 'i', 'j', 'o', 'u', 'x', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "shinnyosangha.org", false */ 's', 'h', 'i', 'n', 'n', 'y', 'o', 's', 'a', 'n', 'g', 'h', 'a', '.', 'o', 'r', 'g', '\0',
   /* "shinobi-fansub.ro", true */ 's', 'h', 'i', 'n', 'o', 'b', 'i', '-', 'f', 'a', 'n', 's', 'u', 'b', '.', 'r', 'o', '\0',
   /* "shinyuu.net", true */ 's', 'h', 'i', 'n', 'y', 'u', 'u', '.', 'n', 'e', 't', '\0',
   /* "shipard.com", true */ 's', 'h', 'i', 'p', 'a', 'r', 'd', '.', 'c', 'o', 'm', '\0',
   /* "shipcloud.io", true */ 's', 'h', 'i', 'p', 'c', 'l', 'o', 'u', 'd', '.', 'i', 'o', '\0',
+  /* "shipping24h.com", true */ 's', 'h', 'i', 'p', 'p', 'i', 'n', 'g', '2', '4', 'h', '.', 'c', 'o', 'm', '\0',
   /* "shiroki-k.net", true */ 's', 'h', 'i', 'r', 'o', 'k', 'i', '-', 'k', '.', 'n', 'e', 't', '\0',
   /* "shirtsofholland.com", true */ 's', 'h', 'i', 'r', 't', 's', 'o', 'f', 'h', 'o', 'l', 'l', 'a', 'n', 'd', '.', 'c', 'o', 'm', '\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',
   /* "shodan.io", true */ 's', 'h', 'o', 'd', 'a', 'n', '.', 'i', 'o', '\0',
   /* "shome.de", true */ 's', 'h', 'o', 'm', 'e', '.', 'd', 'e', '\0',
   /* "shopapi.cz", true */ 's', 'h', 'o', 'p', 'a', 'p', 'i', '.', 'c', 'z', '\0',
   /* "shopbakersnook.com", true */ 's', 'h', 'o', 'p', 'b', 'a', 'k', 'e', 'r', 's', 'n', 'o', 'o', 'k', '.', 'c', 'o', 'm', '\0',
@@ -10595,17 +10581,16 @@ static const char kSTSHostTable[] = {
   /* "smoothics.com", true */ 's', 'm', 'o', 'o', 't', 'h', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "smove.sg", true */ 's', 'm', 'o', 'v', 'e', '.', 's', 'g', '\0',
   /* "smow.com", true */ 's', 'm', 'o', 'w', '.', 'c', 'o', 'm', '\0',
   /* "smow.de", true */ 's', 'm', 'o', 'w', '.', 'd', 'e', '\0',
   /* "smpetrey.com", true */ 's', 'm', 'p', 'e', 't', 'r', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "sms1.ro", true */ 's', 'm', 's', '1', '.', 'r', 'o', '\0',
   /* "smvfd.info", true */ 's', 'm', 'v', 'f', 'd', '.', 'i', 'n', 'f', 'o', '\0',
   /* "snakehosting.dk", false */ 's', 'n', 'a', 'k', 'e', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'd', 'k', '\0',
-  /* "snapappointments.com", true */ 's', 'n', 'a', 'p', 'a', 'p', 'p', 'o', 'i', 'n', 't', 'm', 'e', 'n', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "snapfinance.com", true */ 's', 'n', 'a', 'p', 'f', 'i', 'n', 'a', 'n', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "snazel.co.uk", true */ 's', 'n', 'a', 'z', 'e', 'l', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "snazzie.nl", true */ 's', 'n', 'a', 'z', 'z', 'i', 'e', '.', 'n', 'l', '\0',
   /* "sneakpod.de", true */ 's', 'n', 'e', 'a', 'k', 'p', 'o', 'd', '.', 'd', 'e', '\0',
   /* "sneakynote.com", true */ 's', 'n', 'e', 'a', 'k', 'y', 'n', 'o', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "sneed.it", true */ 's', 'n', 'e', 'e', 'd', '.', 'i', 't', '\0',
   /* "sneedit.com", true */ 's', 'n', 'e', 'e', 'd', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "sneedit.de", true */ 's', 'n', 'e', 'e', 'd', 'i', 't', '.', 'd', 'e', '\0',
@@ -10711,17 +10696,16 @@ static const char kSTSHostTable[] = {
   /* "souki.cz", true */ 's', 'o', 'u', 'k', 'i', '.', 'c', 'z', '\0',
   /* "soulogic.com", false */ 's', 'o', 'u', 'l', 'o', 'g', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "soumikghosh.com", true */ 's', 'o', 'u', 'm', 'i', 'k', 'g', 'h', 'o', 's', 'h', '.', 'c', 'o', 'm', '\0',
   /* "soundforsound.co.uk", true */ 's', 'o', 'u', 'n', 'd', 'f', 'o', 'r', 's', 'o', 'u', 'n', 'd', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "soundgasm.net", true */ 's', 'o', 'u', 'n', 'd', 'g', 'a', 's', 'm', '.', 'n', 'e', 't', '\0',
   /* "soundhunter.xyz", true */ 's', 'o', 'u', 'n', 'd', 'h', 'u', 'n', 't', 'e', 'r', '.', 'x', 'y', 'z', '\0',
   /* "soundtalks.be", true */ 's', 'o', 'u', 'n', 'd', 't', 'a', 'l', 'k', 's', '.', 'b', 'e', '\0',
   /* "soundtalks.com", true */ 's', 'o', 'u', 'n', 'd', 't', 'a', 'l', 'k', 's', '.', 'c', 'o', 'm', '\0',
-  /* "sour.is", true */ 's', 'o', 'u', 'r', '.', 'i', 's', '\0',
   /* "sourcebox.be", true */ 's', 'o', 'u', 'r', 'c', 'e', 'b', 'o', 'x', '.', 'b', 'e', '\0',
   /* "sourcecode.love", true */ 's', 'o', 'u', 'r', 'c', 'e', 'c', 'o', 'd', 'e', '.', 'l', 'o', 'v', 'e', '\0',
   /* "sourcely.net", true */ 's', 'o', 'u', 'r', 'c', 'e', 'l', 'y', '.', 'n', 'e', 't', '\0',
   /* "sourceway.de", true */ 's', 'o', 'u', 'r', 'c', 'e', 'w', 'a', 'y', '.', 'd', 'e', '\0',
   /* "sourcitec.com", true */ 's', 'o', 'u', 'r', 'c', 'i', 't', 'e', 'c', '.', 'c', 'o', 'm', '\0',
   /* "sous-surveillance.net", true */ 's', 'o', 'u', 's', '-', 's', 'u', 'r', 'v', 'e', 'i', 'l', 'l', 'a', 'n', 'c', 'e', '.', 'n', 'e', 't', '\0',
   /* "southamerican.dating", true */ 's', 'o', 'u', 't', 'h', 'a', 'm', 'e', 'r', 'i', 'c', 'a', 'n', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "southernjamusa.com", true */ 's', 'o', 'u', 't', 'h', 'e', 'r', 'n', 'j', 'a', 'm', 'u', 's', 'a', '.', 'c', 'o', 'm', '\0',
@@ -10817,24 +10801,24 @@ 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", true */ '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',
   /* "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',
   /* "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',
   /* "srv47.de", true */ 's', 'r', 'v', '4', '7', '.', 'd', 'e', '\0',
   /* "ss-x.ru", true */ 's', 's', '-', 'x', '.', 'r', 'u', '\0',
   /* "ss.lv", false */ 's', 's', '.', 'l', 'v', '\0',
   /* "ssa.gov", false */ 's', 's', 'a', '.', 'g', 'o', 'v', '\0',
   /* "ssbrm.ch", true */ 's', 's', 'b', 'r', 'm', '.', 'c', 'h', '\0',
+  /* "sscd.no", true */ 's', 's', 'c', 'd', '.', 'n', 'o', '\0',
   /* "ssdax.com", true */ 's', 's', 'd', 'a', 'x', '.', 'c', 'o', 'm', '\0',
   /* "ssl-zertifikate.de", true */ 's', 's', 'l', '-', 'z', 'e', 'r', 't', 'i', 'f', 'i', 'k', 'a', 't', 'e', '.', 'd', 'e', '\0',
   /* "ssl.google-analytics.com", true */ 's', 's', 'l', '.', 'g', 'o', 'o', 'g', 'l', 'e', '-', 'a', 'n', 'a', 'l', 'y', 't', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "ssl.md", true */ 's', 's', 'l', '.', 'm', 'd', '\0',
   /* "ssl247.co.uk", true */ 's', 's', 'l', '2', '4', '7', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "ssl247.com.mx", true */ 's', 's', 'l', '2', '4', '7', '.', 'c', 'o', 'm', '.', 'm', 'x', '\0',
   /* "ssl247.de", true */ 's', 's', 'l', '2', '4', '7', '.', 'd', 'e', '\0',
   /* "ssl247.dk", true */ 's', 's', 'l', '2', '4', '7', '.', 'd', 'k', '\0',
@@ -10850,16 +10834,17 @@ static const char kSTSHostTable[] = {
   /* "staack.com", false */ 's', 't', 'a', 'a', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "staatschutz.at", true */ 's', 't', 'a', 'a', 't', 's', 'c', 'h', 'u', 't', 'z', '.', 'a', 't', '\0',
   /* "staatsschutz.at", true */ 's', 't', 'a', 'a', 't', 's', 's', 'c', 'h', 'u', 't', 'z', '.', 'a', 't', '\0',
   /* "staatsschutzgesetz.at", true */ 's', 't', 'a', 'a', 't', 's', 's', 'c', 'h', 'u', 't', 'z', 'g', 'e', 's', 'e', 't', 'z', '.', 'a', 't', '\0',
   /* "stablelib.com", true */ 's', 't', 'a', 'b', 'l', 'e', 'l', 'i', 'b', '.', 'c', 'o', 'm', '\0',
   /* "stackptr.com", true */ 's', 't', 'a', 'c', 'k', 'p', 't', 'r', '.', 'c', 'o', 'm', '\0',
   /* "stacktile.io", true */ 's', 't', 'a', 'c', 'k', 't', 'i', 'l', 'e', '.', 'i', 'o', '\0',
   /* "stadionmanager.com", true */ 's', 't', 'a', 'd', 'i', 'o', 'n', 'm', 'a', 'n', 'a', 'g', 'e', 'r', '.', 'c', 'o', 'm', '\0',
+  /* "stadtbauwerk.at", true */ 's', 't', 'a', 'd', 't', 'b', 'a', 'u', 'w', 'e', 'r', 'k', '.', 'a', 't', '\0',
   /* "staffjoy.com", true */ 's', 't', 'a', 'f', 'f', 'j', 'o', 'y', '.', 'c', 'o', 'm', '\0',
   /* "staffjoystaging.com", true */ 's', 't', 'a', 'f', 'f', 'j', 'o', 'y', 's', 't', 'a', 'g', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "stage-props-blank-guns.com", false */ 's', 't', 'a', 'g', 'e', '-', 'p', 'r', 'o', 'p', 's', '-', 'b', 'l', 'a', 'n', 'k', '-', 'g', 'u', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "stage.wepay.com", false */ 's', 't', 'a', 'g', 'e', '.', 'w', 'e', 'p', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "stageirites.com", true */ 's', 't', 'a', 'g', 'e', 'i', 'r', 'i', 't', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "stageirites.fr", true */ 's', 't', 'a', 'g', 'e', 'i', 'r', 'i', 't', 'e', 's', '.', 'f', 'r', '\0',
   /* "stageirites.org", true */ 's', 't', 'a', 'g', 'e', 'i', 'r', 'i', 't', 'e', 's', '.', 'o', 'r', 'g', '\0',
   /* "stagingjobshq.com", true */ 's', 't', 'a', 'g', 'i', 'n', 'g', 'j', 'o', 'b', 's', 'h', 'q', '.', 'c', 'o', 'm', '\0',
@@ -10950,17 +10935,16 @@ static const char kSTSHostTable[] = {
   /* "stikonas.eu", true */ 's', 't', 'i', 'k', 'o', 'n', 'a', 's', '.', 'e', 'u', '\0',
   /* "stilartmoebel.de", true */ 's', 't', 'i', 'l', 'a', 'r', 't', 'm', 'o', 'e', 'b', 'e', 'l', '.', 'd', 'e', '\0',
   /* "stillblackhat.id", true */ 's', 't', 'i', 'l', 'l', 'b', 'l', 'a', 'c', 'k', 'h', 'a', 't', '.', 'i', 'd', '\0',
   /* "stillyarts.com", false */ 's', 't', 'i', 'l', 'l', 'y', 'a', 'r', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "stinkytrashhound.com", true */ 's', 't', 'i', 'n', 'k', 'y', 't', 'r', 'a', 's', 'h', 'h', 'o', 'u', 'n', 'd', '.', 'c', 'o', 'm', '\0',
   /* "stirling.co", false */ 's', 't', 'i', 'r', 'l', 'i', 'n', 'g', '.', 'c', 'o', '\0',
   /* "stirlingpoon.com", false */ 's', 't', 'i', 'r', 'l', 'i', 'n', 'g', 'p', 'o', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "stirlingpoon.net", true */ 's', 't', 'i', 'r', 'l', 'i', 'n', 'g', 'p', 'o', 'o', 'n', '.', 'n', 'e', 't', '\0',
-  /* "stirlingpoon.xyz", true */ 's', 't', 'i', 'r', 'l', 'i', 'n', 'g', 'p', 'o', 'o', 'n', '.', 'x', 'y', 'z', '\0',
   /* "stitchfiddle.com", true */ 's', 't', 'i', 't', 'c', 'h', 'f', 'i', 'd', 'd', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "stjohnin.com", true */ 's', 't', 'j', 'o', 'h', 'n', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "stjohnmiami.org", true */ 's', 't', 'j', 'o', 'h', 'n', 'm', 'i', 'a', 'm', 'i', '.', 'o', 'r', 'g', '\0',
   /* "stocktrader.com", true */ 's', 't', 'o', 'c', 'k', 't', 'r', 'a', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "stoffelen.nl", true */ 's', 't', 'o', 'f', 'f', 'e', 'l', 'e', 'n', '.', 'n', 'l', '\0',
   /* "stoianlawfirm.com", true */ 's', 't', 'o', 'i', 'a', 'n', 'l', 'a', 'w', 'f', 'i', 'r', 'm', '.', 'c', 'o', 'm', '\0',
   /* "stoick.me", true */ 's', 't', 'o', 'i', 'c', 'k', '.', 'm', 'e', '\0',
   /* "stole-my.bike", false */ 's', 't', 'o', 'l', 'e', '-', 'm', 'y', '.', 'b', 'i', 'k', 'e', '\0',
@@ -11010,23 +10994,23 @@ static const char kSTSHostTable[] = {
   /* "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", false */ 's', 't', 'u', 'd', 'e', 'n', 't', '.', 'a', 'n', 'd', 'o', 'v', 'e', 'r', '.', 'e', 'd', 'u', '\0',
   /* "studentloans.gov", true */ 's', 't', 'u', 'd', 'e', 'n', 't', 'l', 'o', 'a', 'n', 's', '.', 'g', 'o', 'v', '\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',
   /* "studinf.xyz", true */ 's', 't', 'u', 'd', 'i', 'n', 'f', '.', 'x', 'y', 'z', '\0',
-  /* "studio-panic.com", true */ 's', 't', 'u', 'd', 'i', 'o', '-', 'p', 'a', 'n', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "studiomarcella.com", true */ 's', 't', 'u', 'd', 'i', 'o', 'm', 'a', 'r', 'c', 'e', 'l', 'l', 'a', '.', 'c', 'o', 'm', '\0',
   /* "studiostawki.com", true */ 's', 't', 'u', 'd', 'i', 'o', 's', 't', 'a', 'w', 'k', 'i', '.', 'c', 'o', 'm', '\0',
   /* "studiostudio.net", true */ 's', 't', 'u', 'd', 'i', 'o', 's', 't', 'u', 'd', 'i', 'o', '.', 'n', 'e', 't', '\0',
   /* "studiozelden.com", true */ 's', 't', 'u', 'd', 'i', 'o', 'z', 'e', 'l', 'd', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "studlan.no", true */ 's', 't', 'u', 'd', 'l', 'a', 'n', '.', 'n', 'o', '\0',
   /* "studybay.com", true */ 's', 't', 'u', 'd', 'y', 'b', 'a', 'y', '.', 'c', 'o', 'm', '\0',
+  /* "studyhub.cf", true */ 's', 't', 'u', 'd', 'y', 'h', 'u', 'b', '.', 'c', 'f', '\0',
   /* "stuermer.me", true */ 's', 't', 'u', 'e', 'r', 'm', 'e', 'r', '.', 'm', 'e', '\0',
   /* "stulda.cz", true */ 's', 't', 'u', 'l', 'd', 'a', '.', 'c', 'z', '\0',
   /* "stumf.si", true */ 's', 't', 'u', 'm', 'f', '.', 's', 'i', '\0',
   /* "stuntmen.xyz", true */ 's', 't', 'u', 'n', 't', 'm', 'e', 'n', '.', 'x', 'y', 'z', '\0',
   /* "sturbi.de", true */ 's', 't', 'u', 'r', 'b', 'i', '.', 'd', 'e', '\0',
   /* "sturbock.me", true */ 's', 't', 'u', 'r', 'b', 'o', 'c', 'k', '.', 'm', 'e', '\0',
   /* "stutelage.com", true */ 's', 't', 'u', 't', 'e', 'l', 'a', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "stuur.nl", false */ 's', 't', 'u', 'u', 'r', '.', 'n', 'l', '\0',
@@ -11150,16 +11134,17 @@ static const char kSTSHostTable[] = {
   /* "syncmylife.net", true */ 's', 'y', 'n', 'c', 'm', 'y', 'l', 'i', 'f', 'e', '.', 'n', 'e', 't', '\0',
   /* "syndic-discount.fr", true */ 's', 'y', 'n', 'd', 'i', 'c', '-', 'd', 'i', 's', 'c', 'o', 'u', 'n', 't', '.', 'f', 'r', '\0',
   /* "synfin.org", true */ 's', 'y', 'n', 'f', 'i', 'n', '.', 'o', 'r', 'g', '\0',
   /* "synony.me", true */ 's', 'y', 'n', 'o', 'n', 'y', '.', 'm', 'e', '\0',
   /* "syntaxnightmare.com", true */ 's', 'y', 'n', 't', 'a', 'x', 'n', 'i', 'g', 'h', 't', 'm', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "syriatalk.biz", true */ 's', 'y', 'r', 'i', 'a', 't', 'a', 'l', 'k', '.', 'b', 'i', 'z', '\0',
   /* "syriatalk.org", true */ 's', 'y', 'r', 'i', 'a', 't', 'a', 'l', 'k', '.', 'o', 'r', 'g', '\0',
   /* "syrocon.ch", true */ 's', 'y', 'r', 'o', 'c', 'o', 'n', '.', 'c', 'h', '\0',
+  /* "sys.tf", true */ 's', 'y', 's', '.', 't', 'f', '\0',
   /* "sysadmins.ro", true */ 's', 'y', 's', 'a', 'd', 'm', 'i', 'n', 's', '.', 'r', 'o', '\0',
   /* "sysctl.se", false */ 's', 'y', 's', 'c', 't', 'l', '.', 's', 'e', '\0',
   /* "sysdb.io", true */ 's', 'y', 's', 'd', 'b', '.', 'i', 'o', '\0',
   /* "sysert.tv", true */ 's', 'y', 's', 'e', 'r', 't', '.', 't', 'v', '\0',
   /* "sysmike.net", true */ 's', 'y', 's', 'm', 'i', 'k', 'e', '.', 'n', 'e', 't', '\0',
   /* "syss.de", true */ 's', 'y', 's', 's', '.', 'd', 'e', '\0',
   /* "system.is", true */ 's', 'y', 's', 't', 'e', 'm', '.', 'i', 's', '\0',
   /* "systemintegra.ru", true */ 's', 'y', 's', 't', 'e', 'm', 'i', 'n', 't', 'e', 'g', 'r', 'a', '.', 'r', 'u', '\0',
@@ -11182,17 +11167,16 @@ static const char kSTSHostTable[] = {
   /* "ta-sports.net", true */ 't', 'a', '-', 's', 'p', 'o', 'r', 't', 's', '.', 'n', 'e', 't', '\0',
   /* "tabelfirme.ro", true */ 't', 'a', 'b', 'e', 'l', 'f', 'i', 'r', 'm', 'e', '.', 'r', 'o', '\0',
   /* "tabla-periodica.com", true */ 't', 'a', 'b', 'l', 'a', '-', 'p', 'e', 'r', 'i', 'o', 'd', 'i', 'c', 'a', '.', 'c', 'o', 'm', '\0',
   /* "tablotv.com", false */ 't', 'a', 'b', 'l', 'o', 't', 'v', '.', 'c', 'o', 'm', '\0',
   /* "taboragroup.com", true */ 't', 'a', 'b', 'o', 'r', 'a', 'g', 'r', 'o', 'u', 'p', '.', 'c', 'o', 'm', '\0',
   /* "taborsky.cz", true */ 't', 'a', 'b', 'o', 'r', 's', 'k', 'y', '.', 'c', 'z', '\0',
   /* "tacticalsquare.com", true */ 't', 'a', 'c', 't', 'i', 'c', 'a', 'l', 's', 'q', 'u', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "tadcastercircuit.org.uk", true */ 't', 'a', 'd', 'c', 'a', 's', 't', 'e', 'r', 'c', 'i', 'r', 'c', 'u', 'i', 't', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
-  /* "tadigitalstore.com", true */ 't', 'a', 'd', 'i', 'g', 'i', 't', 'a', 'l', 's', 't', 'o', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "taglioepiega.com", true */ 't', 'a', 'g', 'l', 'i', 'o', 'e', 'p', 'i', 'e', 'g', 'a', '.', 'c', 'o', 'm', '\0',
   /* "taglioepiega.eu", true */ 't', 'a', 'g', 'l', 'i', 'o', 'e', 'p', 'i', 'e', 'g', 'a', '.', 'e', 'u', '\0',
   /* "taglioepiega.it", true */ 't', 'a', 'g', 'l', 'i', 'o', 'e', 'p', 'i', 'e', 'g', 'a', '.', 'i', 't', '\0',
   /* "tahf.net", true */ 't', 'a', 'h', 'f', '.', 'n', 'e', 't', '\0',
   /* "tailify.com", true */ 't', 'a', 'i', 'l', 'i', 'f', 'y', '.', 'c', 'o', 'm', '\0',
   /* "tailpuff.net", true */ 't', 'a', 'i', 'l', 'p', 'u', 'f', 'f', '.', 'n', 'e', 't', '\0',
   /* "taiwan.dating", true */ 't', 'a', 'i', 'w', 'a', 'n', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "taiwantour.info", true */ 't', 'a', 'i', 'w', 'a', 'n', 't', 'o', 'u', 'r', '.', 'i', 'n', 'f', 'o', '\0',
@@ -11305,16 +11289,17 @@ static const char kSTSHostTable[] = {
   /* "technogroup.cz", true */ 't', 'e', 'c', 'h', 'n', 'o', 'g', 'r', 'o', 'u', 'p', '.', 'c', 'z', '\0',
   /* "technoparcepsilon.fr", true */ 't', 'e', 'c', 'h', 'n', 'o', 'p', 'a', 'r', 'c', 'e', 'p', 's', 'i', 'l', 'o', 'n', '.', 'f', 'r', '\0',
   /* "technotonic.com.au", false */ 't', 'e', 'c', 'h', 'n', 'o', 't', 'o', 'n', 'i', 'c', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "techold.ru", true */ 't', 'e', 'c', 'h', 'o', 'l', 'd', '.', 'r', 'u', '\0',
   /* "techorbiter.com", true */ 't', 'e', 'c', 'h', 'o', 'r', 'b', 'i', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "techpivot.net", true */ 't', 'e', 'c', 'h', 'p', 'i', 'v', 'o', 't', '.', 'n', 'e', 't', '\0',
   /* "techpointed.com", true */ 't', 'e', 'c', 'h', 'p', 'o', 'i', 'n', 't', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "techtalks.no", true */ 't', 'e', 'c', 'h', 't', 'a', 'l', 'k', 's', '.', 'n', 'o', '\0',
+  /* "techwords.io", true */ 't', 'e', 'c', 'h', 'w', 'o', 'r', 'd', 's', '.', 'i', 'o', '\0',
   /* "tecnogaming.com", true */ 't', 'e', 'c', 'n', 'o', 'g', 'a', 'm', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "tecture.de", true */ 't', 'e', 'c', 't', 'u', 'r', 'e', '.', 'd', 'e', '\0',
   /* "teddy.ch", true */ 't', 'e', 'd', 'd', 'y', '.', 'c', 'h', '\0',
   /* "tedeh.net", true */ 't', 'e', 'd', 'e', 'h', '.', 'n', 'e', 't', '\0',
   /* "tedovo.com", true */ 't', 'e', 'd', 'o', 'v', 'o', '.', 'c', 'o', 'm', '\0',
   /* "teebeedee.org", true */ 't', 'e', 'e', 'b', 'e', 'e', 'd', 'e', 'e', '.', 'o', 'r', 'g', '\0',
   /* "teemo.gg", true */ 't', 'e', 'e', 'm', 'o', '.', 'g', 'g', '\0',
   /* "teemperor.de", true */ 't', 'e', 'e', 'm', 'p', 'e', 'r', 'o', 'r', '.', 'd', 'e', '\0',
@@ -11348,17 +11333,16 @@ static const char kSTSHostTable[] = {
   /* "tenshoku-hanashi.com", true */ 't', 'e', 'n', 's', 'h', 'o', 'k', 'u', '-', 'h', 'a', 'n', 'a', 's', 'h', 'i', '.', 'c', 'o', 'm', '\0',
   /* "tent.io", true */ 't', 'e', 'n', 't', '.', 'i', 'o', '\0',
   /* "tenta.com", true */ 't', 'e', 'n', 't', 'a', '.', 'c', 'o', 'm', '\0',
   /* "tentations-voyages.com", true */ 't', 'e', 'n', 't', 'a', 't', 'i', 'o', 'n', 's', '-', 'v', 'o', 'y', 'a', 'g', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "tenyx.de", true */ 't', 'e', 'n', 'y', 'x', '.', 'd', 'e', '\0',
   /* "teodio.cl", true */ 't', 'e', 'o', 'd', 'i', 'o', '.', 'c', 'l', '\0',
   /* "teos.online", true */ 't', 'e', 'o', 's', '.', 'o', 'n', 'l', 'i', 'n', 'e', '\0',
   /* "teoskanta.fi", true */ 't', 'e', 'o', 's', 'k', 'a', 'n', 't', 'a', '.', 'f', 'i', '\0',
-  /* "tepid.org", true */ 't', 'e', 'p', 'i', 'd', '.', 'o', 'r', 'g', '\0',
   /* "teracloud.at", true */ 't', 'e', 'r', 'a', 'c', 'l', 'o', 'u', 'd', '.', 'a', 't', '\0',
   /* "teriiphotography.com", true */ 't', 'e', 'r', 'i', 'i', 'p', 'h', 'o', 't', 'o', 'g', 'r', 'a', 'p', 'h', 'y', '.', 'c', 'o', 'm', '\0',
   /* "terrab.de", true */ 't', 'e', 'r', 'r', 'a', 'b', '.', 'd', 'e', '\0',
   /* "terracloud.de", true */ 't', 'e', 'r', 'r', 'a', 'c', 'l', 'o', 'u', 'd', '.', 'd', 'e', '\0',
   /* "terraelectronica.ru", true */ 't', 'e', 'r', 'r', 'a', 'e', 'l', 'e', 'c', 't', 'r', 'o', 'n', 'i', 'c', 'a', '.', 'r', 'u', '\0',
   /* "terraform.io", true */ 't', 'e', 'r', 'r', 'a', 'f', 'o', 'r', 'm', '.', 'i', 'o', '\0',
   /* "terragni-sarasin.ch", true */ 't', 'e', 'r', 'r', 'a', 'g', 'n', 'i', '-', 's', 'a', 'r', 'a', 's', 'i', 'n', '.', 'c', 'h', '\0',
   /* "terrastaffinggroup.com", false */ 't', 'e', 'r', 'r', 'a', 's', 't', 'a', 'f', 'f', 'i', 'n', 'g', 'g', 'r', 'o', 'u', 'p', '.', 'c', 'o', 'm', '\0',
@@ -11418,16 +11402,17 @@ static const char kSTSHostTable[] = {
   /* "thebreakroom.org", true */ 't', 'h', 'e', 'b', 'r', 'e', 'a', 'k', 'r', 'o', 'o', 'm', '.', 'o', 'r', 'g', '\0',
   /* "thecandidforum.com", true */ 't', 'h', 'e', 'c', 'a', 'n', 'd', 'i', 'd', 'f', 'o', 'r', 'u', 'm', '.', 'c', 'o', 'm', '\0',
   /* "thecapitalbank.com", true */ 't', 'h', 'e', 'c', 'a', 'p', 'i', 't', 'a', 'l', 'b', 'a', 'n', 'k', '.', 'c', 'o', 'm', '\0',
   /* "thecharlestonwaldorf.com", true */ 't', 'h', 'e', 'c', 'h', 'a', 'r', 'l', 'e', 's', 't', 'o', 'n', 'w', 'a', 'l', 'd', 'o', 'r', 'f', '.', 'c', 'o', 'm', '\0',
   /* "thechunk.net", true */ 't', 'h', 'e', 'c', 'h', 'u', 'n', 'k', '.', 'n', 'e', 't', '\0',
   /* "thecitizens.com", true */ 't', 'h', 'e', 'c', 'i', 't', 'i', 'z', 'e', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "thecitywarehouse.clothing", true */ 't', 'h', 'e', 'c', 'i', 't', 'y', 'w', 'a', 'r', 'e', 'h', 'o', 'u', 's', 'e', '.', 'c', 'l', 'o', 't', 'h', 'i', 'n', 'g', '\0',
   /* "thecloudmigrator.com", true */ 't', 'h', 'e', 'c', 'l', 'o', 'u', 'd', 'm', 'i', 'g', 'r', 'a', 't', 'o', 'r', '.', 'c', 'o', 'm', '\0',
+  /* "theclubjersey.com", true */ 't', 'h', 'e', 'c', 'l', 'u', 'b', 'j', 'e', 'r', 's', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "thecustomizewindows.com", true */ 't', 'h', 'e', 'c', 'u', 's', 't', 'o', 'm', 'i', 'z', 'e', 'w', 'i', 'n', 'd', 'o', 'w', 's', '.', 'c', 'o', 'm', '\0',
   /* "thedark1337.com", true */ 't', 'h', 'e', 'd', 'a', 'r', 'k', '1', '3', '3', '7', '.', 'c', 'o', 'm', '\0',
   /* "thedarkartsandcrafts.com", true */ 't', 'h', 'e', 'd', 'a', 'r', 'k', 'a', 'r', 't', 's', 'a', 'n', 'd', 'c', 'r', 'a', 'f', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "thedevrycommonsbrasil.com", true */ 't', 'h', 'e', 'd', 'e', 'v', 'r', 'y', 'c', 'o', 'm', 'm', 'o', 'n', 's', 'b', 'r', 'a', 's', 'i', 'l', '.', 'c', 'o', 'm', '\0',
   /* "thedisc.nl", true */ 't', 'h', 'e', 'd', 'i', 's', 'c', '.', 'n', 'l', '\0',
   /* "thedreamtravelgroup.co.uk", true */ 't', 'h', 'e', 'd', 'r', 'e', 'a', 'm', 't', 'r', 'a', 'v', 'e', 'l', 'g', 'r', 'o', 'u', 'p', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "thedutchmarketers.com", true */ 't', 'h', 'e', 'd', 'u', 't', 'c', 'h', 'm', 'a', 'r', 'k', 'e', 't', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "theescapistswiki.com", true */ 't', 'h', 'e', 'e', 's', 'c', 'a', 'p', 'i', 's', 't', 's', 'w', 'i', 'k', 'i', '.', 'c', 'o', 'm', '\0',
@@ -11506,17 +11491,16 @@ static const char kSTSHostTable[] = {
   /* "thewhitehat.club", true */ 't', 'h', 'e', 'w', 'h', 'i', 't', 'e', 'h', 'a', 't', '.', 'c', 'l', 'u', 'b', '\0',
   /* "thewhiterabbit.space", true */ 't', 'h', 'e', 'w', 'h', 'i', 't', 'e', 'r', 'a', 'b', 'b', 'i', 't', '.', 's', 'p', 'a', 'c', 'e', '\0',
   /* "thewhitneypaige.com", true */ 't', 'h', 'e', 'w', 'h', 'i', 't', 'n', 'e', 'y', 'p', 'a', 'i', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "thewindow.com", true */ 't', 'h', 'e', 'w', 'i', 'n', 'd', 'o', 'w', '.', 'c', 'o', 'm', '\0',
   /* "thewoodkid.com.au", true */ 't', 'h', 'e', 'w', 'o', 'o', 'd', 'k', 'i', 'd', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "theworldsend.eu", true */ 't', 'h', 'e', 'w', 'o', 'r', 'l', 'd', 's', 'e', 'n', 'd', '.', 'e', 'u', '\0',
   /* "thexme.de", true */ 't', 'h', 'e', 'x', 'm', 'e', '.', 'd', 'e', '\0',
   /* "theyosh.nl", true */ 't', 'h', 'e', 'y', 'o', 's', 'h', '.', 'n', 'l', '\0',
-  /* "thezero.org", true */ 't', 'h', 'e', 'z', 'e', 'r', 'o', '.', 'o', 'r', 'g', '\0',
   /* "thibautcharles.net", true */ 't', 'h', 'i', 'b', 'a', 'u', 't', 'c', 'h', 'a', 'r', 'l', 'e', 's', '.', 'n', 'e', 't', '\0',
   /* "thingies.site", true */ 't', 'h', 'i', 'n', 'g', 'i', 'e', 's', '.', 's', 'i', 't', 'e', '\0',
   /* "thinkcash.nl", true */ 't', 'h', 'i', 'n', 'k', 'c', 'a', 's', 'h', '.', 'n', 'l', '\0',
   /* "thinkdo.jp", true */ 't', 'h', 'i', 'n', 'k', 'd', 'o', '.', 'j', 'p', '\0',
   /* "thinkindifferent.net", true */ 't', 'h', 'i', 'n', 'k', 'i', 'n', 'd', 'i', 'f', 'f', 'e', 'r', 'e', 'n', 't', '.', 'n', 'e', 't', '\0',
   /* "thinklikeanentrepreneur.com", true */ 't', 'h', 'i', 'n', 'k', 'l', 'i', 'k', 'e', 'a', 'n', 'e', 'n', 't', 'r', 'e', 'p', 'r', 'e', 'n', 'e', 'u', 'r', '.', 'c', 'o', 'm', '\0',
   /* "thinkrealty.com", true */ 't', 'h', 'i', 'n', 'k', 'r', 'e', 'a', 'l', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "thinktux.net", true */ 't', 'h', 'i', 'n', 'k', 't', 'u', 'x', '.', 'n', 'e', 't', '\0',
@@ -11678,17 +11662,16 @@ static const char kSTSHostTable[] = {
   /* "tomasjacik.cz", true */ 't', 'o', 'm', 'a', 's', 'j', 'a', 'c', 'i', 'k', '.', 'c', 'z', '\0',
   /* "tomask.info", true */ 't', 'o', 'm', 'a', 's', 'k', '.', 'i', 'n', 'f', 'o', '\0',
   /* "tomaspialek.cz", true */ 't', 'o', 'm', 'a', 's', 'p', 'i', 'a', 'l', 'e', 'k', '.', 'c', 'z', '\0',
   /* "tomatenaufdenaugen.de", true */ 't', 'o', 'm', 'a', 't', 'e', 'n', 'a', 'u', 'f', 'd', 'e', 'n', 'a', 'u', 'g', 'e', 'n', '.', 'd', 'e', '\0',
   /* "tomaw.net", true */ 't', 'o', 'm', 'a', 'w', '.', 'n', 'e', 't', '\0',
   /* "tombaker.me", true */ 't', 'o', 'm', 'b', 'a', 'k', 'e', 'r', '.', 'm', 'e', '\0',
   /* "tombrossman.com", true */ 't', 'o', 'm', 'b', 'r', 'o', 's', 's', 'm', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "tomcort.com", true */ 't', 'o', 'm', 'c', 'o', 'r', 't', '.', 'c', 'o', 'm', '\0',
-  /* "tomend.es", true */ 't', 'o', 'm', 'e', 'n', 'd', '.', 'e', 's', '\0',
   /* "tomfisher.eu", true */ 't', 'o', 'm', 'f', 'i', 's', 'h', 'e', 'r', '.', 'e', 'u', '\0',
   /* "tomlankhorst.nl", true */ 't', 'o', 'm', 'l', 'a', 'n', 'k', 'h', 'o', 'r', 's', 't', '.', 'n', 'l', '\0',
   /* "tomli.me", true */ 't', 'o', 'm', 'l', 'i', '.', 'm', 'e', '\0',
   /* "tommyads.com", true */ 't', 'o', 'm', 'm', 'y', 'a', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "tomo.gr", false */ 't', 'o', 'm', 'o', '.', 'g', 'r', '\0',
   /* "tomrei.com", true */ 't', 'o', 'm', 'r', 'e', 'i', '.', 'c', 'o', 'm', '\0',
   /* "tomrichards.net", false */ 't', 'o', 'm', 'r', 'i', 'c', 'h', 'a', 'r', 'd', 's', '.', 'n', 'e', 't', '\0',
   /* "tomssl.com", true */ 't', 'o', 'm', 's', 's', 'l', '.', 'c', 'o', 'm', '\0',
@@ -11847,16 +11830,17 @@ static const char kSTSHostTable[] = {
   /* "trendkraft.de", true */ 't', 'r', 'e', 'n', 'd', 'k', 'r', 'a', 'f', 't', '.', 'd', 'e', '\0',
   /* "tresorit.com", true */ 't', 'r', 'e', 's', 'o', 'r', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "tresorsecurity.com", true */ 't', 'r', 'e', 's', 'o', 'r', 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "tretkowski.de", true */ 't', 'r', 'e', 't', 'k', 'o', 'w', 's', 'k', 'i', '.', 'd', 'e', '\0',
   /* "tribaldos.com", true */ 't', 'r', 'i', 'b', 'a', 'l', 'd', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "tribut.de", true */ 't', 'r', 'i', 'b', 'u', 't', '.', 'd', 'e', '\0',
   /* "tributh.net", true */ 't', 'r', 'i', 'b', 'u', 't', 'h', '.', 'n', 'e', 't', '\0',
   /* "trident-online.de", true */ 't', 'r', 'i', 'd', 'e', 'n', 't', '-', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'd', 'e', '\0',
+  /* "trik.es", false */ 't', 'r', 'i', 'k', '.', 'e', 's', '\0',
   /* "trim-a-slab.com", true */ 't', 'r', 'i', 'm', '-', 'a', '-', 's', 'l', 'a', 'b', '.', 'c', 'o', 'm', '\0',
   /* "trimage.org", true */ 't', 'r', 'i', 'm', 'a', 'g', 'e', '.', 'o', 'r', 'g', '\0',
   /* "trineco.com", true */ 't', 'r', 'i', 'n', 'e', 'c', 'o', '.', 'c', 'o', 'm', '\0',
   /* "trineco.fi", true */ 't', 'r', 'i', 'n', 'e', 'c', 'o', '.', 'f', 'i', '\0',
   /* "trinnes.net", true */ 't', 'r', 'i', 'n', 'n', 'e', 's', '.', 'n', 'e', 't', '\0',
   /* "triop.se", true */ 't', 'r', 'i', 'o', 'p', '.', 's', 'e', '\0',
   /* "tripcombi.com", true */ 't', 'r', 'i', 'p', 'c', 'o', 'm', 'b', 'i', '.', 'c', 'o', 'm', '\0',
   /* "triple-mmm.de", true */ 't', 'r', 'i', 'p', 'l', 'e', '-', 'm', 'm', 'm', '.', 'd', 'e', '\0',
@@ -11901,16 +11885,17 @@ static const char kSTSHostTable[] = {
   /* "tsumegumi.net", true */ 't', 's', 'u', 'm', 'e', 'g', 'u', 'm', 'i', '.', 'n', 'e', 't', '\0',
   /* "tsumi.it", true */ 't', 's', 'u', 'm', 'i', '.', 'i', 't', '\0',
   /* "tsuyuzakihiroyuki.com", true */ 't', 's', 'u', 'y', 'u', 'z', 'a', 'k', 'i', 'h', 'i', 'r', 'o', 'y', 'u', 'k', 'i', '.', 'c', 'o', 'm', '\0',
   /* "tsv-1894.de", true */ 't', 's', 'v', '-', '1', '8', '9', '4', '.', 'd', 'e', '\0',
   /* "ttb.gov", true */ 't', 't', 'b', '.', 'g', 'o', 'v', '\0',
   /* "ttbonline.gov", true */ 't', 't', 'b', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'g', 'o', 'v', '\0',
   /* "ttcf.ca", true */ 't', 't', 'c', 'f', '.', 'c', 'a', '\0',
   /* "tts.co.nz", true */ 't', 't', 's', '.', 'c', 'o', '.', 'n', 'z', '\0',
+  /* "ttt.tt", true */ 't', 't', 't', '.', 't', 't', '\0',
   /* "tty.space", true */ 't', 't', 'y', '.', 's', 'p', 'a', 'c', 'e', '\0',
   /* "ttz.im", true */ 't', 't', 'z', '.', 'i', 'm', '\0',
   /* "tuamoronline.com", true */ 't', 'u', 'a', 'm', 'o', 'r', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "tubbutec.de", true */ 't', 'u', 'b', 'b', 'u', 't', 'e', 'c', '.', 'd', 'e', '\0',
   /* "tubepro.de", true */ 't', 'u', 'b', 'e', 'p', 'r', 'o', '.', 'd', 'e', '\0',
   /* "tubul.net", true */ 't', 'u', 'b', 'u', 'l', '.', 'n', 'e', 't', '\0',
   /* "tucker.wales", true */ 't', 'u', 'c', 'k', 'e', 'r', '.', 'w', 'a', 'l', 'e', 's', '\0',
   /* "tucny.com", true */ 't', 'u', 'c', 'n', 'y', '.', 'c', 'o', 'm', '\0',
@@ -12094,16 +12079,17 @@ static const char kSTSHostTable[] = {
   /* "unrealircd.org", true */ 'u', 'n', 'r', 'e', 'a', 'l', 'i', 'r', 'c', 'd', '.', 'o', 'r', 'g', '\0',
   /* "unrelated.net.au", true */ 'u', 'n', 'r', 'e', 'l', 'a', 't', 'e', 'd', '.', 'n', 'e', 't', '.', 'a', 'u', '\0',
   /* "uns.vn", true */ 'u', 'n', 's', '.', 'v', 'n', '\0',
   /* "unseen.is", true */ 'u', 'n', 's', 'e', 'e', 'n', '.', 'i', 's', '\0',
   /* "unseen.tw", true */ 'u', 'n', 's', 'e', 'e', 'n', '.', 't', 'w', '\0',
   /* "unser-gartenforum.de", true */ 'u', 'n', 's', 'e', 'r', '-', 'g', 'a', 'r', 't', 'e', 'n', 'f', 'o', 'r', 'u', 'm', '.', 'd', 'e', '\0',
   /* "unsupervised.ca", true */ 'u', 'n', 's', 'u', 'p', 'e', 'r', 'v', 'i', 's', 'e', 'd', '.', 'c', 'a', '\0',
   /* "unsuspicious.click", true */ 'u', 'n', 's', 'u', 's', 'p', 'i', 'c', 'i', 'o', 'u', 's', '.', 'c', 'l', 'i', 'c', 'k', '\0',
+  /* "unsystem.net", true */ 'u', 'n', 's', 'y', 's', 't', 'e', 'm', '.', 'n', 'e', 't', '\0',
   /* "unterfrankenclan.de", true */ 'u', 'n', 't', 'e', 'r', 'f', 'r', 'a', 'n', 'k', 'e', 'n', 'c', 'l', 'a', 'n', '.', 'd', 'e', '\0',
   /* "untoldstory.eu", true */ 'u', 'n', 't', 'o', 'l', 'd', 's', 't', 'o', 'r', 'y', '.', 'e', 'u', '\0',
   /* "unun.fi", true */ 'u', 'n', 'u', 'n', '.', 'f', 'i', '\0',
   /* "unveiledgnosis.com", true */ 'u', 'n', 'v', 'e', 'i', 'l', 'e', 'd', 'g', 'n', 'o', 's', 'i', 's', '.', 'c', 'o', 'm', '\0',
   /* "unyq.me", false */ 'u', 'n', 'y', 'q', '.', 'm', 'e', '\0',
   /* "up1.ca", true */ 'u', 'p', '1', '.', 'c', 'a', '\0',
   /* "upandclear.org", true */ 'u', 'p', 'a', 'n', 'd', 'c', 'l', 'e', 'a', 'r', '.', 'o', 'r', 'g', '\0',
   /* "upay.ru", true */ 'u', 'p', 'a', 'y', '.', 'r', 'u', '\0',
@@ -12193,16 +12179,17 @@ static const char kSTSHostTable[] = {
   /* "van11y.net", true */ 'v', 'a', 'n', '1', '1', 'y', '.', 'n', 'e', 't', '\0',
   /* "vandalfsen.me", true */ 'v', 'a', 'n', 'd', 'a', 'l', 'f', 's', 'e', 'n', '.', 'm', 'e', '\0',
   /* "vande-walle.eu", true */ 'v', 'a', 'n', 'd', 'e', '-', 'w', 'a', 'l', 'l', 'e', '.', 'e', 'u', '\0',
   /* "vanderziel.org", true */ 'v', 'a', 'n', 'd', 'e', 'r', 'z', 'i', 'e', 'l', '.', 'o', 'r', 'g', '\0',
   /* "vanestack.com", true */ 'v', 'a', 'n', 'e', 's', 't', 'a', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "vangeluwedeberlaere.be", true */ 'v', 'a', 'n', 'g', 'e', 'l', 'u', 'w', 'e', 'd', 'e', 'b', 'e', 'r', 'l', 'a', 'e', 'r', 'e', '.', 'b', 'e', '\0',
   /* "vanhoutte.be", false */ 'v', 'a', 'n', 'h', 'o', 'u', 't', 't', 'e', '.', 'b', 'e', '\0',
   /* "vanlaanen.com", false */ 'v', 'a', 'n', 'l', 'a', 'a', 'n', 'e', 'n', '.', 'c', 'o', 'm', '\0',
+  /* "vanmalland.com", true */ 'v', 'a', 'n', 'm', 'a', 'l', 'l', 'a', 'n', 'd', '.', 'c', 'o', 'm', '\0',
   /* "vantien.com", true */ 'v', 'a', 'n', 't', 'i', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "vantru.is", true */ 'v', 'a', 'n', 't', 'r', 'u', '.', 'i', 's', '\0',
   /* "vanwunnik.com", true */ 'v', 'a', 'n', 'w', 'u', 'n', 'n', 'i', 'k', '.', 'c', 'o', 'm', '\0',
   /* "vapemania.eu", true */ 'v', 'a', 'p', 'e', 'm', 'a', 'n', 'i', 'a', '.', 'e', 'u', '\0',
   /* "vapordepot.jp", false */ 'v', 'a', 'p', 'o', 'r', 'd', 'e', 'p', 'o', 't', '.', 'j', 'p', '\0',
   /* "varden.info", true */ 'v', 'a', 'r', 'd', 'e', 'n', '.', 'i', 'n', 'f', 'o', '\0',
   /* "varghese.de", true */ 'v', 'a', 'r', 'g', 'h', 'e', 's', 'e', '.', 'd', 'e', '\0',
   /* "variag-group.ru", true */ 'v', 'a', 'r', 'i', 'a', 'g', '-', 'g', 'r', 'o', 'u', 'p', '.', 'r', 'u', '\0',
@@ -12629,17 +12616,16 @@ static const char kSTSHostTable[] = {
   /* "wh-guide.de", true */ 'w', 'h', '-', 'g', 'u', 'i', 'd', 'e', '.', 'd', 'e', '\0',
   /* "whatanime.ga", true */ 'w', 'h', 'a', 't', 'a', 'n', 'i', 'm', 'e', '.', 'g', 'a', '\0',
   /* "whatismyipaddress.ca", true */ 'w', 'h', 'a', 't', 'i', 's', 'm', 'y', 'i', 'p', 'a', 'd', 'd', 'r', 'e', 's', 's', '.', 'c', 'a', '\0',
   /* "whatnext.limited", true */ 'w', 'h', 'a', 't', 'n', 'e', 'x', 't', '.', 'l', 'i', 'm', 'i', 't', 'e', 'd', '\0',
   /* "whatsapp.com", true */ 'w', 'h', 'a', 't', 's', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "whatsmychaincert.com", true */ 'w', 'h', 'a', 't', 's', 'm', 'y', 'c', 'h', 'a', 'i', 'n', 'c', 'e', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "whatsupgold.com.tw", true */ 'w', 'h', 'a', 't', 's', 'u', 'p', 'g', 'o', 'l', 'd', '.', 'c', 'o', 'm', '.', 't', 'w', '\0',
   /* "whatwebcando.today", true */ 'w', 'h', 'a', 't', 'w', 'e', 'b', 'c', 'a', 'n', 'd', 'o', '.', 't', 'o', 'd', 'a', 'y', '\0',
-  /* "whatwg.org", true */ 'w', 'h', 'a', 't', 'w', 'g', '.', 'o', 'r', 'g', '\0',
   /* "whd-guide.de", true */ 'w', 'h', 'd', '-', 'g', 'u', 'i', 'd', 'e', '.', 'd', 'e', '\0',
   /* "wheeler.kiwi.nz", true */ 'w', 'h', 'e', 'e', 'l', 'e', 'r', '.', 'k', 'i', 'w', 'i', '.', 'n', 'z', '\0',
   /* "when-release.ru", false */ 'w', 'h', 'e', 'n', '-', 'r', 'e', 'l', 'e', 'a', 's', 'e', '.', 'r', 'u', '\0',
   /* "when.fm", true */ 'w', 'h', 'e', 'n', '.', 'f', 'm', '\0',
   /* "where2trip.com", true */ 'w', 'h', 'e', 'r', 'e', '2', 't', 'r', 'i', 'p', '.', 'c', 'o', 'm', '\0',
   /* "whereisjason.com", true */ 'w', 'h', 'e', 'r', 'e', 'i', 's', 'j', 'a', 's', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "wherephoto.com", false */ 'w', 'h', 'e', 'r', 'e', 'p', 'h', 'o', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "whey-protein.ch", true */ 'w', 'h', 'e', 'y', '-', 'p', 'r', 'o', 't', 'e', 'i', 'n', '.', 'c', 'h', '\0',
@@ -12694,22 +12680,20 @@ static const char kSTSHostTable[] = {
   /* "willberg.bayern", true */ 'w', 'i', 'l', 'l', 'b', 'e', 'r', 'g', '.', 'b', 'a', 'y', 'e', 'r', 'n', '\0',
   /* "willcipriano.com", true */ 'w', 'i', 'l', 'l', 'c', 'i', 'p', 'r', 'i', 'a', 'n', 'o', '.', 'c', 'o', 'm', '\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',
   /* "williamfeely.info", true */ 'w', 'i', 'l', 'l', 'i', 'a', 'm', 'f', 'e', 'e', 'l', 'y', '.', 'i', 'n', 'f', 'o', '\0',
   /* "williamsapiens.com", true */ 'w', 'i', 'l', 'l', 'i', 'a', 'm', 's', 'a', 'p', 'i', 'e', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "williamsonshore.com", true */ 'w', 'i', 'l', 'l', 'i', 'a', 'm', 's', 'o', 'n', 's', 'h', 'o', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "willnorris.com", true */ 'w', 'i', 'l', 'l', 'n', 'o', 'r', 'r', 'i', 's', '.', 'c', 'o', 'm', '\0',
-  /* "wills.co.tt", true */ 'w', 'i', 'l', 'l', 's', '.', 'c', 'o', '.', 't', 't', '\0',
   /* "wilsonovi.com", true */ 'w', 'i', 'l', 's', 'o', 'n', 'o', 'v', 'i', '.', 'c', 'o', 'm', '\0',
   /* "wimake.solutions", true */ 'w', 'i', 'm', 'a', 'k', 'e', '.', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '\0',
   /* "winaes.com", true */ 'w', 'i', 'n', 'a', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "wind.moe", true */ 'w', 'i', 'n', 'd', '.', 'm', 'o', 'e', '\0',
-  /* "windhaven.nl", true */ 'w', 'i', 'n', 'd', 'h', 'a', 'v', 'e', 'n', '.', 'n', 'l', '\0',
   /* "windrunner.se", true */ 'w', 'i', 'n', 'd', 'r', 'u', 'n', 'n', 'e', 'r', '.', 's', 'e', '\0',
   /* "windscribe.com", true */ 'w', 'i', 'n', 'd', 's', 'c', 'r', 'i', 'b', 'e', '.', 'c', 'o', 'm', '\0',
   /* "winebid.com", true */ 'w', 'i', 'n', 'e', 'b', 'i', 'd', '.', 'c', 'o', 'm', '\0',
   /* "winged.io", true */ 'w', 'i', 'n', 'g', 'e', 'd', '.', 'i', 'o', '\0',
   /* "winghill.com", true */ 'w', 'i', 'n', 'g', 'h', 'i', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "wingumd.net", true */ 'w', 'i', 'n', 'g', 'u', 'm', 'd', '.', 'n', 'e', 't', '\0',
   /* "winhistory-forum.net", true */ 'w', 'i', 'n', 'h', 'i', 's', 't', 'o', 'r', 'y', '-', 'f', 'o', 'r', 'u', 'm', '.', 'n', 'e', 't', '\0',
   /* "winmodels.org", true */ 'w', 'i', 'n', 'm', 'o', 'd', 'e', 'l', 's', '.', 'o', 'r', 'g', '\0',
@@ -12766,16 +12750,17 @@ static const char kSTSHostTable[] = {
   /* "wolfgang-kerschbaumer.net", true */ 'w', 'o', 'l', 'f', 'g', 'a', 'n', 'g', '-', 'k', 'e', 'r', 's', 'c', 'h', 'b', 'a', 'u', 'm', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "wolfsden.cz", true */ 'w', 'o', 'l', 'f', 's', 'd', 'e', 'n', '.', 'c', 'z', '\0',
   /* "wolfwings.us", true */ 'w', 'o', 'l', 'f', 'w', 'i', 'n', 'g', 's', '.', 'u', 's', '\0',
   /* "wollwerk.org", true */ 'w', 'o', 'l', 'l', 'w', 'e', 'r', 'k', '.', 'o', 'r', 'g', '\0',
   /* "womb.city", true */ 'w', 'o', 'm', 'b', '.', 'c', 'i', 't', 'y', '\0',
   /* "womf.org", true */ 'w', 'o', 'm', 'f', '.', 'o', 'r', 'g', '\0',
   /* "wonder.com.mx", true */ 'w', 'o', 'n', 'd', 'e', 'r', '.', 'c', 'o', 'm', '.', 'm', 'x', '\0',
   /* "wonderhost.info", true */ 'w', 'o', 'n', 'd', 'e', 'r', 'h', 'o', 's', 't', '.', 'i', 'n', 'f', 'o', '\0',
+  /* "wonderlandmovies.de", true */ 'w', 'o', 'n', 'd', 'e', 'r', 'l', 'a', 'n', 'd', 'm', 'o', 'v', 'i', 'e', 's', '.', 'd', 'e', '\0',
   /* "wondermags.com", true */ 'w', 'o', 'n', 'd', 'e', 'r', 'm', 'a', 'g', 's', '.', 'c', 'o', 'm', '\0',
   /* "wondershift.biz", true */ 'w', 'o', 'n', 'd', 'e', 'r', 's', 'h', 'i', 'f', 't', '.', 'b', 'i', 'z', '\0',
   /* "wondy.com", true */ 'w', 'o', 'n', 'd', 'y', '.', 'c', 'o', 'm', '\0',
   /* "woodbury.io", true */ 'w', 'o', 'o', 'd', 'b', 'u', 'r', 'y', '.', 'i', 'o', '\0',
   /* "woodlandschurch.net", true */ 'w', 'o', 'o', 'd', 'l', 'a', 'n', 'd', 's', 'c', 'h', 'u', 'r', 'c', 'h', '.', 'n', 'e', 't', '\0',
   /* "woodlandsmetro.church", true */ 'w', 'o', 'o', 'd', 'l', 'a', 'n', 'd', 's', 'm', 'e', 't', 'r', 'o', '.', 'c', 'h', 'u', 'r', 'c', 'h', '\0',
   /* "woodmafia.com.au", true */ 'w', 'o', 'o', 'd', 'm', 'a', 'f', 'i', 'a', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "woodomat.com", true */ 'w', 'o', 'o', 'd', 'o', 'm', 'a', 't', '.', 'c', 'o', 'm', '\0',
@@ -12805,17 +12790,16 @@ static const char kSTSHostTable[] = {
   /* "wowjs.uk", true */ 'w', 'o', 'w', 'j', 's', '.', 'u', 'k', '\0',
   /* "wownmedia.com", true */ 'w', 'o', 'w', 'n', 'm', 'e', 'd', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "wp-mix.com", true */ 'w', 'p', '-', 'm', 'i', 'x', '.', 'c', 'o', 'm', '\0',
   /* "wp-tao.com", true */ 'w', 'p', '-', 't', 'a', 'o', '.', 'c', 'o', 'm', '\0',
   /* "wpac.de", true */ 'w', 'p', 'a', 'c', '.', 'd', 'e', '\0',
   /* "wpdublin.com", true */ 'w', 'p', 'd', 'u', 'b', 'l', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "wpfortify.com", true */ 'w', 'p', 'f', 'o', 'r', 't', 'i', 'f', 'y', '.', 'c', 'o', 'm', '\0',
   /* "wphostingblog.nl", true */ 'w', 'p', 'h', 'o', 's', 't', 'i', 'n', 'g', 'b', 'l', 'o', 'g', '.', 'n', 'l', '\0',
-  /* "wpinfos.de", true */ 'w', 'p', 'i', 'n', 'f', 'o', 's', '.', 'd', 'e', '\0',
   /* "wpletter.de", false */ 'w', 'p', 'l', 'e', 't', 't', 'e', 'r', '.', 'd', 'e', '\0',
   /* "wpmeetup-berlin.de", true */ 'w', 'p', 'm', 'e', 'e', 't', 'u', 'p', '-', 'b', 'e', 'r', 'l', 'i', 'n', '.', 'd', 'e', '\0',
   /* "wpostats.com", true */ 'w', 'p', 'o', 's', 't', 'a', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "wpserp.com", true */ 'w', 'p', 's', 'e', 'r', 'p', '.', 'c', 'o', 'm', '\0',
   /* "wpvulndb.com", true */ 'w', 'p', 'v', 'u', 'l', 'n', 'd', 'b', '.', 'c', 'o', 'm', '\0',
   /* "wpzhiku.com", true */ 'w', 'p', 'z', 'h', 'i', 'k', 'u', '.', 'c', 'o', 'm', '\0',
   /* "wrara.org", true */ 'w', 'r', 'a', 'r', 'a', '.', 'o', 'r', 'g', '\0',
   /* "wrgms.com", true */ 'w', 'r', 'g', 'm', 's', '.', 'c', 'o', 'm', '\0',
@@ -12902,16 +12886,17 @@ static const char kSTSHostTable[] = {
   /* "wzyboy.org", true */ 'w', 'z', 'y', 'b', 'o', 'y', '.', 'o', 'r', 'g', '\0',
   /* "x-ripped-hd.com", true */ 'x', '-', 'r', 'i', 'p', 'p', 'e', 'd', '-', 'h', 'd', '.', 'c', 'o', 'm', '\0',
   /* "x.io", true */ 'x', '.', 'i', 'o', '\0',
   /* "x.st", true */ 'x', '.', 's', 't', '\0',
   /* "x3led.com", true */ 'x', '3', 'l', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "x509.io", true */ 'x', '5', '0', '9', '.', 'i', 'o', '\0',
   /* "x64architecture.com", true */ 'x', '6', '4', 'a', 'r', 'c', 'h', 'i', 't', 'e', 'c', 't', 'u', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "xa1.uk", true */ 'x', 'a', '1', '.', 'u', 'k', '\0',
+  /* "xalqbank-online.az", true */ 'x', 'a', 'l', 'q', 'b', 'a', 'n', 'k', '-', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'a', 'z', '\0',
   /* "xbb.hk", true */ 'x', 'b', 'b', '.', 'h', 'k', '\0',
   /* "xbb.li", true */ 'x', 'b', 'b', '.', 'l', 'i', '\0',
   /* "xbind.io", true */ 'x', 'b', 'i', 'n', 'd', '.', 'i', 'o', '\0',
   /* "xboxdownloadthat.com", true */ 'x', 'b', 'o', 'x', 'd', 'o', 'w', 'n', 'l', 'o', 'a', 'd', 't', 'h', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "xboxlivegoldshop.nl", true */ 'x', 'b', 'o', 'x', 'l', 'i', 'v', 'e', 'g', 'o', 'l', 'd', 's', 'h', 'o', 'p', '.', 'n', 'l', '\0',
   /* "xbrlsuccess.appspot.com", true */ 'x', 'b', 'r', 'l', 's', 'u', 'c', 'c', 'e', 's', 's', '.', 'a', 'p', 'p', 's', 'p', 'o', 't', '.', 'c', 'o', 'm', '\0',
   /* "xbt.co", true */ 'x', 'b', 't', '.', 'c', 'o', '\0',
   /* "xbtce.com", true */ 'x', 'b', 't', 'c', 'e', '.', 'c', 'o', 'm', '\0',
@@ -12953,16 +12938,20 @@ static const char kSTSHostTable[] = {
   /* "xmerak.com", true */ 'x', 'm', 'e', 'r', 'a', 'k', '.', 'c', 'o', 'm', '\0',
   /* "xmlbeam.org", true */ 'x', 'm', 'l', 'b', 'e', 'a', 'm', '.', 'o', 'r', 'g', '\0',
   /* "xmonk.org", true */ 'x', 'm', 'o', 'n', 'k', '.', '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.my", true */ 'x', 'm', 'r', '.', 'm', 'y', '\0',
   /* "xmr.to", true */ 'x', 'm', 'r', '.', 't', 'o', '\0',
   /* "xn--3lqp21gwna.cn", true */ 'x', 'n', '-', '-', '3', 'l', 'q', 'p', '2', '1', 'g', 'w', 'n', 'a', '.', 'c', 'n', '\0',
+  /* "xn--3lqp21gwna.xn--fiqs8s", true */ 'x', 'n', '-', '-', '3', 'l', 'q', 'p', '2', '1', 'g', 'w', 'n', 'a', '.', 'x', 'n', '-', '-', 'f', 'i', 'q', 's', '8', 's', '\0',
+  /* "xn--3lqp21gwna.xn--fiqz9s", true */ 'x', 'n', '-', '-', '3', 'l', 'q', 'p', '2', '1', 'g', 'w', 'n', 'a', '.', 'x', 'n', '-', '-', 'f', 'i', 'q', 'z', '9', 's', '\0',
+  /* "xn--3lqt7ir4md4tzwa.cn", true */ 'x', 'n', '-', '-', '3', 'l', 'q', 't', '7', 'i', 'r', '4', 'm', 'd', '4', 't', 'z', 'w', 'a', '.', 'c', 'n', '\0',
+  /* "xn--3lqt7ir4md4tzwa.xn--fiqs8s", true */ 'x', 'n', '-', '-', '3', 'l', 'q', 't', '7', 'i', 'r', '4', 'm', 'd', '4', 't', 'z', 'w', 'a', '.', 'x', 'n', '-', '-', 'f', 'i', 'q', 's', '8', 's', '\0',
   /* "xn--4dbjwf8c.ml", true */ 'x', 'n', '-', '-', '4', 'd', 'b', 'j', 'w', 'f', '8', 'c', '.', 'm', 'l', '\0',
   /* "xn--7v8h.cf", true */ 'x', 'n', '-', '-', '7', 'v', '8', 'h', '.', 'c', 'f', '\0',
   /* "xn--7xa.google.com", true */ 'x', 'n', '-', '-', '7', 'x', 'a', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "xn--80aaihqncaejjobbu6v.xn--p1ai", true */ 'x', 'n', '-', '-', '8', '0', 'a', 'a', 'i', 'h', 'q', 'n', 'c', 'a', 'e', 'j', 'j', 'o', 'b', 'b', 'u', '6', 'v', '.', 'x', 'n', '-', '-', 'p', '1', 'a', 'i', '\0',
   /* "xn--8mr166hf6s.xn--fiqs8s", true */ 'x', 'n', '-', '-', '8', 'm', 'r', '1', '6', '6', 'h', 'f', '6', 's', '.', 'x', 'n', '-', '-', 'f', 'i', 'q', 's', '8', 's', '\0',
   /* "xn--detrkl13b9sbv53j.com", true */ 'x', 'n', '-', '-', 'd', 'e', 't', 'r', 'k', 'l', '1', '3', 'b', '9', 's', 'b', 'v', '5', '3', 'j', '.', 'c', 'o', 'm', '\0',
   /* "xn--detrkl13b9sbv53j.org", true */ 'x', 'n', '-', '-', 'd', 'e', 't', 'r', 'k', 'l', '1', '3', 'b', '9', 's', 'b', 'v', '5', '3', 'j', '.', 'o', 'r', 'g', '\0',
   /* "xn--hfk-allgu-schwaben-stb.de", true */ 'x', 'n', '-', '-', 'h', 'f', 'k', '-', 'a', 'l', 'l', 'g', 'u', '-', 's', 'c', 'h', 'w', 'a', 'b', 'e', 'n', '-', 's', 't', 'b', '.', 'd', 'e', '\0',
@@ -13085,17 +13074,16 @@ static const char kSTSHostTable[] = {
   /* "yourbapp.ch", true */ 'y', 'o', 'u', 'r', 'b', 'a', 'p', 'p', '.', 'c', 'h', '\0',
   /* "yourgame.co.il", true */ 'y', 'o', 'u', 'r', 'g', 'a', 'm', 'e', '.', 'c', 'o', '.', 'i', 'l', '\0',
   /* "yoursecondphone.co", true */ 'y', 'o', 'u', 'r', 's', 'e', 'c', 'o', 'n', 'd', 'p', 'h', 'o', 'n', 'e', '.', 'c', 'o', '\0',
   /* "yourself.today", true */ 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', '.', 't', 'o', 'd', 'a', 'y', '\0',
   /* "yourznc.com", true */ 'y', 'o', 'u', 'r', 'z', 'n', 'c', '.', 'c', 'o', 'm', '\0',
   /* "youtous.me", true */ 'y', 'o', 'u', 't', 'o', 'u', 's', '.', 'm', 'e', '\0',
   /* "youtubedownloader.com", true */ 'y', 'o', 'u', 't', 'u', 'b', 'e', 'd', 'o', 'w', 'n', 'l', 'o', 'a', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "youyoulemon.com", true */ 'y', 'o', 'u', 'y', 'o', 'u', 'l', 'e', 'm', 'o', 'n', '.', 'c', 'o', 'm', '\0',
-  /* "yoyoost.duckdns.org", true */ 'y', 'o', 'y', 'o', 'o', 's', 't', '.', 'd', 'u', 'c', 'k', 'd', 'n', 's', '.', 'o', 'r', 'g', '\0',
   /* "ypart.eu", true */ 'y', 'p', 'a', 'r', 't', '.', 'e', 'u', '\0',
   /* "ypcs.fi", true */ 'y', 'p', 'c', 's', '.', 'f', 'i', '\0',
   /* "ypid.de", true */ 'y', 'p', 'i', 'd', '.', 'd', 'e', '\0',
   /* "yplanapp.com", true */ 'y', 'p', 'l', 'a', 'n', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "ys-shop.biz", true */ 'y', 's', '-', 's', 'h', 'o', 'p', '.', 'b', 'i', 'z', '\0',
   /* "ytcuber.xyz", true */ 'y', 't', 'c', 'u', 'b', 'e', 'r', '.', 'x', 'y', 'z', '\0',
   /* "ytec.ca", true */ 'y', 't', 'e', 'c', '.', 'c', 'a', '\0',
   /* "ytuquelees.net", true */ 'y', 't', 'u', 'q', 'u', 'e', 'l', 'e', 'e', 's', '.', 'n', 'e', 't', '\0',
@@ -13220,16 +13208,17 @@ static const char kSTSHostTable[] = {
   /* "zlavomat.sk", true */ 'z', 'l', 'a', 'v', 'o', 'm', 'a', 't', '.', 's', 'k', '\0',
   /* "zmy.im", true */ 'z', 'm', 'y', '.', 'i', 'm', '\0',
   /* "znation.nl", true */ 'z', 'n', 'a', 't', 'i', 'o', 'n', '.', 'n', 'l', '\0',
   /* "zning.net.cn", true */ 'z', 'n', 'i', 'n', 'g', '.', 'n', 'e', 't', '.', 'c', 'n', '\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',
   /* "zoe.vc", true */ 'z', 'o', 'e', '.', 'v', 'c', '\0',
   /* "zoeller.me", true */ 'z', 'o', 'e', 'l', 'l', 'e', 'r', '.', 'm', 'e', '\0',
   /* "zohar.wang", true */ 'z', 'o', 'h', 'a', 'r', '.', 'w', 'a', 'n', 'g', '\0',
+  /* "zombiesecured.com", true */ 'z', 'o', 'm', 'b', 'i', 'e', 's', 'e', 'c', 'u', 'r', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "zomiac.pp.ua", true */ 'z', 'o', 'm', 'i', 'a', 'c', '.', 'p', 'p', '.', 'u', 'a', '\0',
   /* "zonemaster.net", true */ 'z', 'o', 'n', 'e', 'm', 'a', 's', 't', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "zonglovani.info", true */ 'z', 'o', 'n', 'g', 'l', 'o', 'v', 'a', 'n', 'i', '.', 'i', 'n', 'f', 'o', '\0',
   /* "zoom.earth", true */ 'z', 'o', 'o', 'm', '.', 'e', 'a', 'r', 't', 'h', '\0',
   /* "zoommailing.com", true */ 'z', 'o', 'o', 'm', 'm', 'a', 'i', 'l', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "zooom.azurewebsites.net", true */ 'z', 'o', 'o', 'o', 'm', '.', 'a', 'z', 'u', 'r', 'e', 'w', 'e', 'b', 's', 'i', 't', 'e', 's', '.', 'n', 'e', 't', '\0',
   /* "zooparadies.eu", true */ 'z', 'o', 'o', 'p', 'a', 'r', 'a', 'd', 'i', 'e', 's', '.', 'e', 'u', '\0',
   /* "zopyx.com", true */ 'z', 'o', 'p', 'y', 'x', '.', 'c', 'o', 'm', '\0',
@@ -13388,13132 +13377,13121 @@ static const nsSTSPreload kSTSPreloadLis
   { 1400, true },
   { 1415, true },
   { 1428, true },
   { 1438, true },
   { 1452, true },
   { 1468, true },
   { 1482, true },
   { 1497, true },
-  { 1504, true },
-  { 1511, true },
-  { 1523, true },
-  { 1534, true },
-  { 1543, true },
-  { 1554, true },
-  { 1569, true },
-  { 1577, false },
-  { 1590, true },
+  { 1505, true },
+  { 1512, true },
+  { 1519, true },
+  { 1531, true },
+  { 1542, true },
+  { 1551, true },
+  { 1562, true },
+  { 1577, true },
+  { 1585, false },
   { 1598, true },
-  { 1610, true },
-  { 1625, true },
-  { 1644, true },
-  { 1651, false },
-  { 1670, true },
-  { 1680, true },
-  { 1686, true },
-  { 1695, true },
-  { 1708, false },
-  { 1715, true },
-  { 1727, true },
-  { 1736, true },
-  { 1749, true },
-  { 1759, true },
-  { 1767, false },
-  { 1774, true },
-  { 1785, true },
-  { 1797, true },
+  { 1606, true },
+  { 1618, true },
+  { 1633, true },
+  { 1652, true },
+  { 1659, false },
+  { 1678, true },
+  { 1688, true },
+  { 1694, true },
+  { 1703, true },
+  { 1716, false },
+  { 1723, true },
+  { 1735, true },
+  { 1744, true },
+  { 1757, true },
+  { 1767, true },
+  { 1775, false },
+  { 1782, true },
+  { 1793, true },
   { 1805, true },
-  { 1818, true },
-  { 1825, true },
-  { 1834, true },
-  { 1846, true },
-  { 1855, true },
-  { 1876, true },
-  { 1900, true },
-  { 1911, true },
-  { 1917, true },
-  { 1930, true },
-  { 1942, true },
-  { 1954, true },
-  { 1964, true },
-  { 1981, true },
-  { 1988, true },
-  { 1997, true },
-  { 2018, false },
-  { 2031, true },
-  { 2041, true },
-  { 2052, true },
-  { 2064, true },
-  { 2073, true },
-  { 2083, true },
-  { 2094, true },
+  { 1813, true },
+  { 1826, true },
+  { 1833, true },
+  { 1842, true },
+  { 1854, true },
+  { 1863, true },
+  { 1884, true },
+  { 1908, true },
+  { 1919, true },
+  { 1925, true },
+  { 1938, true },
+  { 1950, true },
+  { 1962, true },
+  { 1972, true },
+  { 1989, true },
+  { 1996, true },
+  { 2005, true },
+  { 2026, false },
+  { 2039, true },
+  { 2049, true },
+  { 2060, true },
+  { 2072, true },
+  { 2081, true },
+  { 2091, true },
   { 2102, true },
-  { 2114, true },
-  { 2124, true },
-  { 2143, true },
-  { 2154, true },
-  { 2166, true },
-  { 2178, true },
-  { 2190, true },
-  { 2201, true },
-  { 2210, true },
-  { 2223, true },
-  { 2243, true },
-  { 2258, true },
-  { 2266, true },
-  { 2276, true },
-  { 2293, true },
-  { 2308, true },
-  { 2315, false },
-  { 2326, true },
-  { 2341, false },
-  { 2356, true },
-  { 2375, true },
-  { 2385, true },
-  { 2396, true },
-  { 2414, true },
+  { 2110, true },
+  { 2122, true },
+  { 2132, true },
+  { 2151, true },
+  { 2162, true },
+  { 2173, true },
+  { 2182, true },
+  { 2195, true },
+  { 2215, true },
+  { 2230, true },
+  { 2238, true },
+  { 2248, true },
+  { 2265, true },
+  { 2280, true },
+  { 2287, false },
+  { 2298, true },
+  { 2313, false },
+  { 2328, true },
+  { 2347, true },
+  { 2357, true },
+  { 2368, true },
+  { 2386, true },
+  { 2400, true },
+  { 2412, true },
   { 2428, true },
-  { 2440, true },
-  { 2456, true },
-  { 2467, false },
-  { 2483, false },
-  { 2495, true },
-  { 2508, true },
-  { 2521, false },
-  { 2529, true },
-  { 2553, true },
-  { 2568, true },
-  { 2587, true },
-  { 2600, true },
-  { 2612, true },
-  { 2623, true },
-  { 2647, true },
-  { 2660, true },
-  { 2669, true },
-  { 2686, true },
-  { 2698, true },
-  { 2717, true },
-  { 2740, true },
-  { 2756, true },
-  { 2773, true },
-  { 2793, true },
-  { 2814, true },
-  { 2834, true },
-  { 2846, true },
-  { 2857, true },
-  { 2864, true },
-  { 2876, true },
-  { 2897, true },
-  { 2909, true },
-  { 2926, true },
+  { 2439, false },
+  { 2455, false },
+  { 2467, true },
+  { 2480, true },
+  { 2493, false },
+  { 2501, true },
+  { 2525, true },
+  { 2540, true },
+  { 2559, true },
+  { 2572, true },
+  { 2584, true },
+  { 2595, true },
+  { 2619, true },
+  { 2632, true },
+  { 2641, true },
+  { 2658, true },
+  { 2670, true },
+  { 2689, true },
+  { 2712, true },
+  { 2728, true },
+  { 2745, true },
+  { 2765, true },
+  { 2786, true },
+  { 2806, true },
+  { 2818, true },
+  { 2829, true },
+  { 2836, true },
+  { 2848, true },
+  { 2869, true },
+  { 2881, true },
+  { 2898, true },
+  { 2911, true },
+  { 2927, true },
   { 2939, true },
-  { 2955, true },
-  { 2967, true },
-  { 2980, false },
-  { 2989, true },
-  { 3004, true },
-  { 3021, true },
-  { 3035, true },
-  { 3051, true },
-  { 3062, true },
-  { 3074, true },
-  { 3095, true },
-  { 3112, false },
-  { 3122, true },
-  { 3137, true },
-  { 3151, false },
-  { 3164, true },
-  { 3173, true },
-  { 3187, true },
+  { 2952, false },
+  { 2961, true },
+  { 2976, true },
+  { 2993, true },
+  { 3007, true },
+  { 3023, true },
+  { 3034, true },
+  { 3046, true },
+  { 3067, true },
+  { 3084, false },
+  { 3094, true },
+  { 3109, true },
+  { 3123, false },
+  { 3136, true },
+  { 3145, true },
+  { 3159, true },
+  { 3171, true },
+  { 3186, true },
   { 3199, true },
-  { 3214, true },
-  { 3227, true },
-  { 3239, true },
-  { 3251, true },
-  { 3263, true },
-  { 3275, true },
+  { 3211, true },
+  { 3223, true },
+  { 3235, true },
+  { 3247, true },
+  { 3259, true },
+  { 3270, true },
   { 3287, true },
-  { 3298, true },
-  { 3315, true },
-  { 3329, true },
-  { 3345, true },
-  { 3358, true },
-  { 3375, true },
-  { 3391, true },
-  { 3406, true },
-  { 3421, true },
-  { 3439, true },
-  { 3448, true },
-  { 3461, true },
-  { 3482, true },
-  { 3491, true },
-  { 3501, true },
-  { 3526, true },
-  { 3537, true },
-  { 3556, true },
-  { 3568, true },
-  { 3587, true },
-  { 3606, true },
-  { 3625, true },
-  { 3644, true },
-  { 3659, true },
-  { 3670, true },
-  { 3683, true },
-  { 3695, true },
-  { 3708, true },
-  { 3722, true },
-  { 3735, true },
-  { 3746, true },
-  { 3755, true },
-  { 3769, true },
-  { 3781, true },
-  { 3808, true },
-  { 3834, true },
-  { 3845, true },
-  { 3858, true },
+  { 3301, true },
+  { 3317, true },
+  { 3330, true },
+  { 3347, true },
+  { 3363, true },
+  { 3378, true },
+  { 3393, true },
+  { 3411, true },
+  { 3420, true },
+  { 3433, true },
+  { 3454, true },
+  { 3463, true },
+  { 3473, true },
+  { 3498, true },
+  { 3509, true },
+  { 3528, true },
+  { 3540, true },
+  { 3559, true },
+  { 3578, true },
+  { 3597, true },
+  { 3616, true },
+  { 3631, true },
+  { 3642, true },
+  { 3655, true },
+  { 3667, true },
+  { 3680, true },
+  { 3694, true },
+  { 3705, true },
+  { 3714, true },
+  { 3728, true },
+  { 3740, true },
+  { 3767, true },
+  { 3793, true },
+  { 3804, true },
+  { 3817, true },
+  { 3828, true },
+  { 3852, true },
   { 3869, true },
-  { 3893, true },
-  { 3910, true },
-  { 3938, true },
-  { 3954, true },
-  { 3963, true },
-  { 3973, true },
-  { 3987, true },
-  { 3997, true },
-  { 4011, false },
-  { 4032, true },
-  { 4050, true },
-  { 4058, true },
-  { 4067, true },
-  { 4086, true },
-  { 4105, true },
-  { 4118, true },
-  { 4129, true },
-  { 4149, true },
-  { 4167, false },
-  { 4186, true },
-  { 4200, true },
-  { 4210, true },
-  { 4231, true },
-  { 4247, true },
-  { 4257, true },
+  { 3897, true },
+  { 3913, true },
+  { 3922, true },
+  { 3932, true },
+  { 3946, true },
+  { 3956, true },
+  { 3970, false },
+  { 3991, true },
+  { 4009, true },
+  { 4017, true },
+  { 4026, true },
+  { 4045, true },
+  { 4064, true },
+  { 4077, true },
+  { 4088, true },
+  { 4108, true },
+  { 4126, false },
+  { 4145, true },
+  { 4159, true },
+  { 4169, true },
+  { 4190, true },
+  { 4206, true },
+  { 4216, true },
+  { 4229, true },
+  { 4242, true },
+  { 4256, true },
   { 4270, true },
-  { 4283, true },
-  { 4297, true },
-  { 4311, true },
-  { 4321, true },
-  { 4331, true },
-  { 4341, true },
-  { 4351, true },
-  { 4361, true },
-  { 4371, true },
-  { 4388, false },
+  { 4280, true },
+  { 4290, true },
+  { 4300, true },
+  { 4310, true },
+  { 4320, true },
+  { 4330, true },
+  { 4347, false },
+  { 4355, true },
+  { 4366, true },
+  { 4385, true },
   { 4396, true },
   { 4407, true },
-  { 4426, true },
-  { 4437, true },
-  { 4448, true },
-  { 4457, true },
-  { 4477, true },
-  { 4488, true },
-  { 4512, true },