Merge mozilla-central to autoland. a=merge CLOSED TREE
authorshindli <shindli@mozilla.com>
Sat, 03 Mar 2018 01:17:14 +0200
changeset 461442 8fb0418948834f071dd99f6b8256b746b4a8adce
parent 461439 20d25c640db36e64dfd70eb7db293870e7f3087a (current diff)
parent 461441 f4e33c42faa72907453381bc00fe40130c76b86e (diff)
child 461443 c174737a9d9b8654afeded5b810b6a3379279a1f
push id1683
push usersfraser@mozilla.com
push dateThu, 26 Apr 2018 16:43:40 +0000
treeherdermozilla-release@5af6cb21869d [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone60.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge mozilla-central to autoland. a=merge CLOSED TREE
--- a/browser/app/blocklist.xml
+++ b/browser/app/blocklist.xml
@@ -1,10 +1,10 @@
 <?xml version='1.0' encoding='UTF-8'?>
-<blocklist lastupdate="1519429178266" xmlns="http://www.mozilla.org/2006/addons-blocklist">
+<blocklist lastupdate="1519826648080" xmlns="http://www.mozilla.org/2006/addons-blocklist">
   <emItems>
     <emItem blockID="i334" id="{0F827075-B026-42F3-885D-98981EE7B1AE}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i1211" id="flvto@hotger.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
@@ -2206,16 +2206,20 @@
     <emItem blockID="adfd98ef-cebc-406b-b1e0-61bd4c71e4b1" id="{f3c31b34-862c-4bc8-a98f-910cc6314a86}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="2447476f-043b-4d0b-9d3c-8e859c97d950" id="{44e4b2cf-77ba-4f76-aca7-f3fcbc2dda2f} ">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
+    <emItem blockID="48b14881-5f6b-4e48-afc5-3d9a7fae26a3" id="/{0c9970a2-6874-483b-a486-2296cfe251c2}|{01c9a4a4-06dd-426b-9500-2ea6fe841b88}|{1c981c7c-30e0-4ed2-955d-6b370e0a9d19}|{2aa275f8-fabc-4766-95b2-ecfc73db310b}|{2cac0be1-10a2-4a0d-b8c5-787837ea5955}|{2eb66f6c-94b3-44f5-9de2-22371236ec99}|{2f8aade6-8717-4277-b8b1-55172d364903}|{3c27c34f-8775-491a-a1c9-fcb15beb26d3}|{3f4dea3e-dbfc-428f-a88b-36908c459e20}|{3f4191fa-8f16-47d2-9414-36bfc9e0c2bf}|{4c140bc5-c2ad-41c3-a407-749473530904}|{05a21129-af2a-464c-809f-f2df4addf209}|{5da81d3d-5db1-432a-affc-4a2fe9a70749}|{5f4e63e4-351f-4a21-a8e5-e50dc72b5566}|{7c1df23b-1fd8-42b9-8752-71fff2b979de}|{7d5e24a1-7bef-4d09-a952-b9519ec00d20}|{7d932012-b4dd-42cc-8a78-b15ca82d0e61}|{7f8bc48d-1c7c-41a0-8534-54adc079338f}|{8a61507d-dc2f-4507-a9b7-7e33b8cbc31b}|{09c8fa16-4eec-4f78-b19d-9b24b1b57e1e}|{9ce2a636-0e49-4b8e-ad17-d0c156c963b0}|{11df9391-dba5-4fe2-bd48-37a9182b796d}|{23c65153-c21e-430a-a2dc-0793410a870d}|{36a4269e-4eef-4538-baea-9dafbf6a8e2f}|{37f8e483-c782-40ed-82e9-36f101b9e41f}|{63df223d-51cf-4f76-aad8-bbc94c895ed2}|{72c1ca96-c05d-46a7-bce1-c507ec3db4ea}|{76ce213c-8e57-4a14-b60a-67a5519bd7a7}|{79db6c96-d65a-4a64-a892-3d26bd02d2d9}|{81ac42f3-3d17-4cff-85af-8b7f89c8826b}|{83d38ac3-121b-4f28-bf9c-1220bd3c643b}|{86d98522-5d42-41d5-83c2-fc57f260a3d9}|{0111c475-01e6-42ea-a9b4-27bed9eb6092}|{214cb48a-ce31-4e48-82cf-a55061f1b766}|{216e0bcc-8a23-4069-8b63-d9528b437258}|{226b0fe6-f80f-48f1-9d8d-0b7a1a04e537}|{302ef84b-2feb-460e-85ca-f5397a77aa6a}|{408a506b-2336-4671-a490-83a1094b4097}|{419be4e9-c981-478e-baa0-937cf1eea1e8}|{0432b92a-bfcf-41b9-b5f0-df9629feece1}|{449e185a-dd91-4f7b-a23a-bbf6c1ca9435}|{591d1b73-5eae-47f4-a41f-8081d58d49bf}|{869b5825-e344-4375-839b-085d3c09ab9f}|{919fed43-3961-48d9-b0ef-893054f4f6f1}|{01166e60-d740-440c-b640-6bf964504b3c}|{2134e327-8060-441c-ba68-b167b82ff5bc}|{02328ee7-a82b-4983-a5f7-d0fc353698f0}|{6072a2a8-f1bc-4c9c-b836-7ac53e3f51e4}|{28044ca8-8e90-435e-bc63-a757af2fb6be}|{28092fa3-9c52-4a41-996d-c43e249c5f08}|{31680d42-c80d-4f8a-86d3-cd4930620369}|{92111c8d-0850-4606-904a-783d273a2059}|{446122cd-cd92-4d0c-9426-4ee0d28f6dca}|{829827cd-03be-4fed-af96-dd5997806fb4}|{4479446e-40f3-48af-ab85-7e3bb4468227}|{9263519f-ca57-4178-b743-2553a40a4bf1}|{71639610-9cc3-47e0-86ed-d5b99eaa41d5}|{84406197-6d37-437c-8d82-ae624b857355}|{93017064-dfd4-425e-a700-353f332ede37}|{a0ab16af-3384-4dbe-8722-476ce3947873}|{a0c54bd8-7817-4a40-b657-6dc7d59bd961}|{a2de96bc-e77f-4805-92c0-95c9a2023c6a}|{a3fbc8be-dac2-4971-b76a-908464cfa0e0}|{a42e5d48-6175-49e3-9e40-0188cde9c5c6}|{a893296e-5f54-43f9-a849-f12dcdee2c98}|{ac296b47-7c03-486f-a1d6-c48b24419749}|{b26bf964-7aa6-44f4-a2a9-d55af4b4eec0}|{be981b5e-1d9d-40dc-bd4f-47a7a027611c}|{be37931c-af60-4337-8708-63889f36445d}|{bfd92dfd-b293-4828-90c1-66af2ac688e6}|{c5cf4d08-0a33-4aa3-a40d-d4911bcc1da7}|{c488a8f5-ea3d-408d-809e-44e82c06ad9d}|{c661c2dc-00f9-4dc1-a9f6-bb2b7e1a4f8d}|{cd28aa38-d2f1-45a3-96c3-6cfd4702ef51}|{cd89045b-2e06-46bb-9e34-48e8799e5ef2}|{cf9d96ff-5997-439a-b32b-98214c621eee}|{d14acee6-f32b-4aa3-a802-6616003fc6a8}|{d97223b8-44e5-46c7-8ab5-e1d8986daf44}|{ddae89bd-6793-45d8-8ec9-7f4fb7212378}|{de3b1909-d4da-45e9-8da5-7d36a30e2fc6}|{df09f268-3c92-49db-8c31-6a25a6643896}|{e5bc3951-c837-4c98-9643-3c113fc8cf5e}|{e9ccb1f2-a8ba-4346-b43b-0d5582bce414}|{e341ed12-a703-47fe-b8dd-5948c38070e4}|{e2139287-2b0d-4f54-b3b1-c9a06c597223}|{ed352072-ddf0-4cb4-9cb6-d8aa3741c2de}|{f0b809eb-be22-432f-b26f-b1cadd1755b9}|{f1bce8e4-9936-495b-bf48-52850c7250ab}|{f01c3add-dc6d-4f35-a498-6b4279aa2ffa}|{f9e1ad25-5961-4cc5-8d66-5496c438a125}|{f4262989-6de0-4604-918f-663b85fad605}|{fc0d55bd-3c50-4139-9409-7df7c1114a9d}/">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="3"/>
+    </emItem>
   </emItems>
   <pluginItems>
     <pluginItem blockID="p332">
       <match exp="libflashplayer\.so" name="filename"/>
       <match exp="^Shockwave Flash 11.(0|1) r[0-9]{1,3}$" name="description"/>
       <infoURL>https://get.adobe.com/flashplayer/</infoURL>
       <versionRange severity="0" vulnerabilitystatus="1">
         <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
--- a/browser/base/content/tabbrowser.js
+++ b/browser/base/content/tabbrowser.js
@@ -2479,28 +2479,29 @@ class TabBrowser {
         Cu.reportError(ex);
       }
     }
 
     // Move the new tab after another tab if needed.
     if ((openerTab &&
          Services.prefs.getBoolPref("browser.tabs.insertRelatedAfterCurrent")) ||
          Services.prefs.getBoolPref("browser.tabs.insertAfterCurrent")) {
-
-    let lastRelatedTab = openerTab && this._lastRelatedTabMap.get(openerTab);
-    let newTabPos = (lastRelatedTab || openerTab || this.mCurrentTab)._tPos + 1;
-
-    if (lastRelatedTab)
-      lastRelatedTab.owner = null;
-    else if (openerTab)
-      t.owner = openerTab;
-    this.moveTabTo(t, newTabPos, true);
-    if (openerTab)
-      this._lastRelatedTabMap.set(openerTab, t);
-  }
+      let lastRelatedTab = openerTab && this._lastRelatedTabMap.get(openerTab);
+      let newTabPos = (lastRelatedTab || openerTab || this.mCurrentTab)._tPos + 1;
+
+      if (lastRelatedTab) {
+        lastRelatedTab.owner = null;
+      } else if (openerTab) {
+        t.owner = openerTab;
+      }
+      this.moveTabTo(t, newTabPos, true);
+      if (openerTab) {
+        this._lastRelatedTabMap.set(openerTab, t);
+      }
+    }
 
     // This field is updated regardless if we actually animate
     // since it's important that we keep this count correct in all cases.
     this.tabAnimationsInProgress++;
 
     if (animate) {
       requestAnimationFrame(function() {
         // kick the animation off
--- a/browser/base/content/test/webrtc/browser_devices_get_user_media_in_frame.js
+++ b/browser/base/content/test/webrtc/browser_devices_get_user_media_in_frame.js
@@ -123,16 +123,77 @@ var gTests = [
     await promiseNoPopupNotification("webRTC-shareDevices");
 
     await expectNoObserverCalled();
     await checkNotSharing();
   }
 },
 
 {
+  desc: "getUserMedia audio+video: with two frames sharing at the same time, sharing UI shows all shared devices",
+  run: async function checkFrameOverridingSharingUI() {
+    // This tests an edge case discovered in bug 1440356 that works like this
+    // - Share audio and video in iframe 1.
+    // - Share only video in iframe 2.
+    // The WebRTC UI should still show both video and audio indicators.
+
+    let promise = promisePopupNotificationShown("webRTC-shareDevices");
+    await promiseRequestDevice(true, true, "frame1");
+    await promise;
+    await expectObserverCalled("getUserMedia:request");
+    checkDeviceSelectors(true, true);
+
+    let indicator = promiseIndicatorWindow();
+    await promiseMessage("ok", () => {
+      PopupNotifications.panel.firstChild.button.click();
+    });
+    await expectObserverCalled("getUserMedia:response:allow");
+    await expectObserverCalled("recording-device-events");
+    Assert.deepEqual((await getMediaCaptureState()), {audio: true, video: true},
+                     "expected camera and microphone to be shared");
+
+    await indicator;
+    await checkSharingUI({video: true, audio: true});
+    await expectNoObserverCalled();
+
+    // Check that requesting a new device from a different frame
+    // doesn't override sharing UI.
+    promise = promisePopupNotificationShown("webRTC-shareDevices");
+    await promiseRequestDevice(false, true, "frame2");
+    await promise;
+    await expectObserverCalled("getUserMedia:request");
+    checkDeviceSelectors(false, true);
+
+    await promiseMessage("ok", () => {
+      PopupNotifications.panel.firstChild.button.click();
+    });
+    await expectObserverCalled("getUserMedia:response:allow");
+    await expectObserverCalled("recording-device-events");
+    Assert.deepEqual((await getMediaCaptureState()), {audio: true, video: true},
+                     "expected camera and microphone to be shared");
+
+    await checkSharingUI({video: true, audio: true});
+
+    // Check that ending the stream with the other frame
+    // doesn't override sharing UI.
+    promise = promiseObserverCalled("recording-device-events");
+    await promiseReloadFrame("frame2");
+    await promise;
+
+    await expectObserverCalled("recording-window-ended");
+    await checkSharingUI({video: true, audio: true});
+    await expectNoObserverCalled();
+
+    await closeStream(false, "frame1");
+    await expectNoObserverCalled();
+    await checkNotSharing();
+  }
+},
+
+{
   desc: "getUserMedia audio+video: reloading a frame updates the sharing UI",
   run: async function checkUpdateWhenReloading() {
     // We'll share only the cam in the first frame, then share both in the
     // second frame, then reload the second frame. After each step, we'll check
     // the UI is in the correct state.
 
     let promise = promisePopupNotificationShown("webRTC-shareDevices");
     await promiseRequestDevice(false, true, "frame1");
--- a/browser/components/customizableui/CustomizableUI.jsm
+++ b/browser/components/customizableui/CustomizableUI.jsm
@@ -4368,17 +4368,20 @@ OverflowableToolbar.prototype = {
       PanelMultiView.openPopup(this._panel, anchor || this._chevron, {
         triggerEvent: aEvent,
       }).catch(Cu.reportError);
       this._chevron.open = true;
 
       this._panel.addEventListener("popupshown", () => {
         this._panel.addEventListener("dragover", this);
         this._panel.addEventListener("dragend", this);
-        resolve();
+        // Wait until the next tick to resolve so all popupshown
+        // handlers have a chance to run before our promise resolution
+        // handlers do.
+        Services.tm.dispatchToMainThread(resolve);
       }, {once: true});
     });
   },
 
   _onClickChevron(aEvent) {
     if (this._chevron.open) {
       this._chevron.open = false;
       PanelMultiView.hidePopup(this._panel);
--- a/dom/base/nsGlobalWindowInner.h
+++ b/dom/base/nsGlobalWindowInner.h
@@ -274,17 +274,17 @@ public:
   void ReallyCloseWindow();
 
   // nsISupports
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
 
   // nsWrapperCache
   virtual JSObject *WrapObject(JSContext *cx, JS::Handle<JSObject*> aGivenProto) override
   {
-    MOZ_CRASH("We should never get here!");
+    return GetWrapper();
   }
 
   // nsIGlobalJSObjectHolder
   virtual JSObject* GetGlobalJSObject() override;
 
   // nsIScriptGlobalObject
   JSObject *FastGetGlobalJSObject() const
   {
--- a/dom/media/ChannelMediaDecoder.cpp
+++ b/dom/media/ChannelMediaDecoder.cpp
@@ -149,16 +149,39 @@ ChannelMediaDecoder::ResourceCallback::N
            "principal_changed",
            true);
   if (mDecoder) {
     mDecoder->NotifyPrincipalChanged();
   }
 }
 
 void
+ChannelMediaDecoder::NotifyPrincipalChanged()
+{
+  MOZ_ASSERT(NS_IsMainThread());
+  MediaDecoder::NotifyPrincipalChanged();
+  if (!mInitialChannelPrincipalKnown) {
+    // We'll receive one notification when the channel's initial principal
+    // is known, after all HTTP redirects have resolved. This isn't really a
+    // principal change, so return here to avoid the mSameOriginMedia check
+    // below.
+    mInitialChannelPrincipalKnown = true;
+    return;
+  }
+  if (!mSameOriginMedia &&
+      DecoderTraits::CrossOriginRedirectsProhibited(ContainerType())) {
+    // For some content types we block mid-flight channel redirects to cross
+    // origin destinations due to security constraints. See bug 1441153.
+    LOG("ChannnelMediaDecoder prohibited cross origin redirect blocked.");
+    NetworkError(MediaResult(NS_ERROR_DOM_BAD_URI,
+                             "Prohibited cross origin redirect blocked"));
+  }
+}
+
+void
 ChannelMediaDecoder::ResourceCallback::NotifySuspendedStatusChanged(
   bool aSuspendedByCache)
 {
   MOZ_ASSERT(NS_IsMainThread());
   DDLOGEX2("ChannelMediaDecoder::ResourceCallback",
            this,
            DDLogCategory::Log,
            "suspended_status_changed",
--- a/dom/media/ChannelMediaDecoder.h
+++ b/dom/media/ChannelMediaDecoder.h
@@ -61,16 +61,17 @@ class ChannelMediaDecoder
   };
 
 protected:
   void OnPlaybackEvent(MediaPlaybackEvent&& aEvent) override;
   void DurationChanged() override;
   void MetadataLoaded(UniquePtr<MediaInfo> aInfo,
                       UniquePtr<MetadataTags> aTags,
                       MediaDecoderEventVisibility aEventVisibility) override;
+  void NotifyPrincipalChanged() override;
 
   RefPtr<ResourceCallback> mResourceCallback;
   RefPtr<BaseMediaResource> mResource;
 
   explicit ChannelMediaDecoder(MediaDecoderInit& aInit);
 
   nsCString GetDebugInfo() override;
 
@@ -153,13 +154,17 @@ private:
 
   // Current playback position in the stream. This is (approximately)
   // where we're up to playing back the stream. This is not adjusted
   // during decoder seek operations, but it's updated at the end when we
   // start playing back again.
   int64_t mPlaybackPosition = 0;
 
   bool mCanPlayThrough = false;
+
+  // True if we've been notified that the ChannelMediaResource has
+  // a principal.
+  bool mInitialChannelPrincipalKnown = false;
 };
 
 } // namespace mozilla
 
 #endif // ChannelMediaDecoder_h_
--- a/dom/media/DecoderTraits.cpp
+++ b/dom/media/DecoderTraits.cpp
@@ -320,9 +320,16 @@ bool DecoderTraits::IsSupportedInVideoDo
     ADTSDecoder::IsSupportedType(*type) ||
     FlacDecoder::IsSupportedType(*type) ||
 #ifdef MOZ_ANDROID_HLS_SUPPORT
     HLSDecoder::IsSupportedType(*type) ||
 #endif
     false;
 }
 
+/* static */
+bool
+DecoderTraits::CrossOriginRedirectsProhibited(const MediaContainerType& aType)
+{
+  return WaveDecoder::IsSupportedType(aType);
+}
+
 } // namespace mozilla
--- a/dom/media/DecoderTraits.h
+++ b/dom/media/DecoderTraits.h
@@ -52,14 +52,18 @@ public:
 
   // Returns true if aType is MIME type of hls.
   static bool IsHttpLiveStreamingType(const MediaContainerType& aType);
 
   // Returns true if aType is matroska type.
   static bool IsMatroskaType(const MediaContainerType& aType);
 
   static bool IsSupportedType(const MediaContainerType& aType);
+
+  // For some content types we block channel redirects to cross origin
+  // destinations due to security constraints. See bug 1441153.
+  static bool CrossOriginRedirectsProhibited(const MediaContainerType& aType);
 };
 
 } // namespace mozilla
 
 #endif
 
--- a/dom/media/MediaDecoder.h
+++ b/dom/media/MediaDecoder.h
@@ -509,17 +509,17 @@ private:
 
 protected:
   void NotifyReaderDataArrived();
   void DiscardOngoingSeekIfExists();
   virtual void CallSeek(const SeekTarget& aTarget);
 
   // Called by MediaResource when the principal of the resource has
   // changed. Called on main thread only.
-  void NotifyPrincipalChanged();
+  virtual void NotifyPrincipalChanged();
 
   MozPromiseRequestHolder<SeekPromise> mSeekRequest;
 
   const char* PlayStateStr();
 
   void OnMetadataUpdate(TimedMetadata&& aMetadata);
 
   // This should only ever be accessed from the main thread.
--- a/dom/media/MediaManager.cpp
+++ b/dom/media/MediaManager.cpp
@@ -2191,31 +2191,16 @@ int MediaManager::AddDeviceChangeCallbac
     manager->GetBackend(0);
     if (fakeDeviceChangeEventOn)
       manager->GetBackend(0)->SetFakeDeviceChangeEvents();
   }));
 
   return DeviceChangeCallback::AddDeviceChangeCallback(aCallback);
 }
 
-static void
-StopRawIDCallback(MediaManager *aThis,
-                   uint64_t aWindowID,
-                   GetUserMediaWindowListener *aListener,
-                   void *aData)
-{
-  if (!aListener || !aData) {
-    return;
-  }
-
-  nsString* removedDeviceID = static_cast<nsString*>(aData);
-  aListener->StopRawID(*removedDeviceID);
-}
-
-
 void MediaManager::OnDeviceChange() {
   RefPtr<MediaManager> self(this);
   NS_DispatchToMainThread(media::NewRunnableFrom([self]() mutable {
     MOZ_ASSERT(NS_IsMainThread());
     if (sHasShutdown) {
       return NS_OK;
     }
     self->DeviceChangeCallback::OnDeviceChange();
@@ -2233,26 +2218,34 @@ void MediaManager::OnDeviceChange() {
         device->GetId(id);
         id.ReplaceSubstring(NS_LITERAL_STRING("default: "), NS_LITERAL_STRING(""));
         if (!deviceIDs.Contains(id)) {
           deviceIDs.AppendElement(id);
         }
       }
 
       for (auto& id : self->mDeviceIDs) {
-        if (!deviceIDs.Contains(id)) {
-          // Stop the coresponding SourceListener
-          nsGlobalWindowInner::InnerWindowByIdTable* windowsById =
-            nsGlobalWindowInner::GetWindowsTable();
-          if (windowsById) {
-            for (auto iter = windowsById->Iter(); !iter.Done(); iter.Next()) {
-              nsGlobalWindowInner* window = iter.Data();
-              self->IterateWindowListeners(window->AsInner(), StopRawIDCallback, &id);
-            }
-          }
+        if (deviceIDs.Contains(id)) {
+          continue;
+        }
+
+        // Stop the coresponding SourceListener
+        nsGlobalWindowInner::InnerWindowByIdTable* windowsById =
+          nsGlobalWindowInner::GetWindowsTable();
+        if (!windowsById) {
+          continue;
+        }
+
+        for (auto iter = windowsById->Iter(); !iter.Done(); iter.Next()) {
+          nsGlobalWindowInner* window = iter.Data();
+          self->IterateWindowListeners(window->AsInner(),
+              [&id](GetUserMediaWindowListener* aListener)
+              {
+                aListener->StopRawID(id);
+              });
         }
       }
 
       self->mDeviceIDs = deviceIDs;
     }, [](MediaStreamError*& reason) {});
     return NS_OK;
   }));
 }
@@ -3089,37 +3082,16 @@ MediaManager::GetBackend(uint64_t aWindo
 #else
     mBackend = new MediaEngineDefault();
 #endif
     mBackend->AddDeviceChangeCallback(this);
   }
   return mBackend;
 }
 
-static void
-StopSharingCallback(MediaManager *aThis,
-                    uint64_t aWindowID,
-                    GetUserMediaWindowListener *aListener,
-                    void *aData)
-{
-  MOZ_ASSERT(NS_IsMainThread());
-
-  // Grab a strong ref since RemoveAll() might destroy the listener mid-way
-  // when clearing the mActiveWindows reference.
-  RefPtr<GetUserMediaWindowListener> listener(aListener);
-  if (!listener) {
-    return;
-  }
-
-  listener->Stop();
-  listener->RemoveAll();
-  MOZ_ASSERT(!aThis->GetWindowListener(aWindowID));
-}
-
-
 void
 MediaManager::OnNavigation(uint64_t aWindowID)
 {
   MOZ_ASSERT(NS_IsMainThread());
   LOG(("OnNavigation for %" PRIu64, aWindowID));
 
   // Stop the streams for this window. The runnables check this value before
   // making a call to content.
@@ -3131,17 +3103,29 @@ MediaManager::OnNavigation(uint64_t aWin
     }
     mCallIds.Remove(aWindowID);
   }
 
   // This is safe since we're on main-thread, and the windowlist can only
   // be added to from the main-thread
   auto* window = nsGlobalWindowInner::GetInnerWindowWithId(aWindowID);
   if (window) {
-    IterateWindowListeners(window->AsInner(), StopSharingCallback, nullptr);
+    IterateWindowListeners(window->AsInner(),
+        [self = RefPtr<MediaManager>(this),
+         windowID = DebugOnly<decltype(aWindowID)>(aWindowID)]
+        (GetUserMediaWindowListener* aListener)
+        {
+          // Grab a strong ref since RemoveAll() might destroy the listener
+          // mid-way when clearing the mActiveWindows reference.
+          RefPtr<GetUserMediaWindowListener> listener(aListener);
+
+          listener->Stop();
+          listener->RemoveAll();
+          MOZ_ASSERT(!self->GetWindowListener(windowID));
+        });
   } else {
     RemoveWindowID(aWindowID);
   }
   MOZ_ASSERT(!GetWindowListener(aWindowID));
 
   RemoveMediaDevicesCallback(aWindowID);
 
   RefPtr<MediaManager> self = this;
@@ -3586,156 +3570,136 @@ struct CaptureWindowStateData {
   uint16_t* mCamera;
   uint16_t* mMicrophone;
   uint16_t* mScreenShare;
   uint16_t* mWindowShare;
   uint16_t* mAppShare;
   uint16_t* mBrowserShare;
 };
 
-static void
-CaptureWindowStateCallback(MediaManager *aThis,
-                           uint64_t aWindowID,
-                           GetUserMediaWindowListener *aListener,
-                           void *aData)
-{
-  MOZ_ASSERT(aData);
-
-  auto& data = *static_cast<CaptureWindowStateData*>(aData);
-
-  if (!aListener) {
-    return;
-  }
-
-  *data.mCamera =
-    FromCaptureState(aListener->CapturingSource(MediaSourceEnum::Camera));
-  *data.mMicrophone =
-    FromCaptureState(aListener->CapturingSource(MediaSourceEnum::Microphone));
-  *data.mScreenShare =
-    FromCaptureState(aListener->CapturingSource(MediaSourceEnum::Screen));
-  *data.mWindowShare =
-    FromCaptureState(aListener->CapturingSource(MediaSourceEnum::Window));
-  *data.mAppShare =
-    FromCaptureState(aListener->CapturingSource(MediaSourceEnum::Application));
-  *data.mBrowserShare =
-    FromCaptureState(aListener->CapturingSource(MediaSourceEnum::Browser));
-}
-
 NS_IMETHODIMP
-MediaManager::MediaCaptureWindowState(nsIDOMWindow* aWindow,
+MediaManager::MediaCaptureWindowState(nsIDOMWindow* aCapturedWindow,
                                       uint16_t* aCamera,
                                       uint16_t* aMicrophone,
-                                      uint16_t* aScreenShare,
-                                      uint16_t* aWindowShare,
-                                      uint16_t* aAppShare,
-                                      uint16_t* aBrowserShare)
+                                      uint16_t* aScreen,
+                                      uint16_t* aWindow,
+                                      uint16_t* aApplication,
+                                      uint16_t* aBrowser)
 {
   MOZ_ASSERT(NS_IsMainThread());
-  struct CaptureWindowStateData data;
-  data.mCamera = aCamera;
-  data.mMicrophone = aMicrophone;
-  data.mScreenShare = aScreenShare;
-  data.mWindowShare = aWindowShare;
-  data.mAppShare = aAppShare;
-  data.mBrowserShare = aBrowserShare;
-
-  *aCamera = nsIMediaManagerService::STATE_NOCAPTURE;
-  *aMicrophone = nsIMediaManagerService::STATE_NOCAPTURE;
-  *aScreenShare = nsIMediaManagerService::STATE_NOCAPTURE;
-  *aWindowShare = nsIMediaManagerService::STATE_NOCAPTURE;
-  *aAppShare = nsIMediaManagerService::STATE_NOCAPTURE;
-  *aBrowserShare = nsIMediaManagerService::STATE_NOCAPTURE;
-
-  nsCOMPtr<nsPIDOMWindowInner> piWin = do_QueryInterface(aWindow);
+
+  CaptureState camera = CaptureState::Off;
+  CaptureState microphone = CaptureState::Off;
+  CaptureState screen = CaptureState::Off;
+  CaptureState window = CaptureState::Off;
+  CaptureState application = CaptureState::Off;
+  CaptureState browser = CaptureState::Off;
+
+  nsCOMPtr<nsPIDOMWindowInner> piWin = do_QueryInterface(aCapturedWindow);
   if (piWin) {
-    IterateWindowListeners(piWin, CaptureWindowStateCallback, &data);
+    IterateWindowListeners(piWin,
+      [&camera, &microphone, &screen, &window, &application, &browser]
+      (GetUserMediaWindowListener* aListener)
+      {
+        camera = CombineCaptureState(
+            camera, aListener->CapturingSource(MediaSourceEnum::Camera));
+        microphone = CombineCaptureState(
+            microphone, aListener->CapturingSource(MediaSourceEnum::Microphone));
+        screen = CombineCaptureState(
+            screen, aListener->CapturingSource(MediaSourceEnum::Screen));
+        window = CombineCaptureState(
+            window, aListener->CapturingSource(MediaSourceEnum::Window));
+        application = CombineCaptureState(
+            application, aListener->CapturingSource(MediaSourceEnum::Application));
+        browser = CombineCaptureState(
+            browser, aListener->CapturingSource(MediaSourceEnum::Browser));
+      });
   }
+
+  *aCamera = FromCaptureState(camera);
+  *aMicrophone= FromCaptureState(microphone);
+  *aScreen = FromCaptureState(screen);
+  *aWindow = FromCaptureState(window);
+  *aApplication = FromCaptureState(application);
+  *aBrowser = FromCaptureState(browser);
+
 #ifdef DEBUG
   LOG(("%s: window %" PRIu64 " capturing %s %s %s %s %s %s", __FUNCTION__, piWin ? piWin->WindowID() : -1,
        *aCamera == nsIMediaManagerService::STATE_CAPTURE_ENABLED
          ? "camera (enabled)"
          : (*aCamera == nsIMediaManagerService::STATE_CAPTURE_DISABLED
             ? "camera (disabled)" : ""),
        *aMicrophone == nsIMediaManagerService::STATE_CAPTURE_ENABLED
          ? "microphone (enabled)"
          : (*aMicrophone == nsIMediaManagerService::STATE_CAPTURE_DISABLED
             ? "microphone (disabled)" : ""),
-       *aScreenShare ? "screenshare" : "",
-       *aWindowShare ? "windowshare" : "",
-       *aAppShare ? "appshare" : "",
-       *aBrowserShare ? "browsershare" : ""));
+       *aScreen ? "screenshare" : "",
+       *aWindow ? "windowshare" : "",
+       *aApplication ? "appshare" : "",
+       *aBrowser ? "browsershare" : ""));
 #endif
   return NS_OK;
 }
 
 NS_IMETHODIMP
 MediaManager::SanitizeDeviceIds(int64_t aSinceWhen)
 {
   MOZ_ASSERT(NS_IsMainThread());
   LOG(("%s: sinceWhen = %" PRId64, __FUNCTION__, aSinceWhen));
 
   media::SanitizeOriginKeys(aSinceWhen, false); // we fire and forget
   return NS_OK;
 }
 
-static void
-StopScreensharingCallback(MediaManager *aThis,
-                          uint64_t aWindowID,
-                          GetUserMediaWindowListener *aListener,
-                          void *aData)
-{
-  if (!aListener) {
-    return;
-  }
-
-  aListener->StopSharing();
-}
-
 void
 MediaManager::StopScreensharing(uint64_t aWindowID)
 {
   // We need to stop window/screensharing for all streams in all innerwindows that
   // correspond to that outerwindow.
 
   auto* window = nsGlobalWindowInner::GetInnerWindowWithId(aWindowID);
   if (!window) {
     return;
   }
-  IterateWindowListeners(window->AsInner(), &StopScreensharingCallback, nullptr);
+  IterateWindowListeners(window->AsInner(),
+    [](GetUserMediaWindowListener* aListener)
+    {
+      aListener->StopSharing();
+    });
 }
 
-// lets us do all sorts of things to the listeners
+template<typename FunctionType>
 void
 MediaManager::IterateWindowListeners(nsPIDOMWindowInner* aWindow,
-                                     WindowListenerCallback aCallback,
-                                     void *aData)
+                                     const FunctionType& aCallback)
 {
   // Iterate the docshell tree to find all the child windows, and for each
   // invoke the callback
   if (aWindow) {
     {
       uint64_t windowID = aWindow->WindowID();
       GetUserMediaWindowListener* listener = GetWindowListener(windowID);
-      (*aCallback)(this, windowID, listener, aData);
+      if (listener) {
+        aCallback(listener);
+      }
       // NB: `listener` might have been destroyed.
     }
 
     // iterate any children of *this* window (iframes, etc)
     nsCOMPtr<nsIDocShell> docShell = aWindow->GetDocShell();
     if (docShell) {
       int32_t i, count;
       docShell->GetChildCount(&count);
       for (i = 0; i < count; ++i) {
         nsCOMPtr<nsIDocShellTreeItem> item;
         docShell->GetChildAt(i, getter_AddRefs(item));
         nsCOMPtr<nsPIDOMWindowOuter> winOuter = item ? item->GetWindow() : nullptr;
 
         if (winOuter) {
-          IterateWindowListeners(winOuter->GetCurrentInnerWindow(),
-                                 aCallback, aData);
+          IterateWindowListeners(winOuter->GetCurrentInnerWindow(), aCallback);
         }
       }
     }
   }
 }
 
 
 void
--- a/dom/media/MediaManager.h
+++ b/dom/media/MediaManager.h
@@ -122,22 +122,16 @@ public:
   const nsString mType;
   const nsString mName;
   const nsString mID;
   const nsString mRawID;
 };
 
 typedef nsRefPtrHashtable<nsUint64HashKey, GetUserMediaWindowListener> WindowTable;
 
-// we could add MediaManager if needed
-typedef void (*WindowListenerCallback)(MediaManager *aThis,
-                                       uint64_t aWindowID,
-                                       GetUserMediaWindowListener *aListener,
-                                       void *aData);
-
 class MediaManager final : public nsIMediaManagerService,
                            public nsIObserver
                           ,public DeviceChangeCallback
 {
   friend SourceListener;
 public:
   static already_AddRefed<MediaManager> GetInstance();
 
@@ -248,19 +242,24 @@ private:
 
   // Make private because we want only one instance of this class
   MediaManager();
 
   ~MediaManager() {}
   void Shutdown();
 
   void StopScreensharing(uint64_t aWindowID);
+
+  /**
+   * Calls aCallback with a GetUserMediaWindowListener argument once for
+   * each window listener associated with aWindow and its child windows.
+   */
+  template<typename FunctionType>
   void IterateWindowListeners(nsPIDOMWindowInner *aWindow,
-                              WindowListenerCallback aCallback,
-                              void *aData);
+                              const FunctionType& aCallback);
 
   void StopMediaStreams();
   void RemoveMediaDevicesCallback(uint64_t aWindowID);
 
   // ONLY access from MainThread so we don't need to lock
   WindowTable mActiveWindows;
   nsRefPtrHashtable<nsStringHashKey, GetUserMediaTask> mActiveCallbacks;
   nsClassHashtable<nsUint64HashKey, nsTArray<nsString>> mCallIds;
--- a/dom/serviceworkers/ServiceWorkerPrivate.cpp
+++ b/dom/serviceworkers/ServiceWorkerPrivate.cpp
@@ -1942,17 +1942,17 @@ ServiceWorkerPrivate::SpawnWorkerIfNeede
 
   return NS_OK;
 }
 
 void
 ServiceWorkerPrivate::StoreISupports(nsISupports* aSupports)
 {
   MOZ_ASSERT(NS_IsMainThread());
-  MOZ_ASSERT(mWorkerPrivate);
+  MOZ_DIAGNOSTIC_ASSERT(mWorkerPrivate);
   MOZ_ASSERT(!mSupportsArray.Contains(aSupports));
 
   mSupportsArray.AppendElement(aSupports);
 }
 
 void
 ServiceWorkerPrivate::RemoveISupports(nsISupports* aSupports)
 {
--- a/dom/serviceworkers/ServiceWorkerRegistrationImpl.cpp
+++ b/dom/serviceworkers/ServiceWorkerRegistrationImpl.cpp
@@ -20,16 +20,17 @@
 #include "mozilla/dom/WorkerScope.h"
 #include "mozilla/Services.h"
 #include "mozilla/Unused.h"
 #include "nsCycleCollectionParticipant.h"
 #include "nsNetUtil.h"
 #include "nsServiceManagerUtils.h"
 #include "ServiceWorker.h"
 #include "ServiceWorkerManager.h"
+#include "ServiceWorkerPrivate.h"
 #include "ServiceWorkerRegistration.h"
 
 #include "nsIDocument.h"
 #include "nsIServiceWorkerManager.h"
 #include "nsISupportsPrimitives.h"
 #include "nsPIDOMWindow.h"
 #include "nsContentUtils.h"
 
@@ -128,30 +129,30 @@ ServiceWorkerRegistrationMainThread::Cle
   StopListeningForEvents();
   mOuter = nullptr;
 }
 
 namespace {
 
 void
 UpdateInternal(nsIPrincipal* aPrincipal,
-               const nsAString& aScope,
+               const nsACString& aScope,
                ServiceWorkerUpdateFinishCallback* aCallback)
 {
   MOZ_ASSERT(NS_IsMainThread());
   MOZ_ASSERT(aPrincipal);
   MOZ_ASSERT(aCallback);
 
   RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
   if (!swm) {
     // browser shutdown
     return;
   }
 
-  swm->Update(aPrincipal, NS_ConvertUTF16toUTF8(aScope), aCallback);
+  swm->Update(aPrincipal, aScope, aCallback);
 }
 
 class MainThreadUpdateCallback final : public ServiceWorkerUpdateFinishCallback
 {
   PromiseWindowProxy mPromise;
 
   ~MainThreadUpdateCallback()
   { }
@@ -276,22 +277,62 @@ public:
     RefPtr<UpdateResultRunnable> r =
       new UpdateResultRunnable(proxy, aStatus);
     r->Dispatch();
   }
 };
 
 class SWRUpdateRunnable final : public Runnable
 {
+  class TimerCallback final : public nsITimerCallback
+  {
+    RefPtr<ServiceWorkerPrivate> mPrivate;
+    RefPtr<Runnable> mRunnable;
+
+  public:
+    TimerCallback(ServiceWorkerPrivate* aPrivate,
+                  Runnable* aRunnable)
+      : mPrivate(aPrivate)
+      , mRunnable(aRunnable)
+    {
+      MOZ_ASSERT(mPrivate);
+      MOZ_ASSERT(aRunnable);
+    }
+
+    NS_IMETHOD
+    Notify(nsITimer *aTimer) override
+    {
+      mRunnable->Run();
+      mPrivate->RemoveISupports(aTimer);
+
+      return NS_OK;
+    }
+
+    NS_DECL_THREADSAFE_ISUPPORTS
+
+  private:
+    ~TimerCallback()
+    { }
+  };
+
 public:
-  SWRUpdateRunnable(PromiseWorkerProxy* aPromiseProxy, const nsAString& aScope)
+  explicit SWRUpdateRunnable(PromiseWorkerProxy* aPromiseProxy)
     : Runnable("dom::SWRUpdateRunnable")
     , mPromiseProxy(aPromiseProxy)
-    , mScope(aScope)
-  {}
+    , mDescriptor(aPromiseProxy->GetWorkerPrivate()->GetServiceWorkerDescriptor())
+    , mDelayed(false)
+  {
+    MOZ_ASSERT(mPromiseProxy);
+
+    // This runnable is used for update calls originating from a worker thread,
+    // which may be delayed in some cases.
+    MOZ_ASSERT(mPromiseProxy->GetWorkerPrivate()->IsServiceWorker());
+    MOZ_ASSERT(mPromiseProxy->GetWorkerPrivate());
+    mPromiseProxy->GetWorkerPrivate()->AssertIsOnWorkerThread();
+  }
 
   NS_IMETHOD
   Run() override
   {
     MOZ_ASSERT(NS_IsMainThread());
     ErrorResult result;
 
     nsCOMPtr<nsIPrincipal> principal;
@@ -302,30 +343,75 @@ public:
       if (mPromiseProxy->CleanedUp()) {
         return NS_OK;
       }
 
       principal = mPromiseProxy->GetWorkerPrivate()->GetPrincipal();
     }
     MOZ_ASSERT(principal);
 
+    RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
+    if (NS_WARN_IF(!swm)) {
+      return NS_OK;
+    }
+
+    // This will delay update jobs originating from a service worker thread.
+    // We don't currently handle ServiceWorkerRegistration.update() from other
+    // worker types. Also, we assume this registration matches self.registration
+    // on the service worker global. This is ok for now because service worker globals
+    // are the only worker contexts where we expose ServiceWorkerRegistration.
+    RefPtr<ServiceWorkerRegistrationInfo> registration =
+      swm->GetRegistration(principal, mDescriptor.Scope());
+    if (NS_WARN_IF(!registration)) {
+      return NS_OK;
+    }
+
+    RefPtr<ServiceWorkerInfo> worker = registration->GetByDescriptor(mDescriptor);
+    uint32_t delay = registration->GetUpdateDelay();
+
+    // if we have a timer object, it means we've already been delayed once.
+    if (delay && !mDelayed) {
+      nsCOMPtr<nsITimerCallback> cb = new TimerCallback(worker->WorkerPrivate(), this);
+      Result<nsCOMPtr<nsITimer>, nsresult> result =
+        NS_NewTimerWithCallback(cb, delay, nsITimer::TYPE_ONE_SHOT,
+                                SystemGroup::EventTargetFor(TaskCategory::Other));
+
+      nsCOMPtr<nsITimer> timer = result.unwrapOr(nullptr);
+      if (NS_WARN_IF(!timer)) {
+        return NS_OK;
+      }
+
+      mDelayed = true;
+      // We're storing the timer object on the calling service worker's private.
+      // ServiceWorkerPrivate will drop the reference if the worker terminates,
+      // which will cancel the timer.
+      worker->WorkerPrivate()->StoreISupports(timer);
+
+      return NS_OK;
+    }
+
     RefPtr<WorkerThreadUpdateCallback> cb =
       new WorkerThreadUpdateCallback(mPromiseProxy);
-    UpdateInternal(principal, mScope, cb);
+    UpdateInternal(principal, mDescriptor.Scope(), cb);
     return NS_OK;
   }
 
 private:
   ~SWRUpdateRunnable()
-  {}
+  {
+    MOZ_ASSERT(NS_IsMainThread());
+  }
 
   RefPtr<PromiseWorkerProxy> mPromiseProxy;
-  const nsString mScope;
+  const ServiceWorkerDescriptor mDescriptor;
+  bool mDelayed;
 };
 
+NS_IMPL_ISUPPORTS(SWRUpdateRunnable::TimerCallback, nsITimerCallback)
+
 class UnregisterCallback final : public nsIServiceWorkerUnregisterCallback
 {
   PromiseWindowProxy mPromise;
 
 public:
   NS_DECL_ISUPPORTS
 
   explicit UnregisterCallback(nsPIDOMWindowInner* aWindow,
@@ -528,17 +614,17 @@ ServiceWorkerRegistrationMainThread::Upd
     return nullptr;
   }
 
   nsCOMPtr<nsIDocument> doc = mOuter->GetOwner()->GetExtantDoc();
   MOZ_ASSERT(doc);
 
   RefPtr<MainThreadUpdateCallback> cb =
     new MainThreadUpdateCallback(mOuter->GetOwner(), promise);
-  UpdateInternal(doc->NodePrincipal(), mScope, cb);
+  UpdateInternal(doc->NodePrincipal(), NS_ConvertUTF16toUTF8(mScope), cb);
 
   return promise.forget();
 }
 
 already_AddRefed<Promise>
 ServiceWorkerRegistrationMainThread::Unregister(ErrorResult& aRv)
 {
   MOZ_ASSERT(NS_IsMainThread());
@@ -843,17 +929,17 @@ ServiceWorkerRegistrationWorkerThread::U
   }
 
   RefPtr<PromiseWorkerProxy> proxy = PromiseWorkerProxy::Create(worker, promise);
   if (!proxy) {
     aRv.Throw(NS_ERROR_DOM_ABORT_ERR);
     return nullptr;
   }
 
-  RefPtr<SWRUpdateRunnable> r = new SWRUpdateRunnable(proxy, mScope);
+  RefPtr<SWRUpdateRunnable> r = new SWRUpdateRunnable(proxy);
   MOZ_ALWAYS_SUCCEEDS(worker->DispatchToMainThread(r.forget()));
 
   return promise.forget();
 }
 
 already_AddRefed<Promise>
 ServiceWorkerRegistrationWorkerThread::Unregister(ErrorResult& aRv)
 {
--- a/dom/serviceworkers/ServiceWorkerRegistrationInfo.cpp
+++ b/dom/serviceworkers/ServiceWorkerRegistrationInfo.cpp
@@ -82,16 +82,17 @@ ServiceWorkerRegistrationInfo::Clear()
 
 ServiceWorkerRegistrationInfo::ServiceWorkerRegistrationInfo(
     const nsACString& aScope,
     nsIPrincipal* aPrincipal,
     ServiceWorkerUpdateViaCache aUpdateViaCache)
   : mPrincipal(aPrincipal)
   , mDescriptor(aPrincipal, aScope, aUpdateViaCache)
   , mControlledClientsCounter(0)
+  , mDelayMultiplier(0)
   , mUpdateState(NoUpdate)
   , mCreationTime(PR_Now())
   , mCreationTimeStamp(TimeStamp::Now())
   , mLastUpdateTime(0)
   , mPendingUninstall(false)
 {}
 
 ServiceWorkerRegistrationInfo::~ServiceWorkerRegistrationInfo()
@@ -704,10 +705,30 @@ ServiceWorkerRegistrationInfo::SetLastUp
 }
 
 const ServiceWorkerRegistrationDescriptor&
 ServiceWorkerRegistrationInfo::Descriptor() const
 {
   return mDescriptor;
 }
 
+uint32_t
+ServiceWorkerRegistrationInfo::GetUpdateDelay()
+{
+  uint32_t delay = Preferences::GetInt("dom.serviceWorkers.update_delay",
+                                       1000);
+  // This can potentially happen if you spam registration->Update(). We don't
+  // want to wrap to a lower value.
+  if (mDelayMultiplier >= INT_MAX / (delay ? delay : 1)) {
+    return INT_MAX;
+  }
+
+  delay *= mDelayMultiplier;
+
+  if (!mControlledClientsCounter && mDelayMultiplier < (INT_MAX / 30)) {
+    mDelayMultiplier = (mDelayMultiplier ? mDelayMultiplier : 1) * 30;
+  }
+
+  return delay;
+}
+
 } // namespace dom
 } // namespace mozilla
--- a/dom/serviceworkers/ServiceWorkerRegistrationInfo.h
+++ b/dom/serviceworkers/ServiceWorkerRegistrationInfo.h
@@ -18,16 +18,17 @@ namespace dom {
 class ServiceWorkerRegistrationInfo final
   : public nsIServiceWorkerRegistrationInfo
 {
   nsCOMPtr<nsIPrincipal> mPrincipal;
   ServiceWorkerRegistrationDescriptor mDescriptor;
   nsTArray<nsCOMPtr<nsIServiceWorkerRegistrationInfoListener>> mListeners;
 
   uint32_t mControlledClientsCounter;
+  uint32_t mDelayMultiplier;
 
   enum
   {
     NoUpdate,
     NeedTimeCheckAndUpdate,
     NeedUpdate
   } mUpdateState;
 
@@ -89,16 +90,17 @@ public:
 
   already_AddRefed<ServiceWorkerInfo>
   GetServiceWorkerInfoById(uint64_t aId);
 
   void
   StartControllingClient()
   {
     ++mControlledClientsCounter;
+    mDelayMultiplier = 0;
   }
 
   void
   StopControllingClient()
   {
     MOZ_ASSERT(mControlledClientsCounter);
     --mControlledClientsCounter;
   }
@@ -206,16 +208,19 @@ public:
   GetLastUpdateTime() const;
 
   void
   SetLastUpdateTime(const int64_t aTime);
 
   const ServiceWorkerRegistrationDescriptor&
   Descriptor() const;
 
+  uint32_t
+  GetUpdateDelay();
+
 private:
   // Roughly equivalent to [[Update Registration State algorithm]]. Make sure
   // this is called *before* updating SW instances' state, otherwise they
   // may get CC-ed.
   void
   UpdateRegistrationState();
 
   // Used by devtools to track changes to the properties of *nsIServiceWorkerRegistrationInfo*.
--- a/dom/serviceworkers/test/mochitest.ini
+++ b/dom/serviceworkers/test/mochitest.ini
@@ -227,16 +227,17 @@ support-files =
   nofetch_handler_worker.js
   service_worker.js
   service_worker_client.html
   utils.js
   bug1290951_worker_main.sjs
   bug1290951_worker_imported.sjs
   sw_storage_not_allow.js
   update_worker.sjs
+  self_update_worker.sjs
 
 [test_bug1151916.html]
 [test_bug1240436.html]
 [test_bug1408734.html]
 [test_claim.html]
 [test_claim_oninstall.html]
 [test_controller.html]
 [test_cookie_fetch.html]
@@ -343,8 +344,9 @@ tags = openwindow
 [test_workerupdatefoundevent.html]
 [test_xslt.html]
 [test_async_waituntil.html]
 [test_worker_reference_gc_timeout.html]
 [test_nofetch_handler.html]
 [test_bad_script_cache.html]
 [test_file_upload.html]
 support-files = script_file_upload.js sw_file_upload.js server_file_upload.sjs
+[test_self_update_worker.html]
new file mode 100644
--- /dev/null
+++ b/dom/serviceworkers/test/self_update_worker.sjs
@@ -0,0 +1,43 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+"use strict";
+
+const WORKER_BODY = `
+onactivate = function(event) {
+  let promise = clients.matchAll({includeUncontrolled: true}).then(function(clients) {
+    for (i = 0; i < clients.length; i++) {
+      clients[i].postMessage({version: version});
+    }
+  }).then(function() {
+    return self.registration.update();
+  });
+  event.waitUntil(promise);
+};
+`;
+
+function handleRequest(request, response) {
+  if (request.queryString == 'clearcounter') {
+    setState('count', "1");
+    response.write("ok");
+    return;
+  }
+
+  let count = getState("count");
+  if (count === "") {
+    count = 1;
+  } else {
+    count = parseInt(count);
+  }
+
+  let worker = "var version = " + count + ";\n";
+  worker = worker + WORKER_BODY;
+
+  // This header is necessary for making this script able to be loaded.
+  response.setHeader("Content-Type", "application/javascript");
+
+  // If this is the first request, return the first source.
+  response.write(worker);
+  setState("count", "" + (count + 1));
+}
+
new file mode 100644
--- /dev/null
+++ b/dom/serviceworkers/test/test_self_update_worker.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+  Test that a self updating service worker can't keep running forever when the
+  script changes.
+  -->
+<head>
+  <title>Test for Bug 1432846</title>
+  <script src="/tests/SimpleTest/SimpleTest.js"></script>
+  <script src="/tests/SimpleTest/SpawnTask.js"></script>
+  <script src="error_reporting_helpers.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
+  <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
+</head>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1432846">Mozilla Bug 1432846</a>
+<p id="display"></p>
+<div id="content" style="display: none">
+
+</div>
+<pre id="test">
+</pre>
+
+<script src="utils.js"></script>
+<script class="testbody" type="text/javascript">
+add_task(function setupPrefs() {
+  return SpecialPowers.pushPrefEnv({"set": [
+    ["dom.serviceWorkers.enabled", true],
+    ["dom.serviceWorkers.testing.enabled", true],
+  ]});
+});
+
+function activateDummyWorker() {
+  return navigator.serviceWorker.register("empty.js",
+    { scope: "./empty?random=" + Date.now() })
+    .then(function(registration) {
+      var worker = registration.installing;
+      return waitForState(worker, 'activated', registration).then(function() {
+        ok(true, "got dummy!");
+        return registration.unregister();
+      });
+    });
+}
+
+add_task(async function test_update() {
+  navigator.serviceWorker.onmessage = function(event) {
+    ok (event.data.version < 3, "Service worker updated too many times." + event.data.version);
+  }
+
+  await SpecialPowers.pushPrefEnv({"set": [
+    ["dom.serviceWorkers.idle_timeout", 0],
+    ["dom.serviceWorkers.update_delay", 30000],
+    ["dom.serviceWorkers.idle_extended_timeout", 299999]]});
+
+  // clear version counter
+  await fetch("self_update_worker.sjs?clearcounter");
+
+  var worker;
+  let registration = await navigator.serviceWorker.register(
+    "self_update_worker.sjs",
+    { scope: "./test_self_update_worker.html?random=" + Date.now()})
+    .then(function(registration) {
+      worker = registration.installing;
+      return waitForState(worker, 'activated', registration);
+    });
+
+  // We need to wait a reasonable time to give the self updating worker a chance
+  // to change to a newer version. Register and activate an empty worker 5 times.
+  for (i = 0; i < 5; i++) {
+    await activateDummyWorker();
+  }
+
+
+  await registration.unregister();
+  await SpecialPowers.popPrefEnv();
+  await SpecialPowers.popPrefEnv();
+});
+</script>
+</body>
+</html>
--- a/dom/webauthn/u2f-hid-rs/README.md
+++ b/dom/webauthn/u2f-hid-rs/README.md
@@ -14,17 +14,17 @@ support additional protocols and transpo
 
 ## Usage
 
 There's only a simple example function that tries to register and sign right now. It uses
 [env_logger](http://rust-lang-nursery.github.io/log/env_logger/) for logging, which you
 configure with the `RUST_LOG` environment variable:
 
 ```
-cargo build
+cargo build --example main
 RUST_LOG=debug cargo run --example main
 ```
 
 Proper usage should be to call into this library from something else - e.g., Firefox. There are
 some [C headers exposed for the purpose](u2f-hid-rs/blob/master/src/u2fhid-capi.h).
 
 ## Tests
 
@@ -40,11 +40,11 @@ There are fuzzers for the USB protocol r
 There are not (yet) fuzzers for the C API used by callers (such as Gecko).
 
 To fuzz, you will need cargo-fuzz (the latest version from GitHub) as well as Rust Nightly.
 
 ```
 rustup install nightly
 cargo install --git https://github.com/rust-fuzz/cargo-fuzz/
 
-rustup run nightly cargo fuzz run u2f_read -- -max_len=512
-rustup run nightly cargo fuzz run u2f_read_write -- -max_len=512
+cargo +nightly fuzz run u2f_read -- -max_len=512
+cargo +nightly fuzz run u2f_read_write -- -max_len=512
 ```
--- a/dom/webauthn/u2f-hid-rs/examples/main.rs
+++ b/dom/webauthn/u2f-hid-rs/examples/main.rs
@@ -6,18 +6,27 @@ extern crate base64;
 extern crate crypto;
 extern crate u2fhid;
 use crypto::digest::Digest;
 use crypto::sha2::Sha256;
 use std::io;
 use std::sync::mpsc::channel;
 use u2fhid::{AuthenticatorTransports, KeyHandle, RegisterFlags, SignFlags, U2FManager};
 
+extern crate env_logger;
 extern crate log;
-extern crate env_logger;
+
+macro_rules! try_or {
+    ($val:expr, $or:expr) => {
+        match $val {
+            Ok(v) => { v }
+            Err(e) => { return $or(e); }
+        }
+    }
+}
 
 fn u2f_get_key_handle_from_register_response(register_response: &Vec<u8>) -> io::Result<Vec<u8>> {
     if register_response[0] != 0x05 {
         return Err(io::Error::new(
             io::ErrorKind::InvalidData,
             "Reserved byte not set correctly",
         ));
     }
@@ -29,18 +38,17 @@ fn u2f_get_key_handle_from_register_resp
 
     Ok(key_handle)
 }
 
 fn main() {
     env_logger::init().expect("Cannot start logger");
 
     println!("Asking a security key to register now...");
-    let challenge_str =
-        format!("{}{}",
+    let challenge_str = format!("{}{}",
         r#"{"challenge": "1vQ9mxionq0ngCnjD-wTsv1zUSrGRtFqG2xP09SbZ70","#,
         r#" "version": "U2F_V2", "appId": "http://demo.yubico.com"}"#);
     let mut challenge = Sha256::new();
     challenge.input_str(&challenge_str);
     let mut chall_bytes: Vec<u8> = vec![0; challenge.output_bytes()];
     challenge.result(&mut chall_bytes);
 
     let mut application = Sha256::new();
@@ -54,23 +62,24 @@ fn main() {
     let (tx, rx) = channel();
     manager
         .register(
             flags,
             15_000,
             chall_bytes.clone(),
             app_bytes.clone(),
             vec![],
-            move |rv| { tx.send(rv.unwrap()).unwrap(); },
+            move |rv| {
+                tx.send(rv.unwrap()).unwrap();
+            },
         )
         .unwrap();
 
     let register_data = try_or!(rx.recv(), |_| {
         panic!("Problem receiving, unable to continue");
-        return;
     });
     println!("Register result: {}", base64::encode(&register_data));
     println!("Asking a security key to sign now, with the data from the register...");
     let credential = u2f_get_key_handle_from_register_response(&register_data).unwrap();
     let key_handle = KeyHandle {
         credential,
         transports: AuthenticatorTransports::empty(),
     };
@@ -79,18 +88,21 @@ fn main() {
     let (tx, rx) = channel();
     manager
         .sign(
             flags,
             15_000,
             chall_bytes,
             vec![app_bytes],
             vec![key_handle],
-            move |rv| { tx.send(rv.unwrap()).unwrap(); },
+            move |rv| {
+                tx.send(rv.unwrap()).unwrap();
+            },
         )
         .unwrap();
 
-    let (_, sign_data) = try_or!(rx.recv(), |_| {
+    let (_, handle_used, sign_data) = try_or!(rx.recv(), |_| {
         println!("Problem receiving");
     });
     println!("Sign result: {}", base64::encode(&sign_data));
+    println!("Key handle used: {}", base64::encode(&handle_used));
     println!("Done.");
 }
--- a/dom/webauthn/u2f-hid-rs/src/capi.rs
+++ b/dom/webauthn/u2f-hid-rs/src/capi.rs
@@ -48,17 +48,17 @@ pub unsafe extern "C" fn rust_u2f_mgr_fr
 pub unsafe extern "C" fn rust_u2f_app_ids_new() -> *mut U2FAppIds {
     Box::into_raw(Box::new(vec![]))
 }
 
 #[no_mangle]
 pub unsafe extern "C" fn rust_u2f_app_ids_add(
     ids: *mut U2FAppIds,
     id_ptr: *const u8,
-    id_len: usize
+    id_len: usize,
 ) {
     (*ids).push(from_raw(id_ptr, id_len));
 }
 
 #[no_mangle]
 pub unsafe extern "C" fn rust_u2f_app_ids_free(ids: *mut U2FAppIds) {
     if !ids.is_null() {
         Box::from_raw(ids);
@@ -172,17 +172,21 @@ pub unsafe extern "C" fn rust_u2f_mgr_re
                 result.insert(RESBUF_ID_REGISTRATION, registration);
                 callback(tid, Box::into_raw(Box::new(result)));
             } else {
                 callback(tid, ptr::null_mut());
             };
         },
     );
 
-    if res.is_ok() { tid } else { 0 }
+    if res.is_ok() {
+        tid
+    } else {
+        0
+    }
 }
 
 #[no_mangle]
 pub unsafe extern "C" fn rust_u2f_mgr_sign(
     mgr: *mut U2FManager,
     flags: u64,
     timeout: u64,
     callback: U2FCallback,
@@ -206,36 +210,33 @@ pub unsafe extern "C" fn rust_u2f_mgr_si
     }
 
     let flags = ::SignFlags::from_bits_truncate(flags);
     let challenge = from_raw(challenge_ptr, challenge_len);
     let app_ids = (*app_ids).clone();
     let key_handles = (*khs).clone();
 
     let tid = new_tid();
-    let res = (*mgr).sign(
-        flags,
-        timeout,
-        challenge,
-        app_ids,
-        key_handles,
-        move |rv| {
-            if let Ok((app_id, key_handle, signature)) = rv {
-                let mut result = U2FResult::new();
-                result.insert(RESBUF_ID_KEYHANDLE, key_handle);
-                result.insert(RESBUF_ID_SIGNATURE, signature);
-                result.insert(RESBUF_ID_APPID, app_id);
-                callback(tid, Box::into_raw(Box::new(result)));
-            } else {
-                callback(tid, ptr::null_mut());
-            };
-        },
-    );
+    let res = (*mgr).sign(flags, timeout, challenge, app_ids, key_handles, move |rv| {
+        if let Ok((app_id, key_handle, signature)) = rv {
+            let mut result = U2FResult::new();
+            result.insert(RESBUF_ID_KEYHANDLE, key_handle);
+            result.insert(RESBUF_ID_SIGNATURE, signature);
+            result.insert(RESBUF_ID_APPID, app_id);
+            callback(tid, Box::into_raw(Box::new(result)));
+        } else {
+            callback(tid, ptr::null_mut());
+        };
+    });
 
-    if res.is_ok() { tid } else { 0 }
+    if res.is_ok() {
+        tid
+    } else {
+        0
+    }
 }
 
 #[no_mangle]
 pub unsafe extern "C" fn rust_u2f_mgr_cancel(mgr: *mut U2FManager) -> u64 {
     if !mgr.is_null() {
         // Ignore return value.
         let _ = (*mgr).cancel();
     }
--- a/dom/webauthn/u2f-hid-rs/src/lib.rs
+++ b/dom/webauthn/u2f-hid-rs/src/lib.rs
@@ -22,21 +22,21 @@ pub mod platform;
 #[cfg(any(target_os = "windows"))]
 #[path = "windows/mod.rs"]
 pub mod platform;
 
 #[cfg(not(any(target_os = "linux", target_os = "macos", target_os = "windows")))]
 #[path = "stub/mod.rs"]
 pub mod platform;
 
+extern crate boxfnonce;
+extern crate libc;
 #[macro_use]
 extern crate log;
 extern crate rand;
-extern crate libc;
-extern crate boxfnonce;
 extern crate runloop;
 
 #[macro_use]
 extern crate bitflags;
 
 mod consts;
 mod statemachine;
 mod u2ftypes;
--- a/dom/webauthn/u2f-hid-rs/src/linux/hidraw.rs
+++ b/dom/webauthn/u2f-hid-rs/src/linux/hidraw.rs
@@ -3,17 +3,17 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 extern crate libc;
 
 use std::io;
 use std::mem;
 use std::os::unix::io::RawFd;
 
-use consts::{FIDO_USAGE_PAGE, FIDO_USAGE_U2FHID};
+use consts::{FIDO_USAGE_U2FHID, FIDO_USAGE_PAGE};
 use util::{from_unix_result, io_err};
 
 #[allow(non_camel_case_types)]
 #[repr(C)]
 pub struct ReportDescriptor {
     size: ::libc::c_int,
     value: [u8; 4096],
 }
--- a/dom/webauthn/u2f-hid-rs/src/linux/monitor.rs
+++ b/dom/webauthn/u2f-hid-rs/src/linux/monitor.rs
@@ -84,37 +84,40 @@ where
 
         // Remove all tracked devices.
         self.remove_all_devices();
 
         Ok(())
     }
 
     fn process_event(&mut self, event: libudev::Event) {
-        let path = event.device().devnode().map(
-            |dn| dn.to_owned().into_os_string(),
-        );
+        let path = event
+            .device()
+            .devnode()
+            .map(|dn| dn.to_owned().into_os_string());
 
         match (event.event_type(), path) {
             (EventType::Add, Some(path)) => {
                 self.add_device(path);
             }
             (EventType::Remove, Some(path)) => {
                 self.remove_device(path);
             }
             _ => { /* ignore other types and failures */ }
         }
     }
 
     fn add_device(&mut self, path: OsString) {
         let f = self.new_device_cb.clone();
         let key = path.clone();
 
-        let runloop = RunLoop::new(move |alive| if alive() {
-            f(path, alive);
+        let runloop = RunLoop::new(move |alive| {
+            if alive() {
+                f(path, alive);
+            }
         });
 
         if let Ok(runloop) = runloop {
             self.runloops.insert(key, runloop);
         }
     }
 
     fn remove_device(&mut self, path: OsString) {
--- a/dom/webauthn/u2f-hid-rs/src/linux/transaction.rs
+++ b/dom/webauthn/u2f-hid-rs/src/linux/transaction.rs
@@ -28,16 +28,18 @@ impl Transaction {
                 try_or!(monitor.run(alive), |e| callback.call(Err(e)));
 
                 // Send an error, if the callback wasn't called already.
                 callback.call(Err(io_err("aborted or timed out")));
             },
             timeout,
         )?;
 
-        Ok(Self { thread: Some(thread) })
+        Ok(Self {
+            thread: Some(thread),
+        })
     }
 
     pub fn cancel(&mut self) {
         // This must never be None.
         self.thread.take().unwrap().cancel();
     }
 }
--- a/dom/webauthn/u2f-hid-rs/src/macos/iokit.rs
+++ b/dom/webauthn/u2f-hid-rs/src/macos/iokit.rs
@@ -2,45 +2,49 @@
  * 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/. */
 
 #![allow(non_snake_case, non_camel_case_types, non_upper_case_globals)]
 
 extern crate core_foundation_sys;
 extern crate libc;
 
-use consts::{FIDO_USAGE_PAGE, FIDO_USAGE_U2FHID};
+use consts::{FIDO_USAGE_U2FHID, FIDO_USAGE_PAGE};
 use core_foundation_sys::base::*;
 use core_foundation_sys::dictionary::*;
 use core_foundation_sys::number::*;
 use core_foundation_sys::runloop::*;
 use core_foundation_sys::string::*;
 use libc::c_void;
 use std::ops::Deref;
 
 type IOOptionBits = u32;
 
 pub type IOReturn = libc::c_int;
 
 pub type IOHIDManagerRef = *mut __IOHIDManager;
 pub type IOHIDManagerOptions = IOOptionBits;
 
-pub type IOHIDDeviceCallback = extern "C" fn(context: *mut c_void,
-                                             result: IOReturn,
-                                             sender: *mut c_void,
-                                             device: IOHIDDeviceRef);
+pub type IOHIDDeviceCallback = extern "C" fn(
+    context: *mut c_void,
+    result: IOReturn,
+    sender: *mut c_void,
+    device: IOHIDDeviceRef,
+);
 
 pub type IOHIDReportType = IOOptionBits;
-pub type IOHIDReportCallback = extern "C" fn(context: *mut c_void,
-                                             result: IOReturn,
-                                             sender: IOHIDDeviceRef,
-                                             report_type: IOHIDReportType,
-                                             report_id: u32,
-                                             report: *mut u8,
-                                             report_len: CFIndex);
+pub type IOHIDReportCallback = extern "C" fn(
+    context: *mut c_void,
+    result: IOReturn,
+    sender: IOHIDDeviceRef,
+    report_type: IOHIDReportType,
+    report_id: u32,
+    report: *mut u8,
+    report_len: CFIndex,
+);
 
 pub const kIOHIDManagerOptionNone: IOHIDManagerOptions = 0;
 
 pub const kIOHIDReportTypeOutput: IOHIDReportType = 1;
 
 #[repr(C)]
 pub struct __IOHIDManager {
     __private: c_void,
--- a/dom/webauthn/u2f-hid-rs/src/macos/monitor.rs
+++ b/dom/webauthn/u2f-hid-rs/src/macos/monitor.rs
@@ -1,14 +1,14 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
+extern crate libc;
 extern crate log;
-extern crate libc;
 
 use core_foundation_sys::base::*;
 use core_foundation_sys::runloop::*;
 use libc::c_void;
 use platform::iokit::*;
 use runloop::RunLoop;
 use std::{io, slice};
 use std::collections::HashMap;
--- a/dom/webauthn/u2f-hid-rs/src/manager.rs
+++ b/dom/webauthn/u2f-hid-rs/src/manager.rs
@@ -1,14 +1,14 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 use std::io;
-use std::sync::mpsc::{channel, Sender, RecvTimeoutError};
+use std::sync::mpsc::{channel, RecvTimeoutError, Sender};
 use std::time::Duration;
 
 use consts::PARAMETER_SIZE;
 use statemachine::StateMachine;
 use runloop::RunLoop;
 use util::{to_io_err, OnceCallback};
 
 enum QueueAction {
@@ -42,50 +42,43 @@ impl U2FManager {
 
         // Start a new work queue thread.
         let queue = RunLoop::new(move |alive| {
             let mut sm = StateMachine::new();
 
             while alive() {
                 match rx.recv_timeout(Duration::from_millis(50)) {
                     Ok(QueueAction::Register {
-                           flags,
-                           timeout,
-                           challenge,
-                           application,
-                           key_handles,
-                           callback,
-                       }) => {
+                        flags,
+                        timeout,
+                        challenge,
+                        application,
+                        key_handles,
+                        callback,
+                    }) => {
                         // This must not block, otherwise we can't cancel.
                         sm.register(
                             flags,
                             timeout,
                             challenge,
                             application,
                             key_handles,
                             callback,
                         );
                     }
                     Ok(QueueAction::Sign {
-                           flags,
-                           timeout,
-                           challenge,
-                           app_ids,
-                           key_handles,
-                           callback,
-                       }) => {
+                        flags,
+                        timeout,
+                        challenge,
+                        app_ids,
+                        key_handles,
+                        callback,
+                    }) => {
                         // This must not block, otherwise we can't cancel.
-                        sm.sign(
-                            flags,
-                            timeout,
-                            challenge,
-                            app_ids,
-                            key_handles,
-                            callback,
-                        );
+                        sm.sign(flags, timeout, challenge, app_ids, key_handles, callback);
                     }
                     Ok(QueueAction::Cancel) => {
                         // Cancelling must block so that we don't start a new
                         // polling thread before the old one has shut down.
                         sm.cancel();
                     }
                     Err(RecvTimeoutError::Disconnected) => {
                         break;
@@ -168,22 +161,22 @@ impl U2FManager {
         if app_ids.len() < 1 {
             return Err(io::Error::new(
                 io::ErrorKind::InvalidInput,
                 "No app IDs given",
             ));
         }
 
         for app_id in &app_ids {
-          if app_id.len() != PARAMETER_SIZE {
-              return Err(io::Error::new(
-                  io::ErrorKind::InvalidInput,
-                  "Invalid app_id size",
-              ));
-          }
+            if app_id.len() != PARAMETER_SIZE {
+                return Err(io::Error::new(
+                    io::ErrorKind::InvalidInput,
+                    "Invalid app_id size",
+                ));
+            }
         }
 
         for key_handle in &key_handles {
             if key_handle.credential.len() > 256 {
                 return Err(io::Error::new(
                     io::ErrorKind::InvalidInput,
                     "Key handle too large",
                 ));
--- a/dom/webauthn/u2f-hid-rs/src/statemachine.rs
+++ b/dom/webauthn/u2f-hid-rs/src/statemachine.rs
@@ -19,26 +19,26 @@ fn find_valid_key_handles<'a, F>(
     key_handles: &'a Vec<::KeyHandle>,
     mut is_valid: F,
 ) -> (&'a ::AppId, Vec<&'a ::KeyHandle>)
 where
     F: FnMut(&Vec<u8>, &::KeyHandle) -> bool,
 {
     // Try all given app_ids in order.
     for app_id in app_ids {
-      // Find all valid key handles for the current app_id.
-      let valid_handles = key_handles
-          .iter()
-          .filter(|key_handle| is_valid(app_id, key_handle))
-          .collect::<Vec<_>>();
+        // Find all valid key handles for the current app_id.
+        let valid_handles = key_handles
+            .iter()
+            .filter(|key_handle| is_valid(app_id, key_handle))
+            .collect::<Vec<_>>();
 
-       // If there's at least one, stop.
-       if valid_handles.len() > 0 {
-           return (app_id, valid_handles);
-       }
+        // If there's at least one, stop.
+        if valid_handles.len() > 0 {
+            return (app_id, valid_handles);
+        }
     }
 
     return (&app_ids[0], vec![]);
 }
 
 #[derive(Default)]
 pub struct StateMachine {
     transaction: Option<Transaction>,
@@ -82,40 +82,46 @@ impl StateMachine {
             // Technically, this is a ConstraintError because we shouldn't talk
             // to this authenticator in the first place. But the result is the
             // same anyway.
             if !flags.is_empty() {
                 return;
             }
 
             // Iterate the exclude list and see if there are any matches.
-            // Abort the state machine if we found a valid key handle.
-            if key_handles.iter().any(|key_handle| {
-                is_valid_transport(key_handle.transports) &&
-                    u2f_is_keyhandle_valid(dev, &challenge, &application, &key_handle.credential)
+            // If so, we'll keep polling the device anyway to test for user
+            // consent, to be consistent with CTAP2 device behavior.
+            let excluded = key_handles.iter().any(|key_handle| {
+                is_valid_transport(key_handle.transports)
+                    && u2f_is_keyhandle_valid(dev, &challenge, &application, &key_handle.credential)
                         .unwrap_or(false) /* no match on failure */
-            })
-            {
-                return;
-            }
+            });
 
             while alive() {
-                if let Ok(bytes) = u2f_register(dev, &challenge, &application) {
-                    callback.call(Ok(bytes));
-                    break;
+                if excluded {
+                    let blank = vec![0u8; PARAMETER_SIZE];
+                    if let Ok(_) = u2f_register(dev, &blank, &blank) {
+                        callback.call(Err(io_err("duplicate registration")));
+                        break;
+                    }
+                } else {
+                    if let Ok(bytes) = u2f_register(dev, &challenge, &application) {
+                        callback.call(Ok(bytes));
+                        break;
+                    }
                 }
 
                 // Sleep a bit before trying again.
                 thread::sleep(Duration::from_millis(100));
             }
         });
 
-        self.transaction = Some(try_or!(transaction, |_| {
-            cbc.call(Err(io_err("couldn't create transaction")))
-        }));
+        self.transaction = Some(try_or!(transaction, |_| cbc.call(Err(io_err(
+            "couldn't create transaction"
+        )))));
     }
 
     pub fn sign(
         &mut self,
         flags: ::SignFlags,
         timeout: u64,
         challenge: Vec<u8>,
         app_ids: Vec<::AppId>,
@@ -148,28 +154,27 @@ impl StateMachine {
             // same anyway.
             if !flags.is_empty() {
                 return;
             }
 
             // For each appId, try all key handles. If there's at least one
             // valid key handle for an appId, we'll use that appId below.
             let (app_id, valid_handles) =
-                find_valid_key_handles(&app_ids, &key_handles,
-                    |app_id, key_handle| {
-                        u2f_is_keyhandle_valid(dev, &challenge, app_id,
-                                               &key_handle.credential)
-                            .unwrap_or(false) /* no match on failure */
-                    });
+                find_valid_key_handles(&app_ids, &key_handles, |app_id, key_handle| {
+                    u2f_is_keyhandle_valid(dev, &challenge, app_id, &key_handle.credential)
+                        .unwrap_or(false) /* no match on failure */
+                });
 
             // Aggregate distinct transports from all given credentials.
-            let transports = key_handles.iter().fold(
-                ::AuthenticatorTransports::empty(),
-                |t, k| t | k.transports,
-            );
+            let transports = key_handles
+                .iter()
+                .fold(::AuthenticatorTransports::empty(), |t, k| {
+                    t | k.transports
+                });
 
             // We currently only support USB. If the RP specifies transports
             // and doesn't include USB it's probably lying.
             if !is_valid_transport(transports) {
                 return;
             }
 
             while alive() {
@@ -179,39 +184,36 @@ impl StateMachine {
                     let blank = vec![0u8; PARAMETER_SIZE];
                     if let Ok(_) = u2f_register(dev, &blank, &blank) {
                         callback.call(Err(io_err("invalid key")));
                         break;
                     }
                 } else {
                     // Otherwise, try to sign.
                     for key_handle in &valid_handles {
-                        if let Ok(bytes) = u2f_sign(
-                            dev,
-                            &challenge,
-                            app_id,
-                            &key_handle.credential,
-                        )
+                        if let Ok(bytes) = u2f_sign(dev, &challenge, app_id, &key_handle.credential)
                         {
-                            callback.call(Ok((app_id.clone(),
-                                              key_handle.credential.clone(),
-                                              bytes)));
+                            callback.call(Ok((
+                                app_id.clone(),
+                                key_handle.credential.clone(),
+                                bytes,
+                            )));
                             break;
                         }
                     }
                 }
 
                 // Sleep a bit before trying again.
                 thread::sleep(Duration::from_millis(100));
             }
         });
 
-        self.transaction = Some(try_or!(transaction, |_| {
-            cbc.call(Err(io_err("couldn't create transaction")))
-        }));
+        self.transaction = Some(try_or!(transaction, |_| cbc.call(Err(io_err(
+            "couldn't create transaction"
+        )))));
     }
 
     // This blocks.
     pub fn cancel(&mut self) {
         if let Some(mut transaction) = self.transaction.take() {
             transaction.cancel();
         }
     }
--- a/dom/webauthn/u2f-hid-rs/src/u2fprotocol.rs
+++ b/dom/webauthn/u2f-hid-rs/src/u2fprotocol.rs
@@ -230,18 +230,18 @@ where
 ////////////////////////////////////////////////////////////////////////
 // Tests
 ////////////////////////////////////////////////////////////////////////
 
 #[cfg(test)]
 mod tests {
     use rand::{thread_rng, Rng};
 
-    use super::{U2FDevice, init_device, ping_device, sendrecv, send_apdu};
-    use consts::{CID_BROADCAST, U2FHID_INIT, U2FHID_PING, U2FHID_MSG, SW_NO_ERROR};
+    use super::{init_device, ping_device, send_apdu, sendrecv, U2FDevice};
+    use consts::{U2FHID_INIT, U2FHID_MSG, U2FHID_PING, CID_BROADCAST, SW_NO_ERROR};
 
     mod platform {
         use std::io;
         use std::io::{Read, Write};
 
         use consts::{CID_BROADCAST, HID_RPT_SIZE};
         use u2ftypes::U2FDevice;
 
@@ -353,31 +353,31 @@ mod tests {
     fn test_sendrecv_multiple() {
         let mut device = platform::TestDevice::new();
         let cid = [0x01, 0x02, 0x03, 0x04];
         device.set_cid(cid.clone());
 
         // init packet
         let mut msg = cid.to_vec();
         msg.extend(vec![U2FHID_PING, 0x00, 0xe4]); // cmd + length = 228
-        // write msg, append [1u8; 57], 171 bytes remaining
+                                                   // write msg, append [1u8; 57], 171 bytes remain
         device.add_write(&msg, 1);
         device.add_read(&msg, 1);
 
         // cont packet
         let mut msg = cid.to_vec();
         msg.push(0x00); // seq = 0
-        // write msg, append [1u8; 59], 112 bytes remaining
+                        // write msg, append [1u8; 59], 112 bytes remaining
         device.add_write(&msg, 1);
         device.add_read(&msg, 1);
 
         // cont packet
         let mut msg = cid.to_vec();
         msg.push(0x01); // seq = 1
-        // write msg, append [1u8; 59], 53 bytes remaining
+                        // write msg, append [1u8; 59], 53 bytes remaining
         device.add_write(&msg, 1);
         device.add_read(&msg, 1);
 
         // cont packet
         let mut msg = cid.to_vec();
         msg.push(0x02); // seq = 2
         msg.extend_from_slice(&[1u8; 53]);
         // write msg, append remaining 53 bytes.
@@ -395,17 +395,17 @@ mod tests {
         let cid = [0x01, 0x02, 0x03, 0x04];
         let data = [0x01, 0x02, 0x03, 0x04, 0x05];
         let mut device = platform::TestDevice::new();
         device.set_cid(cid.clone());
 
         let mut msg = cid.to_vec();
         // sendrecv header
         msg.extend(vec![U2FHID_MSG, 0x00, 0x0e]); // len = 14
-        // apdu header
+                                                  // apdu header
         msg.extend(vec![0x00, U2FHID_PING, 0xaa, 0x00, 0x00, 0x00, 0x05]);
         // apdu data
         msg.extend_from_slice(&data);
         device.add_write(&msg, 0);
 
         // Send data back
         let mut msg = cid.to_vec();
         msg.extend(vec![U2FHID_MSG, 0x00, 0x07]);
--- a/dom/webauthn/u2f-hid-rs/src/u2ftypes.rs
+++ b/dom/webauthn/u2f-hid-rs/src/u2ftypes.rs
@@ -130,17 +130,16 @@ impl U2FHIDCont {
         if dev.write(&frame)? != frame.len() {
             return Err(io_err("device write failed"));
         }
 
         Ok(count)
     }
 }
 
-
 // Reply sent after initialization command. Contains information about U2F USB
 // Key versioning, as well as the communication channel to be used for all
 // further requests.
 //
 // https://fidoalliance.org/specs/fido-u2f-v1.0-nfc-bt-amendment-20150514/fido-u2f-hid-protocol.
 // html#u2fhid_init
 pub struct U2FHIDInitResp {}
 
--- a/dom/webauthn/u2f-hid-rs/src/util.rs
+++ b/dom/webauthn/u2f-hid-rs/src/util.rs
@@ -59,25 +59,29 @@ pub struct OnceCallback<T> {
 
 impl<T> OnceCallback<T> {
     pub fn new<F>(cb: F) -> Self
     where
         F: FnOnce(io::Result<T>),
         F: Send + 'static,
     {
         let cb = Some(SendBoxFnOnce::from(cb));
-        Self { callback: Arc::new(Mutex::new(cb)) }
+        Self {
+            callback: Arc::new(Mutex::new(cb)),
+        }
     }
 
     pub fn call(&self, rv: io::Result<T>) {
         if let Ok(mut cb) = self.callback.lock() {
             if let Some(cb) = cb.take() {
                 cb.call(rv);
             }
         }
     }
 }
 
 impl<T> Clone for OnceCallback<T> {
     fn clone(&self) -> Self {
-        Self { callback: self.callback.clone() }
+        Self {
+            callback: self.callback.clone(),
+        }
     }
 }
--- a/dom/webauthn/u2f-hid-rs/src/windows/device.rs
+++ b/dom/webauthn/u2f-hid-rs/src/windows/device.rs
@@ -2,17 +2,17 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 use std::fs::{File, OpenOptions};
 use std::io;
 use std::io::{Read, Write};
 use std::os::windows::io::AsRawHandle;
 
-use consts::{CID_BROADCAST, HID_RPT_SIZE, FIDO_USAGE_PAGE, FIDO_USAGE_U2FHID};
+use consts::{FIDO_USAGE_U2FHID, CID_BROADCAST, FIDO_USAGE_PAGE, HID_RPT_SIZE};
 use super::winapi::DeviceCapabilities;
 
 use u2ftypes::U2FDevice;
 
 #[derive(Debug)]
 pub struct Device {
     path: String,
     file: File,
--- a/dom/webauthn/u2f-hid-rs/src/windows/monitor.rs
+++ b/dom/webauthn/u2f-hid-rs/src/windows/monitor.rs
@@ -60,18 +60,20 @@ where
         Ok(())
     }
 
     fn add_device(&mut self, path: &String) {
         let f = self.new_device_cb.clone();
         let path = path.clone();
         let key = path.clone();
 
-        let runloop = RunLoop::new(move |alive| if alive() {
-            f(path, alive);
+        let runloop = RunLoop::new(move |alive| {
+            if alive() {
+                f(path, alive);
+            }
         });
 
         if let Ok(runloop) = runloop {
             self.runloops.insert(key, runloop);
         }
     }
 
     fn remove_device(&mut self, path: &String) {
--- a/dom/webauthn/u2f-hid-rs/src/windows/transaction.rs
+++ b/dom/webauthn/u2f-hid-rs/src/windows/transaction.rs
@@ -27,16 +27,18 @@ impl Transaction {
                 try_or!(monitor.run(alive), |e| callback.call(Err(e)));
 
                 // Send an error, if the callback wasn't called already.
                 callback.call(Err(io_err("aborted or timed out")));
             },
             timeout,
         )?;
 
-        Ok(Self { thread: Some(thread) })
+        Ok(Self {
+            thread: Some(thread),
+        })
     }
 
     pub fn cancel(&mut self) {
         // This must never be None.
         self.thread.take().unwrap().cancel();
     }
 }
--- a/dom/webidl/WorkerGlobalScope.webidl
+++ b/dom/webidl/WorkerGlobalScope.webidl
@@ -38,9 +38,12 @@ WorkerGlobalScope implements WindowOrWor
 // Mozilla extensions
 partial interface WorkerGlobalScope {
 
   void dump(optional DOMString str);
 
   // XXXbz no spec for this yet, because the webperf WG is a bit dysfunctional
   [Constant, Cached]
   readonly attribute Performance performance;
+
+  [Func="WorkerGlobalScope::IsInAutomation", Throws]
+  object getJSTestingFunctions();
 };
--- a/dom/workers/WorkerPrivate.cpp
+++ b/dom/workers/WorkerPrivate.cpp
@@ -2612,31 +2612,34 @@ WorkerPrivate::WorkerPrivate(WorkerPriva
   , mWorkerScriptExecutedSuccessfully(false)
   , mFetchHandlerWasAdded(false)
   , mOnLine(false)
   , mMainThreadObjectsForgotten(false)
   , mIsChromeWorker(aIsChromeWorker)
   , mParentFrozen(false)
   , mIsSecureContext(false)
   , mDebuggerRegistered(false)
+  , mIsInAutomation(false)
 {
   MOZ_ASSERT_IF(!IsDedicatedWorker(), NS_IsMainThread());
   mLoadInfo.StealFrom(aLoadInfo);
 
   if (aParent) {
     aParent->AssertIsOnWorkerThread();
 
     // Note that this copies our parent's secure context state into mJSSettings.
     aParent->CopyJSSettings(mJSSettings);
 
     // And manually set our mIsSecureContext, though it's not really relevant to
     // dedicated workers...
     mIsSecureContext = aParent->IsSecureContext();
     MOZ_ASSERT_IF(mIsChromeWorker, mIsSecureContext);
 
+    mIsInAutomation = aParent->IsInAutomation();
+
     MOZ_ASSERT(IsDedicatedWorker());
 
     if (aParent->mParentFrozen) {
       Freeze(nullptr);
     }
 
     mOnLine = aParent->OnLine();
   }
@@ -2660,16 +2663,18 @@ WorkerPrivate::WorkerPrivate(WorkerPriva
 
     if (mIsSecureContext) {
       mJSSettings.chrome.compartmentOptions
                  .creationOptions().setSecureContext(true);
       mJSSettings.content.compartmentOptions
                  .creationOptions().setSecureContext(true);
     }
 
+    mIsInAutomation = xpc::IsInAutomation();
+
     // Our parent can get suspended after it initiates the async creation
     // of a new worker thread.  In this case suspend the new worker as well.
     if (mLoadInfo.mWindow && mLoadInfo.mWindow->IsSuspended()) {
       ParentWindowPaused();
     }
 
     if (mLoadInfo.mWindow && mLoadInfo.mWindow->IsFrozen()) {
       Freeze(mLoadInfo.mWindow);
--- a/dom/workers/WorkerPrivate.h
+++ b/dom/workers/WorkerPrivate.h
@@ -628,16 +628,22 @@ public:
   // compartment of the worker global.  The only reason we don't
   // AssertIsOnParentThread() here is so we can assert that this value matches
   // the one on the compartment, which has to be done from the worker thread.
   bool IsSecureContext() const
   {
     return mIsSecureContext;
   }
 
+  // Check whether we're running in automation.
+  bool IsInAutomation() const
+  {
+    return mIsInAutomation;
+  }
+
   TimeStamp CreationTimeStamp() const
   {
     return mCreationTimeStamp;
   }
 
   DOMHighResTimeStamp CreationTime() const
   {
     return mCreationTimeHighRes;
@@ -1474,16 +1480,20 @@ private:
   // of state (loadinfo, worker type, parent).
   //
   // It's a bit unfortunate that we have to have an out-of-band boolean for
   // this, but we need access to this state from the parent thread, and we can't
   // use our global object's secure state there.
   bool mIsSecureContext;
 
   bool mDebuggerRegistered;
+
+  // mIsInAutomation is true when we're running in test automation.
+  // We expose some extra testing functions in that case.
+  bool mIsInAutomation;
 };
 
 class AutoSyncLoopHolder
 {
   WorkerPrivate* mWorkerPrivate;
   nsCOMPtr<nsIEventTarget> mTarget;
   uint32_t mIndex;
 
--- a/dom/workers/WorkerScope.cpp
+++ b/dom/workers/WorkerScope.cpp
@@ -2,16 +2,17 @@
 /* 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 "WorkerScope.h"
 
 #include "jsapi.h"
+#include "jsfriendapi.h"
 #include "mozilla/EventListenerManager.h"
 #include "mozilla/dom/BindingDeclarations.h"
 #include "mozilla/dom/Clients.h"
 #include "mozilla/dom/ClientState.h"
 #include "mozilla/dom/Console.h"
 #include "mozilla/dom/DedicatedWorkerGlobalScopeBinding.h"
 #include "mozilla/dom/DOMPrefs.h"
 #include "mozilla/dom/Fetch.h"
@@ -395,16 +396,36 @@ WorkerGlobalScope::GetPerformance()
 
   if (!mPerformance) {
     mPerformance = Performance::CreateForWorker(mWorkerPrivate);
   }
 
   return mPerformance;
 }
 
+bool
+WorkerGlobalScope::IsInAutomation(JSContext* aCx, JSObject* /* unused */)
+{
+  return GetWorkerPrivateFromContext(aCx)->IsInAutomation();
+}
+
+void
+WorkerGlobalScope::GetJSTestingFunctions(JSContext* aCx,
+                                         JS::MutableHandle<JSObject*> aFunctions,
+                                         ErrorResult& aRv)
+{
+  JSObject* obj = js::GetTestingFunctions(aCx);
+  if (!obj) {
+    aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
+    return;
+  }
+
+  aFunctions.set(obj);
+}
+
 already_AddRefed<Promise>
 WorkerGlobalScope::Fetch(const RequestOrUSVString& aInput,
                          const RequestInit& aInit,
                          CallerType aCallerType, ErrorResult& aRv)
 {
   return FetchRequest(this, aInput, aInit, aCallerType, aRv);
 }
 
--- a/dom/workers/WorkerScope.h
+++ b/dom/workers/WorkerScope.h
@@ -156,16 +156,21 @@ public:
 
   Performance* GetPerformance();
 
   Performance* GetPerformanceIfExists() const
   {
     return mPerformance;
   }
 
+  static bool IsInAutomation(JSContext* aCx, JSObject* /* unused */);
+  void GetJSTestingFunctions(JSContext* aCx,
+                             JS::MutableHandle<JSObject*> aFunctions,
+                             ErrorResult& aRv);
+
   already_AddRefed<Promise>
   Fetch(const RequestOrUSVString& aInput, const RequestInit& aInit,
         CallerType aCallerType, ErrorResult& aRv);
 
   already_AddRefed<IDBFactory>
   GetIndexedDB(ErrorResult& aErrorResult);
 
   already_AddRefed<cache::CacheStorage>
--- a/dom/workers/test/test_worker_interfaces.js
+++ b/dom/workers/test/test_worker_interfaces.js
@@ -71,21 +71,17 @@ var ecmaGlobals =
     {name: "TypeError", insecureContext: true},
     {name: "Uint16Array", insecureContext: true},
     {name: "Uint32Array", insecureContext: true},
     {name: "Uint8Array", insecureContext: true},
     {name: "Uint8ClampedArray", insecureContext: true},
     {name: "URIError", insecureContext: true},
     {name: "WeakMap", insecureContext: true},
     {name: "WeakSet", insecureContext: true},
-    // WebAssembly is not supported on some hardware configurations,
-    // but we have no way to check that from here.  Just give up for
-    // now and don't check for it at all.  Do NOT add any other uses
-    // of "optional"!
-    {name: "WebAssembly", insecureContext: true, optional: true},
+    {name: "WebAssembly", insecureContext: true, disabled: !getJSTestingFunctions().wasmIsSupportedByHardware()},
   ];
 // IMPORTANT: Do not change the list above without review from
 //            a JavaScript Engine peer!
 
 // IMPORTANT: Do not change the list below without review from a DOM peer!
 var interfaceNamesInGlobalScope =
   [
 // IMPORTANT: Do not change this list without review from a DOM peer!
@@ -286,18 +282,16 @@ function createInterfaceMap(version, use
 	    // The insecureContext test is very purposefully converting
 	    // entry.insecureContext to boolean, so undefined will convert to
 	    // false.  That way entries without an insecureContext annotation
 	    // will get treated as "insecureContext: false", which means exposed
 	    // only in secure contexts.
             (isInsecureContext && !Boolean(entry.insecureContext)) ||
             entry.disabled) {
           interfaceMap[entry.name] = false;
-        } else if (entry.optional) {
-          interfaceMap[entry.name] = "optional";
         } else {
           interfaceMap[entry.name] = true;
         }
       }
     }
   }
 
   addInterfaces(ecmaGlobals);
@@ -308,31 +302,27 @@ function createInterfaceMap(version, use
 
 function runTest(version, userAgent) {
   var interfaceMap = createInterfaceMap(version, userAgent);
   for (var name of Object.getOwnPropertyNames(self)) {
     // An interface name should start with an upper case character.
     if (!/^[A-Z]/.test(name)) {
       continue;
     }
-    ok(interfaceMap[name] === "optional" || interfaceMap[name],
+    ok(interfaceMap[name],
        "If this is failing: DANGER, are you sure you want to expose the new interface " + name +
        " to all webpages as a property on the worker? Do not make a change to this file without a " +
        " review from a DOM peer for that specific change!!! (or a JS peer for changes to ecmaGlobals)");
     delete interfaceMap[name];
   }
   for (var name of Object.keys(interfaceMap)) {
-    if (interfaceMap[name] === "optional") {
+    ok(name in self === interfaceMap[name],
+       name + " should " + (interfaceMap[name] ? "" : " NOT") + " be defined on the global scope");
+    if (!interfaceMap[name]) {
       delete interfaceMap[name];
-    } else {
-      ok(name in self === interfaceMap[name],
-         name + " should " + (interfaceMap[name] ? "" : " NOT") + " be defined on the global scope");
-      if (!interfaceMap[name]) {
-        delete interfaceMap[name];
-      }
     }
   }
   is(Object.keys(interfaceMap).length, 0,
      "The following interface(s) are not enumerated: " + Object.keys(interfaceMap).join(", "));
 }
 
 workerTestGetVersion(function(version) {
   workerTestGetUserAgent(function(userAgent) {
--- a/gfx/thebes/gfxPlatform.h
+++ b/gfx/thebes/gfxPlatform.h
@@ -717,16 +717,17 @@ public:
     // you probably want to use gfxVars::UseWebRender() instead of this
     static bool WebRenderEnvvarEnabled();
 
 protected:
     gfxPlatform();
     virtual ~gfxPlatform();
 
     virtual void InitAcceleration();
+    virtual void InitWebRenderConfig();
 
     /**
      * Called immediately before deleting the gfxPlatform object.
      */
     virtual void WillShutdown();
 
     /**
      * Initialized hardware vsync based on each platform.
@@ -834,17 +835,16 @@ private:
 
     /**
      * This uses nsIScreenManager to determine the screen size and color depth
      */
     void PopulateScreenInfo();
 
     void InitCompositorAccelerationPrefs();
     void InitGPUProcessPrefs();
-    void InitWebRenderConfig();
     void InitOMTPConfig();
 
     static bool IsDXInterop2Blocked();
 
     RefPtr<gfxASurface> mScreenReferenceSurface;
     nsCOMPtr<nsIObserver> mSRGBOverrideObserver;
     nsCOMPtr<nsIObserver> mFontPrefsObserver;
     nsCOMPtr<nsIObserver> mMemoryPressureObserver;
--- a/gfx/thebes/gfxWindowsPlatform.cpp
+++ b/gfx/thebes/gfxWindowsPlatform.cpp
@@ -365,16 +365,26 @@ gfxWindowsPlatform::InitAcceleration()
     InitDWriteSupport();
   }
 
   // CanUseHardwareVideoDecoding depends on DeviceManagerDx state,
   // so update the cached value now.
   UpdateCanUseHardwareVideoDecoding();
 }
 
+void
+gfxWindowsPlatform::InitWebRenderConfig()
+{
+  gfxPlatform::InitWebRenderConfig();
+
+  if (gfxVars::UseWebRender()) {
+    UpdateBackendPrefs();
+  }
+}
+
 bool
 gfxWindowsPlatform::CanUseHardwareVideoDecoding()
 {
   DeviceManagerDx* dm = DeviceManagerDx::Get();
   if (!dm) {
     return false;
   }
   if (!dm->TextureSharingWorks()) {
@@ -431,17 +441,18 @@ gfxWindowsPlatform::HandleDeviceReset()
 void
 gfxWindowsPlatform::UpdateBackendPrefs()
 {
   uint32_t canvasMask = BackendTypeBit(BackendType::CAIRO) |
                         BackendTypeBit(BackendType::SKIA);
   uint32_t contentMask = BackendTypeBit(BackendType::CAIRO) |
                          BackendTypeBit(BackendType::SKIA);
   BackendType defaultBackend = BackendType::SKIA;
-  if (gfxConfig::IsEnabled(Feature::DIRECT2D) && Factory::HasD2D1Device()) {
+  if (gfxConfig::IsEnabled(Feature::DIRECT2D) &&
+      Factory::HasD2D1Device() && !gfxVars::UseWebRender()) {
     contentMask |= BackendTypeBit(BackendType::DIRECT2D1_1);
     canvasMask |= BackendTypeBit(BackendType::DIRECT2D1_1);
     defaultBackend = BackendType::DIRECT2D1_1;
   }
   InitBackendPrefs(canvasMask, defaultBackend, contentMask, defaultBackend);
 }
 
 bool
--- a/gfx/thebes/gfxWindowsPlatform.h
+++ b/gfx/thebes/gfxWindowsPlatform.h
@@ -232,16 +232,17 @@ protected:
     void BuildContentDeviceData(mozilla::gfx::ContentDeviceData* aOut) override;
 
 protected:
     RenderMode mRenderMode;
 
 private:
     void Init();
     void InitAcceleration() override;
+    void InitWebRenderConfig() override;
 
     void InitializeDevices();
     void InitializeD3D11();
     void InitializeD2D();
     bool InitDWriteSupport();
     bool InitGPUProcessSupport();
 
     void DisableD2D(mozilla::gfx::FeatureStatus aStatus, const char* aMessage,
--- a/js/src/jit/CodeGenerator.cpp
+++ b/js/src/jit/CodeGenerator.cpp
@@ -2830,40 +2830,38 @@ CodeGenerator::visitClassConstructor(LCl
 
 typedef JSObject* (*LambdaFn)(JSContext*, HandleFunction, HandleObject);
 static const VMFunction LambdaInfo = FunctionInfo<LambdaFn>(js::Lambda, "Lambda");
 
 void
 CodeGenerator::visitLambdaForSingleton(LLambdaForSingleton* lir)
 {
     pushArg(ToRegister(lir->environmentChain()));
-    pushArg(ImmGCPtr(lir->mir()->info().fun));
+    pushArg(ImmGCPtr(lir->mir()->info().funUnsafe()));
     callVM(LambdaInfo, lir);
 }
 
 void
 CodeGenerator::visitLambda(LLambda* lir)
 {
     Register envChain = ToRegister(lir->environmentChain());
     Register output = ToRegister(lir->output());
     Register tempReg = ToRegister(lir->temp());
     const LambdaFunctionInfo& info = lir->mir()->info();
 
-    OutOfLineCode* ool = oolCallVM(LambdaInfo, lir, ArgList(ImmGCPtr(info.fun), envChain),
+    OutOfLineCode* ool = oolCallVM(LambdaInfo, lir, ArgList(ImmGCPtr(info.funUnsafe()), envChain),
                                    StoreRegisterTo(output));
 
     MOZ_ASSERT(!info.singletonType);
 
-    masm.createGCObject(output, tempReg, info.fun, gc::DefaultHeap, ool->entry());
+    masm.createGCObject(output, tempReg, info.funUnsafe(), gc::DefaultHeap, ool->entry());
 
     emitLambdaInit(output, envChain, info);
 
     if (info.flags & JSFunction::EXTENDED) {
-        MOZ_ASSERT(info.fun->allowSuperProperty() || info.fun->isSelfHostedBuiltin() ||
-                   info.fun->isAsync());
         static_assert(FunctionExtended::NUM_EXTENDED_SLOTS == 2, "All slots must be initialized");
         masm.storeValue(UndefinedValue(), Address(output, FunctionExtended::offsetOfExtendedSlot(0)));
         masm.storeValue(UndefinedValue(), Address(output, FunctionExtended::offsetOfExtendedSlot(1)));
     }
 
     masm.bind(ool->rejoin());
 }
 
@@ -2903,17 +2901,17 @@ CodeGenerator::visitOutOfLineLambdaArrow
     masm.pop(newTarget.scratchReg());
 
     masm.bind(ool->entryNoPop());
 
     saveLive(ool->lir);
 
     pushArg(newTarget);
     pushArg(envChain);
-    pushArg(ImmGCPtr(info.fun));
+    pushArg(ImmGCPtr(info.funUnsafe()));
 
     callVM(LambdaArrowInfo, ool->lir);
     StoreRegisterTo(output).generate(this);
 
     restoreLiveIgnore(ool->lir, StoreRegisterTo(output).clobbered());
 
     masm.jump(ool->rejoin());
 }
@@ -2940,17 +2938,17 @@ CodeGenerator::visitLambdaArrow(LLambdaA
     }
 
     // There's not enough registers on x86 with the profiler enabled to request
     // a temp. Instead, spill part of one of the values, being prepared to
     // restore it if necessary on the out of line path.
     Register tempReg = newTarget.scratchReg();
     masm.push(newTarget.scratchReg());
 
-    masm.createGCObject(output, tempReg, info.fun, gc::DefaultHeap, ool->entry());
+    masm.createGCObject(output, tempReg, info.funUnsafe(), gc::DefaultHeap, ool->entry());
 
     masm.pop(newTarget.scratchReg());
 
     emitLambdaInit(output, envChain, info);
 
     // Initialize extended slots. Lexical |this| is stored in the first one.
     MOZ_ASSERT(info.flags & JSFunction::EXTENDED);
     static_assert(FunctionExtended::NUM_EXTENDED_SLOTS == 2, "All slots must be initialized");
@@ -2981,17 +2979,18 @@ CodeGenerator::emitLambdaInit(Register o
     static_assert(JSFunction::offsetOfFlags() == JSFunction::offsetOfNargs() + 2,
                   "the code below needs to be adapted");
     masm.store32(Imm32(u.word), Address(output, JSFunction::offsetOfNargs()));
     masm.storePtr(ImmGCPtr(info.scriptOrLazyScript),
                   Address(output, JSFunction::offsetOfScriptOrLazyScript()));
     masm.storePtr(envChain, Address(output, JSFunction::offsetOfEnvironment()));
     // No post barrier needed because output is guaranteed to be allocated in
     // the nursery.
-    masm.storePtr(ImmGCPtr(info.fun->displayAtom()), Address(output, JSFunction::offsetOfAtom()));
+    masm.storePtr(ImmGCPtr(info.funUnsafe()->displayAtom()),
+                  Address(output, JSFunction::offsetOfAtom()));
 }
 
 typedef bool (*SetFunNameFn)(JSContext*, HandleFunction, HandleValue, FunctionPrefixKind);
 static const VMFunction SetFunNameInfo =
     FunctionInfo<SetFunNameFn>(js::SetFunctionNameIfNoOwnName, "SetFunName");
 
 void
 CodeGenerator::visitSetFunName(LSetFunName* lir)
--- a/js/src/jit/LIR.h
+++ b/js/src/jit/LIR.h
@@ -729,17 +729,16 @@ class LNode
     // Returns the number of outputs of this instruction. If an output is
     // unallocated, it is an LDefinition, defining a virtual register.
     size_t numDefs() const {
         return numDefs_;
     }
 
     // Returns information about operands.
     virtual LAllocation* getOperand(size_t index) = 0;
-    virtual void setOperand(size_t index, const LAllocation& a) = 0;
 
     bool isCall() const {
         return isCall_;
     }
 
     // Does this call preserve the given register?
     // By default, it is assumed that all registers are clobbered by a call.
     inline bool isCallPreserved(AnyRegister reg) const;
@@ -825,16 +824,19 @@ class LInstruction
     }
 
   public:
     inline LDefinition* getDef(size_t index);
 
     void setDef(size_t index, const LDefinition& def) {
         *getDef(index) = def;
     }
+    void setOperand(size_t index, const LAllocation& a) {
+        *getOperand(index) = a;
+    }
 
     // Returns information about temporary registers needed. Each temporary
     // register is an LDefinition with a fixed or virtual register and
     // either GENERAL, FLOAT32, or DOUBLE type.
     size_t numTemps() const {
         return numTemps_;
     }
     inline LDefinition* getTemp(size_t index);
@@ -964,17 +966,17 @@ class LPhi final : public LNode
     }
     size_t numOperands() const {
         return mir_->toPhi()->numOperands();
     }
     LAllocation* getOperand(size_t index) override {
         MOZ_ASSERT(index < numOperands());
         return &inputs_[index];
     }
-    void setOperand(size_t index, const LAllocation& a) override {
+    void setOperand(size_t index, const LAllocation& a) {
         MOZ_ASSERT(index < numOperands());
         inputs_[index] = a;
     }
 
     // Phis don't have temps, so calling numTemps/getTemp is pointless.
     size_t numTemps() const = delete;
     LDefinition* getTemp(size_t index) = delete;
 };
@@ -1161,17 +1163,17 @@ class LInstructionHelper : public detail
     LInstructionHelper()
       : details::LInstructionFixedDefsTempsHelper<Defs, Temps>(Operands)
     {}
 
   public:
     LAllocation* getOperand(size_t index) final {
         return &operands_[index];
     }
-    void setOperand(size_t index, const LAllocation& a) final {
+    void setOperand(size_t index, const LAllocation& a) {
         operands_[index] = a;
     }
     void setBoxOperand(size_t index, const LBoxAllocation& alloc) {
 #ifdef JS_NUNBOX32
         operands_[index + TYPE_INDEX] = alloc.type();
         operands_[index + PAYLOAD_INDEX] = alloc.payload();
 #else
         operands_[index] = alloc.value();
@@ -1207,17 +1209,17 @@ class LVariadicInstruction : public deta
 
   public:
     MOZ_MUST_USE bool init(TempAllocator& alloc) {
         return operands_.init(alloc, this->nonPhiNumOperands_);
     }
     LAllocation* getOperand(size_t index) final {
         return &operands_[index];
     }
-    void setOperand(size_t index, const LAllocation& a) final {
+    void setOperand(size_t index, const LAllocation& a) {
         operands_[index] = a;
     }
     void setBoxOperand(size_t index, const LBoxAllocation& a) {
 #ifdef JS_NUNBOX32
         operands_[index + TYPE_INDEX] = a.type();
         operands_[index + PAYLOAD_INDEX] = a.payload();
 #else
         operands_[index] = a.value();
--- a/js/src/jit/MIR.h
+++ b/js/src/jit/MIR.h
@@ -8793,38 +8793,58 @@ class MClassConstructor : public MNullar
     }
 };
 
 struct LambdaFunctionInfo
 {
     // The functions used in lambdas are the canonical original function in
     // the script, and are immutable except for delazification. Record this
     // information while still on the active thread to avoid races.
-    CompilerFunction fun;
+  private:
+    CompilerFunction fun_;
+
+  public:
     uint16_t flags;
     uint16_t nargs;
     gc::Cell* scriptOrLazyScript;
     bool singletonType;
     bool useSingletonForClone;
 
     explicit LambdaFunctionInfo(JSFunction* fun)
-      : fun(fun), flags(fun->flags()), nargs(fun->nargs()),
+      : fun_(fun), flags(fun->flags()), nargs(fun->nargs()),
         scriptOrLazyScript(fun->hasScript()
                            ? (gc::Cell*) fun->nonLazyScript()
                            : (gc::Cell*) fun->lazyScript()),
         singletonType(fun->isSingleton()),
         useSingletonForClone(ObjectGroup::useSingletonForClone(fun))
-    {}
+    {
+        // If this assert fails, make sure CodeGenerator::visitLambda does the
+        // right thing. We can't assert this off-thread in CodeGenerator,
+        // because fun->isAsync() accesses the script/lazyScript and can race
+        // with delazification on the main thread.
+        MOZ_ASSERT_IF(flags & JSFunction::EXTENDED,
+                      fun->isArrow() ||
+                      fun->allowSuperProperty() ||
+                      fun->isSelfHostedBuiltin() ||
+                      fun->isAsync());
+    }
+
+    // Be careful when calling this off-thread. Don't call any JSFunction*
+    // methods that depend on script/lazyScript - this can race with
+    // delazification on the main thread.
+    JSFunction* funUnsafe() const {
+        return fun_;
+    }
 
     bool appendRoots(MRootList& roots) const {
-        if (!roots.append(fun))
-            return false;
-        if (fun->hasScript())
-            return roots.append(fun->nonLazyScript());
-        return roots.append(fun->lazyScript());
+        if (!roots.append(fun_))
+            return false;
+        if (fun_->hasScript())
+            return roots.append(fun_->nonLazyScript());
+        return roots.append(fun_->lazyScript());
     }
 
   private:
     LambdaFunctionInfo(const LambdaFunctionInfo&) = delete;
     void operator=(const LambdaFunctionInfo&) = delete;
 };
 
 class MLambda
@@ -8834,18 +8854,19 @@ class MLambda
     const LambdaFunctionInfo info_;
 
     MLambda(TempAllocator& alloc, CompilerConstraintList* constraints, MDefinition* envChain,
             MConstant* cst)
       : MBinaryInstruction(classOpcode, envChain, cst),
         info_(&cst->toObject().as<JSFunction>())
     {
         setResultType(MIRType::Object);
-        if (!info().fun->isSingleton() && !ObjectGroup::useSingletonForClone(info().fun))
-            setResultTypeSet(MakeSingletonTypeSet(alloc, constraints, info().fun));
+        JSFunction* fun = info().funUnsafe();
+        if (!fun->isSingleton() && !ObjectGroup::useSingletonForClone(fun))
+            setResultTypeSet(MakeSingletonTypeSet(alloc, constraints, fun));
     }
 
   public:
     INSTRUCTION_HEADER(Lambda)
     TRIVIAL_NEW_WRAPPERS_WITH_ALLOC
     NAMED_OPERANDS((0, environmentChain))
 
     MConstant* functionOperand() const {
@@ -8870,19 +8891,20 @@ class MLambdaArrow
     const LambdaFunctionInfo info_;
 
     MLambdaArrow(TempAllocator& alloc, CompilerConstraintList* constraints, MDefinition* envChain,
                  MDefinition* newTarget, MConstant* cst)
       : MTernaryInstruction(classOpcode, envChain, newTarget, cst),
         info_(&cst->toObject().as<JSFunction>())
     {
         setResultType(MIRType::Object);
-        MOZ_ASSERT(!ObjectGroup::useSingletonForClone(info().fun));
-        if (!info().fun->isSingleton())
-            setResultTypeSet(MakeSingletonTypeSet(alloc, constraints, info().fun));
+        JSFunction* fun = info().funUnsafe();
+        MOZ_ASSERT(!ObjectGroup::useSingletonForClone(fun));
+        if (!fun->isSingleton())
+            setResultTypeSet(MakeSingletonTypeSet(alloc, constraints, fun));
     }
 
   public:
     INSTRUCTION_HEADER(LambdaArrow)
     TRIVIAL_NEW_WRAPPERS_WITH_ALLOC
     NAMED_OPERANDS((0, environmentChain), (1, newTargetDef))
 
     MConstant* functionOperand() const {
--- a/js/src/jit/RegisterAllocator.h
+++ b/js/src/jit/RegisterAllocator.h
@@ -351,22 +351,19 @@ class RegisterAllocator
         return outputOf(ins);
     }
 
     void dumpInstructions();
 
   public:
     template<typename TakeableSet>
     static void takeWasmRegisters(TakeableSet& regs) {
-#if defined(JS_CODEGEN_X64) || defined(JS_CODEGEN_ARM) || \
+#if defined(JS_CODEGEN_X64) || defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) || \
     defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64)
             regs.take(HeapReg);
-#elif defined(JS_CODEGEN_ARM64)
-            regs.take(HeapReg);
-            regs.take(HeapLenReg);
 #endif
             regs.take(FramePointer);
     }
 };
 
 static inline AnyRegister
 GetFixedRegister(const LDefinition* def, const LUse* use)
 {
--- a/js/src/jit/Snapshots.cpp
+++ b/js/src/jit/Snapshots.cpp
@@ -259,17 +259,17 @@ RValueAllocation::layoutFromMode(Mode mo
 
         if (mode >= TYPED_REG_MIN && mode <= TYPED_REG_MAX)
             return regLayout;
         if (mode >= TYPED_STACK_MIN && mode <= TYPED_STACK_MAX)
             return stackLayout;
       }
     }
 
-    MOZ_CRASH("Wrong mode type?");
+    MOZ_CRASH_UNSAFE_PRINTF("Unexpected mode: 0x%x", mode);
 }
 
 // Pad serialized RValueAllocations by a multiple of X bytes in the allocation
 // buffer.  By padding serialized value allocations, we are building an
 // indexable table of elements of X bytes, and thus we can safely divide any
 // offset within the buffer by X to obtain an index.
 //
 // By padding, we are loosing space within the allocation buffer, but we
--- a/js/src/jit/Snapshots.h
+++ b/js/src/jit/Snapshots.h
@@ -298,16 +298,19 @@ class RValueAllocation
     }
 
     void writeHeader(CompactBufferWriter& writer, JSValueType type, uint32_t regCode) const;
   public:
     static RValueAllocation read(CompactBufferReader& reader);
     void write(CompactBufferWriter& writer) const;
 
   public:
+    bool valid() const {
+        return mode_ != INVALID;
+    }
     Mode mode() const {
         return Mode(mode_ & MODE_BITS_MASK);
     }
     bool needSideEffect() const {
         return mode_ & RECOVER_SIDE_EFFECT_MASK;
     }
 
     uint32_t index() const {
--- a/js/src/jit/arm64/Architecture-arm64.cpp
+++ b/js/src/jit/arm64/Architecture-arm64.cpp
@@ -66,10 +66,16 @@ FloatRegister::GetPushSizeInBytes(const 
 
 uint32_t
 FloatRegister::getRegisterDumpOffsetInBytes()
 {
     // Although registers are 128-bits wide, only the first 64 need saving per ABI.
     return encoding() * sizeof(double);
 }
 
+uint32_t
+GetARM64Flags()
+{
+    return 0;
+}
+
 } // namespace jit
 } // namespace js
--- a/js/src/jit/arm64/Architecture-arm64.h
+++ b/js/src/jit/arm64/Architecture-arm64.h
@@ -486,12 +486,14 @@ hasUnaliasedDouble()
 // ARM prior to ARMv8 also has doubles that alias multiple floats.
 // Again, ARMv8 is in the clear.
 inline bool
 hasMultiAlias()
 {
     return false;
 }
 
+uint32_t GetARM64Flags();
+
 } // namespace jit
 } // namespace js
 
 #endif // jit_arm64_Architecture_arm64_h
--- a/js/src/jit/arm64/Assembler-arm64.h
+++ b/js/src/jit/arm64/Assembler-arm64.h
@@ -82,17 +82,16 @@ static constexpr Register IntArgReg0 { R
 static constexpr Register IntArgReg1 { Registers::x1 };
 static constexpr Register IntArgReg2 { Registers::x2 };
 static constexpr Register IntArgReg3 { Registers::x3 };
 static constexpr Register IntArgReg4 { Registers::x4 };
 static constexpr Register IntArgReg5 { Registers::x5 };
 static constexpr Register IntArgReg6 { Registers::x6 };
 static constexpr Register IntArgReg7 { Registers::x7 };
 static constexpr Register HeapReg { Registers::x21 };
-static constexpr Register HeapLenReg { Registers::x22 };
 
 // Define unsized Registers.
 #define DEFINE_UNSIZED_REGISTERS(N)  \
 static constexpr Register r##N { Registers::x##N };
 REGISTER_CODE_LIST(DEFINE_UNSIZED_REGISTERS)
 #undef DEFINE_UNSIZED_REGISTERS
 static constexpr Register ip0 { Registers::x16 };
 static constexpr Register ip1 { Registers::x16 };
new file mode 100644
--- /dev/null
+++ b/js/src/jit/arm64/Disassembler-arm64.cpp
@@ -0,0 +1,25 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+ * vim: set ts=8 sts=4 et sw=4 tw=99:
+ *
+ * Copyright 2018 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "jit/Disassembler.h"
+
+MOZ_COLD uint8_t*
+js::jit::Disassembler::DisassembleHeapAccess(uint8_t*, js::jit::Disassembler::HeapAccess*)
+{
+    MOZ_CRASH("NYI - asm.js not supported yet on this platform");
+}
--- a/js/src/jit/arm64/MacroAssembler-arm64.h
+++ b/js/src/jit/arm64/MacroAssembler-arm64.h
@@ -2022,39 +2022,16 @@ class MacroAssemblerCompat : public vixl
         const ARMRegister scratch32 = temps.AcquireW();
         MOZ_ASSERT(scratch32.asUnsized() != addr.base);
 
         load32(addr, scratch32.asUnsized());
         Add(scratch32, scratch32, Operand(1));
         store32(scratch32.asUnsized(), addr);
     }
 
-    void BoundsCheck(Register ptrReg, Label* onFail, vixl::CPURegister zeroMe = vixl::NoReg) {
-        // use tst rather than Tst to *ensure* that a single instrution is generated.
-        Cmp(ARMRegister(ptrReg, 32), ARMRegister(HeapLenReg, 32));
-        if (!zeroMe.IsNone()) {
-            if (zeroMe.IsRegister()) {
-                Csel(ARMRegister(zeroMe),
-                     ARMRegister(zeroMe),
-                     Operand(zeroMe.Is32Bits() ? vixl::wzr : vixl::xzr),
-                     Assembler::Below);
-            } else if (zeroMe.Is32Bits()) {
-                vixl::UseScratchRegisterScope temps(this);
-                const ARMFPRegister scratchFloat = temps.AcquireS();
-                Fmov(scratchFloat, JS::GenericNaN());
-                Fcsel(ARMFPRegister(zeroMe), ARMFPRegister(zeroMe), scratchFloat, Assembler::Below);
-            } else {
-                vixl::UseScratchRegisterScope temps(this);
-                const ARMFPRegister scratchDouble = temps.AcquireD();
-                Fmov(scratchDouble, JS::GenericNaN());
-                Fcsel(ARMFPRegister(zeroMe), ARMFPRegister(zeroMe), scratchDouble, Assembler::Below);
-            }
-        }
-        B(onFail, Assembler::AboveOrEqual);
-    }
     void breakpoint();
 
     // Emits a simulator directive to save the current sp on an internal stack.
     void simulatorMarkSP() {
 #ifdef JS_SIMULATOR_ARM64
         svc(vixl::kMarkStackPointer);
 #endif
     }
--- a/js/src/jit/shared/CodeGenerator-shared.cpp
+++ b/js/src/jit/shared/CodeGenerator-shared.cpp
@@ -447,23 +447,25 @@ CodeGeneratorShared::encodeAllocation(LS
             masm.propagateOOM(graph.addConstantToPool(constant->toJSValue(), &index));
             alloc = RValueAllocation::ConstantPool(index);
             break;
         }
 
         JSValueType valueType =
             (type == MIRType::ObjectOrNull) ? JSVAL_TYPE_OBJECT : ValueTypeFromMIRType(type);
 
-        MOZ_ASSERT(payload->isMemory() || payload->isRegister());
+        MOZ_DIAGNOSTIC_ASSERT(payload->isMemory() || payload->isRegister());
         if (payload->isMemory())
             alloc = RValueAllocation::Typed(valueType, ToStackIndex(payload));
         else if (payload->isGeneralReg())
             alloc = RValueAllocation::Typed(valueType, ToRegister(payload));
         else if (payload->isFloatReg())
             alloc = RValueAllocation::Double(ToFloatRegister(payload));
+        else
+            MOZ_CRASH("Unexpected payload type.");
         break;
       }
       case MIRType::Float32:
       case MIRType::Int8x16:
       case MIRType::Int16x8:
       case MIRType::Int32x4:
       case MIRType::Float32x4:
       case MIRType::Bool8x16:
@@ -536,16 +538,17 @@ CodeGeneratorShared::encodeAllocation(LS
         if (payload->isRegister())
             alloc = RValueAllocation::Untyped(ToRegister(payload));
         else
             alloc = RValueAllocation::Untyped(ToStackIndex(payload));
 #endif
         break;
       }
     }
+    MOZ_DIAGNOSTIC_ASSERT(alloc.valid());
 
     // This set an extra bit as part of the RValueAllocation, such that we know
     // that recover instruction have to be executed without wrapping the
     // instruction in a no-op recover instruction.
     if (mir->isIncompleteObject())
         alloc.setNeedSideEffect();
 
     masm.propagateOOM(snapshots_.add(alloc));
--- a/js/src/jit/shared/LIR-shared.h
+++ b/js/src/jit/shared/LIR-shared.h
@@ -6934,17 +6934,17 @@ class LGetPropertyPolymorphicV : public 
         setOperand(0, obj);
     }
     const LAllocation* obj() {
         return getOperand(0);
     }
     const MGetPropertyPolymorphic* mir() const {
         return mir_->toGetPropertyPolymorphic();
     }
-    virtual const char* extraName() const {
+    const char* extraName() const {
         return PropertyNameToExtraName(mir()->name());
     }
 };
 
 // Emit code to load a typed value from an object's slots if its shape matches
 // one of the shapes observed by the baseline IC, else bails out.
 class LGetPropertyPolymorphicT : public LInstructionHelper<1, 1, 1>
 {
@@ -6959,17 +6959,17 @@ class LGetPropertyPolymorphicT : public 
         return getOperand(0);
     }
     const LDefinition* temp() {
         return getTemp(0);
     }
     const MGetPropertyPolymorphic* mir() const {
         return mir_->toGetPropertyPolymorphic();
     }
-    virtual const char* extraName() const {
+    const char* extraName() const {
         return PropertyNameToExtraName(mir()->name());
     }
 };
 
 // Emit code to store a boxed value to an object's slots if its shape matches
 // one of the shapes observed by the baseline IC, else bails out.
 class LSetPropertyPolymorphicV : public LInstructionHelper<0, 1 + BOX_PIECES, 1>
 {
--- a/js/src/jit/x86-shared/Assembler-x86-shared.h
+++ b/js/src/jit/x86-shared/Assembler-x86-shared.h
@@ -3680,19 +3680,19 @@ class AssemblerX86Shared : public Assemb
 
     static void PatchWrite_Imm32(CodeLocationLabel dataLabel, Imm32 toWrite) {
         *((int32_t*) dataLabel.raw() - 1) = toWrite.value;
     }
 
     static void PatchDataWithValueCheck(CodeLocationLabel data, PatchedImmPtr newData,
                                         PatchedImmPtr expectedData) {
         // The pointer given is a pointer to *after* the data.
-        uintptr_t* ptr = ((uintptr_t*) data.raw()) - 1;
-        MOZ_ASSERT(*ptr == (uintptr_t)expectedData.value);
-        *ptr = (uintptr_t)newData.value;
+        uint8_t* ptr = data.raw() - sizeof(uintptr_t);
+        MOZ_ASSERT(mozilla::LittleEndian::readUintptr(ptr) == uintptr_t(expectedData.value));
+        mozilla::LittleEndian::writeUintptr(ptr, uintptr_t(newData.value));
     }
     static void PatchDataWithValueCheck(CodeLocationLabel data, ImmPtr newData, ImmPtr expectedData) {
         PatchDataWithValueCheck(data, PatchedImmPtr(newData.value), PatchedImmPtr(expectedData.value));
     }
 
     static uint32_t NopSize() {
         return 1;
     }
--- a/js/src/moz.build
+++ b/js/src/moz.build
@@ -514,16 +514,17 @@ elif CONFIG['JS_CODEGEN_ARM']:
         ]
 elif CONFIG['JS_CODEGEN_ARM64']:
     UNIFIED_SOURCES += [
         'jit/arm64/Architecture-arm64.cpp',
         'jit/arm64/Assembler-arm64.cpp',
         'jit/arm64/Bailouts-arm64.cpp',
         'jit/arm64/BaselineIC-arm64.cpp',
         'jit/arm64/CodeGenerator-arm64.cpp',
+        'jit/arm64/Disassembler-arm64.cpp',
         'jit/arm64/Lowering-arm64.cpp',
         'jit/arm64/MacroAssembler-arm64.cpp',
         'jit/arm64/MoveEmitter-arm64.cpp',
         'jit/arm64/SharedIC-arm64.cpp',
         'jit/arm64/Trampoline-arm64.cpp',
         'jit/arm64/vixl/Assembler-vixl.cpp',
         'jit/arm64/vixl/Cpu-vixl.cpp',
         'jit/arm64/vixl/Decoder-vixl.cpp',
@@ -647,21 +648,23 @@ DIRS += [
 FINAL_LIBRARY = 'js'
 
 if CONFIG['NIGHTLY_BUILD']:
     DEFINES['ENABLE_BINARYDATA'] = True
     DEFINES['ENABLE_SIMD'] = True
     DEFINES['ENABLE_WASM_SATURATING_TRUNC_OPS'] = True
     DEFINES['ENABLE_WASM_SIGNEXTEND_OPS'] = True
     DEFINES['ENABLE_WASM_THREAD_OPS'] = True
-    # An experiment we want to run on Nightly: Can we change the JS
-    # representation of an exported global from the global's value
-    # to an instance of WebAssembly.Global without breaking existing
-    # wasm content?
-    DEFINES['ENABLE_WASM_GLOBAL'] = True
+
+# An experiment we want to run on Nightly and early Beta: Can we change the JS
+# representation of an exported global from the global's value to an instance
+# of WebAssembly.Global without breaking existing wasm content?
+#
+# Additionally guarded by EARLY_BETA_OR_EARLIER in the code.
+DEFINES['ENABLE_WASM_GLOBAL'] = True
 
 if CONFIG['JS_BUILD_BINAST']:
     # Using SOURCES as UNIFIED_SOURCES causes mysterious bugs on 32-bit platforms.
     # These parts of BinAST are designed only to test evolutions of the
     # specification.
     SOURCES += ['frontend/BinTokenReaderTester.cpp']
     # These parts of BinAST should eventually move to release.
     SOURCES += [
@@ -674,17 +677,17 @@ if CONFIG['JS_BUILD_BINAST']:
         SOURCES['frontend/BinSource.cpp'].flags += ['-fsanitize-coverage=trace-pc-guard']
         SOURCES['frontend/BinToken.cpp'].flags += ['-fsanitize-coverage=trace-pc-guard']
         SOURCES['frontend/BinTokenReaderTester.cpp'].flags += ['-fsanitize-coverage=trace-pc-guard']
 
 # Wasm code should use WASM_HUGE_MEMORY instead of JS_CODEGEN_X64
 # so that it is easy to use the huge-mapping optimization for other
 # 64-bit platforms in the future.
 
-if CONFIG['JS_CODEGEN_X64']:
+if CONFIG['JS_CODEGEN_X64'] or CONFIG['JS_CODEGEN_ARM64']:
     DEFINES['WASM_HUGE_MEMORY'] = True
 
 if CONFIG['MOZ_DEBUG'] or CONFIG['NIGHTLY_BUILD']:
     DEFINES['JS_CACHEIR_SPEW'] = True
 
 # Also set in shell/moz.build
 DEFINES['ENABLE_SHARED_ARRAY_BUFFER'] = True
 
--- a/js/src/old-configure.in
+++ b/js/src/old-configure.in
@@ -1546,16 +1546,17 @@ AC_DEFINE_UNQUOTED(JS_DEFAULT_JITREPORT_
 dnl ========================================================
 dnl =
 dnl = Misc. Options
 dnl =
 dnl ========================================================
 MOZ_ARG_HEADER(Misc. Options)
 
 if test -z "$SKIP_COMPILER_CHECKS"; then
+
 dnl ========================================================
 dnl =
 dnl = Compiler Options
 dnl =
 dnl ========================================================
 MOZ_ARG_HEADER(Compiler Options)
 
 dnl ========================================================
@@ -1820,16 +1821,29 @@ AC_CHECK_FUNCS(posix_fadvise posix_fallo
 dnl Set various defines and substitutions
 dnl ========================================================
 
 AC_SUBST(MOZ_DEV_EDITION)
 if test -n "$MOZ_DEV_EDITION"; then
     AC_DEFINE(MOZ_DEV_EDITION)
 fi
 
+# Allow influencing configure with a defines.sh script.
+. "${srcdir}/build/defines.sh"
+
+# If we're not building a release build, define EARLY_BETA_OR_EARLIER if it is
+# set in defines.sh
+if test "$BUILDING_RELEASE"; then
+  # Override value in defines.sh, if any
+  EARLY_BETA_OR_EARLIER=
+elif test "$EARLY_BETA_OR_EARLIER"; then
+  AC_DEFINE(EARLY_BETA_OR_EARLIER)
+fi
+AC_SUBST(EARLY_BETA_OR_EARLIER)
+
 dnl ========================================================
 dnl JavaScript shell
 dnl ========================================================
 
 MOZ_CHECK_ALLOCATOR
 
 AC_CHECK_FUNCS(localeconv)
 
--- a/js/src/vm/JSScript-inl.h
+++ b/js/src/vm/JSScript-inl.h
@@ -106,31 +106,37 @@ JSScript::ensureNonLazyCanonicalFunction
     JSFunction* fun = function();
     if (fun && fun->isInterpretedLazy())
         functionDelazifying();
 }
 
 inline JSFunction*
 JSScript::getFunction(size_t index)
 {
-    JSFunction* fun = &getObject(index)->as<JSFunction>();
+    JSObject* obj = getObject(index);
+    MOZ_RELEASE_ASSERT(obj->is<JSFunction>(), "Script object is not JSFunction");
+    JSFunction* fun = &obj->as<JSFunction>();
     MOZ_ASSERT_IF(fun->isNative(), IsAsmJSModuleNative(fun->native()));
     return fun;
 }
 
 inline js::RegExpObject*
 JSScript::getRegExp(size_t index)
 {
-    return &getObject(index)->as<js::RegExpObject>();
+    JSObject* obj = getObject(index);
+    MOZ_RELEASE_ASSERT(obj->is<js::RegExpObject>(), "Script object is not RegExpObject");
+    return &obj->as<js::RegExpObject>();
 }
 
 inline js::RegExpObject*
 JSScript::getRegExp(jsbytecode* pc)
 {
-    return &getObject(pc)->as<js::RegExpObject>();
+    JSObject* obj = getObject(pc);
+    MOZ_RELEASE_ASSERT(obj->is<js::RegExpObject>(), "Script object is not RegExpObject");
+    return &obj->as<js::RegExpObject>();
 }
 
 inline js::GlobalObject&
 JSScript::global() const
 {
     /*
      * A JSScript always marks its compartment's global (via bindings) so we
      * can assert that maybeGlobal is non-null here.
--- a/js/src/vm/StructuredClone.cpp
+++ b/js/src/vm/StructuredClone.cpp
@@ -2370,31 +2370,32 @@ JSStructuredCloneReader::startRead(Mutab
 bool
 JSStructuredCloneReader::readHeader()
 {
     uint32_t tag, data;
     if (!in.getPair(&tag, &data))
         return in.reportTruncated();
 
     if (tag != SCTAG_HEADER) {
-        // Old structured clone buffer. We must have read it from disk or
-        // somewhere, so we can assume it's scope-compatible.
+        // Old structured clone buffer. We must have read it from disk.
+        storedScope = JS::StructuredCloneScope::DifferentProcess;
         return true;
     }
 
     MOZ_ALWAYS_TRUE(in.readPair(&tag, &data));
+    storedScope = JS::StructuredCloneScope(data);
+
     if (data != uint32_t(JS::StructuredCloneScope::SameProcessSameThread) &&
         data != uint32_t(JS::StructuredCloneScope::SameProcessDifferentThread) &&
         data != uint32_t(JS::StructuredCloneScope::DifferentProcess))
     {
         JS_ReportErrorNumberASCII(context(), GetErrorMessage, nullptr, JSMSG_SC_BAD_SERIALIZED_DATA,
                                   "invalid structured clone scope");
         return false;
     }
-    storedScope = JS::StructuredCloneScope(data);
     if (storedScope < allowedScope) {
         JS_ReportErrorNumberASCII(context(), GetErrorMessage, nullptr, JSMSG_SC_BAD_SERIALIZED_DATA,
                                   "incompatible structured clone scope");
         return false;
     }
 
     return true;
 }
--- a/js/src/wasm/WasmJS.cpp
+++ b/js/src/wasm/WasmJS.cpp
@@ -248,17 +248,17 @@ GetImports(JSContext* cx,
             break;
 
           case DefinitionKind::Global:
             Val val;
             const GlobalDesc& global = globals[globalIndex++];
             MOZ_ASSERT(global.importIndex() == globalIndex - 1);
             MOZ_ASSERT(!global.isMutable());
 
-#ifdef ENABLE_WASM_GLOBAL
+#if defined(ENABLE_WASM_GLOBAL) && defined(EARLY_BETA_OR_EARLIER)
             if (v.isObject() && v.toObject().is<WasmGlobalObject>())
                 v.set(v.toObject().as<WasmGlobalObject>().value());
 #endif
 
             if (global.type() == ValType::I64) {
                 JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_WASM_BAD_I64_LINK);
                 return false;
             }
@@ -1930,17 +1930,17 @@ Table&
 WasmTableObject::table() const
 {
     return *(Table*)getReservedSlot(TABLE_SLOT).toPrivate();
 }
 
 // ============================================================================
 // WebAssembly.global class and methods
 
-#ifdef ENABLE_WASM_GLOBAL
+#if defined(ENABLE_WASM_GLOBAL) && defined(EARLY_BETA_OR_EARLIER)
 
 const ClassOps WasmGlobalObject::classOps_ =
 {
     nullptr, /* addProperty */
     nullptr, /* delProperty */
     nullptr, /* enumerate */
     nullptr, /* newEnumerate */
     nullptr, /* resolve */
@@ -2123,17 +2123,17 @@ WasmGlobalObject::isMutable() const
 }
 
 Value
 WasmGlobalObject::value() const
 {
     return getReservedSlot(VALUE_SLOT);
 }
 
-#endif // ENABLE_WASM_GLOBAL
+#endif // ENABLE_WASM_GLOBAL && EARLY_BETA_OR_EARLIER
 
 // ============================================================================
 // WebAssembly class and static methods
 
 static bool
 WebAssembly_toSource(JSContext* cx, unsigned argc, Value* vp)
 {
     CallArgs args = CallArgsFromVp(argc, vp);
@@ -2963,28 +2963,28 @@ js::InitWebAssemblyClass(JSContext* cx, 
     RootedObject wasm(cx, NewObjectWithGivenProto(cx, &WebAssemblyClass, proto, SingletonObject));
     if (!wasm)
         return nullptr;
 
     if (!JS_DefineFunctions(cx, wasm, WebAssembly_static_methods))
         return nullptr;
 
     RootedObject moduleProto(cx), instanceProto(cx), memoryProto(cx), tableProto(cx);
-#ifdef ENABLE_WASM_GLOBAL
+#if defined(ENABLE_WASM_GLOBAL) && defined(EARLY_BETA_OR_EARLIER)
     RootedObject globalProto(cx);
 #endif
     if (!InitConstructor<WasmModuleObject>(cx, wasm, "Module", &moduleProto))
         return nullptr;
     if (!InitConstructor<WasmInstanceObject>(cx, wasm, "Instance", &instanceProto))
         return nullptr;
     if (!InitConstructor<WasmMemoryObject>(cx, wasm, "Memory", &memoryProto))
         return nullptr;
     if (!InitConstructor<WasmTableObject>(cx, wasm, "Table", &tableProto))
         return nullptr;
-#ifdef ENABLE_WASM_GLOBAL
+#if defined(ENABLE_WASM_GLOBAL) && defined(EARLY_BETA_OR_EARLIER)
     if (!InitConstructor<WasmGlobalObject>(cx, wasm, "Global", &globalProto))
         return nullptr;
 #endif
     if (!InitErrorClass(cx, wasm, "CompileError", JSEXN_WASMCOMPILEERROR))
         return nullptr;
     if (!InitErrorClass(cx, wasm, "LinkError", JSEXN_WASMLINKERROR))
         return nullptr;
     if (!InitErrorClass(cx, wasm, "RuntimeError", JSEXN_WASMRUNTIMEERROR))
@@ -2997,16 +2997,16 @@ js::InitWebAssemblyClass(JSContext* cx, 
 
     if (!JS_DefineProperty(cx, global, js_WebAssembly_str, wasm, JSPROP_RESOLVING))
         return nullptr;
 
     global->setPrototype(JSProto_WasmModule, ObjectValue(*moduleProto));
     global->setPrototype(JSProto_WasmInstance, ObjectValue(*instanceProto));
     global->setPrototype(JSProto_WasmMemory, ObjectValue(*memoryProto));
     global->setPrototype(JSProto_WasmTable, ObjectValue(*tableProto));
-#ifdef ENABLE_WASM_GLOBAL
+#if defined(ENABLE_WASM_GLOBAL) && defined(EARLY_BETA_OR_EARLIER)
     global->setPrototype(JSProto_WasmGlobal, ObjectValue(*globalProto));
 #endif
     global->setConstructor(JSProto_WebAssembly, ObjectValue(*wasm));
 
     MOZ_ASSERT(global->isStandardClassResolved(JSProto_WebAssembly));
     return wasm;
 }
--- a/js/src/wasm/WasmJS.h
+++ b/js/src/wasm/WasmJS.h
@@ -280,17 +280,17 @@ class WasmTableObject : public NativeObj
 
     // Note that, after creation, a WasmTableObject's table() is not initialized
     // and must be initialized before use.
 
     static WasmTableObject* create(JSContext* cx, const wasm::Limits& limits);
     wasm::Table& table() const;
 };
 
-#ifdef ENABLE_WASM_GLOBAL
+#if defined(ENABLE_WASM_GLOBAL) && defined(EARLY_BETA_OR_EARLIER)
 
 // The class of WebAssembly.Global.  A WasmGlobalObject holds either the value
 // of an immutable wasm global or the cell of a mutable wasm global.
 
 class WasmGlobalObject : public NativeObject
 {
     static const unsigned TYPE_SLOT = 0;
     static const unsigned MUTABLE_SLOT = 1;
@@ -314,13 +314,13 @@ class WasmGlobalObject : public NativeOb
     static WasmGlobalObject* create(JSContext* cx, wasm::ValType type, bool isMutable,
                                     HandleValue value);
 
     wasm::ValType type() const;
     bool isMutable() const;
     Value value() const;
 };
 
-#endif // ENABLE_WASM_GLOBAL
+#endif // ENABLE_WASM_GLOBAL && EARLY_BETA_OR_EARLIER
 
 } // namespace js
 
 #endif // wasm_js_h
--- a/js/src/wasm/WasmModule.cpp
+++ b/js/src/wasm/WasmModule.cpp
@@ -1011,17 +1011,17 @@ GetGlobalExport(JSContext* cx, const Glo
 
     if (val.type() == ValType::I64) {
         JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_WASM_BAD_I64_LINK);
         return false;
     }
 
     ToJSValue(val, jsval);
 
-#ifdef ENABLE_WASM_GLOBAL
+#if defined(ENABLE_WASM_GLOBAL) && defined(EARLY_BETA_OR_EARLIER)
     Rooted<WasmGlobalObject*> go(cx, WasmGlobalObject::create(cx, ValType::I32, false, jsval));
     if (!go)
         return false;
     jsval.setObject(*go);
 #endif
 
     return true;
 }
--- a/js/src/wasm/WasmSignalHandlers.cpp
+++ b/js/src/wasm/WasmSignalHandlers.cpp
@@ -620,16 +620,17 @@ StoreValueFromGPReg(SharedMem<void*> add
 
 MOZ_COLD static void
 StoreValueFromGPImm(SharedMem<void*> addr, size_t size, int32_t imm)
 {
     MOZ_RELEASE_ASSERT(size <= sizeof(imm));
     AtomicOperations::memcpySafeWhenRacy(addr, static_cast<void*>(&imm), size);
 }
 
+#if defined(JS_CODEGEN_X64)
 # if !defined(XP_DARWIN)
 MOZ_COLD static void*
 AddressOfFPRegisterSlot(CONTEXT* context, FloatRegisters::Encoding encoding)
 {
     switch (encoding) {
       case X86Encoding::xmm0:  return &XMM_sig(context, 0);
       case X86Encoding::xmm1:  return &XMM_sig(context, 1);
       case X86Encoding::xmm2:  return &XMM_sig(context, 2);
@@ -721,16 +722,29 @@ AddressOfGPRegisterSlot(EMULATOR_CONTEXT
       case X86Encoding::r13: return &context->thread.__r13;
       case X86Encoding::r14: return &context->thread.__r14;
       case X86Encoding::r15: return &context->thread.__r15;
       default: break;
     }
     MOZ_CRASH();
 }
 # endif  // !XP_DARWIN
+#elif defined(JS_CODEGEN_ARM64)
+MOZ_COLD static void*
+AddressOfFPRegisterSlot(EMULATOR_CONTEXT* context, FloatRegisters::Encoding encoding)
+{
+    MOZ_CRASH("NYI - asm.js not supported yet on this platform");
+}
+
+MOZ_COLD static void*
+AddressOfGPRegisterSlot(EMULATOR_CONTEXT* context, Registers::Code code)
+{
+    MOZ_CRASH("NYI - asm.js not supported yet on this platform");
+}
+#endif
 
 MOZ_COLD static void
 SetRegisterToCoercedUndefined(EMULATOR_CONTEXT* context, size_t size,
                               const Disassembler::OtherOperand& value)
 {
     if (value.kind() == Disassembler::OtherOperand::FPR)
         SetFPRegToNaN(size, AddressOfFPRegisterSlot(context, value.fpr()));
     else
--- a/js/src/wasm/WasmTypes.cpp
+++ b/js/src/wasm/WasmTypes.cpp
@@ -27,21 +27,28 @@
 
 using namespace js;
 using namespace js::jit;
 using namespace js::wasm;
 
 using mozilla::IsPowerOfTwo;
 using mozilla::MakeEnumeratedRange;
 
-// A sanity check.  We have only tested WASM_HUGE_MEMORY on x64, and only tested
-// x64 with WASM_HUGE_MEMORY.
+// We have only tested x64 with WASM_HUGE_MEMORY.
+
+#if defined(JS_CODEGEN_X64) && !defined(WASM_HUGE_MEMORY)
+#    error "Not an expected configuration"
+#endif
 
-#if defined(WASM_HUGE_MEMORY) != defined(JS_CODEGEN_X64)
-#  error "Not an expected configuration"
+// We have only tested WASM_HUGE_MEMORY on x64 and arm64.
+
+#if defined(WASM_HUGE_MEMORY)
+#  if !(defined(JS_CODEGEN_X64) || defined(JS_CODEGEN_ARM64))
+#    error "Not an expected configuration"
+#  endif
 #endif
 
 // Another sanity check.
 
 static_assert(MaxMemoryInitialPages <= ArrayBufferObject::MaxBufferByteLength / PageSize,
               "Memory sizing constraint");
 
 void
@@ -97,30 +104,32 @@ static uint32_t
 GetCPUID()
 {
     enum Arch {
         X86 = 0x1,
         X64 = 0x2,
         ARM = 0x3,
         MIPS = 0x4,
         MIPS64 = 0x5,
+        ARM64 = 0x6,
         ARCH_BITS = 3
     };
 
 #if defined(JS_CODEGEN_X86)
     MOZ_ASSERT(uint32_t(jit::CPUInfo::GetSSEVersion()) <= (UINT32_MAX >> ARCH_BITS));
     return X86 | (uint32_t(jit::CPUInfo::GetSSEVersion()) << ARCH_BITS);
 #elif defined(JS_CODEGEN_X64)
     MOZ_ASSERT(uint32_t(jit::CPUInfo::GetSSEVersion()) <= (UINT32_MAX >> ARCH_BITS));
     return X64 | (uint32_t(jit::CPUInfo::GetSSEVersion()) << ARCH_BITS);
 #elif defined(JS_CODEGEN_ARM)
     MOZ_ASSERT(jit::GetARMFlags() <= (UINT32_MAX >> ARCH_BITS));
     return ARM | (jit::GetARMFlags() << ARCH_BITS);
 #elif defined(JS_CODEGEN_ARM64)
-    MOZ_CRASH("not enabled");
+    MOZ_ASSERT(jit::GetARM64Flags() <= (UINT32_MAX >> ARCH_BITS));
+    return ARM64 | (jit::GetARM64Flags() << ARCH_BITS);
 #elif defined(JS_CODEGEN_MIPS32)
     MOZ_ASSERT(jit::GetMIPSFlags() <= (UINT32_MAX >> ARCH_BITS));
     return MIPS | (jit::GetMIPSFlags() << ARCH_BITS);
 #elif defined(JS_CODEGEN_MIPS64)
     MOZ_ASSERT(jit::GetMIPSFlags() <= (UINT32_MAX >> ARCH_BITS));
     return MIPS64 | (jit::GetMIPSFlags() << ARCH_BITS);
 #elif defined(JS_CODEGEN_NONE)
     return 0;
--- a/js/xpconnect/src/xpcpublic.h
+++ b/js/xpconnect/src/xpcpublic.h
@@ -672,20 +672,26 @@ AreNonLocalConnectionsDisabled()
         }
     }
     return disabledForTest;
 }
 
 inline bool
 IsInAutomation()
 {
-    const char* prefName =
-      "security.turn_off_all_security_so_that_viruses_can_take_over_this_computer";
-    return mozilla::Preferences::GetBool(prefName) &&
-        AreNonLocalConnectionsDisabled();
+    static bool sAutomationPrefIsSet;
+    static bool sPrefCacheAdded = false;
+    if (!sPrefCacheAdded) {
+        mozilla::Preferences::AddBoolVarCache(
+          &sAutomationPrefIsSet,
+          "security.turn_off_all_security_so_that_viruses_can_take_over_this_computer",
+          false);
+        sPrefCacheAdded = true;
+    }
+    return sAutomationPrefIsSet && AreNonLocalConnectionsDisabled();
 }
 
 void
 CreateCooperativeContext();
 
 void
 DestroyCooperativeContext();
 
--- a/layout/base/RestyleManager.cpp
+++ b/layout/base/RestyleManager.cpp
@@ -202,17 +202,17 @@ WhitespaceOnly(const CharT* aBuffer, siz
 }
 
 template<typename CharT>
 bool
 WhitespaceOnlyChangedOnAppend(const CharT* aBuffer,
                               size_t aOldLength,
                               size_t aNewLength)
 {
-  MOZ_ASSERT(aOldLength < aNewLength);
+  MOZ_ASSERT(aOldLength <= aNewLength);
   if (!WhitespaceOnly(aBuffer, aOldLength)) {
     // The old text was already not whitespace-only.
     return false;
   }
 
   return !WhitespaceOnly(aBuffer + aOldLength, aNewLength - aOldLength);
 }
 
new file mode 100644
--- /dev/null
+++ b/layout/base/crashtests/1442506.html
@@ -0,0 +1,10 @@
+<script>
+function go() {
+  var b = window.getSelection();
+  var c = document.getSelection();
+  b.setBaseAndExtent(document.getElementById("a"), 0, document.body.firstChild, 1);
+  c.deleteFromDocument();
+}
+</script>
+<body onload=go()>
+<p id="a">
--- a/layout/base/crashtests/crashtests.list
+++ b/layout/base/crashtests/crashtests.list
@@ -520,8 +520,9 @@ load 1420533.html
 load 1425959.html
 load 1425893.html
 load 1428353.html
 pref(dom.webcomponents.shadowdom.enabled,true) load 1429088.html
 load 1429961.html
 load 1435015.html
 load 1429962.html
 pref(dom.webcomponents.shadowdom.enabled,true) load 1439016.html
+load 1442506.html
--- a/layout/style/nsCSSValue.cpp
+++ b/layout/style/nsCSSValue.cpp
@@ -2906,17 +2906,17 @@ const nsString&
 css::URLValueData::GetUTF16String() const
 {
   MOZ_ASSERT(NS_IsMainThread());
 
   if (mUsingRustString) {
     nsDependentCSubstring rust = GetRustString();
     nsString converted = NS_ConvertUTF8toUTF16(rust);
     Servo_ReleaseArcStringData(&mStrings.mRustString);
-    mStrings.mString = converted;
+    new (&mStrings) RustOrGeckoString(converted);
     mUsingRustString = false;
   }
   return mStrings.mString;
 }
 
 nsString
 css::URLValueData::GetUTF16StringForAnyThread() const
 {
--- a/memory/mozalloc/mozalloc.h
+++ b/memory/mozalloc/mozalloc.h
@@ -129,25 +129,22 @@ MOZ_END_EXTERN_C
  * Suppress build warning spam (bug 578546).
  */
 #if _MSC_VER < 1912
 #define MOZALLOC_THROW_IF_HAS_EXCEPTIONS
 #else
 #define MOZALLOC_THROW_IF_HAS_EXCEPTIONS throw()
 #endif
 #define MOZALLOC_THROW_BAD_ALLOC_IF_HAS_EXCEPTIONS
-#elif __cplusplus >= 201103
+#else
 /*
  * C++11 has deprecated exception-specifications in favour of |noexcept|.
  */
 #define MOZALLOC_THROW_IF_HAS_EXCEPTIONS noexcept(true)
 #define MOZALLOC_THROW_BAD_ALLOC_IF_HAS_EXCEPTIONS noexcept(false)
-#else
-#define MOZALLOC_THROW_IF_HAS_EXCEPTIONS throw()
-#define MOZALLOC_THROW_BAD_ALLOC_IF_HAS_EXCEPTIONS throw(std::bad_alloc)
 #endif
 
 #define MOZALLOC_THROW_BAD_ALLOC MOZALLOC_THROW_BAD_ALLOC_IF_HAS_EXCEPTIONS
 
 MOZALLOC_EXPORT_NEW
 #if defined(__GNUC__) && !defined(__clang__) && defined(__SANITIZE_ADDRESS__)
 /* gcc's asan somehow doesn't like always_inline on this function. */
 __attribute__((gnu_inline)) inline
--- a/mfbt/EndianUtils.h
+++ b/mfbt/EndianUtils.h
@@ -4,17 +4,19 @@
  * 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/. */
 
 /* Functions for reading and writing integers in various endiannesses. */
 
 /*
  * The classes LittleEndian and BigEndian expose static methods for
  * reading and writing 16-, 32-, and 64-bit signed and unsigned integers
- * in their respective endianness.  The naming scheme is:
+ * in their respective endianness.  The addresses read from or written
+ * to may be misaligned (although misaligned accesses may incur
+ * architecture-specific performance costs).  The naming scheme is:
  *
  * {Little,Big}Endian::{read,write}{Uint,Int}<bitsize>
  *
  * For instance, LittleEndian::readInt32 will read a 32-bit signed
  * integer from memory in little endian format.  Similarly,
  * BigEndian::writeUint16 will write a 16-bit unsigned integer to memory
  * in big-endian format.
  *
@@ -356,16 +358,22 @@ protected:
   }
 
   /** Read a uint64_t in ThisEndian endianness from |aPtr| and return it. */
   static MOZ_MUST_USE uint64_t readUint64(const void* aPtr)
   {
     return read<uint64_t>(aPtr);
   }
 
+  /** Read a uintptr_t in ThisEndian endianness from |aPtr| and return it. */
+  static MOZ_MUST_USE uintptr_t readUintptr(const void* aPtr)
+  {
+    return read<uintptr_t>(aPtr);
+  }
+
   /** Read an int16_t in ThisEndian endianness from |aPtr| and return it. */
   static MOZ_MUST_USE int16_t readInt16(const void* aPtr)
   {
     return read<int16_t>(aPtr);
   }
 
   /** Read an int32_t in ThisEndian endianness from |aPtr| and return it. */
   static MOZ_MUST_USE int32_t readInt32(const void* aPtr)
@@ -374,16 +382,22 @@ protected:
   }
 
   /** Read an int64_t in ThisEndian endianness from |aPtr| and return it. */
   static MOZ_MUST_USE int64_t readInt64(const void* aPtr)
   {
     return read<int64_t>(aPtr);
   }
 
+  /** Read an intptr_t in ThisEndian endianness from |aPtr| and return it. */
+  static MOZ_MUST_USE intptr_t readIntptr(const void* aPtr)
+  {
+    return read<intptr_t>(aPtr);
+  }
+
   /** Write |aValue| to |aPtr| using ThisEndian endianness. */
   static void writeUint16(void* aPtr, uint16_t aValue)
   {
     write(aPtr, aValue);
   }
 
   /** Write |aValue| to |aPtr| using ThisEndian endianness. */
   static void writeUint32(void* aPtr, uint32_t aValue)
@@ -393,16 +407,22 @@ protected:
 
   /** Write |aValue| to |aPtr| using ThisEndian endianness. */
   static void writeUint64(void* aPtr, uint64_t aValue)
   {
     write(aPtr, aValue);
   }
 
   /** Write |aValue| to |aPtr| using ThisEndian endianness. */
+  static void writeUintptr(void* aPtr, uintptr_t aValue)
+  {
+    write(aPtr, aValue);
+  }
+
+  /** Write |aValue| to |aPtr| using ThisEndian endianness. */
   static void writeInt16(void* aPtr, int16_t aValue)
   {
     write(aPtr, aValue);
   }
 
   /** Write |aValue| to |aPtr| using ThisEndian endianness. */
   static void writeInt32(void* aPtr, int32_t aValue)
   {
@@ -410,16 +430,22 @@ protected:
   }
 
   /** Write |aValue| to |aPtr| using ThisEndian endianness. */
   static void writeInt64(void* aPtr, int64_t aValue)
   {
     write(aPtr, aValue);
   }
 
+  /** Write |aValue| to |aPtr| using ThisEndian endianness. */
+  static void writeIntptr(void* aPtr, intptr_t aValue)
+  {
+    write(aPtr, aValue);
+  }
+
   /*
    * Converts a value of type T to little-endian format.
    *
    * This function is intended for cases where you have data in your
    * native-endian format and you need it to appear in little-endian
    * format for transmission.
    */
   template<typename T>
@@ -625,25 +651,29 @@ class EndianReadWrite : public Endian<Th
 {
 private:
   typedef Endian<ThisEndian> super;
 
 public:
   using super::readUint16;
   using super::readUint32;
   using super::readUint64;
+  using super::readUintptr;
   using super::readInt16;
   using super::readInt32;
   using super::readInt64;
+  using super::readIntptr;
   using super::writeUint16;
   using super::writeUint32;
   using super::writeUint64;
+  using super::writeUintptr;
   using super::writeInt16;
   using super::writeInt32;
   using super::writeInt64;
+  using super::writeIntptr;
 };
 
 } /* namespace detail */
 
 class LittleEndian final : public detail::EndianReadWrite<detail::Little>
 {};
 
 class BigEndian final : public detail::EndianReadWrite<detail::Big>
--- a/mfbt/tests/TestEndian.cpp
+++ b/mfbt/tests/TestEndian.cpp
@@ -320,94 +320,138 @@ TestBulkInPlaceNoSwap(const T (&aBytes)[
                      Reader<T>::readBE);
 #endif
 }
 
 int
 main()
 {
   static const uint8_t unsigned_bytes[16] = {
-    0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8,
-    0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8
+    0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+    0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
   };
   static const int8_t signed_bytes[16] = {
     -0x0f, -0x0e, -0x0d, -0x0c, -0x0b, -0x0a, -0x09, -0x08,
     -0x0f, -0x0e, -0x0d, -0x0c, -0x0b, -0x0a, -0x09, -0x08
   };
   static const uint16_t uint16_values[8] = {
-    0x102, 0x304, 0x506, 0x708, 0x102, 0x304, 0x506, 0x708
+    0x0102, 0x0304, 0x0506, 0x0708, 0x0102, 0x0304, 0x0506, 0x0708
   };
   static const int16_t int16_values[8] = {
     int16_t(0xf1f2), int16_t(0xf3f4), int16_t(0xf5f6), int16_t(0xf7f8),
     int16_t(0xf1f2), int16_t(0xf3f4), int16_t(0xf5f6), int16_t(0xf7f8)
   };
   static const uint32_t uint32_values[4] = {
-    0x1020304, 0x5060708, 0x1020304, 0x5060708
+    0x01020304, 0x05060708, 0x01020304, 0x05060708
   };
   static const int32_t int32_values[4] = {
     int32_t(0xf1f2f3f4), int32_t(0xf5f6f7f8),
     int32_t(0xf1f2f3f4), int32_t(0xf5f6f7f8)
   };
   static const uint64_t uint64_values[2] = {
-    0x102030405060708, 0x102030405060708
+    0x0102030405060708, 0x0102030405060708
   };
   static const int64_t int64_values[2] = {
     int64_t(0xf1f2f3f4f5f6f7f8), int64_t(0xf1f2f3f4f5f6f7f8)
   };
   uint8_t buffer[8];
 
-  MOZ_RELEASE_ASSERT(LittleEndian::readUint16(&unsigned_bytes[0]) == 0x201);
-  MOZ_RELEASE_ASSERT(BigEndian::readUint16(&unsigned_bytes[0]) == 0x102);
+  MOZ_RELEASE_ASSERT(LittleEndian::readUint16(&unsigned_bytes[0]) == 0x0201);
+  MOZ_RELEASE_ASSERT(BigEndian::readUint16(&unsigned_bytes[0]) == 0x0102);
 
   MOZ_RELEASE_ASSERT(
-    LittleEndian::readUint32(&unsigned_bytes[0]) == 0x4030201U);
+    LittleEndian::readUint32(&unsigned_bytes[0]) == 0x04030201U);
   MOZ_RELEASE_ASSERT(
-    BigEndian::readUint32(&unsigned_bytes[0]) == 0x1020304U);
+    BigEndian::readUint32(&unsigned_bytes[0]) == 0x01020304U);
 
   MOZ_RELEASE_ASSERT(
-    LittleEndian::readUint64(&unsigned_bytes[0]) == 0x807060504030201ULL);
+    LittleEndian::readUint64(&unsigned_bytes[0]) == 0x0807060504030201ULL);
   MOZ_RELEASE_ASSERT(
-    BigEndian::readUint64(&unsigned_bytes[0]) == 0x102030405060708ULL);
+    BigEndian::readUint64(&unsigned_bytes[0]) == 0x0102030405060708ULL);
 
-  LittleEndian::writeUint16(&buffer[0], 0x201);
+  if (sizeof(uintptr_t) == 8) {
+    MOZ_RELEASE_ASSERT(
+      LittleEndian::readUintptr(&unsigned_bytes[0]) == 0x0807060504030201ULL);
+    MOZ_RELEASE_ASSERT(
+      BigEndian::readUintptr(&unsigned_bytes[0]) == 0x0102030405060708ULL);
+  } else {
+    MOZ_RELEASE_ASSERT(
+      LittleEndian::readUintptr(&unsigned_bytes[0]) == 0x04030201U);
+    MOZ_RELEASE_ASSERT(
+      BigEndian::readUintptr(&unsigned_bytes[0]) == 0x01020304U);
+  }
+
+  LittleEndian::writeUint16(&buffer[0], 0x0201);
   MOZ_RELEASE_ASSERT(
     memcmp(&unsigned_bytes[0], &buffer[0], sizeof(uint16_t)) == 0);
-  BigEndian::writeUint16(&buffer[0], 0x102);
+  BigEndian::writeUint16(&buffer[0], 0x0102);
   MOZ_RELEASE_ASSERT(
     memcmp(&unsigned_bytes[0], &buffer[0], sizeof(uint16_t)) == 0);
 
-  LittleEndian::writeUint32(&buffer[0], 0x4030201U);
+  LittleEndian::writeUint32(&buffer[0], 0x04030201U);
   MOZ_RELEASE_ASSERT(
     memcmp(&unsigned_bytes[0], &buffer[0], sizeof(uint32_t)) == 0);
-  BigEndian::writeUint32(&buffer[0], 0x1020304U);
+  BigEndian::writeUint32(&buffer[0], 0x01020304U);
   MOZ_RELEASE_ASSERT(
     memcmp(&unsigned_bytes[0], &buffer[0], sizeof(uint32_t)) == 0);
 
-  LittleEndian::writeUint64(&buffer[0], 0x807060504030201ULL);
+  LittleEndian::writeUint64(&buffer[0], 0x0807060504030201ULL);
+  MOZ_RELEASE_ASSERT(
+    memcmp(&unsigned_bytes[0], &buffer[0], sizeof(uint64_t)) == 0);
+  BigEndian::writeUint64(&buffer[0], 0x0102030405060708ULL);
   MOZ_RELEASE_ASSERT(
     memcmp(&unsigned_bytes[0], &buffer[0], sizeof(uint64_t)) == 0);
-  BigEndian::writeUint64(&buffer[0], 0x102030405060708ULL);
+
+  memset(&buffer[0], 0xff, sizeof(buffer));
+  LittleEndian::writeUintptr(&buffer[0], uintptr_t(0x0807060504030201ULL));
   MOZ_RELEASE_ASSERT(
-    memcmp(&unsigned_bytes[0], &buffer[0], sizeof(uint64_t)) == 0);
+    memcmp(&unsigned_bytes[0], &buffer[0], sizeof(uintptr_t)) == 0);
+  if (sizeof(uintptr_t) == 4) {
+    MOZ_RELEASE_ASSERT(
+      LittleEndian::readUint32(&buffer[4]) == 0xffffffffU);
+  }
+
+  memset(&buffer[0], 0xff, sizeof(buffer));
+  if (sizeof(uintptr_t) == 8) {
+    BigEndian::writeUintptr(&buffer[0], uintptr_t(0x0102030405060708ULL));
+  } else {
+    BigEndian::writeUintptr(&buffer[0], uintptr_t(0x01020304U));
+    MOZ_RELEASE_ASSERT(
+      LittleEndian::readUint32(&buffer[4]) == 0xffffffffU);
+  }
+  MOZ_RELEASE_ASSERT(
+    memcmp(&unsigned_bytes[0], &buffer[0], sizeof(uintptr_t)) == 0);
 
   MOZ_RELEASE_ASSERT(
     LittleEndian::readInt16(&signed_bytes[0]) == int16_t(0xf2f1));
   MOZ_RELEASE_ASSERT(
     BigEndian::readInt16(&signed_bytes[0]) == int16_t(0xf1f2));
 
   MOZ_RELEASE_ASSERT(
     LittleEndian::readInt32(&signed_bytes[0]) == int32_t(0xf4f3f2f1));
   MOZ_RELEASE_ASSERT(
     BigEndian::readInt32(&signed_bytes[0]) == int32_t(0xf1f2f3f4));
 
   MOZ_RELEASE_ASSERT(
     LittleEndian::readInt64(&signed_bytes[0]) == int64_t(0xf8f7f6f5f4f3f2f1LL));
   MOZ_RELEASE_ASSERT(
     BigEndian::readInt64(&signed_bytes[0]) == int64_t(0xf1f2f3f4f5f6f7f8LL));
 
+  if (sizeof(uintptr_t) == 8) {
+    MOZ_RELEASE_ASSERT(
+      LittleEndian::readIntptr(&signed_bytes[0]) == intptr_t(0xf8f7f6f5f4f3f2f1LL));
+    MOZ_RELEASE_ASSERT(
+      BigEndian::readIntptr(&signed_bytes[0]) == intptr_t(0xf1f2f3f4f5f6f7f8LL));
+  } else {
+    MOZ_RELEASE_ASSERT(
+      LittleEndian::readIntptr(&signed_bytes[0]) == intptr_t(0xf4f3f2f1));
+    MOZ_RELEASE_ASSERT(
+      BigEndian::readIntptr(&signed_bytes[0]) == intptr_t(0xf1f2f3f4));
+  }
+
   LittleEndian::writeInt16(&buffer[0], int16_t(0xf2f1));
   MOZ_RELEASE_ASSERT(
     memcmp(&signed_bytes[0], &buffer[0], sizeof(int16_t)) == 0);
   BigEndian::writeInt16(&buffer[0], int16_t(0xf1f2));
   MOZ_RELEASE_ASSERT(
     memcmp(&signed_bytes[0], &buffer[0], sizeof(int16_t)) == 0);
 
   LittleEndian::writeInt32(&buffer[0], 0xf4f3f2f1);
@@ -419,16 +463,36 @@ main()
 
   LittleEndian::writeInt64(&buffer[0], 0xf8f7f6f5f4f3f2f1LL);
   MOZ_RELEASE_ASSERT(
     memcmp(&signed_bytes[0], &buffer[0], sizeof(int64_t)) == 0);
   BigEndian::writeInt64(&buffer[0], 0xf1f2f3f4f5f6f7f8LL);
   MOZ_RELEASE_ASSERT(
     memcmp(&signed_bytes[0], &buffer[0], sizeof(int64_t)) == 0);
 
+  memset(&buffer[0], 0xff, sizeof(buffer));
+  LittleEndian::writeIntptr(&buffer[0], intptr_t(0xf8f7f6f5f4f3f2f1LL));
+  MOZ_RELEASE_ASSERT(
+    memcmp(&signed_bytes[0], &buffer[0], sizeof(intptr_t)) == 0);
+  if (sizeof(intptr_t) == 4) {
+    MOZ_RELEASE_ASSERT(
+      LittleEndian::readUint32(&buffer[4]) == 0xffffffffU);
+  }
+
+  memset(&buffer[0], 0xff, sizeof(buffer));
+  if (sizeof(intptr_t) == 8) {
+    BigEndian::writeIntptr(&buffer[0], intptr_t(0xf1f2f3f4f5f6f7f8LL));
+  } else {
+    BigEndian::writeIntptr(&buffer[0], intptr_t(0xf1f2f3f4));
+    MOZ_RELEASE_ASSERT(
+      LittleEndian::readUint32(&buffer[4]) == 0xffffffffU);
+  }
+  MOZ_RELEASE_ASSERT(
+    memcmp(&signed_bytes[0], &buffer[0], sizeof(intptr_t)) == 0);
+
   TestSingleSwap(uint16_t(0xf2f1), uint16_t(0xf1f2));
   TestSingleSwap(uint32_t(0xf4f3f2f1), uint32_t(0xf1f2f3f4));
   TestSingleSwap(uint64_t(0xf8f7f6f5f4f3f2f1), uint64_t(0xf1f2f3f4f5f6f7f8));
 
   TestSingleSwap(int16_t(0xf2f1), int16_t(0xf1f2));
   TestSingleSwap(int32_t(0xf4f3f2f1), int32_t(0xf1f2f3f4));
   TestSingleSwap(int64_t(0xf8f7f6f5f4f3f2f1), int64_t(0xf1f2f3f4f5f6f7f8));
 
--- a/modules/libpref/init/all.js
+++ b/modules/libpref/init/all.js
@@ -169,16 +169,20 @@ pref("dom.workers.maxPerDomain", 512);
 pref("dom.serviceWorkers.enabled", false);
 
 // The amount of time (milliseconds) service workers keep running after each event.
 pref("dom.serviceWorkers.idle_timeout", 30000);
 
 // The amount of time (milliseconds) service workers can be kept running using waitUntil promises.
 pref("dom.serviceWorkers.idle_extended_timeout", 300000);
 
+// The amount of time (milliseconds) an update request is delayed when triggered
+// by a service worker that doesn't control any clients.
+pref("dom.serviceWorkers.update_delay", 1000);
+
 // Enable test for 24 hours update, service workers will always treat last update check time is over 24 hours
 pref("dom.serviceWorkers.testUpdateOverOneDay", false);
 
 // Whether nonzero values can be returned from performance.timing.*
 pref("dom.enable_performance", true);
 
 // Whether resource timing will be gathered and returned by performance.GetEntries*
 pref("dom.enable_resource_timing", true);
--- a/security/manager/ssl/StaticHPKPins.h
+++ b/security/manager/ssl/StaticHPKPins.h
@@ -1003,16 +1003,17 @@ static const TransportSecurityPreload kP
   { "googletagmanager.com", true, false, false, -1, &kPinset_google_root_pems },
   { "googletagservices.com", true, false, false, -1, &kPinset_google_root_pems },
   { "googleusercontent.com", true, false, false, -1, &kPinset_google_root_pems },
   { "googlevideo.com", true, false, false, -1, &kPinset_google_root_pems },
   { "googleweblight.com", true, false, false, -1, &kPinset_google_root_pems },
   { "goto.google.com", true, false, false, -1, &kPinset_google_root_pems },
   { "gr.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
   { "groups.google.com", true, false, false, -1, &kPinset_google_root_pems },
+  { "gstatic.cn", true, false, false, -1, &kPinset_google_root_pems },
   { "gstatic.com", true, false, false, -1, &kPinset_google_root_pems },
   { "gvt1.com", true, false, false, -1, &kPinset_google_root_pems },
   { "gvt2.com", true, false, false, -1, &kPinset_google_root_pems },
   { "gvt3.com", true, false, false, -1, &kPinset_google_root_pems },
   { "hangouts.google.com", true, false, false, -1, &kPinset_google_root_pems },
   { "history.google.com", true, false, false, -1, &kPinset_google_root_pems },
   { "hk.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
   { "hn.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
@@ -1153,13 +1154,13 @@ static const TransportSecurityPreload kP
   { "youtu.be", true, false, false, -1, &kPinset_google_root_pems },
   { "youtube-nocookie.com", true, false, false, -1, &kPinset_google_root_pems },
   { "youtube.com", true, false, false, -1, &kPinset_google_root_pems },
   { "ytimg.com", true, false, false, -1, &kPinset_google_root_pems },
   { "za.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
   { "zh.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
 };
 
-// Pinning Preload List Length = 484;
+// Pinning Preload List Length = 485;
 
 static const int32_t kUnknownId = -1;
 
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1528401564528000);
+static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1528491279168000);
--- a/security/manager/ssl/nsSTSPreloadList.errors
+++ b/security/manager/ssl/nsSTSPreloadList.errors
@@ -88,31 +88,32 @@ africanimpact.com: could not connect to 
 afterstack.net: could not connect to host
 agingstop.net: could not connect to host
 agoravm.tk: could not connect to host
 agowa.eu: could not connect to host
 agowa338.de: could not connect to host
 ahelos.tk: could not connect to host
 ahlz.sk: could not connect to host
 aiicy.org: could not connect to host
+aiida.se: could not connect to host
 aikenorganics.com: could not connect to host
 aim-consultants.com: could not connect to host
 ajetaci.cz: could not connect to host
 akiba-server.info: could not connect to host
 akita-stream.com: could not connect to host
-akoch.net: could not connect to host
 akoww.de: could not connect to host
 akul.co.in: could not connect to host
 al-f.net: could not connect to host
 alasta.info: could not connect to host
 alauda-home.de: could not connect to host
 albertify.xyz: could not connect to host
 alcatraz.online: could not connect to host
 alexandernorth.ch: could not connect to host
 alexandros.io: could not connect to host
+alexberts.ch: could not connect to host
 alexey-shamara.ru: could not connect to host
 alexmol.tk: could not connect to host
 alexperry.io: could not connect to host
 alignrs.com: could not connect to host
 alilialili.ga: could not connect to host
 alldm.ru: could not connect to host
 alloutatl.com: could not connect to host
 allscammers.exposed: could not connect to host
@@ -120,17 +121,16 @@ allthingsfpl.com: could not connect to h
 alocato.com: could not connect to host
 alohapartyevents.co.uk: could not connect to host
 alphabrock.cn: could not connect to host
 altahrim.net: could not connect to host
 amdouglas.uk: could not connect to host
 ameho.me: could not connect to host
 americandistribuidora.com: could not connect to host
 amilum.org: could not connect to host
-ams.co.rs: could not connect to host
 amua.fr: could not connect to host
 amunoz.org: could not connect to host
 analyzemyfriends.com: could not connect to host
 anastasia-shamara.ru: could not connect to host
 andiplusben.com: could not connect to host
 andreamcnett.com: could not connect to host
 andreas-kluge.eu: could not connect to host
 andreaskluge.eu: could not connect to host
@@ -139,48 +139,43 @@ andrewdaws.co: could not connect to host
 andrewdaws.info: could not connect to host
 andrewdaws.me: could not connect to host
 andrewdaws.tv: could not connect to host
 andrewrdaws.com: could not connect to host
 andronika.net: could not connect to host
 anecuni-club.com: could not connect to host
 anecuni-rec.com: could not connect to host
 angrydragonproductions.com: could not connect to host
-anitaalbersen.nl: could not connect to host
 anitube-nocookie.ch: could not connect to host
 annetaan.fi: could not connect to host
 anshumanbiswas.com: could not connect to host
 antimatiere.space: could not connect to host
 anyways.at: could not connect to host
 aojiao.org: could not connect to host
 apkoyunlar.club: could not connect to host
-apn-einstellungen.de: could not connect to host
 appdrinks.com: could not connect to host
 apple.ax: could not connect to host
 apponline.com: could not connect to host
 apps4all.sytes.net: could not connect to host
 appzoojoo.be: could not connect to host
 aquaundine.net: could not connect to host
-ardor.noip.me: could not connect to host
 area3.org: could not connect to host
 arent.kz: could not connect to host
 arenzanaphotography.com: could not connect to host
 argh.io: could not connect to host
 arknodejs.com: could not connect to host
 arksan.com.tr: could not connect to host
 armenians.online: could not connect to host
 arresttracker.com: could not connect to host
 arsenal.ru: could not connect to host
 artea.ga: could not connect to host
 articaexports.com: could not connect to host
 artisense.de: could not connect to host
 artisticedgegranite.net: could not connect to host
 artofeyes.nl: could not connect to host
-as200753.com: could not connect to host
-as200753.net: could not connect to host
 ashleyadum.com: could not connect to host
 askmagicconch.com: could not connect to host
 asphaltfruehling.de: could not connect to host
 asphyxia.su: could not connect to host
 aspisdata.com: could not connect to host
 asral7.com: could not connect to host
 assdecoeur.org: could not connect to host
 assindia.nl: could not connect to host
@@ -188,28 +183,28 @@ asthon.cn: could not connect to host
 astrath.net: could not connect to host
 astrea-voetbal-groningen.nl: could not connect to host
 asuhe.xyz: could not connect to host
 async.be: could not connect to host
 at1.co: could not connect to host
 athi.pl: could not connect to host
 atigerseye.com: could not connect to host
 atlas-5.site: could not connect to host
+atraining.ru: could not connect to host
 aufmerksamkeitsstudie.com: could not connect to host
 ausec.ch: could not connect to host
 austinsutphin.com: could not connect to host
 australiancattle.dog: could not connect to host
 authint.com: could not connect to host
 authland.com: could not connect to host
 authsrv.nl.eu.org: could not connect to host
 autosearch.me: could not connect to host
 autostock.me: could not connect to host
 autostop-occasions.be: could not connect to host
 avdelivers.com: could not connect to host
-avi9526.pp.ua: could not connect to host
 avonlearningcampus.com: could not connect to host
 awan.tech: could not connect to host
 awei.pub: could not connect to host
 awf0.xyz: could not connect to host
 axel-fischer.science: could not connect to host
 b9winner.com: could not connect to host
 babelfisch.eu: could not connect to host
 bacimg.com: could not connect to host
@@ -254,16 +249,17 @@ bestfitnesswatchreview.info: could not c
 besthotsales.com: could not connect to host
 betonmoney.com: could not connect to host
 bey.io: could not connect to host
 bezoomnyville.com: could not connect to host
 bfrailwayclub.cf: could not connect to host
 bianinapiccanovias.com: could not connect to host
 bichonmaltes.com.br: could not connect to host
 bigerbio.com: could not connect to host
+billaud.eu.org: could not connect to host
 binam.center: could not connect to host
 bingcheung.com: could not connect to host
 binimo.com: could not connect to host
 biou.me: could not connect to host
 bip.gov.sa: could not connect to host
 biscuits-rec.com: could not connect to host
 biscuits-shop.com: could not connect to host
 biswas.me: could not connect to host
@@ -292,33 +288,32 @@ blueblou.com: could not connect to host
 blumen-garage.de: could not connect to host
 bm-i.ch: could not connect to host
 bolivarfm.com.ve: could not connect to host
 bomberus.de: could not connect to host
 bombsquad.studio: could not connect to host
 bonesserver.com: could not connect to host
 bonobo.cz: could not connect to host
 bookreport.ga: could not connect to host
+booter.es: could not connect to host
 borchers-media.de: could not connect to host
 borisbesemer.com: could not connect to host
-bosabosa.org: could not connect to host
-botserver.de: could not connect to host
 bouah.net: could not connect to host
 bouncing-bugs.co.uk: could not connect to host
 boxdevigneron.fr: could not connect to host
 bpadvisors.eu: could not connect to host
 bqcp.net: could not connect to host
+bragaweb.com.br: could not connect to host
 brage.info: could not connect to host
 braintensive.com: could not connect to host
 brandontaylor-black.com: could not connect to host
 bratteng.me: could not connect to host
 bratteng.xyz: could not connect to host
 breathingblanket.com: could not connect to host
 bressier.fr: could not connect to host
-brettabel.com: could not connect to host
 brianmwaters.net: could not connect to host
 brideandgroomdirect.ie: could not connect to host
 brio-ukraine.store: could not connect to host
 broerweb.nl: could not connect to host
 brookframework.org: could not connect to host
 brrr.fr: could not connect to host
 brynnan.nl: could not connect to host
 bsalyzer.com: could not connect to host
@@ -378,32 +373,33 @@ cctld.com: could not connect to host
 cdmon.tech: could not connect to host
 cdnk39.com: could not connect to host
 cee.io: could not connect to host
 cegfw.com: could not connect to host
 celuliteonline.com: could not connect to host
 cencalvia.org: could not connect to host
 centos.pub: could not connect to host
 centrallead.net: could not connect to host
-cfan.space: could not connect to host
 cgtx.us: could not connect to host
 challengeskins.com: could not connect to host
 championnat-romand-cuisiniers-amateurs.ch: could not connect to host
+chancat.blog: could not connect to host
 channellife.asia: could not connect to host
 chaouby.com: could not connect to host
 charmyadesara.com: could not connect to host
-checkmateshoes.com: could not connect to host
 cheesefusion.com: could not connect to host
 chez-janine.de: could not connect to host
 china-line.org: could not connect to host
+chinatrademarkoffice.com: could not connect to host
 chinternet.xyz: could not connect to host
 chloe.re: could not connect to host
 chocolat-suisse.ch: could not connect to host
 chrisebert.net: could not connect to host
 christianhoffmann.info: could not connect to host
+christianpusch.de: could not connect to host
 christiansayswords.com: could not connect to host
 chromaryu.net: could not connect to host
 chziyue.com: could not connect to host
 cipher.land: could not connect to host
 cipherli.st: could not connect to host
 citywalkr.com: could not connect to host
 ciuciucadou.ro: could not connect to host
 cjtkfan.club: could not connect to host
@@ -412,17 +408,16 @@ clashersrepublic.com: could not connect 
 clearchatsandbox.com: could not connect to host
 clearviewwealthprojector.com.au: could not connect to host
 clic-music.com: could not connect to host
 clickclock.cc: could not connect to host
 clintonbloodworth.com: could not connect to host
 cloudberlin.goip.de: could not connect to host
 cloudbleed.info: could not connect to host
 cloudimproved.com: could not connect to host
-cloudimprovedtest.com: could not connect to host
 cloudkit.pro: could not connect to host
 cloudwarez.xyz: could not connect to host
 clownish.co.il: could not connect to host
 clycat.ru: could not connect to host
 cmrss.com: could not connect to host
 cms-weble.jp: could not connect to host
 cmweller.com: could not connect to host
 cnetw.xyz: could not connect to host
@@ -451,33 +446,30 @@ comicrelief.com: could not connect to ho
 communityflow.info: could not connect to host
 complex-organization.com: could not connect to host
 complt.xyz: could not connect to host
 comprehensiveihc.com: could not connect to host
 conception.sk: could not connect to host
 conniesacademy.com: could not connect to host
 conrad.am: could not connect to host
 constructive.men: could not connect to host
-consultorcr.net: could not connect to host
 conve.eu: could not connect to host
-cookicons.co: could not connect to host
 coreapm.com: could not connect to host
 coreapm.org: could not connect to host
 corecdn.org: could not connect to host
 corinnanese.de: could not connect to host
 correct.horse: could not connect to host
 cosmeticosdelivery.com.br: could not connect to host
 cosmiatria.pe: could not connect to host
 cosplayer.com: could not connect to host
 cotta.dk: could not connect to host
 coumoul.fr: could not connect to host
 cpaneltips.com: could not connect to host
 crackslut.eu: could not connect to host
 crashsec.com: could not connect to host
-creativefreedom.ca: could not connect to host
 creato.top: could not connect to host
 crestasantos.com: could not connect to host
 cristianhares.com: could not connect to host
 criticalaim.com: could not connect to host
 crox.co: could not connect to host
 cryptoki.fr: could not connect to host
 cryptolosophy.io: could not connect to host
 cryptoparty.dk: could not connect to host
@@ -489,17 +481,16 @@ csgo77.com: could not connect to host
 csilies.de: could not connect to host
 cspeti.hu: could not connect to host
 cunha.be: could not connect to host
 cuni-cuni-club.com: could not connect to host
 cuni-rec.com: could not connect to host
 cuonic.com: could not connect to host
 curacao-license.com: could not connect to host
 customfilmworks.com: could not connect to host
-cutelariafiveladeouro.com.br: could not connect to host
 cybbh.space: could not connect to host
 cyber-computer.club: could not connect to host
 cyberpeace.nl: could not connect to host
 cyberstatus.de: could not connect to host
 cype.dedyn.io: could not connect to host
 cypherpunk.ws: could not connect to host
 czlx.co: could not connect to host
 d-bood.site: could not connect to host
@@ -528,28 +519,28 @@ dawnson.is: could not connect to host
 dawnsonb.com: could not connect to host
 day-peak.com: could not connect to host
 days.one: could not connect to host
 dbox.ga: could not connect to host
 dcc.cat: could not connect to host
 dcc.moe: could not connect to host
 dden.website: could not connect to host
 dden.xyz: could not connect to host
+ddepot.us: could not connect to host
 de-servers.de: could not connect to host
 deborahmarinelli.eu: could not connect to host
 decoyrouting.com: could not connect to host
 dedietrich-asia.com: could not connect to host
 deepcreampie.com: could not connect to host
 deeps.cat: could not connect to host
 deloittequant.com: could not connect to host
 depedtayo.ph: could not connect to host
 derchris.me: could not connect to host
 derivativeshub.pro: could not connect to host
 dermacarecomplex.com: could not connect to host
-destileria.net.br: could not connect to host
 detecte-fuite.ch: could not connect to host
 detecte.ch: could not connect to host
 detectefuite.ch: could not connect to host
 devdesco.com: could not connect to host
 developersclub.website: could not connect to host
 devh.net: could not connect to host
 devops.moe: could not connect to host
 dhl-smart.ch: could not connect to host
@@ -593,28 +584,28 @@ dmdre.com: could not connect to host
 dnfc.rocks: could not connect to host
 do-it.cz: could not connect to host
 dobrisan.ro: could not connect to host
 doctafit.com: could not connect to host
 does.one: could not connect to host
 doesmycodehavebugs.today: could not connect to host
 dogcratereview.info: could not connect to host
 dojifish.space: could not connect to host
+dokan-e.com: could not connect to host
 dokuboard.com: could not connect to host
 dolphin-hosting.com: could not connect to host
 domengrad.ru: could not connect to host
 domfee.com: could not connect to host
 dongkexue.com: could not connect to host
 doopdidoop.com: could not connect to host
 dopesoft.de: could not connect to host
 dougferris.id.au: could not connect to host
 doyoulyft.com: could not connect to host
 doze-cloud.tech: could not connect to host
 dragonwork.me: could not connect to host
-dranek.com: could not connect to host
 dreamaholic.club: could not connect to host
 dreaming.solutions: could not connect to host
 dreizwosechs.de: could not connect to host
 driving-lessons.co.uk: could not connect to host
 drivinghorror.com: could not connect to host
 drixn.cn: could not connect to host
 drixn.info: could not connect to host
 drixn.net: could not connect to host
@@ -644,51 +635,51 @@ earth-people.org: could not connect to h
 eatfitoutlet.com.br: could not connect to host
 eatry.io: could not connect to host
 ebonyriddle.com: could not connect to host
 ebrowz.com: could not connect to host
 eccux.com: could not connect to host
 ectora.com: could not connect to host
 edgecustomersportal.com: could not connect to host
 educatoys.com.br: could not connect to host
+eductf.org: could not connect to host
 eduif.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 116"  data: no]
 eeb98.com: could not connect to host
 eeetrust.org: could not connect to host
-effdocs.com: could not connect to host
 effectiveosgi.com: could not connect to host
 ehrlichesbier.de: could not connect to host
 ehuber.info: could not connect to host
 einhorn.space: could not connect to host
 einsatzstiefel.info: could not connect to host
 ekobudisantoso.net: could not connect to host
 elbetech.net: could not connect to host
 electricalcontrolpanels.co.uk: could not connect to host
 elektronring.com: could not connect to host
 elenorsmadness.org: could not connect to host
 elevateandprosper.com: could not connect to host
 elitesensual.com.br: could not connect to host
+elnan.do: could not connect to host
 elonbase.com: could not connect to host
 elpo.net: could not connect to host
 elsword.moe: could not connect to host
 eltransportquevolem.org: could not connect to host
 elytronsecurity.com: could not connect to host
 emanuelemazzotta.com: could not connect to host
 embellir-aroma.com: could not connect to host
 embellir-kyujin.com: could not connect to host
 embracethedarkness.co.uk: could not connect to host
 emilyjohnson.ga: could not connect to host
 eminhuseynov.com: could not connect to host
+emperor.blog: could not connect to host
 emrenovation.com: could not connect to host
 endohaus.us: could not connect to host
 endspamwith.us: could not connect to host
-englishstudio.com: could not connect to host
 enoou.com: could not connect to host
 enpalmademallorca.info: could not connect to host
 envelope.co.nz: could not connect to host
-epsilon.dk: could not connect to host
 er-music.com: could not connect to host
 erad.fr: could not connect to host
 erspro.net: could not connect to host
 erwinwensveen.nl: could not connect to host
 es888999.com: could not connect to host
 esoterik.link: could not connect to host
 esseriumani.com: could not connect to host
 eswap.cz: could not connect to host
@@ -779,28 +770,27 @@ fragnic.com: could not connect to host
 franckyz.com: could not connect to host
 frank.fyi: could not connect to host
 franklinhua.com: could not connect to host
 franzt.ovh: could not connect to host
 fredliang.cn: could not connect to host
 fredtec.ru: could not connect to host
 free8.xyz: could not connect to host
 freeassangenow.org: could not connect to host
-freeboson.org: could not connect to host
 freejidi.com: could not connect to host
 freeshkre.li: could not connect to host
 freshcode.nl: could not connect to host
 frickenate.com: could not connect to host
 friedhelm-wolf.de: could not connect to host
-friller.com.au: could not connect to host
 frolov.net: could not connect to host
 fromlemaytoz.com: could not connect to host
 frosty-gaming.xyz: could not connect to host
 frp-roleplay.de: could not connect to host
 frusky.net: could not connect to host
+frydrychit.cz: could not connect to host
 fsfi.is: could not connect to host
 ftgho.com: could not connect to host
 fuckcf.cf: could not connect to host
 fugle.de: could not connect to host
 fuitedeau.ch: could not connect to host
 fukuko.biz: could not connect to host
 fukuko.xyz: could not connect to host
 fun9.cc: could not connect to host
@@ -830,16 +820,17 @@ gasbarkenora.com: could not connect to h
 gasnews.net: could not connect to host
 gautham.pro: could not connect to host
 gayforgenji.com: could not connect to host
 gaygeeks.de: could not connect to host
 gc.net: could not connect to host
 gchoic.com: could not connect to host
 gdevpenze.ru: could not connect to host
 gdhzcgs.com: could not connect to host
+gdiary.net: could not connect to host
 gdz-otvety.com: could not connect to host
 ge1.me: could not connect to host
 geeks.berlin: could not connect to host
 gehrke.nrw: could not connect to host
 geigr.de: could not connect to host
 generationnext.pl: could not connect to host
 geneve.guide: could not connect to host
 genia-life.de: could not connect to host
@@ -867,65 +858,66 @@ gglks.com: could not connect to host
 ggss.cf: could not connect to host
 gh16.com.ar: could not connect to host
 gifzilla.net: could not connect to host
 gigawattz.com: could not connect to host
 gina-architektur.design: could not connect to host
 girlsforum.com: could not connect to host
 git.co: could not connect to host
 gix.net.pl: could not connect to host
+gladystudio.com: could not connect to host
 globalnewsdaily.cf: could not connect to host
 globalvisions-events.ch: could not connect to host
 glutenfreelife.co.nz: could not connect to host
 gmanukyan.com: could not connect to host
 gnom.me: could not connect to host
 gnosticjade.net: could not connect to host
 godrealms.com: could not connect to host
 goiaspropaganda.com.br: could not connect to host
 goldfelt.com: could not connect to host
 gongjuhao.com: could not connect to host
 goodyearsotn.co.uk: could not connect to host
 google.ax: could not connect to host
 goranrango.ch: could not connect to host
 gottfridsberg.org: could not connect to host
+gouthro-goteborg.se: could not connect to host
 gozadentro.com: could not connect to host
 gradsm-ci.net: could not connect to host
 granth.io: could not connect to host
 gratisonlinesex.com: could not connect to host
 greggsfoundation.org.uk: could not connect to host
 gregmartyn.com: could not connect to host
 greuel.online: could not connect to host
 greyhash.se: could not connect to host
 gritte.net: could not connect to host
 grossell.ru: could not connect to host
 grossmisconduct.news: could not connect to host
 grusenmeyer.be: could not connect to host
-gta5voice.net: could not connect to host
 gugaltika-ipb.org: could not connect to host
 guinea-pig.co: could not connect to host
 gumannp.de: could not connect to host
 gunhunter.com: could not connect to host
 gus.moe: could not connect to host
 gutuia.blue: could not connect to host
 gvchannel.xyz: could not connect to host
 gxgx.org: could not connect to host
 gzpblog.com: could not connect to host
 h2cdn.cloud: could not connect to host
 h3artbl33d.nl: could not connect to host
 habeo.si: could not connect to host
 hackbubble.me: could not connect to host
-hackingsafe.com: could not connect to host
 hackmeplz.com: could not connect to host
 haktec.de: could not connect to host
 hakugin.me: could not connect to host
 halcyonsbastion.com: could not connect to host
 half-logic.eu.org: could not connect to host
 halta.info: could not connect to host
 hamking.tk: could not connect to host
 hamu.blue: could not connect to host
+happyagain.de: could not connect to host
 happyagain.se: could not connect to host
 happytiger.eu: could not connect to host
 hapsfordmill.co.uk: could not connect to host
 hapvm.com: could not connect to host
 hardeman.nu: could not connect to host
 harrypottereditor.net: could not connect to host
 has-no-email-set.de: could not connect to host
 hasabig.wang: could not connect to host
@@ -944,39 +936,40 @@ heavenlyseals.com: could not connect to 
 heavenlysmokenc.com: could not connect to host
 heisenberg.co: could not connect to host
 hejsupport.se: could not connect to host
 hellofilters.com: could not connect to host
 hellomouse.tk: could not connect to host
 helpantiaging.com: could not connect to host
 helpekwendenihospital.com: could not connect to host
 helsingfors.guide: could not connect to host
+hemdal.se: could not connect to host
 henhenlu.com: could not connect to host
 henriknoerr.com: could not connect to host
 hentai.design: could not connect to host
 hentaimaster.net: could not connect to host
 heptner24.de: could not connect to host
 here.ml: could not connect to host
 heribe-maruo.com: could not connect to host
-hermes-net.de: could not connect to host
 hermes-servizi.it: could not connect to host
 hetmeisjeachterpauw.nl: could not connect to host
 hexobind.com: could not connect to host
 hfu.io: could not connect to host
 hg881.com: could not connect to host
 hialatv.com: could not connect to host
 hill.selfip.net: could not connect to host
 hintermeier-rae.at: could not connect to host
 hirte-digital.de: could not connect to host
 history.pe: could not connect to host
 hitchunion.org: could not connect to host
 hjes.com.ve: could not connect to host
 hoffens.se: could not connect to host
 hohm.in: could not connect to host
 holidayincotswolds.co.uk: could not connect to host
+homesfordinner.ca: could not connect to host
 homoglyph.net: could not connect to host
 hondenoppasfraneker.nl: could not connect to host
 honeyhaw.com: could not connect to host
 honeytracks.com: could not connect to host
 hoodoo.io: could not connect to host
 hoodoo.tech: could not connect to host
 hopewellproperties.co.uk: could not connect to host
 hopglass.eu: could not connect to host
@@ -997,17 +990,16 @@ hukkatavara.com: could not connect to ho
 hunger.im: could not connect to host
 huongquynh.com: could not connect to host
 huwjones.me: could not connect to host
 huzurmetal.net: could not connect to host
 hwaddress.com: could not connect to host
 hydrante.ch: could not connect to host
 hyper-matrix.org: could not connect to host
 hypotheques24.ch: could not connect to host
-hzh.pub: could not connect to host
 i-stats.net: could not connect to host
 i95.me: could not connect to host
 iadttaveras.com: could not connect to host
 iamsoareyou.se: could not connect to host
 ibron.co: could not connect to host
 ibsafrica.co.za: could not connect to host
 ibsglobal.co.za: could not connect to host
 iceloch.com: could not connect to host
@@ -1025,17 +1017,16 @@ ifxnet.com: could not connect to host
 ihatethissh.it: could not connect to host
 iideaz.org: could not connect to host
 iilin.com: could not connect to host
 ikenmeyer.com: could not connect to host
 ikenmeyer.eu: could not connect to host
 ikzoekeengoedkopeauto.nl: could not connect to host
 ileat.com: could not connect to host
 imaginarymakings.me: could not connect to host
-imanolbarba.net: could not connect to host
 img.ovh: could not connect to host
 imgencrypt.com: could not connect to host
 imgul.net: could not connect to host
 imguoguo.com: could not connect to host
 imlinan.cn: could not connect to host
 imlinan.info: could not connect to host
 imlinan.net: could not connect to host
 imoner.ga: could not connect to host
@@ -1083,17 +1074,16 @@ its-schindler.de: could not connect to h
 itsatrap.nl: could not connect to host
 ivanilla.org: could not connect to host
 ivanpolchenko.com: could not connect to host
 ivyshop.com.br: could not connect to host
 ivystech.com: could not connect to host
 iwex.swiss: could not connect to host
 ixio.cz: could not connect to host
 j0ng.xyz: could not connect to host
-jabbari.io: could not connect to host
 jaimechanaga.com: could not connect to host
 jaion.ml: could not connect to host
 jakincode.army: could not connect to host
 jaksel.id: could not connect to host
 jaksi.io: could not connect to host
 jamesachambers.com: could not connect to host
 jamesheald.com: could not connect to host
 jan-bucher.ch: could not connect to host
@@ -1124,32 +1114,30 @@ joecod.es: could not connect to host
 joetyson.io: could not connect to host
 johnrockefeller.net: could not connect to host
 johntomasowa.com: could not connect to host
 jonas-wenk.de: could not connect to host
 jonathansanchez.pro: could not connect to host
 jonfor.net: could not connect to host
 jooto.com: could not connect to host
 jorovik.com: could not connect to host
-joshharkema.com: could not connect to host
 jpod.cc: could not connect to host
 js88.sg: could not connect to host
 jsc7776.com: could not connect to host
 jsjyhzy.cc: could not connect to host
 juliaoantiguidades.com.br: could not connect to host
 juliawebber.co.za: could not connect to host
 jumbopan.com: could not connect to host
 jumbopan.net: could not connect to host
 jump.wtf: could not connect to host
 just-pools.co.za: could not connect to host
 justinharrison.ca: could not connect to host
 justzz.xyz: could not connect to host
 juventusmania1897.com: could not connect to host
 k33k00.com: could not connect to host
-kabus.org: could not connect to host
 kaika-facilitymanagement.de: could not connect to host
 kainz.be: could not connect to host
 kakolightingmuseum.or.jp: could not connect to host
 kaloix.de: could not connect to host
 kamalame.co: could not connect to host
 kamitech.ch: could not connect to host
 kandalife.com: could not connect to host
 kanganer.com: could not connect to host
@@ -1164,29 +1152,29 @@ kaydan.io: could not connect to host
 kearney.io: could not connect to host
 kela.jp: could not connect to host
 kellyandantony.com: could not connect to host
 kelm.me: could not connect to host
 kermadec.com: could not connect to host
 kerus.net: could not connect to host
 keshausconsulting.com: could not connect to host
 kevinbowers.me: could not connect to host
-kevinbusse.de: could not connect to host
 kevindekoninck.com: could not connect to host
 kevinfoley.cc: could not connect to host
 kevinfoley.org: could not connect to host
 keyserver.sexy: could not connect to host
 kgb.us: could not connect to host
 kidbacker.com: could not connect to host
 kieranweightman.me: could not connect to host
 kievradio.com: could not connect to host
 kigmbh.com: could not connect to host
 kikuzuki.org: could not connect to host
 kimamass.com: could not connect to host
 kinepolis-studio.ga: could not connect to host
+kingbird.me: could not connect to host
 kingclass.cn: could not connect to host
 kirill.ws: could not connect to host
 kj1396.net: could not connect to host
 kjoglum.me: could not connect to host
 kleinblogje.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 116"  data: no]
 klingeletest.de: could not connect to host
 knep.me: could not connect to host
 kngk-azs.ru: could not connect to host
@@ -1216,24 +1204,25 @@ kyle.place: could not connect to host
 kylling.io: could not connect to host
 kyujin-office.net: could not connect to host
 l18.io: could not connect to host
 laboutiquemarocaineduconvoyeur.com: could not connect to host
 laboutiquemarocaineduconvoyeur.ma: could not connect to host
 lacasa.fr: could not connect to host
 lacasabelucci.com: could not connect to host
 lacasseroy.com: could not connect to host
+lacicloud.net: could not connect to host
 ladylikeit.com: could not connect to host
 laforetenchantee.ch: could not connect to host
 lafr4nc3.net: could not connect to host
 lafr4nc3.xyz: could not connect to host
+lakehavasuhouserentals.com: could not connect to host
 landell.ml: could not connect to host
 langendorf-ernaehrung-training.de: could not connect to host
 lanonfire.com: could not connect to host
-lantian.pub: could not connect to host
 lateliercantaldeco.fr: could not connect to host
 lathamlabs.com: could not connect to host
 lathamlabs.net: could not connect to host
 lathamlabs.org: could not connect to host
 lazulu.com: could not connect to host
 lbarrios.es: could not connect to host
 lbrls.tk: could not connect to host
 lclarkpdx.com: could not connect to host
@@ -1245,18 +1234,20 @@ lebal.se: could not connect to host
 leebiblestudycentre.net: could not connect to host
 leebiblestudycentre.org: could not connect to host
 leefindlow.com: could not connect to host
 leelou.wedding: could not connect to host
 leerkotte.eu: could not connect to host
 legal.farm: could not connect to host
 legaltip.eu: could not connect to host
 leifdreizler.com: could not connect to host
+lenkunz.me: could not connect to host
 leolana.com: could not connect to host
 leonardcamacho.me: could not connect to host
+leonhooijer.nl: could not connect to host
 lerlivros.online: could not connect to host
 lescomptoirsdepierrot.com: could not connect to host
 lesdouceursdeliyana.com: could not connect to host
 letsgetintouch.com: could not connect to host
 leveredge.net: could not connect to host
 lezdomsm.com: could not connect to host
 lfaz.org: could not connect to host
 lheinrich.org: could not connect to host
@@ -1269,42 +1260,42 @@ librebox.de: could not connect to host
 libscode.com: could not connect to host
 liceserv.com: could not connect to host
 likenosis.com: could not connect to host
 lingting.vip: could not connect to host
 linkages.org: could not connect to host
 linksanitizer.com: could not connect to host
 linksextremist.at: could not connect to host
 linley.de: could not connect to host
-linostassi.net: could not connect to host
 linux-admin-california.com: could not connect to host
 linux.sb: could not connect to host
 linuxcode.net: could not connect to host
 linvx.org: could not connect to host
 liquidcomm.net: could not connect to host
 lisieuxarquitetura.com.br: could not connect to host
 lissabon.guide: could not connect to host
 litcomphonors.com: could not connect to host
 littlelundgrenladies.com: could not connect to host
 liukang.tech: could not connect to host
 llvm.us: could not connect to host
 loanstreet.be: could not connect to host
 lobosdomain.no-ip.info: could not connect to host
-locker3.com: could not connect to host
 locksport.org.nz: could not connect to host
 logcat.info: could not connect to host
 logic8.ml: could not connect to host
 logicchen.com: could not connect to host
 logimagine.com: could not connect to host
+loket.nl: could not connect to host
 loli.net: could not connect to host
 loopower.com: could not connect to host
 loothole.com: could not connect to host
 loqyu.co: could not connect to host
 losebellyfat.pro: could not connect to host
 loveandloyalty.se: could not connect to host
+lovingearth.co: could not connect to host
 lowt.us: could not connect to host
 loyaltech.ch: could not connect to host
 lstma.com: could not connect to host
 lszj.com: could not connect to host
 ltransferts.com: could not connect to host
 luav.org: could not connect to host
 lubot.net: could not connect to host
 lucascodes.com: could not connect to host
@@ -1320,20 +1311,22 @@ luxonetwork.com: could not connect to ho
 lycly.me: could not connect to host
 m-generator.com: could not connect to host
 m4570.xyz: could not connect to host
 m4g.ru: could not connect to host
 maartenterpstra.xyz: could not connect to host
 madeintucson.org: could not connect to host
 madnetwork.org: could not connect to host
 madusecurity.com: could not connect to host
+magicball.co: could not connect to host
 magnacumlaude.co: could not connect to host
 mahansexcavating.com: could not connect to host
 maik-mahlow.de: could not connect to host
 mailon.ga: could not connect to host
+majkassab.com: could not connect to host
 makeit-so.de: could not connect to host
 makeuplove.nl: could not connect to host
 malamutedoalasca.com.br: could not connect to host
 malesbdsm.com: could not connect to host
 malgraph.net: could not connect to host
 mamastore.eu: could not connect to host
 manova.cz: could not connect to host
 marcelmarnitz.com: could not connect to host
@@ -1344,17 +1337,16 @@ mariusschulte.de: could not connect to h
 mark-armstrong-gaming.com: could not connect to host
 marketingdesignu.cz: could not connect to host
 markllego.com: could not connect to host
 marko-fenster24.de: could not connect to host
 markrego.com: could not connect to host
 martin-mattel.com: could not connect to host
 martins.im: could not connect to host
 marxist.party: could not connect to host
-mashandco.it: could not connect to host
 mastodon.expert: could not connect to host
 mastodon.my: could not connect to host
 matarrosabierzo.com: could not connect to host
 mathijskingma.nl: could not connect to host
 matrix.ac: could not connect to host
 matthewtester.com: could not connect to host
 matthey.nl: could not connect to host
 maybeul.com: could not connect to host
@@ -1362,16 +1354,17 @@ maynardnetworks.com: could not connect t
 mazternet.ru: could not connect to host
 mazzotta.me: could not connect to host
 mb-is.info: could not connect to host
 mbdrogenbos-usedcars.be: could not connect to host
 mbsec.net: could not connect to host
 mbwemmel-usedcars.be: could not connect to host
 mcdanieldevelopmentservices.com: could not connect to host
 mcideas.tk: could not connect to host
+mcjackk77.com: could not connect to host
 mckinley1.com: could not connect to host
 mcsa-usa.org: could not connect to host
 mcsnovatamabayan.com: could not connect to host
 me-dc.com: could not connect to host
 meanevo.com: could not connect to host
 meathealth.com: could not connect to host
 mecanicadom.com: could not connect to host
 mediadandy.com: could not connect to host
@@ -1392,32 +1385,33 @@ menzaijia.com: could not connect to host
 mercanix.co.uk: could not connect to host
 mes10doigts.ovh: could not connect to host
 metaether.net: could not connect to host
 metrix-money-ptc.com: could not connect to host
 metrix.design: could not connect to host
 mexior.nl: could not connect to host
 meyeraviation.com: could not connect to host
 mhjuma.com: could not connect to host
+micaiahparker.com: could not connect to host
 michaelcullen.name: could not connect to host
 michaelkuchta.me: could not connect to host
 michaelsulzer.com: could not connect to host
 michaelsulzer.eu: could not connect to host
 microblading.pe: could not connect to host
 mieterschutzkartei.de: could not connect to host
 mikeybot.com: could not connect to host
 millionairessecrets.com: could not connect to host
 mingy.ddns.net: could not connect to host
 mingyueli.com: could not connect to host
 minimaliston.com: could not connect to host
 minitruckin.net: could not connect to host
 minor.news: could not connect to host
 misconfigured.io: could not connect to host
 missycosmeticos.com.br: could not connect to host
-mjmnagy.info: could not connect to host
+mkacg.com: could not connect to host
 mkfs.fr: could not connect to host
 mkhsoft.eu: could not connect to host
 mkplay.io: could not connect to host
 mmilog.hu: could not connect to host
 mmstick.tk: could not connect to host
 mneeb.de: could not connect to host
 mobile.eti.br: could not connect to host
 mobileritelushi.com: could not connect to host
@@ -1441,17 +1435,16 @@ mooselook.de: could not connect to host
 moparcraft.com: could not connect to host
 moparcraft.org: could not connect to host
 mordrum.com: could not connect to host
 morepopcorn.co.nz: could not connect to host
 morfitronik.pl: could not connect to host
 morz.org: could not connect to host
 mosaique-lachenaie.fr: could not connect to host
 moskva.guide: could not connect to host
-mostlyinfinite.com: could not connect to host
 motomorgen.com: could not connect to host
 motorbiketourhanoi.com: could not connect to host
 mountainadventureseminars.com: could not connect to host
 moving-pixtures.de: could not connect to host
 mowalls.net: could not connect to host
 mozzilla.cz: could not connect to host
 mpserver12.org: could not connect to host
 mrafrohead.com: could not connect to host
@@ -1499,116 +1492,112 @@ natuterra.com.br: could not connect to h
 ncdesigns-studio.com: could not connect to host
 ndtblog.com: could not connect to host
 necesitodinero.org: could not connect to host
 neer.io: could not connect to host
 nerdjokes.de: could not connect to host
 nerfroute.com: could not connect to host
 nestone.ru: could not connect to host
 net4visions.at: could not connect to host
+netbuzz.ru: could not connect to host
 netica.fr: could not connect to host
 netscaler.expert: could not connect to host
 nevadafiber.net: could not connect to host
 newcityinfo.info: could not connect to host
 newfacialbeautycream.com: could not connect to host
 newtnote.com: could not connect to host
 newtonhaus.com: could not connect to host
 nexusbyte.de: could not connect to host
 nexuscorporation.in: could not connect to host
 nfluence.org: could not connect to host
 ngiemboon.net: could not connect to host
+nginxyii.tk: could not connect to host
 nienfun.com: could not connect to host
 nikksno.io: could not connect to host
-niklas.pw: could not connect to host
 nikobradshaw.com: could not connect to host
 nikolasbradshaw.com: could not connect to host
-ninofink.com: could not connect to host
-ninreiei.jp: could not connect to host
 ninux.ch: could not connect to host
 niouininon.eu: could not connect to host
+nipe-systems.de: could not connect to host
 nirada.info: could not connect to host
 nishikino-maki.com: could not connect to host
 niva.synology.me: could not connect to host
 nkadvertising.online: could not connect to host
 nodeselect.com: could not connect to host
 noelblog.ga: could not connect to host
 noisebridge.social: could not connect to host
 nolimits.net.nz: could not connect to host
 nonemu.ninja: could not connect to host
 norad.sytes.net: could not connect to host
 northwoodsfish.com: could not connect to host
 nosbenevolesontdutalent.com: could not connect to host
 not-a.link: could not connect to host
 note7forever.com: could not connect to host
 notesforpebble.com: could not connect to host
 notevencode.com: could not connect to host
+novascan.net: could not connect to host
 nowremindme.com: could not connect to host
 nsbfalconacademy.org: could not connect to host
 nsdev.cn: could not connect to host
 nsmail.cn: could not connect to host
 nudel.ninja: could not connect to host
 nyanpasu.tv: could not connect to host
-o8b.club: could not connect to host
 oaksbloom.com: could not connect to host
 obdolbacca.ru: could not connect to host
 oberam.de: could not connect to host
 oberhof.co: could not connect to host
 observatory.se: could not connect to host
 ocsr.nl: could not connect to host
 oducs.org: could not connect to host
 off-the-clock.us: could not connect to host
 offgames.pro: could not connect to host
 office-ruru.com: could not connect to host
 oinky.ddns.net: could not connect to host
 oldtimer-trifft-flugplatz.de: could not connect to host
-olgui.net: could not connect to host
 oliverspringer.eu: could not connect to host
-ollies.cloud: could not connect to host
 olliespage.com: could not connect to host
 olliespage.net: could not connect to host
 olliespage.uk: could not connect to host
 omnibot.tv: could not connect to host
 onewebdev.info: could not connect to host
 onsite4u.de: could not connect to host
 onstud.com: could not connect to host
 onthe.network: could not connect to host
 onviga.de: could not connect to host
 onwie.fr: could not connect to host
 ooeste.com: could not connect to host
 open-desk.org: could not connect to host
 openconnect.com.au: could not connect to host
 opinion8td.com: could not connect to host
-opticaltest.com: could not connect to host
 oranges.tokyo: could not connect to host
 oricejoc.com: could not connect to host
-orimex-mebel.ru: could not connect to host
 osacrypt.studio: could not connect to host
 oscarmashauri.com: could not connect to host
 oscsdp.cz: could not connect to host
 oshell.me: could not connect to host
 oshinagaki.jp: could not connect to host
 osmanlitorunu.com: could not connect to host
 ospree.me: could not connect to host
+otellio.com: could not connect to host
+otellio.de: could not connect to host
+otellio.it: could not connect to host
 otinane.eu: could not connect to host
 ourchoice2016.com: could not connect to host
 owlscrap.ru: could not connect to host
 oxynux.xyz: could not connect to host
 pabloartea.ga: could not connect to host
 packetcrash.net: could not connect to host
 paichai.space: could not connect to host
 painosso.org: could not connect to host
 paio2-rec.com: could not connect to host
 paio2.com: could not connect to host
 palationtrade.com: could not connect to host
 panascais.io: could not connect to host
 pandapsy.com: could not connect to host
 pardnoy.com: could not connect to host
-pascalmathis.com: could not connect to host
-pascalmathis.me: could not connect to host
-pascalmathis.net: could not connect to host
 pastie.se: could not connect to host
 patrickbusch.net: could not connect to host
 patrickneuro.de: could not connect to host
 paulshir.com: could not connect to host
 paulshir.is: could not connect to host
 pavelstriz.cz: could not connect to host
 pay.ubuntu.com: could not connect to host
 paymon.tj: could not connect to host
@@ -1622,16 +1611,17 @@ peirong.me: could not connect to host
 pemagrid.org: could not connect to host
 pengisatelier.net: could not connect to host
 pepper.dog: could not connect to host
 persjrp.ca: could not connect to host
 persoform.ch: could not connect to host
 petlife.od.ua: could not connect to host
 peuf.shop: could not connect to host
 peykezamin.ir: could not connect to host
+pfudor.tk: could not connect to host
 pgmsource.com: could not connect to host
 pharmaboard.org: could not connect to host
 phdwuda.com: could not connect to host
 philippa.cool: could not connect to host
 phillipgoldfarb.com: could not connect to host
 photographyforchange.com: could not connect to host
 photographyforchange.org: could not connect to host
 photops.fr: could not connect to host
@@ -1645,16 +1635,17 @@ pierrejeansuau.fr: could not connect to 
 pieterhordijk.com: could not connect to host
 pimspage.nl: could not connect to host
 pinebaylibrary.org: could not connect to host
 pinkhq.com: could not connect to host
 pinkinked.com: could not connect to host
 pipenny.net: could not connect to host
 pitfire.io: could not connect to host
 pitot-rs.org: could not connect to host
+piwko.co: could not connect to host
 pixelgliders.de: could not connect to host
 plaasprodukte.com: could not connect to host
 planbox.info: could not connect to host
 please-deny.me: could not connect to host
 plussizereviews.com: could not connect to host
 pmbremer.de: could not connect to host
 pogs.us: could not connect to host
 polit.im: could not connect to host
@@ -1671,18 +1662,16 @@ portalisapres.cl: could not connect to h
 post.com.ar: could not connect to host
 posters.win: could not connect to host
 potbar.com: could not connect to host
 potlytics.com: could not connect to host
 pouets.ovh: could not connect to host
 poupatempo.org: could not connect to host
 powerentertainment.tv: could not connect to host
 poy-tech.com: could not connect to host
-ppmathis.ch: could not connect to host
-ppmathis.com: could not connect to host
 ppoozl.com: could not connect to host
 prettytunesapp.com: could not connect to host
 prifo.se: could not connect to host
 princessbackpack.de: could not connect to host
 printsos.com: could not connect to host
 prism-communication.com: could not connect to host
 privacymanatee.com: could not connect to host
 privcloud.org: could not connect to host
@@ -1738,16 +1727,17 @@ railgun.ac: could not connect to host
 rainbin.com: could not connect to host
 ranos.org: could not connect to host
 rathorian.fr: could not connect to host
 ravengergaming.net: could not connect to host
 ravse.dk: could not connect to host
 raycarruthersphotography.co.uk: could not connect to host
 rb-china.net: could not connect to host
 rbxcatalog.com: could not connect to host
+rchrdsn.uk: could not connect to host
 rcoliveira.com: could not connect to host
 rdfz.tech: could not connect to host
 re-wilding.com: could not connect to host
 reaiaer.com: could not connect to host
 real-compare.com: could not connect to host
 realcli.com: could not connect to host
 realnewhomes.com: could not connect to host
 realraghavgupta.com: could not connect to host
@@ -1757,25 +1747,28 @@ reeson.de: could not connect to host
 reeson.info: could not connect to host
 reeson.org: could not connect to host
 reevu.net: could not connect to host
 reflecton.io: could not connect to host
 regar42.fr: could not connect to host
 regendevices.eu: could not connect to host
 regio-salland.nl: could not connect to host
 reignsphere.net: could not connect to host
+reinierjonker.nl: could not connect to host
 reismil.ch: could not connect to host
+relax.hn: could not connect to host
 renemayrhofer.com: could not connect to host
 rentbrowser.com: could not connect to host
 report-incident.de: could not connect to host
 reposaarenkuva.fi: could not connect to host
 reqognize.com: could not connect to host
 research.md: could not connect to host
 resoundpro.ca: could not connect to host
 reth.ch: could not connect to host
+retro.rocks: could not connect to host
 retube.ga: could not connect to host
 reykjavik.guide: could not connect to host
 ribopierre.fr: could not connect to host
 riceglue.com: could not connect to host
 richardb.me: could not connect to host
 richeza.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 116"  data: no]
 righteousendeavour.com: could not connect to host
 riversideauto.net: could not connect to host
@@ -1783,17 +1776,16 @@ rms.sexy: could not connect to host
 robi-net.it: could not connect to host
 robomonkey.org: could not connect to host
 robust.ga: could not connect to host
 rodehutskors.net: could not connect to host
 rodzina-kupiec.eu.org: could not connect to host
 roelf.org: could not connect to host
 rofrank.space: could not connect to host
 rolandszabo.com: could not connect to host
-romanticschemermovie.com: could not connect to host
 romanticvillas.com.au: could not connect to host
 rondreis-planner.nl: could not connect to host
 ronghexx.com: could not connect to host
 roolevoi.ru: could not connect to host
 rootbsd.at: could not connect to host
 rospa100.com: could not connect to host
 roten.email: could not connect to host
 rotterdamjazz.info: could not connect to host
@@ -1884,16 +1876,17 @@ shanxiapark.com: could not connect to ho
 shareoine.com: could not connect to host
 sharvey.ca: could not connect to host
 shavingks.com: could not connect to host
 shentengtu.idv.tw: could not connect to host
 sheying.tm: could not connect to host
 shh.sh: could not connect to host
 shinko-osaka.jp: could not connect to host
 shirakaba-cc.com: could not connect to host
+shorten.ninja: could not connect to host
 shortr.li: could not connect to host
 shred.ch: could not connect to host
 shredoptics.ch: could not connect to host
 shurita.org: could not connect to host
 shuzicai.cn: could not connect to host
 shymeck.pw: could not connect to host
 siamega.com: could not connect to host
 siebens.net: could not connect to host
@@ -1919,30 +1912,31 @@ skontorp-enterprise.no: could not connec
 sky-aroma.com: could not connect to host
 skylocker.net: could not connect to host
 skylocker.nl: could not connect to host
 skyvault.io: could not connect to host
 sl1pkn07.wtf: could not connect to host
 slaps.be: could not connect to host
 slytech.ch: could not connect to host
 smallchat.nl: could not connect to host
+smallpath.me: could not connect to host
 smartbiz.vn: could not connect to host
 smith.is: could not connect to host
 sml.lc: could not connect to host
 smuhelper.cn: could not connect to host
-snapserv.net: could not connect to host
 sneed.company: could not connect to host
 snowdy.eu: could not connect to host
 soboleva-pr.com.ua: could not connect to host
 soc.net: could not connect to host
 socialworkout.com: could not connect to host
 socialworkout.net: could not connect to host
 socialworkout.org: could not connect to host
 socialworkout.tv: could not connect to host
 socketize.com: could not connect to host
+softrobot.se: could not connect to host
 sogravatas.net.br: could not connect to host
 sojingle.net: could not connect to host
 solymar.co: could not connect to host
 sonafe.info: could not connect to host
 sonja-kowa.de: could not connect to host
 sorenam.com: could not connect to host
 sortaweird.net: could not connect to host
 soulema.com: could not connect to host
@@ -2025,16 +2019,17 @@ sysert.tv: could not connect to host
 szunia.com: could not connect to host
 t3rror.net: could not connect to host
 tab.watch: could not connect to host
 tacoma-games.com: could not connect to host
 tadu.de: could not connect to host
 taidu.news: could not connect to host
 takusan.ru: could not connect to host
 talado.gr: could not connect to host
+tanak3n.xyz: could not connect to host
 tangyue.date: could not connect to host
 tangzhao.net: could not connect to host
 tapestries.tk: could not connect to host
 tardybaker.com: could not connect to host
 tarek.link: could not connect to host
 tazemama.biz: could not connect to host
 tcpweb.net: could not connect to host
 tdelmas.eu: could not connect to host
@@ -2116,32 +2111,38 @@ topanlage.de: could not connect to host
 topdetoxcleanse.com: could not connect to host
 topnotchendings.com: could not connect to host
 tor2web.org: could not connect to host
 tosteberg.se: could not connect to host
 totallynotaserver.com: could not connect to host
 totch.de: could not connect to host
 totot.net: could not connect to host
 touch-up-net.com: could not connect to host
+towaway.ru: could not connect to host
 toxicboot.com: could not connect to host
 toxicip.com: could not connect to host
 tpblist.xyz: could not connect to host
 tpolemis.com: could not connect to host
+tracfinancialservices.com: could not connect to host
+tradingrooms.com: could not connect to host
 traforet.win: could not connect to host
 trainhornforums.com: could not connect to host
 trainline.io: could not connect to host
 transcendmotor.sg: could not connect to host
 transmithe.net: could not connect to host
 travotion.com: could not connect to host
 treker.us: could not connect to host
 triageo.com.au: could not connect to host
 tristanfarkas.one: could not connect to host
+tryfm.net: could not connect to host
 trynowrinkleseyeserum.com: could not connect to host
+tryti.me: could not connect to host
 tsaro.io: could not connect to host
 tsdom.net: could not connect to host
+tsugi.fr: could not connect to host
 tsurezurematome.ga: could not connect to host
 tucidi.net: could not connect to host
 tupizm.com: could not connect to host
 turismo.cl: could not connect to host
 turkiet.guide: could not connect to host
 turn-sticks.com: could not connect to host
 tutiendaroja.com: could not connect to host
 tutiendarosa.com: could not connect to host
@@ -2183,20 +2184,21 @@ uwesander.de: [Exception... "Component r
 uwimonacs.org.jm: could not connect to host
 uygindir.ml: could not connect to host
 vaaddress.co: could not connect to host
 vacationfund.co: could not connect to host
 vadik.me: could not connect to host
 valecnatechnika.cz: could not connect to host
 valenhub.com: could not connect to host
 valenhub.es: could not connect to host
+valesdev.com: could not connect to host
+valesdigital.com: could not connect to host
 valis.sx: could not connect to host
 vamosfalardesaude.pt: could not connect to host
 vanderstraeten.dynv6.net: could not connect to host
-vanmalland.com: could not connect to host
 vapemania.eu: could not connect to host
 varela-electricite.fr: could not connect to host
 vayaport.com: could not connect to host
 vconcept.ch: could not connect to host
 vconcept.me: could not connect to host
 vectro.me: could not connect to host
 vekenz.com: could not connect to host
 velasense.com: could not connect to host
@@ -2236,16 +2238,17 @@ vorderklier.de: could not connect to hos
 vorlif.org: could not connect to host
 votresiteweb.ch: could not connect to host
 vow.vn: could not connect to host
 vranjske.co.rs: could not connect to host
 vucdn.com: could not connect to host
 vxapps.com: could not connect to host
 w10club.com: could not connect to host
 wabifoggynuts.com: could not connect to host
+wadidi.com: could not connect to host
 waixingrenfuli.vip: could not connect to host
 wanashi.com: could not connect to host
 wanda76.com: could not connect to host
 wanda78.com: could not connect to host
 wanda79.com: could not connect to host
 wanda96.com: could not connect to host
 wanda97.com: could not connect to host
 wanda98.com: could not connect to host
@@ -2255,17 +2258,16 @@ warlions.info: could not connect to host
 warp-radio.com: could not connect to host
 wassim.is: could not connect to host
 watashi.bid: could not connect to host
 watchtv-online.pw: could not connect to host
 watchweasel.com: could not connect to host
 waxdramatic.com: could not connect to host
 we.serveftp.net: could not connect to host
 weareincognito.org: could not connect to host
-wearepapermill.co: could not connect to host
 web-adminy.co.uk: could not connect to host
 webambacht.nl: could not connect to host
 webart-factory.de: could not connect to host
 webbson.net: could not connect to host
 webhackspro.com: could not connect to host
 webproject.rocks: could not connect to host
 webspotter.nl: could not connect to host
 webtar.info: could not connect to host
@@ -2326,17 +2328,16 @@ www-8887999.com: could not connect to ho
 www.history.pe: could not connect to host
 wxrlab.com: could not connect to host
 xatr0z.org: could not connect to host
 xbc.nz: could not connect to host
 xeonlab.com: could not connect to host
 xeonlab.de: could not connect to host
 xia100.xyz: could not connect to host
 xianguocy.com: could not connect to host
-xiaoyu.net: could not connect to host
 xing.ml: could not connect to host
 xiqi.us: could not connect to host
 xlboo.com: could not connect to host
 xmiui.com: could not connect to host
 xn--6x6a.life: could not connect to host
 xn--80aocgsfei.xn--p1ai: could not connect to host
 xn--8mr166hf6s.xn--fiqs8s: could not connect to host
 xn--c5w27q.ml: could not connect to host
@@ -2364,69 +2365,70 @@ yemalu.com: could not connect to host
 yemekbaz.az: could not connect to host
 yepbitcoin.com: could not connect to host
 yesfone.com.br: could not connect to host
 yggdar.ga: could not connect to host
 yhori.xyz: could not connect to host
 yibin0831.com: could not connect to host
 ying299.com: could not connect to host
 ying299.net: could not connect to host
+yinga.ga: could not connect to host
 ylk.io: could not connect to host
 yobbelwobbel.de: could not connect to host
 yobst.tk: could not connect to host
 yoga.is-an-engineer.com: could not connect to host
 yoticonnections.com: could not connect to host
 yotilabs.com: could not connect to host
 youruseragent.info: could not connect to host
 yourznc.com: could not connect to host
 yousite.by: could not connect to host
 yude.ml: could not connect to host
 yum.beer: could not connect to host
 yux.fr: could not connect to host
-yzcloud.me: could not connect to host
+z-coder.com: could not connect to host
 z0rro.net: could not connect to host
 zachbolinger.com: could not connect to host
 zajazd.biz: could not connect to host
 zalohovaniburian.cz: could not connect to host
 zaoext.com: could not connect to host
 zbchen.com: could not connect to host
 zeitzer-turngala.de: could not connect to host
 zeloz.xyz: could not connect to host
 zenghx.tk: could not connect to host
 zero-x-baadf00d.com: could not connect to host
+zerocool.io: could not connect to host
 zerosource.net: could not connect to host
 zeug.co: could not connect to host
 zhangfangzhou.com: could not connect to host
 zhangsir.net: could not connect to host
 zhaochen.xyz: could not connect to host
 zhenmeish.com: could not connect to host
 zhikin.com: could not connect to host
 zhoujiashu.com: could not connect to host
 zikirakhirzaman.com: could not connect to host
 zmk.fr: could not connect to host
 zobraz.cz: could not connect to host
 zohar.shop: could not connect to host
 zokster.net: could not connect to host
 zolokar.xyz: could not connect to host
-zoological-gardens.eu: could not connect to host
 zorz.info: could not connect to host
 zudomc.me: could not connect to host
 zuehlcke.de: could not connect to host
 zulu7.com: could not connect to host
 zuviel.space: could not connect to host
 zypr.pw: could not connect to host
 zyx.im: could not connect to host
 zzw.ca: could not connect to host
 00001.am: did not receive HSTS header
 00002.am: did not receive HSTS header
 0005.com: could not connect to host
 0005aa.com: could not connect to host
 007sascha.de: did not receive HSTS header
 020wifi.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 116"  data: no]
-0222aa.com: could not connect to host
+0222aa.com: did not receive HSTS header
 040fit.nl: did not receive HSTS header
 048.ag: could not connect to host
 050508.com: could not connect to host
 066928.com: could not connect to host
 066938.com: could not connect to host
 0f.io: could not connect to host
 0fl.com: did not receive HSTS header
 0g.org.uk: could not connect to host
@@ -2538,30 +2540,30 @@ 420dongstorm.com: could not connect to h
 42ms.org: could not connect to host
 440hz-radio.de: did not receive HSTS header
 4455software.com: could not connect to host
 44957.com: could not connect to host
 4679.space: could not connect to host
 49889.com: could not connect to host
 4azino777.ru: did not receive HSTS header
 4cclothing.com: could not connect to host
-4elements.com: max-age too low: 0
 4eyes.ch: did not receive HSTS header
 4miners.net: could not connect to host
 4mybaby.ch: did not receive HSTS header
 4ourty2.org: could not connect to host
 4sqsu.eu: could not connect to host
 4w-performers.link: could not connect to host
 50millionablaze.org: could not connect to host
 513vpn.net: did not receive HSTS header
 518maicai.com: did not receive HSTS header
 540.co: did not receive HSTS header
 54bf.com: could not connect to host
 555fl.com: did not receive HSTS header
 56ct.com: could not connect to host
+57aromas.com: did not receive HSTS header
 5piecesofadvice.com: could not connect to host
 605508.cc: did not receive HSTS header
 605508.com: did not receive HSTS header
 60ych.net: did not receive HSTS header
 6120.eu: did not receive HSTS header
 64616e.xyz: could not connect to host
 660011.com: max-age too low: 0
 69square.com: could not connect to host
@@ -2793,16 +2795,17 @@ alittlebitcheeky.com: did not receive HS
 aljmz.com: could not connect to host
 alkami.com: max-age too low: 0
 alkamitech.com: max-age too low: 0
 all-subtitles.com: could not connect to host
 all.tf: could not connect to host
 all4os.com: did not receive HSTS header
 alldaymonitoring.com: could not connect to host
 allegro-inc.com: did not receive HSTS header
+allfreelancers.su: did not receive HSTS header
 allgrass.es: did not receive HSTS header
 alliance-compacts.com: did not receive HSTS header
 allinnote.com: could not connect to host
 allkindzabeats.com: did not receive HSTS header
 allmbw.com: could not connect to host
 allmystery.de: did not receive HSTS header
 allo-symo.fr: did not receive HSTS header
 allods-zone.ru: could not connect to host
@@ -2875,17 +2878,17 @@ andrew.fi: did not receive HSTS header
 andrew.london: did not receive HSTS header
 andrewbroekman.com: did not receive HSTS header
 andrewmichaud.beer: could not connect to host
 andrewregan.me: could not connect to host
 andrewsun.com: did not receive HSTS header
 andrewvoce.com: did not receive HSTS header
 andrewx.net: could not connect to host
 andrewyg.net: could not connect to host
-andreypopp.com: did not receive HSTS header
+andreypopp.com: could not connect to host
 androidprosmart.com: could not connect to host
 androled.fr: max-age too low: 5184000
 androoz.se: could not connect to host
 andyclark.io: could not connect to host
 andymartin.cc: could not connect to host
 andyuk.org: could not connect to host
 anfsanchezo.co: could not connect to host
 anfsanchezo.me: could not connect to host
@@ -2910,17 +2913,16 @@ ankakaak.com: could not connect to host
 ankaraprofesyonelnakliyat.com: did not receive HSTS header
 ankaraprofesyonelnakliyat.com.tr: did not receive HSTS header
 ankarayilmaznakliyat.com: did not receive HSTS header
 ankarayucelnakliyat.com: did not receive HSTS header
 annabellaw.com: did not receive HSTS header
 annahmeschluss.de: did not receive HSTS header
 annarbor.group: did not receive HSTS header
 anomaly.ws: did not receive HSTS header
-anonboards.com: did not receive HSTS header
 anonymo.co.uk: could not connect to host
 anonymo.uk: could not connect to host
 anonymousstatecollegelulzsec.com: could not connect to host
 anook.com: max-age too low: 0
 ansdell.info: could not connect to host
 anshuman-chatterjee.com: did not receive HSTS header
 ansibeast.net: could not connect to host
 anstoncs.com.au: max-age too low: 86400
@@ -2946,17 +2948,17 @@ aozora.moe: could not connect to host
 apachelounge.com: did not receive HSTS header
 apadrinaunolivo.org: did not receive HSTS header
 apaginastore.com.br: could not connect to host
 apeasternpower.com: could not connect to host
 aperture-laboratories.science: could not connect to host
 api.mega.co.nz: could not connect to host
 apibot.de: could not connect to host
 apis.world: could not connect to host
-apm.com.tw: did not receive HSTS header
+apkriver.com: did not receive HSTS header
 apmg-certified.com: did not receive HSTS header
 apmg-cyber.com: did not receive HSTS header
 apnakliyat.com: did not receive HSTS header
 apolloyl.com: could not connect to host
 aponkral.site: could not connect to host
 aponkralsunucu.com: could not connect to host
 aponow.de: did not receive HSTS header
 app-arena.com: did not receive HSTS header
@@ -3128,22 +3130,19 @@ avantmfg.com: did not receive HSTS heade
 avastantivirus.ro: did not receive HSTS header
 avec-ou-sans-ordonnance.fr: could not connect to host
 aveling-adventure.co.uk: did not receive HSTS header
 avepol.cz: did not receive HSTS header
 avepol.eu: did not receive HSTS header
 aviacao.pt: did not receive HSTS header
 avidcruiser.com: did not receive HSTS header
 aviodeals.com: could not connect to host
-avmo.pw: did not receive HSTS header
 avqueen.cn: did not receive HSTS header
-avso.pw: did not receive HSTS header
 avtosept.by: did not receive HSTS header
 avus-automobile.com: did not receive HSTS header
-avxo.pw: did not receive HSTS header
 awanderlustadventure.com: did not receive HSTS header
 awg-mode.de: did not receive HSTS header
 aww.moe: did not receive HSTS header
 axado.com.br: did not receive HSTS header
 axelchv.fr: did not receive HSTS header
 axeny.com: did not receive HSTS header
 axolsoft.com: max-age too low: 10540800
 ayahuascaadvisor.com: could not connect to host
@@ -3155,16 +3154,17 @@ azamra.com: did not receive HSTS header
 azazy.net: max-age too low: 2592000
 azirevpn.com: did not receive HSTS header
 azlo.com: did not receive HSTS header
 azprep.us: could not connect to host
 b-rickroll-e.pw: could not connect to host
 b-space.de: did not receive HSTS header
 b2bpromoteit.com: did not receive HSTS header
 b3orion.com: max-age too low: 0
+b8a.me: did not receive HSTS header
 baby-click.de: could not connect to host
 babybee.ie: could not connect to host
 babybic.hu: did not receive HSTS header
 babycs.house: could not connect to host
 babyhouse.xyz: could not connect to host
 babyliss-pro.com: could not connect to host
 babymasaze.cz: did not receive HSTS header
 babysaying.me: could not connect to host
@@ -3243,17 +3243,17 @@ bbwfacesitting.xyz: could not connect to
 bbwfight.xyz: could not connect to host
 bcbsmagentprofile.com: could not connect to host
 bcchack.com: could not connect to host
 bccx.com: could not connect to host
 bcheng.cf: did not receive HSTS header
 bchep.com: could not connect to host
 bckp.de: could not connect to host
 bcm.com.au: did not receive HSTS header
-bcnx.de: could not connect to host
+bcnx.de: max-age too low: 0
 bcsytv.com: could not connect to host
 bcweightlifting.ca: could not connect to host
 bddemir.com: could not connect to host
 bde-epitech.fr: could not connect to host
 be-real.life: did not receive HSTS header
 beach-inspector.com: did not receive HSTS header
 beachi.es: could not connect to host
 beaglewatch.com: could not connect to host
@@ -3365,17 +3365,17 @@ bikermusic.net: could not connect to hos
 bildiri.ci: did not receive HSTS header
 biletua.de: could not connect to host
 biletyplus.ru: did not receive HSTS header
 billigssl.dk: did not receive HSTS header
 billin.net: did not receive HSTS header
 billkiss.com: could not connect to host
 billninja.com: did not receive HSTS header
 billrusling.com: could not connect to host
-bimbo.com: did not receive HSTS header
+bimbo.com: max-age too low: 86400
 bimbo.com.ar: max-age too low: 86400
 bimbobakeriesusa.com: max-age too low: 86400
 binaryfigments.com: max-age too low: 86400
 binderapp.net: could not connect to host
 bingcheung.org: did not receive HSTS header
 bioespuna.eu: did not receive HSTS header
 biofam.ru: did not receive HSTS header
 bioknowme.com: did not receive HSTS header
@@ -3439,17 +3439,16 @@ blog.coffee: could not connect to host
 blog.cyveillance.com: did not receive HSTS header
 blog.torproject.org: max-age too low: 1000
 bloglife-bb.com: did not receive HSTS header
 bloglikepro.com: could not connect to host
 blognone.com: did not receive HSTS header
 blogonblogspot.com: did not receive HSTS header
 blok56.nl: did not receive HSTS header
 blokuhaka.fr: did not receive HSTS header
-bloom-avenue.com: did not receive HSTS header
 bloomnbud.com: did not receive HSTS header
 bloomzoomy.ru: max-age too low: 172800
 blowjs.com: could not connect to host
 bls-fiduciaire.be: did not receive HSTS header
 bltc.co: could not connect to host
 blubbablasen.de: could not connect to host
 blucas.org: did not receive HSTS header
 blue17.co.uk: did not receive HSTS header
@@ -3538,16 +3537,17 @@ brandon.so: could not connect to host
 brandons.site: did not receive HSTS header
 brandred.net: could not connect to host
 brandspray.com: could not connect to host
 brasilien.guide: could not connect to host
 brasilmorar.com: could not connect to host
 bravz.de: could not connect to host
 brenden.net.au: could not connect to host
 bress.cloud: could not connect to host
+brettabel.com: did not receive HSTS header
 brettpemberton.xyz: did not receive HSTS header
 brianpcurran.com: did not receive HSTS header
 brickoo.com: could not connect to host
 brickyardbuffalo.com: did not receive HSTS header
 bridholm.se: could not connect to host
 brightstarkids.co.uk: did not receive HSTS header
 brightstarkids.com.au: did not receive HSTS header
 brightstarkids.net: did not receive HSTS header
@@ -3567,17 +3567,16 @@ brunoonline.co.uk: could not connect to 
 bryanshearer.accountant: did not receive HSTS header
 bryn.xyz: could not connect to host
 bs12v.ru: did not receive HSTS header
 bsdtips.com: could not connect to host
 bsklabels.com: did not receive HSTS header
 btc-e.com: did not receive HSTS header
 btcdlc.com: could not connect to host
 btcpot.ltd: did not receive HSTS header
-btio.pw: did not receive HSTS header
 btxiaobai.com: did not receive HSTS header
 buben.tech: did not receive HSTS header
 bubulazi.com: did not receive HSTS header
 bubulazy.com: did not receive HSTS header
 buch-cuber.de: max-age too low: 0
 buchheld.at: did not receive HSTS header
 bucket.tk: could not connect to host
 budgetthostels.nl: did not receive HSTS header
@@ -3614,16 +3613,17 @@ burningcrash.de: max-age too low: 600000
 burpsuite.site: could not connect to host
 burrow.ovh: could not connect to host
 burrowingsec.com: could not connect to host
 burtrum.top: could not connect to host
 buryat-mongol.cf: could not connect to host
 bush41.org: did not receive HSTS header
 business.lookout.com: could not connect to host
 business.medbank.com.mt: did not receive HSTS header
+businessadviceperth.com.au: did not receive HSTS header
 businesshosting.nl: did not receive HSTS header
 businessloanconnection.org: did not receive HSTS header
 busold.ws: could not connect to host
 bustimes.org.uk: did not receive HSTS header
 butchersworkshop.com: did not receive HSTS header
 butian518.com: did not receive HSTS header
 buttercoin.com: could not connect to host
 butterfieldstraining.com: could not connect to host
@@ -3673,17 +3673,17 @@ c3b.info: could not connect to host
 cabsites.com: could not connect to host
 cabusar.fr: did not receive HSTS header
 caconnect.org: could not connect to host
 cadao.me: did not receive HSTS header
 cadenadg.gr: did not receive HSTS header
 caesreon.com: could not connect to host
 cafe-murr.de: could not connect to host
 cafe-scientifique.org.ec: could not connect to host
-cafe-service.ru: could not connect to host
+cafe-service.ru: did not receive HSTS header
 caim.cz: did not receive HSTS header
 cajapopcorn.com: did not receive HSTS header
 cake.care: could not connect to host
 calcularpagerank.com.br: could not connect to host
 calgaryconstructionjobs.com: did not receive HSTS header
 calix.com: max-age too low: 0
 calltrackingreports.com: could not connect to host
 calomel.org: max-age too low: 2764800
@@ -3749,16 +3749,17 @@ casinolegal.pt: did not receive HSTS hea
 casinostest.com: could not connect to host
 casioshop.eu: did not receive HSTS header
 casjay.cloud: did not receive HSTS header
 casovi.cf: could not connect to host
 castagnonavocats.com: did not receive HSTS header
 cata.ga: could not connect to host
 catalin.pw: could not connect to host
 catarsisvr.com: could not connect to host
+catchers.cc: did not receive HSTS header
 catinmay.com: did not receive HSTS header
 catnapstudios.com: could not connect to host
 cavaleria.ro: did not receive HSTS header
 caveclan.org: did not receive HSTS header
 cavedevs.de: could not connect to host
 cavedroid.xyz: could not connect to host
 cavern.tv: did not receive HSTS header
 cayafashion.de: did not receive HSTS header
@@ -4110,16 +4111,17 @@ corporatesubscriptions.com.au: did not r
 correctpaardbatterijnietje.nl: did not receive HSTS header
 corruption-mc.net: could not connect to host
 corruption-rsps.net: could not connect to host
 corruption-server.net: could not connect to host
 costow.club: could not connect to host
 coughlan.de: did not receive HSTS header
 count.sh: could not connect to host
 couponcodeq.com: could not connect to host
+courageousparentsnetwork.org: did not receive HSTS header
 couragewhispers.ca: could not connect to host
 coursdeprogrammation.com: could not connect to host
 coursella.com: did not receive HSTS header
 cove.sh: did not receive HSTS header
 covenantbank.net: could not connect to host
 coverdat.com: did not receive HSTS header
 coverduck.ru: could not connect to host
 cpuvinf.eu.org: could not connect to host
@@ -4138,17 +4140,16 @@ crazycen.com: did not receive HSTS heade
 crazycraftland.de: could not connect to host
 crazycraftland.net: did not receive HSTS header
 crazyhotseeds.com: did not receive HSTS header
 crazyker.com: did not receive HSTS header
 creaescola.com: did not receive HSTS header
 create-test-publish.co.uk: could not connect to host
 creativeapple.ltd: did not receive HSTS header
 creativeartifice.com: did not receive HSTS header
-creativecommons.gr: did not receive HSTS header
 creativephysics.ml: could not connect to host
 creativeplayuk.com: did not receive HSTS header
 crecket.me: could not connect to host
 creditclear.com.au: did not receive HSTS header
 crendontech.com: could not connect to host
 crestoncottage.com: could not connect to host
 crimewatch.net.za: could not connect to host
 crisissurvivalspecialists.com: could not connect to host
@@ -4184,17 +4185,17 @@ cs-ubladego.pl: could not connect to hos
 csapak.com: did not receive HSTS header
 csawctf.poly.edu: could not connect to host
 csfs.org.uk: could not connect to host
 csgf.ru: did not receive HSTS header
 csgodicegame.com: did not receive HSTS header
 csgoelemental.com: could not connect to host
 csgokings.eu: could not connect to host
 csgoshifter.com: could not connect to host
-csohack.tk: could not connect to host
+csohack.tk: did not receive HSTS header
 cspbuilder.info: could not connect to host
 cssps.org: could not connect to host
 cssu.in: did not receive HSTS header
 csvape.com: did not receive HSTS header
 ct-status.org: could not connect to host
 ct-watches.dk: did not receive HSTS header
 cthulhuden.com: could not connect to host
 ctrl.blog: did not receive HSTS header
@@ -4216,16 +4217,17 @@ cuongquach.com: did not receive HSTS hea
 cuongthach.com: did not receive HSTS header
 curlyroots.com: did not receive HSTS header
 curroapp.com: could not connect to host
 cursosdnc.cl: max-age too low: 0
 curveweb.co.uk: did not receive HSTS header
 cusfit.com: did not receive HSTS header
 custe.rs: could not connect to host
 customadesign.com: did not receive HSTS header
+cutelariafiveladeouro.com.br: did not receive HSTS header
 cutorrent.com: could not connect to host
 cuvva.insure: did not receive HSTS header
 cvjm-memmingen.de: did not receive HSTS header
 cvtparking.co.uk: did not receive HSTS header
 cwage.com: could not connect to host
 cyanogenmod.xxx: could not connect to host
 cyber-konzept.de: did not receive HSTS header
 cybercecurity.com: did not receive HSTS header
@@ -4324,20 +4326,20 @@ davidhunter.scot: did not receive HSTS h
 davidnoren.com: did not receive HSTS header
 davidreinhardt.de: could not connect to host
 day.vip: did not receive HSTS header
 daylightcompany.com: did not receive HSTS header
 daytonaseaside.com: did not receive HSTS header
 db.gy: could not connect to host
 dbx.ovh: could not connect to host
 dcaracing.nl: could not connect to host
+dcbouncycastles.co.uk: did not receive HSTS header
 dccode.gov: could not connect to host
 dccoffeeproducts.com: did not receive HSTS header
 dccraft.net: could not connect to host
-dcpower.eu: max-age too low: 600
 dctxf.com: did not receive HSTS header
 dcuofriends.net: could not connect to host
 dcurt.is: did not receive HSTS header
 dcw.io: did not receive HSTS header
 ddatsh.com: did not receive HSTS header
 deadsoul.net: max-age too low: 0
 debank.tv: did not receive HSTS header
 debatch.se: could not connect to host
@@ -4649,16 +4651,17 @@ dudesunderwear.com.br: could not connect
 duelysthub.com: could not connect to host
 dukec.me: did not receive HSTS header
 dullsir.com: did not receive HSTS header
 dune.io: did not receive HSTS header
 dunea.nl: did not receive HSTS header
 duole30.com: did not receive HSTS header
 duongpho.com: did not receive HSTS header
 duskopy.top: could not connect to host
+dutchessuganda.com: did not receive HSTS header
 dutchrank.com: did not receive HSTS header
 duuu.ch: could not connect to host
 duyao.de: max-age too low: 86400
 dv189.com: did not receive HSTS header
 dycem-ns.com: did not receive HSTS header
 dycontrol.de: could not connect to host
 dylanscott.com.au: did not receive HSTS header
 dymersion.com: did not receive HSTS header
@@ -4735,17 +4738,16 @@ edited.de: did not receive HSTS header
 edix.ru: could not connect to host
 edk.com.tr: did not receive HSTS header
 edmodo.com: did not receive HSTS header
 edpubs.gov: did not receive HSTS header
 edsh.de: did not receive HSTS header
 educatio.tech: could not connect to host
 educourse.ga: could not connect to host
 eduvance.in: did not receive HSTS header
-eellak.gr: did not receive HSTS header
 eengezinswoning-in-alphen-aan-den-rijn-kopen.nl: could not connect to host
 eengezinswoning-in-de-friese-meren-kopen.nl: could not connect to host
 eengezinswoning-in-friesland-kopen.nl: could not connect to host
 eengezinswoning-in-leeuwarden-kopen.nl: could not connect to host
 eengezinswoning-in-pekela-kopen.nl: could not connect to host
 eengezinswoning-in-rijnwaarden-kopen.nl: could not connect to host
 eengezinswoning-in-sudwest-fryslan-kopen.nl: could not connect to host
 eengezinswoning-in-zeeland-kopen.nl: could not connect to host
@@ -4766,16 +4768,17 @@ ehealthcounselor.com: could not connect 
 ehipaadev.com: could not connect to host
 ehito.ovh: could not connect to host
 ehrenamt-skpfcw.de: could not connect to host
 eicfood.com: could not connect to host
 eidolonhost.com: did not receive HSTS header
 eifelindex.de: did not receive HSTS header
 eigo.work: could not connect to host
 eimanavicius.lt: did not receive HSTS header
+ejusu.com: did not receive HSTS header
 ekbanden.nl: could not connect to host
 eksik.com: did not receive HSTS header
 el-soul.com: did not receive HSTS header
 elaintehtaat.fi: could not connect to host
 elan-organics.com: did not receive HSTS header
 elanguest.pl: could not connect to host
 elanguest.ro: could not connect to host
 elanguest.ru: could not connect to host
@@ -4843,17 +4846,17 @@ endlesstone.com: did not receive HSTS he
 endohaus.ca: could not connect to host
 endohaus.com: could not connect to host
 endohaus.eu: could not connect to host
 enecoshop.nl: did not receive HSTS header
 enefan.jp: could not connect to host
 engelwerbung.com: did not receive HSTS header
 enginsight.com: did not receive HSTS header
 englishyamal.ru: did not receive HSTS header
-enigmacpt.com: could not connect to host
+enigmacpt.com: did not receive HSTS header
 enigmail.net: did not receive HSTS header
 enjen.net: did not receive HSTS header
 enjoymayfield.com: max-age too low: 0
 ensemble-vos-idees.fr: did not receive HSTS header
 enteente.club: could not connect to host
 enteente.space: could not connect to host
 enteente.xyz: could not connect to host
 enterdev.co: did not receive HSTS header
@@ -5130,17 +5133,17 @@ filey.co.uk: did not receive HSTS header
 filmesubtitrate2017.online: could not connect to host
 filo.xyz: did not receive HSTS header
 filoitoupediou.gr: did not receive HSTS header
 finalgear.com: did not receive HSTS header
 finalvpn.com: could not connect to host
 financieringsportaal.nl: did not receive HSTS header
 finanzkontor.net: could not connect to host
 findigo.fish: could not connect to host
-findingmyname.com: did not receive HSTS header
+findingmyname.com: max-age too low: 2629746
 findtutorsnearme.com: did not receive HSTS header
 finer04.pw: did not receive HSTS header
 fingent.com: did not receive HSTS header
 finiteheap.com: did not receive HSTS header
 finn.io: did not receive HSTS header
 finpt.com: did not receive HSTS header
 finsterlebnis.de: did not receive HSTS header
 fintechnics.com: did not receive HSTS header
@@ -5288,16 +5291,17 @@ frasys.io: did not receive HSTS header
 fraudempire.com: could not connect to host
 freeasinlliure.org: did not receive HSTS header
 freeflow.tv: could not connect to host
 freekdevries.nl: did not receive HSTS header
 freelanced.co.za: could not connect to host
 freelandinnovation.com: did not receive HSTS header
 freelo.cz: did not receive HSTS header
 freematthale.net: did not receive HSTS header
+freend.me: did not receive HSTS header
 freesoftwaredriver.com: could not connect to host
 freethought.org.au: could not connect to host
 freeutopia.org: did not receive HSTS header
 freqlabs.com: did not receive HSTS header
 freshfind.xyz: could not connect to host
 freshlymind.com: did not receive HSTS header
 frezbo.com: could not connect to host
 frforms.com: did not receive HSTS header
@@ -5668,16 +5672,17 @@ grow-shop.lv: could not connect to host
 grozip.com: did not receive HSTS header
 grunex.com: did not receive HSTS header
 grupopgn.com.br: could not connect to host
 gryffin.ga: could not connect to host
 gryffin.ml: could not connect to host
 gryffin.tk: could not connect to host
 gsm-map.com: could not connect to host
 gsnort.com: did not receive HSTS header
+gta5voice.net: did not receive HSTS header
 gtamodshop.org: could not connect to host
 gtanda.tk: could not connect to host
 gtech.work: did not receive HSTS header
 gtldna.com: could not connect to host
 gtlfsonlinepay.com: did not receive HSTS header
 gtraxapp.com: could not connect to host
 gts-schulsoftware.de: did not receive HSTS header
 guarajubaimoveis.com.br: did not receive HSTS header
@@ -5931,17 +5936,16 @@ hoekwoningverkopen.nl: could not connect
 hoerbuecher-und-hoerspiele.de: could not connect to host
 hofiprojekt.cz: did not receive HSTS header
 hogar123.es: could not connect to host
 hoiku-map.tokyo: could not connect to host
 hoiku-navi.com: did not receive HSTS header
 holgerlehner.com: could not connect to host
 holifestival-freyung.de: could not connect to host
 holymoly.lu: could not connect to host
-homa.website: could not connect to host
 homads.com: did not receive HSTS header
 home-coaching.be: did not receive HSTS header
 homeandyarddetailing.com: could not connect to host
 homeclouding.de: could not connect to host
 homedna.com: did not receive HSTS header
 homeexx.com: did not receive HSTS header
 homeownersassociationmanagementla.com: could not connect to host
 homeremodelingcontractorsca.com: did not receive HSTS header
@@ -6513,17 +6517,16 @@ johners.me: could not connect to host
 johngaltgroup.com: did not receive HSTS header
 johnhgaunt.com: did not receive HSTS header
 johnrom.com: could not connect to host
 johnverkerk.com: could not connect to host
 jointoweb.com: could not connect to host
 jonas-keidel.de: did not receive HSTS header
 jonasgroth.se: did not receive HSTS header
 jonathan.ir: could not connect to host
-jonathanj.nl: did not receive HSTS header
 jonathanreyes.com: did not receive HSTS header
 jondarby.com: did not receive HSTS header
 jongha.me: could not connect to host
 jonirrings.com: did not receive HSTS header
 jonn.me: could not connect to host
 jonnichols.info: could not connect to host
 jonsno.ws: could not connect to host
 joostbovee.nl: could not connect to host
@@ -6641,17 +6644,16 @@ katproxy.site: could not connect to host
 katproxy.tech: could not connect to host
 katproxy.top: could not connect to host
 katzen.me: did not receive HSTS header
 kaufkraftkiel.de: could not connect to host
 kauplusprofesional.com: did not receive HSTS header
 kausch.at: could not connect to host
 kavinvin.me: could not connect to host
 kazenojiyu.fr: did not receive HSTS header
-kb3.net: did not receive HSTS header
 kcluster.io: could not connect to host
 kd-plus.pp.ua: could not connect to host
 kdata.it: did not receive HSTS header
 kdbx.online: could not connect to host
 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
@@ -6664,16 +6666,17 @@ ken-electric.com.br: could not connect t
 kenkoelectric.com: did not receive HSTS header
 kentacademiestrust.org.uk: did not receive HSTS header
 kerangalam.com: could not connect to host
 kerksanders.nl: did not receive HSTS header
 kermadec.blog: could not connect to host
 kermadec.net: could not connect to host
 kernl.us: did not receive HSTS header
 keskeces.com: did not receive HSTS header
+kevinbusse.de: did not receive HSTS header
 kevinroebert.de: did not receive HSTS header
 keymaster.lookout.com: did not receive HSTS header
 kfbrussels.be: could not connect to host
 kg-rating.com: could not connect to host
 kgxtech.com: max-age too low: 2592000
 khaganat.net: did not receive HSTS header
 ki-on.net: did not receive HSTS header
 kialo.com: did not receive HSTS header
@@ -6875,16 +6878,17 @@ lagalerievirtuelle.fr: did not receive H
 lagier.xyz: could not connect to host
 lagoza.name: could not connect to host
 lainchan.org: did not receive HSTS header
 laisashop.com.br: could not connect to host
 lamaland.ru: did not receive HSTS header
 lamarieealhonneur.com: did not receive HSTS header
 lambda-complex.org: could not connect to host
 lambdafive.co.uk: could not connect to host
+lamereabizix.com: did not receive HSTS header
 lamomebijou.paris: did not receive HSTS header
 lampl.info: did not receive HSTS header
 lana.swedbank.se: did not receive HSTS header
 lanauzedesigns.com: did not receive HSTS header
 lanboll.com: could not connect to host
 lancehoteis.com: did not receive HSTS header
 lancehoteis.com.br: did not receive HSTS header
 land-links.org: did not receive HSTS header
@@ -6942,17 +6946,17 @@ learningorder.com: could not connect to 
 lebrun.org: could not connect to host
 lecourtier.fr: did not receive HSTS header
 leddruckalarm.de: did not receive HSTS header
 ledgerscope.net: could not connect to host
 leen.io: did not receive HSTS header
 leetsaber.com: did not receive HSTS header
 legarage.org: did not receive HSTS header
 legavenue.com.br: did not receive HSTS header
-legitaxi.com: could not connect to host
+legitaxi.com: did not receive HSTS header
 legymnase.eu: did not receive HSTS header
 lehtinen.xyz: did not receive HSTS header
 leighneithardt.com: could not connect to host
 leinir.dk: did not receive HSTS header
 leitner.com.au: did not receive HSTS header
 leiyun.me: did not receive HSTS header
 lellyboi.ml: could not connect to host
 lelongbank.com: did not receive HSTS header
@@ -6983,32 +6987,32 @@ letitfly.me: could not connect to host
 letras.mus.br: did not receive HSTS header
 letsmultiplayerplay.com: did not receive HSTS header
 letstox.com: could not connect to host
 letustravel.tk: could not connect to host
 levatc.tk: did not receive HSTS header
 level-10.net: could not connect to host
 levelum.com: did not receive HSTS header
 levert.ch: could not connect to host
-lewisjuggins.co.uk: did not receive HSTS header
+lewisjuggins.co.uk: could not connect to host
 lexpierce.social: could not connect to host
 lez-cuties.com: could not connect to host
 lfullerdesign.com: could not connect to host
 lg21.co: could not connect to host
 lgiswa.com.au: did not receive HSTS header
 lgrs.com.au: did not receive HSTS header
 lgts.se: could not connect to host
 liaillustr.at: did not receive HSTS header
 liam-w.com: could not connect to host
 liamjack.fr: could not connect to host
 lianye.in: could not connect to host
 lianyexiuchang.in: could not connect to host
 liaoshuma.com: could not connect to host
 libanco.com: could not connect to host
-libdeer.so: could not connect to host
+libdeer.so: did not receive HSTS header
 libertyrp.org: did not receive HSTS header
 libfte.org: did not receive HSTS header
 library.linode.com: did not receive HSTS header
 librechan.net: could not connect to host
 libreduca.com: could not connect to host
 lichess4545.com: did not receive HSTS header
 lichess4545.tv: did not receive HSTS header
 liebach.me: did not receive HSTS header
@@ -7276,17 +7280,16 @@ malwaretips.com: did not receive HSTS he
 malwre.io: could not connect to host
 malya.fr: 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
 mammut.space: could not connect to host
-mamospienas.lt: did not receive HSTS header
 manaboutahor.se: did not receive HSTS header
 manage.zenpayroll.com: did not receive HSTS header
 manage4all.com: could not connect to host
 manageall.de: could not connect to host
 manageforall.com: could not connect to host
 manageforall.de: could not connect to host
 managemynetsuite.com: did not receive HSTS header
 manantial.mx: could not connect to host
@@ -7433,16 +7436,17 @@ mecenat-cassous.com: did not receive HST
 mechmk1.me: did not receive HSTS header
 medallia.io: could not connect to host
 media-access.online: did not receive HSTS header
 mediacru.sh: could not connect to host
 mediafinancelab.org: did not receive HSTS header
 mediamag.am: max-age too low: 0
 mediawikicn.org: could not connect to host
 medienservice-fritz.de: did not receive HSTS header
+medifab.online: did not receive HSTS header
 medirich.co: could not connect to host
 meditek-dv.ru: could not connect to host
 mediterenopmaandag.nl: did not receive HSTS header
 medm-test.com: could not connect to host
 medzinenews.com: did not receive HSTS header
 meedoennoordkop.nl: did not receive HSTS header
 meedoenzaanstad.nl: did not receive HSTS header
 meetfinch.com: could not connect to host
@@ -7714,22 +7718,22 @@ morganestes.com: max-age too low: 0
 morningcalculation.com: could not connect to host
 morninglory.com: max-age too low: 2592000
 mornings.com: did not receive HSTS header
 morotech.com.br: could not connect to host
 morpheusx.at: could not connect to host
 morpheusxaut.net: could not connect to host
 morpork.xyz: could not connect to host
 mortgagecentersmo.com: did not receive HSTS header
+moso.io: did not receive HSTS header
 mostwuat.com: could not connect to host
 motherbase.io: could not connect to host
 motionfreight.com: could not connect to host
 motionpicturesolutions.com: did not receive HSTS header
 motorcheck.ie: did not receive HSTS header
-motorsportdiesel.com: did not receive HSTS header
 mottvd.com: could not connect to host
 moudicat.com: max-age too low: 6307200
 moula.com.au: did not receive HSTS header
 mountainmusicpromotions.com: did not receive HSTS header
 movabletype.net: max-age too low: 3600
 moviedollars.com: did not receive HSTS header
 moviesabout.net: could not connect to host
 movio.ga: did not receive HSTS header
@@ -7745,16 +7749,17 @@ mqas.net: could not connect to host
 mr-hosting.com: could not connect to host
 mrawe.com: could not connect to host
 mrdani.net: could not connect to host
 mredsanders.net: did not receive HSTS header
 mrettich.org: did not receive HSTS header
 mrhee.com: did not receive HSTS header
 mrning.com: did not receive HSTS header
 mrnonz.com: max-age too low: 0
+mrparker.pw: did not receive HSTS header
 mrpopat.in: did not receive HSTS header
 mrs-shop.com: did not receive HSTS header
 mrsbairds.com: max-age too low: 86400
 msc-seereisen.net: max-age too low: 0
 mstd.tokyo: did not receive HSTS header
 mstdn-tech.jp: could not connect to host
 mszaki.com: did not receive HSTS header
 mt.me.uk: could not connect to host
@@ -7773,17 +7778,17 @@ munich-rage.de: could not connect to hos
 munkiepus.com: did not receive HSTS header
 munuc.org: did not receive HSTS header
 munzee.com: did not receive HSTS header
 muonium.ch: could not connect to host
 muriburi.land: could not connect to host
 muriburiland.com: could not connect to host
 murodese.org: could not connect to host
 murrayrun.com: did not receive HSTS header
-museminder2.com: could not connect to host
+museminder2.com: did not receive HSTS header
 musewearflipflops.com: could not connect to host
 mushroomandfern.com: could not connect to host
 musi.cx: could not connect to host
 musicalbim.com.br: max-age too low: 0
 musikkfondene.no: did not receive HSTS header
 musikzug-bookholzberg.de: did not receive HSTS header
 mustardking.me: did not receive HSTS header
 mustika.cf: could not connect to host
@@ -7809,17 +7814,16 @@ mychocolateweightloss.com: could not con
 myclientsplus.com: did not receive HSTS header
 mycollab.net: could not connect to host
 mycoted.com: did not receive HSTS header
 mydeos.com: could not connect to host
 mydigipass.com: did not receive HSTS header
 mydnaresults.com: could not connect to host
 mydnatest.com: did not receive HSTS header
 mydriversedge.com: did not receive HSTS header
-myeffect.today: did not receive HSTS header
 mygate.at: could not connect to host
 mygivingcircle.org: did not receive HSTS header
 mygooder.com: did not receive HSTS header
 mygov.scot: did not receive HSTS header
 myhair.asia: did not receive HSTS header
 myicare.org: did not receive HSTS header
 myiocc.org: could not connect to host
 myip.tech: max-age too low: 2592000
@@ -7834,16 +7838,17 @@ mynewselfbariatrics.com: did not receive
 myni.io: could not connect to host
 mynigma.org: did not receive HSTS header
 mypagella.com: could not connect to host
 mypagella.eu: could not connect to host
 mypagella.it: could not connect to host
 mypanier.com: max-age too low: 7889238
 mypension.ca: could not connect to host
 myphonebox.de: could not connect to host
+myqdu.cn: did not receive HSTS header
 myraytech.net: did not receive HSTS header
 myrig.net: could not connect to host
 myrsa.in: did not receive HSTS header
 mysecretrewards.com: could not connect to host
 myspa.asia: did not receive HSTS header
 mystery-science-theater-3000.de: did not receive HSTS header
 mysteryblog.de: did not receive HSTS header
 mythlogic.com: did not receive HSTS header
@@ -7875,16 +7880,17 @@ namacindia.com: did not receive HSTS hea
 namaho.com: could not connect to host
 named.ga: could not connect to host
 nametaken-cloud.duckdns.org: could not connect to host
 namethatbone.com: could not connect to host
 namorico.me: could not connect to host
 nan.ci: did not receive HSTS header
 nan.zone: could not connect to host
 nandex.org: could not connect to host
+nani.io: did not receive HSTS header
 naniki.co.uk: did not receive HSTS header
 nanogeneinc.com: could not connect to host
 nanokamo.com: did not receive HSTS header
 nanrenba.net: could not connect to host
 nansay.cn: could not connect to host
 nanto.eu: could not connect to host
 narodniki.com: did not receive HSTS header
 narviz.com: did not receive HSTS header
@@ -8023,17 +8029,17 @@ ninjan.co: did not receive HSTS header
 ninjaspiders.com: did not receive HSTS header
 nippler.org: could not connect to host
 nippombashi.net: did not receive HSTS header
 nipponcareers.com: did not receive HSTS header
 nirna.io: did not receive HSTS header
 nitropur.de: max-age too low: 0
 nixien.fr: could not connect to host
 nixmag.net: could not connect to host
-nkautoservice.nl: could not connect to host
+nkautoservice.nl: did not receive HSTS header
 nkb.in.th: could not connect to host
 nll.fi: could not connect to host
 nmadda.com: could not connect to host
 nmctest.net: could not connect to host
 nmueller.at: could not connect to host
 nnote.net: did not receive HSTS header
 nnya.cat: could not connect to host
 no-ip.cz: did not receive HSTS header
@@ -8052,16 +8058,17 @@ nofrillsdns.com: did not receive HSTS he
 noima.com: did not receive HSTS header
 nolag.host: could not connect to host
 nolberg.net: did not receive HSTS header
 nolimitsbook.de: did not receive HSTS header
 nolte.work: could not connect to host
 nomorebytes.de: could not connect to host
 noodlesandwich.com: did not receive HSTS header
 nootropicsource.com: did not receive HSTS header
+nopaste.xyz: did not receive HSTS header
 nope.website: could not connect to host
 nopex.no: could not connect to host
 nopol.de: could not connect to host
 norandom.com: could not connect to host
 norb.at: could not connect to host
 nordiccasinocommunity.com: did not receive HSTS header
 nordlicht.photography: did not receive HSTS header
 norge.guide: could not connect to host
@@ -8202,16 +8209,17 @@ omacostudio.com: could not connect to ho
 omgaanmetidealen.com: could not connect to host
 ominto.com: did not receive HSTS header
 ommahpost.com: did not receive HSTS header
 omniti.com: max-age too low: 1
 omquote.gq: could not connect to host
 omskit.ru: did not receive HSTS header
 omyogarishikesh.com: did not receive HSTS header
 on-te.ch: did not receive HSTS header
+ona.io: did not receive HSTS header
 one-pe.com: did not receive HSTS header
 onearth.one: did not receive HSTS header
 oneb4nk.com: could not connect to host
 onecycling.my: could not connect to host
 onecycling.world: could not connect to host
 onefour.co: could not connect to host
 onehourloan.com: could not connect to host
 onehourloan.sg: did not receive HSTS header
@@ -8256,35 +8264,35 @@ onyxwall.link: could not connect to host
 onyxwall.net: could not connect to host
 oo.edu.rs: did not receive HSTS header
 ookjesprookje.nl: could not connect to host
 ooonja.de: did not receive HSTS header
 ooooush.co.uk: could not connect to host
 oopsmycase.com: could not connect to host
 oopsorup.com: could not connect to host
 oost.io: could not connect to host
+opcaobolsas.com.br: did not receive HSTS header
 open-mx.de: could not connect to host
-open-source.gr: did not receive HSTS header
 open-to-repair.fr: max-age too low: 86400
 openas.org: could not connect to host
 openconcept.no: did not receive HSTS header
 opendesk.cc: did not receive HSTS header
 opengateway.fr: did not receive HSTS header
 openmind-shop.de: did not receive HSTS header
 openmtbmap.org: did not receive HSTS header
 openpriv.pw: could not connect to host
 openprovider.nl: did not receive HSTS header
 openshift.redhat.com: did not receive HSTS header
 opensourcedmind.eu: max-age too low: 172800
 opensourcehouse.net: could not connect to host
 openspace.xxx: did not receive HSTS header
 opensrd.com: could not connect to host
 openssf.org: did not receive HSTS header
-openwifi.gr: did not receive HSTS header
 openxmpp.com: could not connect to host
+opiates.net: did not receive HSTS header
 opim.ca: did not receive HSTS header
 opperwall.net: could not connect to host
 opportunitycorps.org: max-age too low: 43200
 opsafewinter.net: could not connect to host
 opsbears.com: did not receive HSTS header
 opstacks.com: did not receive HSTS header
 optenhoefel.de: could not connect to host
 optimal-e.com: did not receive HSTS header
@@ -8433,16 +8441,17 @@ pastdream.xyz: could not connect to host
 paste.linode.com: could not connect to host
 pastebin.linode.com: could not connect to host
 pastenib.com: could not connect to host
 paster.li: did not receive HSTS header
 pataua.kiwi: did not receive HSTS header
 paternitydnatest.com: could not connect to host
 patfs.com: did not receive HSTS header
 patientinsight.net: did not receive HSTS header
+patrick.dark.name: did not receive HSTS header
 patt.us: did not receive HSTS header
 patterson.mp: could not connect to host
 paul-kerebel.pro: could not connect to host
 paulbunyanmls.com: did not receive HSTS header
 paulerhof.com: did not receive HSTS header
 paulproell.at: did not receive HSTS header
 paulyang.cn: did not receive HSTS header
 pavelfojt.cz: did not receive HSTS header
@@ -8515,16 +8524,17 @@ personaldatabasen.no: could not connect 
 personalinjurylist.com: could not connect to host
 personalizedtouch.co: could not connect to host
 perthdevicelab.com: did not receive HSTS header
 pestalozzishop.com.br: could not connect to host
 pet-nsk.ru: could not connect to host
 petbooking.it: did not receive HSTS header
 petchart.net: could not connect to host
 peterkshultz.com: did not receive HSTS header
+peternagy.ie: did not receive HSTS header
 petersmark.com: did not receive HSTS header
 pethub.com: did not receive HSTS header
 petit.site: could not connect to host
 petplum.com: could not connect to host
 petravdbos.nl: did not receive HSTS header
 petrkrapek.cz: did not receive HSTS header
 petrolplus.ru: max-age too low: 7776000
 petrovsky.pro: could not connect to host
@@ -8641,16 +8651,17 @@ plus-digital.net: did not receive HSTS h
 plus-u.com.au: did not receive HSTS header
 plut.org: did not receive HSTS header
 plymouthsoftplay.co.uk: could not connect to host
 pm.me: did not receive HSTS header
 pm13-media.cz: could not connect to host
 pmac.pt: could not connect to host
 pmemanager.fr: did not receive HSTS header
 pmnts.io: could not connect to host
+pneusgppremium.com.br: did not receive HSTS header
 pnukee.com: did not receive HSTS header
 po.gl: did not receive HSTS header
 pocakdrops.com: did not receive HSTS header
 pocketsix.com: could not connect to host
 pocloud.homelinux.net: could not connect to host
 podiumsdiskussion.org: did not receive HSTS header
 poiema.com.sg: did not receive HSTS header
 poinsot.beer: could not connect to host
@@ -8739,16 +8750,17 @@ prettyphotoart.de: did not receive HSTS 
 pretzlaff.info: did not receive HSTS header
 preworkout.me: could not connect to host
 prgslab.net: could not connect to host
 pridoc.se: did not receive HSTS header
 prilock.com: did not receive HSTS header
 primecaplending.com: could not connect to host
 primotiles.co.uk: did not receive HSTS header
 prinbanat.ngo: did not receive HSTS header
+princesparktouch.com: did not receive HSTS header
 printerest.io: could not connect to host
 printersonline.be: did not receive HSTS header
 printery.be: could not connect to host
 priolkar.com: did not receive HSTS header
 privacylabs.io: did not receive HSTS header
 privacyrup.net: could not connect to host
 privytime.com: could not connect to host
 prnt.li: did not receive HSTS header
@@ -8849,16 +8861,17 @@ pzgreni.ch: did not receive HSTS header
 pzme.me: could not connect to host
 q-rickroll-u.pw: could not connect to host
 q2.si: did not receive HSTS header
 q8mp3.me: did not receive HSTS header
 qbik.de: did not receive HSTS header
 qbnt.ca: could not connect to host
 qccqld.org.au: could not connect to host
 qiannews.net: could not connect to host
+qimiao.io: did not receive HSTS header
 qingxuan.info: could not connect to host
 qinxi1992.com: could not connect to host
 qionglu.pw: did not receive HSTS header
 qipp.com: did not receive HSTS header
 qixxit.de: did not receive HSTS header
 qldconservation.org: could not connect to host
 qonqa.de: did not receive HSTS header
 qop.io: could not connect to host
@@ -9033,42 +9046,39 @@ remedioskaseros.com: did not receive HST
 remedium.de: did not receive HSTS header
 rememberthis.co.za: could not connect to host
 remitatm.com: did not receive HSTS header
 remodela.com.ve: could not connect to host
 remonttitekniikka.fi: could not connect to host
 remoteham.com: could not connect to host
 remotestance.com: did not receive HSTS header
 rencaijia.com: did not receive HSTS header
-renem.net: did not receive HSTS header
 rengarenkblog.com: could not connect to host
 renideo.fr: could not connect to host
 renkhosting.com: could not connect to host
 renlong.org: did not receive HSTS header
 renrenss.com: could not connect to host
 renscreations.com: did not receive HSTS header
 rentacarcluj.xyz: could not connect to host
 rentbrowsertrain.me: could not connect to host
 rentcarassist.com: could not connect to host
 renteater.com: could not connect to host
 rentex.com: did not receive HSTS header
-renuo.ch: did not receive HSTS header
 renyiyou.com: could not connect to host
 repex.co.il: did not receive HSTS header
 replacemychina.com: could not connect to host
 report-to.com: did not receive HSTS header
 report-to.io: did not receive HSTS header
 report-uri.io: did not receive HSTS header
 report-url.com: did not receive HSTS header
 report-url.io: did not receive HSTS header
 reported.ly: did not receive HSTS header
 reporturl.com: did not receive HSTS header
 reporturl.io: did not receive HSTS header
 reprolife.co.uk: could not connect to host
-republic.gr: did not receive HSTS header
 res-rheingau.de: did not receive HSTS header
 res42.com: did not receive HSTS header
 reserve-online.net: did not receive HSTS header
 residentsinsurance.co.uk: did not receive HSTS header
 resl20.servehttp.com: could not connect to host
 respice.xyz: could not connect to host
 restaurace-klokocka.cz: did not receive HSTS header
 restchart.com: did not receive HSTS header
@@ -9076,16 +9086,17 @@ returnofwar.com: could not connect to ho
 revapost.ch: could not connect to host
 revealdata.com: did not receive HSTS header
 revelaciones.tv: could not connect to host
 revello.org: did not receive HSTS header
 reverie.pw: could not connect to host
 review.info: did not receive HSTS header
 reviewbestseller.com: did not receive HSTS header
 reviewjust.com: did not receive HSTS header
+revistapequenosolhares.com.br: did not receive HSTS header
 revtut.net: could not connect to host
 rewardstock.com: max-age too low: 0
 rewopit.net: could not connect to host
 rhapsodhy.hu: could not connect to host
 rhdigital.pro: could not connect to host
 rhering.de: could not connect to host
 rhodosdreef.nl: could not connect to host
 riaucybersolution.net: did not receive HSTS header
@@ -9139,17 +9150,16 @@ rocketnet.ml: could not connect to host
 rockeyscrivo.com: did not receive HSTS header
 rocksberg.net: could not connect to host
 rockz.io: did not receive HSTS header
 rodney.id.au: did not receive HSTS header
 rodneybrooksjr.com: did not receive HSTS header
 rodosto.com: did not receive HSTS header
 roeper.party: could not connect to host
 roesemann.email: could not connect to host
-roffe.nu: did not receive HSTS header
 roguelikecenter.fr: did not receive HSTS header
 rohlik.cz: did not receive HSTS header
 roketix.co.uk: could not connect to host
 rolandreed.cn: did not receive HSTS header
 rolandslate.com: did not receive HSTS header
 rolemaster.net: could not connect to host
 rolroer.co.za: could not connect to host
 romaimperator.com: did not receive HSTS header
@@ -9201,16 +9211,17 @@ rubyshop.nl: max-age too low: 604800
 rudeotter.com: did not receive HSTS header
 rue-de-la-vieille.fr: max-age too low: 0
 ruflay.ru: did not receive HSTS header
 rugirlfriend.com: could not connect to host
 rugs.ca: did not receive HSTS header
 rugstorene.co.uk: did not receive HSTS header
 ruig.jp: could not connect to host
 ruitershoponline.nl: did not receive HSTS header
+rumlager.de: max-age too low: 600000
 rumoterra.com.br: could not connect to host
 runawebinar.nl: could not connect to host
 runhardt.eu: did not receive HSTS header
 runtl.com: did not receive HSTS header
 runtondev.com: did not receive HSTS header
 ruqu.nl: could not connect to host
 rusadmin.biz: did not receive HSTS header
 ruska-modra.cz: did not receive HSTS header
@@ -9239,17 +9250,17 @@ safetyrisk.net: did not receive HSTS hea
 safewings-nh.nl: could not connect to host
 safing.me: did not receive HSTS header
 sagarhandicraft.com: could not connect to host
 sageth.com: could not connect to host
 sah3.net: could not connect to host
 saharalondon.com: max-age too low: 0
 saigonstar.de: did not receive HSTS header
 sail-nyc.com: did not receive HSTS header
-saint-astier-triathlon.com: did not receive HSTS header
+saint-astier-triathlon.com: could not connect to host
 saintjohnlutheran.church: did not receive HSTS header
 sairai.bid: could not connect to host
 sakaserver.com: did not receive HSTS header
 sakib.ninja: did not receive HSTS header
 sakurabuff.com: could not connect to host
 saleslift.pl: did not receive HSTS header
 salserocafe.com: did not receive HSTS header
 salserototal.com: could not connect to host
@@ -9361,17 +9372,16 @@ scrapings.net: could not connect to host
 screencaster.io: did not receive HSTS header
 screenresolution.space: could not connect to host
 screensaversplanet.com: did not receive HSTS header
 scribbleserver.com: could not connect to host
 scribe.systems: could not connect to host
 scrion.com: could not connect to host
 scriptenforcer.net: did not receive HSTS header
 scriptict.nl: could not connect to host
-scriptum.gr: did not receive HSTS header
 scrollstory.com: did not receive HSTS header
 sdhmanagementgroup.com: could not connect to host
 sdia.ru: could not connect to host
 sdmoscow.ru: could not connect to host
 sdrobs.com: did not receive HSTS header
 sdsl-speedtest.de: could not connect to host
 se7ensins.com: did not receive HSTS header
 seans.cc: did not receive HSTS header
@@ -9409,17 +9419,16 @@ securita.eu: did not receive HSTS header
 security-carpet.com: could not connect to host
 security-thoughts.org: could not connect to host
 securityarena.com: could not connect to host
 securitybsides.pl: did not receive HSTS header
 securityglance.com: could not connect to host
 securityinet.biz: did not receive HSTS header
 securityinet.net: did not receive HSTS header
 securityinet.org.il: could not connect to host
-securityprimes.in: did not receive HSTS header
 securiviera.ch: did not receive HSTS header
 sedoexpert.nl: could not connect to host
 sedoexperts.nl: could not connect to host
 sedrubal.de: could not connect to host
 sedziapilkarski.pl: did not receive HSTS header
 seedboxers.net: could not connect to host
 seefunk.net: did not receive HSTS header
 seele.ca: could not connect to host
@@ -9494,18 +9503,18 @@ shadowmorph.info: did not receive HSTS h
 shadowroket.com: did not receive HSTS header
 shadowshocks.net: could not connect to host
 shadowsocks.gift: did not receive HSTS header
 shadowsocks.net: could not connect to host
 shadowsocks.vc: could not connect to host
 shadowsocks.wiki: did not receive HSTS header
 shadowsocksvpn.com: did not receive HSTS header
 shadowsoks.com: could not connect to host
-shadowsu.info: could not connect to host
-shadowsu.top: could not connect to host
+shadowsu.info: did not receive HSTS header
+shadowsu.top: did not receive HSTS header
 shagi29.ru: did not receive HSTS header
 shahbeat.com: did not receive HSTS header
 shakebox.de: could not connect to host
 shanesage.com: could not connect to host
 shapesedinburgh.co.uk: did not receive HSTS header
 shardsoft.com: could not connect to host
 shareeri.com: did not receive HSTS header
 shareimg.xyz: could not connect to host
@@ -9695,16 +9704,17 @@ smexpt.com: did not receive HSTS header
 smileawei.com: did not receive HSTS header
 smimea.com: could not connect to host
 smirkingwhorefromhighgarden.pro: could not connect to host
 smittix.co.uk: did not receive HSTS header
 smkn1lengkong.sch.id: did not receive HSTS header
 smksi2.com: could not connect to host
 smksultanismail2.com: could not connect to host
 smkw.com: did not receive HSTS header
+smm.im: did not receive HSTS header
 smol.cat: did not receive HSTS header
 smove.sg: did not receive HSTS header
 smplix.com: could not connect to host
 smspodmena.ru: did not receive HSTS header
 smtp.bz: did not receive HSTS header
 smusg.com: did not receive HSTS header
 smzsq.com: could not connect to host
 snailing.org: could not connect to host
@@ -9720,16 +9730,17 @@ snoozedds.com: max-age too low: 600
 snoqualmiefiber.org: could not connect to host
 sobabox.ru: could not connect to host
 sobinski.pl: did not receive HSTS header
 soccergif.com: could not connect to host
 social-journey.com: could not connect to host
 socialbillboard.com: could not connect to host
 socialcs.xyz: could not connect to host
 socialgrowing.cl: did not receive HSTS header
+socialhams.net: did not receive HSTS header
 socialhead.io: could not connect to host
 socialhub.com: did not receive HSTS header
 socializam.com: did not receive HSTS header
 socialprize.com: could not connect to host
 socialspirit.com.br: did not receive HSTS header
 sockeye.cc: could not connect to host
 socomponents.co.uk: could not connect to host
 sodacore.com: could not connect to host
@@ -9828,17 +9839,16 @@ sportchirp-internal.azurewebsites.net: d
 sporthit.ru: did not receive HSTS header
 sportifik.com: did not receive HSTS header
 sportingoods.com.br: could not connect to host
 sportscollection.com.br: could not connect to host
 sportwette.eu: did not receive HSTS header
 spot-events.com: could not connect to host
 spotifyripper.tk: could not connect to host
 spotlightsrule.ddns.net: could not connect to host
-spr.id.au: did not receive HSTS header
 spresso.me: did not receive HSTS header
 sprint.ml: did not receive HSTS header
 sprk.fitness: did not receive HSTS header
 sproutconnections.com: could not connect to host
 sprutech.de: could not connect to host
 sqetsa.com: did not receive HSTS header
 squaddraft.com: did not receive HSTS header
 square.gs: could not connect to host
@@ -9983,17 +9993,16 @@ suian.or.jp: max-age too low: 86400
 suite73.org: could not connect to host
 summitbankofkc.com: did not receive HSTS header
 summitmasters.net: did not receive HSTS header
 sumoatm.com: did not receive HSTS header
 sumoscout.de: could not connect to host
 sun-wellness-online.com.vn: did not receive HSTS header
 suncountrymarine.com: did not receive HSTS header
 sundaycooks.com: max-age too low: 2592000
-sunflyer.cn: did not receive HSTS header
 sunlandsg.vn: did not receive HSTS header
 sunnyfruit.ru: could not connect to host
 sunshinepress.org: could not connect to host
 sunyanzi.tk: could not connect to host
 suos.io: could not connect to host
 supcro.com: could not connect to host
 super-erotica.ru: could not connect to host
 super-garciniaslim.com: could not connect to host
@@ -10018,31 +10027,30 @@ superwally.org: could not connect to hos
 supes.io: did not receive HSTS header
 support4server.de: did not receive HSTS header
 suprlink.net: could not connect to host
 supweb.ovh: did not receive HSTS header
 surasak.xyz: could not connect to host
 surfeasy.com: did not receive HSTS header
 surfone-leucate.com: did not receive HSTS header
 survivalistplanet.com: could not connect to host
-sussexwebdesigns.com: did not receive HSTS header
+sussexwebdesigns.com: could not connect to host
 sussexwebdesigns.info: did not receive HSTS header
 sussexwebsites.info: did not receive HSTS header
 sustainability.gov: did not receive HSTS header
 suzukikenichi.com: did not receive HSTS header
 svadobkajuvi.sk: did not receive HSTS header
 svatba-frantovi.cz: could not connect to host
 svenluijten.com: did not receive HSTS header
 svenskacasino.com: did not receive HSTS header
 svenskaservern.se: could not connect to host
 svetjakonadlani.cz: did not receive HSTS header
 swaleacademiestrust.org.uk: max-age too low: 2592000
 swanseapartyhire.co.uk: did not receive HSTS header
 swdatlantico.pt: could not connect to host
-sweets-mimatsu.com: did not receive HSTS header
 sweetstreats.ca: could not connect to host
 swiftconf.com: did not receive HSTS header
 swiggy.com: did not receive HSTS header
 swimming.ca: did not receive HSTS header
 swisstranslate.ch: did not receive HSTS header
 swisstranslate.fr: did not receive HSTS header
 swite.com: did not receive HSTS header
 swmd5c.org: could not connect to host
@@ -10128,16 +10136,17 @@ tasta.ro: did not receive HSTS header
 tastyyy.co: could not connect to host
 tatilbus.com: did not receive HSTS header
 tatt.io: could not connect to host
 tattvaayoga.com: did not receive HSTS header
 tauchkater.de: could not connect to host
 tavoittaja.fi: did not receive HSTS header
 tavopica.lt: did not receive HSTS header
 taxbench.com: could not connect to host
+taxi-24std.de: did not receive HSTS header
 taxsnaps.co.nz: did not receive HSTS header
 tazj.in: did not receive HSTS header
 tazz.in: could not connect to host
 tbspace.de: did not receive HSTS header
 tc-bonito.de: did not receive HSTS header
 tcao.info: could not connect to host
 tcby45.xyz: could not connect to host
 tcdw.net: did not receive HSTS header
@@ -10369,17 +10378,16 @@ thomasnet.fr: could not connect to host
 thomasschweizer.net: could not connect to host
 thorncreek.net: did not receive HSTS header
 thriveapproach.co.uk: did not receive HSTS header
 thrivewellnesshub.co.za: did not receive HSTS header
 throughthelookingglasslens.co.uk: could not connect to host
 thumbtack.com: did not receive HSTS header
 thundercampaign.com: could not connect to host
 thyrex.fr: did not receive HSTS header
-thzone.net: did not receive HSTS header
 ti.blog.br: could not connect to host
 tianxing.pro: did not receive HSTS header
 tianxingvpn.pro: could not connect to host
 ticketoplichting.nl: did not receive HSTS header
 tickopa.co.uk: could not connect to host
 tickreport.com: did not receive HSTS header
 ticktock.today: did not receive HSTS header
 tictactux.de: could not connect to host
@@ -10455,17 +10463,16 @@ tobias-bielefeld.de: did not receive HST
 tobiasmathes.com: could not connect to host
 tobiasmathes.name: could not connect to host
 tobiasofficial.at: could not connect to host
 tobiassachs.cf: could not connect to host
 tobiassachs.tk: could not connect to host
 todesschaf.org: could not connect to host
 todo.is: did not receive HSTS header
 todobazar.es: could not connect to host
-todoscomciro.com: did not receive HSTS header
 tofu.im: could not connect to host
 togelonlinecommunity.com: did not receive HSTS header
 toka.sg: did not receive HSTS header
 tokenloan.com: could not connect to host
 tokobungaasryflorist.com: did not receive HSTS header
 tokobungadipadangflorist.com: did not receive HSTS header
 tokoone.com: did not receive HSTS header
 tokotamz.net: could not connect to host
@@ -10553,16 +10560,17 @@ tranceheal.me: did not receive HSTS head
 tranos.de: did not receive HSTS header
 transcriptionwave.com: did not receive HSTS header
 transdirect.com.au: did not receive HSTS header
 transformify.org: did not receive HSTS header
 transl8.eu: did not receive HSTS header
 transportal.sk: did not receive HSTS header
 traumhuetten.de: did not receive HSTS header
 travality.ru: could not connect to host
+travel-dealz.de: did not receive HSTS header
 travel-kuban.ru: did not receive HSTS header
 travelinsightswriter.com: could not connect to host
 travelinsurance.co.nz: did not receive HSTS header
 trazosdearte.com: did not receive HSTS header
 treatprostatewithhifu.com: could not connect to host
 treeby.net: could not connect to host
 treeremovaljohannesburg.co.za: could not connect to host
 treino.blog.br: could not connect to host
@@ -10853,27 +10861,28 @@ vasanth.org: could not connect to host
 vbest.net: could not connect to host
 vbhelp.org: 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
 vdhco.be: did not receive HSTS header
 veblen.com: did not receive HSTS header
-vechkasov.ru: did not receive HSTS header
+vechkasov.ru: could not connect to host
 vedatkamer.com: did not receive HSTS header
 vega-motor.com.ua: did not receive HSTS header
 vega.dyndns.info: could not connect to host
 vegalengd.com: did not receive HSTS header
 veganosonline.com: could not connect to host
 veggiefasting.com: could not connect to host
 veggiesbourg.fr: did not receive HSTS header
 vegis.ro: did not receive HSTS header
 vehent.org: did not receive HSTS header
 vehicleuplift.co.uk: did not receive HSTS header
+velotyretz.fr: did not receive HSTS header
 vemokin.net: could not connect to host
 venixplays-stream.ml: could not connect to host
 venmos.com: could not connect to host
 vennet.fr: max-age too low: 0
 venninvestorplatform.com: did not receive HSTS header
 venoom.eu: did not receive HSTS header
 venturepro.com: did not receive HSTS header
 ventzke.com: did not receive HSTS header
@@ -10902,21 +10911,21 @@ vicianovi.cz: could not connect to host
 victorenxovais.com.br: could not connect to host
 victoriapemberton.com: did not receive HSTS header
 vid.me: did not receive HSTS header
 vidbuchanan.co.uk: did not receive HSTS header
 viddiaz.com: did not receive HSTS header
 videnskabsklubben.dk: did not receive HSTS header
 videomail.io: did not receive HSTS header
 videomuz.com: could not connect to host
-videotogel.net: did not receive HSTS header
+videotogel.net: could not connect to host
 videoueberwachung-set.de: did not receive HSTS header
 vider.ga: could not connect to host
 vidid.net: did not receive HSTS header
-vidiproject.com: could not connect to host
+vidiproject.com: did not receive HSTS header
 vidz.ga: could not connect to host
 vietnamchevrolet.net: did not receive HSTS header
 vietnamphotographytours.com: could not connect to host
 vigilo.cf: could not connect to host
 vigilo.ga: could not connect to host
 vijos.org: did not receive HSTS header
 viktor-machnik.de: could not connect to host
 viktorsvantesson.net: did not receive HSTS header
@@ -11060,30 +11069,31 @@ warsh.moe: did not receive HSTS header
 warumsuchen.at: did not receive HSTS header
 wasatchcrest.com: did not receive HSTS header
 wasi-net.de: did not receive HSTS header
 watchium.com: did not receive HSTS header
 waterforlife.net.au: did not receive HSTS header
 waterpoint.com.br: could not connect to host
 watersportmarkt.net: did not receive HSTS header
 watsonhall.uk: could not connect to host
+wattechweb.com: did not receive HSTS header
 wavefloatrooms.com: did not receive HSTS header
 wavefrontsystemstech.com: could not connect to host
 waylee.net: did not receive HSTS header
 wbit.co.il: did not receive HSTS header
 wear2work.nl: did not receive HSTS header
 wearedisneyland.com: did not receive HSTS header
 weaverhairextensions.nl: could not connect to host
 web-industry.fr: could not connect to host
 web-insider.net: did not receive HSTS header
 web-vision.de: did not receive HSTS header
 web4all.fr: did not receive HSTS header
 web4pro.fr: could not connect to host
 webandwords.com.au: could not connect to host
-webanker.sh: could not connect to host
+webanker.sh: did not receive HSTS header
 webapps.directory: could not connect to host
 webassadors.com: could not connect to host
 webbx.se: max-age too low: 2592000
 webchat.domains: did not receive HSTS header
 webdeflect.com: did not receive HSTS header
 webdesign-kronberg.de: did not receive HSTS header
 webdesignssussex.co.uk: did not receive HSTS header
 webdev.mobi: could not connect to host
@@ -11192,16 +11202,17 @@ wikisports.eu: could not connect to host
 wildbee.org: could not connect to host
 wilddog.com: did not receive HSTS header
 wilf1rst.com: could not connect to host
 willcipriano.com: could not connect to host
 willemsjort.be: did not receive HSTS header
 william.si: did not receive HSTS header
 williamsapiens.com: could not connect to host
 willosagiede.com: did not receive HSTS header
+willywangstory.org: did not receive HSTS header
 winaes.com: did not receive HSTS header
 winclient.cn: could not connect to host
 windowsforum.com: max-age too low: 0
 winds.cf: could not connect to host
 winecodeavocado.com: could not connect to host
 winfield.me.uk: did not receive HSTS header
 winged.io: could not connect to host
 wingos.net: could not connect to host
@@ -11283,17 +11294,17 @@ wrwg.ca: could not connect to host
 wscbiolo.id: did not receive HSTS header
 wsor.group: did not receive HSTS header
 wsscompany.com.ve: could not connect to host
 wsup.social: could not connect to host
 wubocong.com: could not connect to host
 wubthecaptain.eu: could not connect to host
 wuetix.de: max-age too low: 0
 wuhengmin.com: could not connect to host
-wulpi.it: could not connect to host
+wulpi.it: did not receive HSTS header
 wundtherapie-schulung.de: could not connect to host
 wurzelzwerg.net: could not connect to host
 wusx.club: could not connect to host
 wvr-law.de: did not receive HSTS header
 ww2onlineshop.com: did not receive HSTS header
 www-001133.com: could not connect to host
 www-0385.com: could not connect to host
 www-1116.com: did not receive HSTS header
@@ -11301,17 +11312,17 @@ www-1117.com: could not connect to host
 www-39988.com: did not receive HSTS header
 www-507.net: could not connect to host
 www-746.com: could not connect to host
 www-771122.com: did not receive HSTS header
 www-8003.com: did not receive HSTS header
 www-88599.com: did not receive HSTS header
 www-9995.com: did not receive HSTS header
 www-djbet.com: did not receive HSTS header
-www-jinshavip.com: could not connect to host
+www-jinshavip.com: did not receive HSTS header
 www.cueup.com: could not connect to host
 www.cyveillance.com: did not receive HSTS header
 www.developer.mydigipass.com: could not connect to host
 www.elanex.biz: did not receive HSTS header
 www.gamesdepartment.co.uk: did not receive HSTS header
 www.gpo.gov: did not receive HSTS header
 www.greplin.com: could not connect to host
 www.jitsi.org: did not receive HSTS header
@@ -11405,16 +11416,17 @@ xn--lgb3a8bcpn.ml: could not connect to 
 xn--lnakuten-9za.com: did not receive HSTS header
 xn--ls8hi7a.tk: could not connect to host
 xn--milchaufschumer-test-lzb.de: could not connect to host
 xn--n8jubz39q0g0afpa985c.com: could not connect to host
 xn--neb-tma3u8u.xyz: could not connect to host
 xn--p8jskj.jp: did not receive HSTS header
 xn--pck4e3a2ex597b4ml.xyz: did not receive HSTS header
 xn--qckqc0nxbyc4cdb4527err7c.biz: did not receive HSTS header
+xn--t8j4aa4nyhxa7duezbl49aqg5546e264d.net: did not receive HSTS header
 xn--u9jy16ncfao19mo8i.nagoya: did not receive HSTS header
 xn--uist1idrju3i.jp: did not receive HSTS header
 xn--w22a.jp: did not receive HSTS header
 xn--wmq.jp: did not receive HSTS header
 xn--xdtx3pfzbiw3ar8e7yedqrhui.com: could not connect to host
 xn--y8j5gq14rbdd.net: did not receive HSTS header
 xn--yoamomisuasbcn-ynb.com: could not connect to host
 xn--zck9a4b352yuua.jp: did not receive HSTS header
@@ -11499,16 +11511,17 @@ youfencun.com: did not receive HSTS head
 youlog.net: could not connect to host
 youngandunited.nl: did not receive HSTS header
 youon.tokyo: could not connect to host
 yourbapp.ch: could not connect to host
 yourcomputer.expert: did not receive HSTS header
 yourgame.co.il: did not receive HSTS header
 yoursecondphone.co: could not connect to host
 yourstrongbox.com: could not connect to host
+youtubeviews.ml: did not receive HSTS header
 youyoulemon.com: could not connect to host
 ytcuber.xyz: could not connect to host
 ytvwld.de: did not receive HSTS header
 yu.vc: max-age too low: 2592000
 yu7.jp: did not receive HSTS header
 yudan.com.br: could not connect to host
 yufan.me: did not receive HSTS header
 yuhen.ru: did not receive HSTS header
@@ -11556,17 +11569,17 @@ zehntner.ch: max-age too low: 3600
 zelfmoord.ga: could not connect to host
 zelfstandigemakelaars.net: could not connect to host
 zenhaiku.com: did not receive HSTS header
 zenpayroll.com: did not receive HSTS header
 zentience.dk: did not receive HSTS header
 zentience.net: did not receive HSTS header
 zentience.org: could not connect to host
 zentraler-kreditausschuss.de: did not receive HSTS header
-zentralwolke.de: did not receive HSTS header
+zentralwolke.de: could not connect to host
 zenwears.com: could not connect to host
 zera.com.au: could not connect to host
 zerekin.net: did not receive HSTS header
 zeroday.sk: did not receive HSTS header
 zerofox.gq: could not connect to host
 zeroml.ml: could not connect to host
 zerudi.com: did not receive HSTS header
 zeto365.pl: did not receive HSTS header
@@ -11617,16 +11630,17 @@ zoners.si: did not receive HSTS header
 zonky.io: could not connect to host
 zoo24.de: did not receive HSTS header
 zoofaeth.de: did not receive HSTS header
 zoomingin.net: max-age too low: 5184000
 zoommailing.com: did not receive HSTS header
 zoorigin.com: did not receive HSTS header
 zorasvobodova.cz: did not receive HSTS header
 zortium.report: could not connect to host
+zotero.org: did not receive HSTS header
 zoznamrealit.sk: did not receive HSTS header
 zqhong.com: could not connect to host
 zqjs.tk: could not connect to host
 ztan.tk: could not connect to host
 ztcaoll222.cn: did not receive HSTS header
 ztytian.com: could not connect to host
 zubel.it: did not receive HSTS header
 zuckerfloh.de: did not receive HSTS header
@@ -11637,8 +11651,9 @@ zwollemagazine.nl: did not receive HSTS 
 zyf.pw: could not connect to host
 zymbit.com: did not receive HSTS header
 zync.ca: did not receive HSTS header
 zypgr.com: could not connect to host
 zyso.org: could not connect to host
 zzb510.com: could not connect to host
 zzb6688.com: could not connect to host
 zzb8899.com: could not connect to host
+zzpd.nl: did not receive HSTS header
--- a/security/manager/ssl/nsSTSPreloadList.inc
+++ b/security/manager/ssl/nsSTSPreloadList.inc
@@ -3,17 +3,17 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /*****************************************************************************/
 /* This is an automatically generated file. If you're not                    */
 /* nsSiteSecurityService.cpp, you shouldn't be #including it.     */
 /*****************************************************************************/
 
 #include <stdint.h>
-const PRTime gPreloadListExpirationTime = INT64_C(1530820751850000);
+const PRTime gPreloadListExpirationTime = INT64_C(1530910464714000);
 %%
 0-1.party, 1
 0.me.uk, 1
 0005pay.com, 1
 00100010.net, 1
 0010100.net, 1
 00120012.net, 1
 00130013.net, 1
@@ -485,17 +485,16 @@ 5364c.com, 1
 53ningen.com, 1
 5432.cc, 1
 546802.com, 1
 54below.com, 1
 5533445.com, 1
 555xl.com, 1
 558da.com, 1
 55scc.com, 1
-57aromas.com, 1
 57he.com, 1
 598598598.net, 1
 5apps.com, 1
 5c1fd0f31022cbc40af9f785847baaf9.space, 1
 5chat.it, 1
 5crowd.com, 1
 5ece.de, 1
 5francs.com, 1
@@ -1548,17 +1547,16 @@ allemobieleproviders.nl, 1
 allenosgood.com, 1
 allenscaravans.co.uk, 1
 allensun.org, 1
 allerbestefreunde.de, 1
 allesisonline.nl, 1
 alleskomtgoed.org, 1
 allesrocknroll.de, 1
 allforyou.at, 1
-allfreelancers.su, 1
 allgrass.net, 1
 allgreenturf.com.au, 1
 alliances-faq.de, 1
 alliances-globalsolutions.com, 1
 alliedfrozenstorage.com, 1
 allinagency.com, 1
 allincoin.shop, 1
 allinone-ranking150.com, 1
@@ -2032,16 +2030,17 @@ annotate.software, 1
 annoyingasfuk.com, 1
 annrusnak.com, 1
 annsbouncycastles.com, 1
 annuaire-jcb.com, 1
 annuaire-photographe.fr, 0
 anohana.org, 1
 anojan.com, 1
 anon-next.de, 1
+anonboards.com, 1
 anoncom.net, 1
 anoneko.com, 1
 anongoth.pl, 1
 anonrea.ch, 1
 anons.fr, 1
 anonukradio.org, 1
 anonym-surfen.de, 1
 anonyme-spieler.at, 1
@@ -2182,22 +2181,22 @@ apination.com, 1
 apio.systems, 1
 apis.blue, 1
 apis.google.com, 1
 apis.moe, 1
 apisyouwonthate.com, 1
 apk.li, 1
 apk4fun.com, 1
 apkoyunlar.club, 1
-apkriver.com, 1
 apl2bits.net, 1
 aplikaceproandroid.cz, 1
 aplis-online.de, 0
 aplpackaging.co.uk, 1
 aplu.fr, 1
+apm.com.tw, 1
 apmpproject.org, 1
 apn-dz.org, 1
 apn-einstellungen.de, 1
 apoil.org, 1
 apollyon.work, 1
 apoly.de, 1
 aporia.io, 1
 aposke.com, 1
@@ -2903,30 +2902,33 @@ avi9526.pp.ua, 1
 avia-krasnoyarsk.ru, 1
 avia-ufa.ru, 1
 aviapoisk.kz, 1
 aviationstrategy.aero, 1
 avid.blue, 1
 avietech.com, 1
 aviv.nyc, 1
 avmemo.com, 1
+avmo.pw, 1
 avmoo.com, 1
 avnet.ws, 1
 avocode.com, 1
 avonlearningcampus.com, 1
 avotoma.com, 1
 avova.de, 1
 avpres.net, 1
+avso.pw, 1
 avsox.com, 1
 avspot.net, 1
 avticket.ru, 0
 avtoforex.ru, 1
 avtogara-isperih.com, 1
 avtovokzaly.ru, 1
 avvcorda.com, 1
+avxo.pw, 1
 awan.tech, 1
 awaremi-tai.com, 1
 awaro.net, 1
 awbouncycastlehire.com, 1
 awccanadianpharmacy.com, 1
 awei.pub, 1
 awen.me, 1
 awesomebouncycastles.co.uk, 1
@@ -3031,17 +3033,16 @@ b5989.com, 1
 b5989.net, 1
 b61688.com, 1
 b64.club, 1
 b72.net, 1
 b8591.com, 1
 b8591.net, 1
 b8979.com, 1
 b8979.net, 1
-b8a.me, 1
 b9018.com, 1
 b9018.net, 1
 b9108.com, 1
 b9108.net, 1
 b9110.com, 1
 b9110.net, 1
 b9112.com, 1
 b9112.net, 1
@@ -4398,16 +4399,17 @@ bloggingwithchildren.com, 1
 bloggytalky.com, 1
 bloginbeeld.nl, 1
 blogom.at, 1
 blogpentrusuflet.ro, 1
 blogreen.org, 1
 blogtroterzy.pl, 1
 bloodsports.org, 1
 bloodyexcellent.com, 1
+bloom-avenue.com, 1
 bltc.co.uk, 1
 bltc.com, 1
 bltc.net, 1
 bltc.org, 1
 bltc.org.uk, 1
 blubberladen.de, 1
 bludnykoren.ml, 1
 blue-leaf81.net, 1
@@ -4938,17 +4940,16 @@ brejoc.com, 1
 bremen-restaurants.de, 1
 bremensaki.com, 1
 bremerfriedensforum.de, 1
 brendanscherer.com, 1
 brentacampbell.com, 1
 brentnewbury.com, 1
 bressier.fr, 1
 bretcarmichael.com, 1
-brettabel.com, 1
 brettcornwall.com, 1
 brettelliff.com, 1
 bretz-hufer.de, 1
 bretzner.fr, 1
 brevboxar.se, 1
 brewsouth.com, 1
 brewtrackr.com, 1
 brfvh24.se, 1
@@ -5090,16 +5091,17 @@ bt123.xyz, 1
 bta.lv, 0
 btc2secure.com, 1
 btcarmory.com, 1
 btcgo.nl, 1
 btcontract.com, 1
 btcp.space, 1
 btcpop.co, 1
 btcycle.org, 1
+btio.pw, 1
 btku.org, 1
 btmstore.com.br, 1
 btnissanparts.com, 1
 btorrent.xyz, 1
 btrb.ml, 1
 btserv.de, 1
 btsoft.eu, 1
 btsow.com, 1
@@ -5227,17 +5229,16 @@ burtrum.org, 1
 buryit.net, 1
 burzmali.com, 1
 buserror.cn, 1
 bushbaby.com, 1
 bushcraftfriends.com, 1
 busindre.com, 1
 business-garden.com, 1
 business.facebook.com, 0
-businessadviceperth.com.au, 1
 businessamongus.com, 1
 businesscentermarin.ch, 1
 businessesdirectory.eu, 1
 businessetmarketing.com, 1
 businessfactors.de, 1
 businessfurs.info, 1
 businesshub.cz, 0
 businessimmigration-eu.com, 1
@@ -5769,17 +5770,16 @@ cat-blum.com, 1
 cat-box.de, 1
 cat.net, 1
 catalog.beer, 1
 catalogoreina.com, 1
 catalyst-ecommerce.com, 0
 catbold.space, 1
 catbull.com, 1
 catburton.co.uk, 1
-catchers.cc, 1
 catchersgear.com, 1
 catchfotografie.nl, 1
 catchief.com, 1
 catcontent.cloud, 1
 catdecor.ru, 1
 catenacondos.com, 1
 catfooddispensersreviews.com, 1
 catgirl.me, 1
@@ -6479,17 +6479,17 @@ circulatedigital.com, 1
 cirfi.com, 1
 ciri.com.co, 1
 cirope.com, 1
 cirrus0.de, 1
 cirugiasplasticas.com.mx, 1
 cirujanooral.com, 1
 cirurgicagervasio.com.br, 1
 cirurgicalucena.com.br, 1
-ciscodude.net, 1
+ciscodude.net, 0
 cisoaid.com, 1
 ciss.ltd, 1
 cisy.me, 1
 citationgurus.com, 1
 citcuit.in, 1
 citimarinestore.com, 1
 citizen-cam.de, 1
 citizensbankal.com, 1
@@ -7360,17 +7360,16 @@ countryhouseresort.com, 1
 countryoutlaws.ca, 1
 countybankdel.com, 1
 countyjailinmatesearch.com, 1
 coup-dun-soir.ch, 1
 coupe-bordure.com, 1
 couponcodesme.com, 1
 cour4g3.me, 1
 couragefound.org, 1
-courageousparentsnetwork.org, 1
 course.pp.ua, 1
 coursera.org, 1
 courses.nl, 1
 courseworkbank.info, 1
 courtlistener.com, 1
 couscous.recipes, 1
 cousincouples.com, 1
 covbounce.co.uk, 1
@@ -7464,16 +7463,17 @@ createursdefilms.com, 1
 creatieven.com, 1
 creation-contemporaine.com, 1
 creations-edita.com, 1
 creative-coder.de, 0
 creative-wave.fr, 1
 creativebites.de, 1
 creativecaptiv.es, 1
 creativecommons.cl, 1
+creativecommons.gr, 1
 creativecommons.org, 1
 creativecommonscatpictures.com, 1
 creativeconceptsvernon.com, 1
 creativedigital.co.nz, 1
 creativefolks.co.uk, 1
 creativefreedom.ca, 1
 creativeink.de, 1
 creativekkids.com, 1
@@ -7772,17 +7772,16 @@ customgear.com.au, 1
 customizeyourshower.com, 1
 customizeyoursink.com, 1
 custompapers.com, 1
 customromlist.com, 1
 customshort.link, 1
 customwritings.com, 1
 customwritingservice.com, 1
 customwritten.com, 1
-cutelariafiveladeouro.com.br, 1
 cutephil.com, 1
 cutimbo.ovh, 1
 cutner.co, 1
 cuvva.co, 1
 cuvva.co.uk, 1
 cuvva.com, 1
 cuvva.eu, 1
 cuvva.io, 1
@@ -8275,26 +8274,26 @@ dbq.com, 1
 dbrgn.ch, 1
 dbtsai.com, 1
 dbyz.co.uk, 1
 dc-occasies.be, 1
 dc562.org, 1
 dc585.info, 1
 dcards.in.th, 1
 dcautomacao.com.br, 1
-dcbouncycastles.co.uk, 1
 dcc.cat, 1
 dcc.moe, 1
 dcepler.net, 1
 dchatelain.ch, 1
 dchest.org, 1
 dckd.nl, 1
 dcl.re, 1
 dclaisse.fr, 1
 dcmt.co, 1
+dcpower.eu, 1
 dcrdev.com, 1
 dd.art.pl, 1
 ddel.de, 1
 dden.ca, 0
 dden.website, 1
 dden.xyz, 1
 ddepot.us, 1
 ddfreedish.site, 0
@@ -9657,17 +9656,16 @@ dusmomente.com, 1
 dusnan.com, 1
 dustplanet.de, 1
 dustri.org, 1
 dustycloth.com, 1
 dustygroove.com, 1
 dustyspokesbnb.ca, 1
 dutch.desi, 1
 dutch1.nl, 1
-dutchessuganda.com, 1
 dutchrank.nl, 1
 dutchwanderers.nl, 1
 dutchweballiance.nl, 1
 dutyfreeonboard.com, 1
 dvbris.co.uk, 1
 dvbris.com, 1
 dvdland.com.au, 1
 dvhosting.be, 1
@@ -9998,16 +9996,17 @@ edwardspeyer.com, 1
 edwardwall.me, 1
 edxg.de, 0
 edxn.de, 1
 edyou.eu, 1
 edzilla.info, 1
 ee-terminals.com, 1
 eeb98.com, 1
 eeetrust.org, 1
+eellak.gr, 1
 eelsden.net, 1
 eelzak.nl, 1
 eeqj.com, 1
 eer.io, 1
 eerlijktransport.nl, 1
 eerstejaarsweekend.nl, 1
 eery.de, 1
 eewna.org, 1
@@ -10100,17 +10099,16 @@ eirastudios.co.uk, 0
 eisaev.ru, 1
 eit-web.de, 0
 eitler.cx, 1
 eiyoushi-shigoto.com, 1
 ejdv-anmeldung.de, 1
 ejeff.org, 1
 ejgconsultancy.co.uk, 1
 ejuicelab.co.uk, 1
-ejusu.com, 1
 ek-networks.de, 1
 ek.network, 1
 ekaigotenshoku.com, 1
 ekati.ru, 1
 ekb-avia.ru, 1
 ekd.de, 1
 ekedc.com, 1
 ekedp.com, 1
@@ -12388,17 +12386,16 @@ freelancehunt.com, 1
 freelanceshipping.com, 1
 freelansir.com, 1
 freelauri.com, 1
 freelifer.jp, 1
 freemanning.de, 1
 freemans.com, 1
 freemedforms.com, 1
 freemyipod.org, 1
-freend.me, 0
 freenetproject.org, 1
 freeonplate.com, 1
 freepnglogos.com, 1
 freergform.org, 1
 freeshell.de, 1
 freeshkre.li, 1
 freesitemapgenerator.com, 1
 freeslots.guru, 1
@@ -13843,17 +13840,16 @@ gsmkungen.com, 1
 gsmsecurity.net, 1
 gsoc.se, 1
 gsrc.io, 1
 gst.name, 1
 gst.priv.at, 1
 gt-mp.net, 1
 gt-network.de, 1
 gta-arabs.com, 1
-gta5voice.net, 1
 gtaforum.nl, 1
 gtalife.net, 1
 gtchipsi.org, 1
 gtcprojects.com, 1
 gtdgo.com, 1
 gtlaun.ch, 1
 gtmasterclub.it, 0
 gtmetrix.com, 1
@@ -14860,16 +14856,17 @@ holytransaction.com, 1
 holywhite.com, 1
 holz.nu, 1
 holzheizer-forum.de, 1
 holzheizerforum.de, 1
 holzschutz-holzbearbeitung.de, 1
 holzspielzeug-shop.ch, 1
 holzundgarten.de, 1
 holzvergaser-forum.de, 1
+homa.website, 0
 homatism.com, 1
 home-cloud.online, 1
 home-v.ind.in, 1
 home-work-jobs.com, 1
 homeautomated.com, 1
 homebasedsalons.com.au, 1
 homebodyalberta.com, 1
 homecareassociatespa.com, 1
@@ -17090,16 +17087,17 @@ jonas-thelemann.de, 1
 jonas-wenk.de, 1
 jonaskjodt.com, 1
 jonaswitmer.ch, 1
 jonathan-apps.com, 1
 jonathancarter.org, 1
 jonathandowning.uk, 1
 jonathandupree.com, 1
 jonathanha.as, 1
+jonathanj.nl, 1
 jonathanmassacand.ch, 1
 jonathansanchez.pro, 1
 jonathanschle.de, 1
 jonathanwisdom.com, 1
 jondevin.com, 1
 jondowdle.com, 1
 jonesborostatebank.com, 0
 jonespayne.com, 1
@@ -17633,16 +17631,17 @@ kayscs.com, 1
 kaysis.gov.tr, 1
 kazamasion.com, 1
 kazand.lt, 1
 kazandaemon.ru, 1
 kazu.click, 1
 kazuhirohigashi.com, 1
 kazumi.ro, 1
 kazy111.info, 1
+kb3.net, 1
 kba-online.de, 1
 kbb-ev.de, 1
 kbbouncycastlehire.co.uk, 1
 kbcequitas.hu, 1
 kbfl.org, 1
 kbit.dk, 1
 kbjorklu.com, 1
 kbleventhire.co.uk, 1
@@ -17758,17 +17757,16 @@ kesslerwine.com, 1
 kesteren.com, 1
 kesteren.org, 1
 ketamine.co.uk, 1
 ketosecology.co.uk, 1
 kettner.com, 1
 ketty-voyance.com, 1
 kevinapease.com, 1
 kevinbowers.me, 1
-kevinbusse.de, 1
 kevincox.ca, 0
 kevindekoninck.com, 0
 kevinfoley.cc, 1
 kevinfoley.org, 1
 kevinhill.nl, 1
 kevinkla.es, 1
 kevinlocke.name, 1
 kevinmeijer.nl, 1
@@ -18603,17 +18601,16 @@ laled.ch, 1
 laltroweb.it, 1
 lalunecreative.com, 1
 lalyre-corcelles.ch, 1
 lamaisondelatransformationculturelle.com, 1
 lamakat.de, 1
 lamapoll.de, 1
 lambauer.com, 1
 lamboo.be, 1
-lamereabizix.com, 1
 lamiaposta.email, 0
 laminine.info, 1
 lampegiganten.dk, 1
 lampegiganten.no, 1
 lampen24.be, 1
 lampenwelt.at, 1
 lampenwelt.ch, 1
 lan2k.org, 1
@@ -20218,16 +20215,17 @@ mamafit.club, 1
 mamanecesitaungintonic.com, 1
 mamastore.eu, 1
 mamiecouscous.com, 1
 mammals.net, 1
 mammaw.com, 1
 mammeitalianeavienna.com, 1
 mammooc.org, 1
 mamochka.org.ua, 1
+mamospienas.lt, 1
 mamot.fr, 0
 mamout.xyz, 1
 mamuko.nl, 1
 man3s.jp, 1
 manach.net, 1
 manage.cm, 1
 manage4all.de, 1
 manageathome.co.uk, 1
@@ -20824,17 +20822,16 @@ mediawiki.org, 1
 mediawin.pl, 1
 medic-world.com, 1
 medicalcountermeasures.gov, 1
 medicinesfast.com, 0
 medicinia.com.br, 1
 medicinskavranje.edu.rs, 1
 medicocompetente.it, 1
 medicoresponde.com.br, 1
-medifab.online, 1
 medifi.com, 1
 medinside.ch, 1
 medinside.li, 1
 medinsider.ch, 1
 medinsider.li, 1
 medireport.fr, 1
 medium.com, 1
 mediumraw.org, 1
@@ -21805,17 +21802,16 @@ mosaic-design.ru, 1
 mosaicadvisors.com, 1
 mosaique-lachenaie.fr, 1
 moscow.dating, 1
 mosfet.cz, 1
 moshwire.com, 1
 mosin.org, 1
 moskeedieren.nl, 1
 moskva.guide, 1
-moso.io, 1
 mosos.de, 1
 mosscade.com, 1
 mosstier.com, 1
 mostlyharmless.at, 1
 mostlyinfinite.com, 1
 mostlyoverhead.com, 1
 motd.ch, 1
 motekforcelink.com, 1
@@ -21830,16 +21826,17 @@ motohell.com, 1
 motojato.com.br, 1
 motomorgen.com, 1
 motonauticaibiza.com, 1
 motorbiketourhanoi.com, 1
 motoroilinfo.com, 1
 motorpointarenacardiff.co.uk, 1
 motorring.ru, 1
 motorsplus.com, 0
+motorsportdiesel.com, 1
 motoryachtclub-radolfzell.de, 1
 motosikletevi.com, 1
 motostorie.blog, 0
 motovated.co.nz, 1
 motowilliams.com, 1
 motransportinfo.com, 1
 mottomortgage.com, 1
 moube.fr, 1
@@ -21932,17 +21929,16 @@ mrkapowski.com, 1
 mrketolocksmith.com, 1
 mrknee.gr, 1
 mrksk.com, 1
 mrleonardo.com, 1
 mrliu.me, 1
 mrmoregame.de, 1
 mrnh.de, 1
 mrnh.tk, 1
-mrparker.pw, 1
 mrpropop.com, 1
 mrs-labo.jp, 1
 mrserge.lv, 1
 mrsk.me, 1
 mrstat.co.uk, 1
 mrx.one, 1
 ms-alternativ.de, 1
 ms-host.fr, 1
@@ -22228,16 +22224,17 @@ mydevolo.com, 1
 mydevolo.de, 1
 mydigitalweek.com, 1
 mydjsongbook.com, 1
 mydmdi.com, 1
 mydna.bio, 1
 mydocserve.com, 1
 mydreamlifelab.com, 1
 myeberspaecher.com, 1
+myeffect.today, 1
 myepass.bg, 1
 myepass.de, 1
 myessaygeek.com, 1
 myfantasysportstalk.com, 1
 myfappening.org, 1
 myfdic.gov, 1
 myfedloan.org, 1
 myfirenet.com, 1
@@ -22327,24 +22324,23 @@ myperfecthome.ca, 1
 myperfumecollection.com, 1
 mypillcard.com, 1
 myplaceonline.com, 1
 mypress.mx, 1
 myprintcard.de, 1
 myproblog.com, 1
 myptsite.com, 1
 mypup.nl, 1
-myqdu.cn, 1
 myrandomtips.com, 1
 myranicol.com, 1
 myrealestatemate.com.au, 1
 myref.net, 1
 myrekber.co.id, 1
 myrent.quebec, 1
-myrepublic.co.id, 0
+myrepublic.co.id, 1
 myresearchapp.com, 1
 myrewardspoints.com, 1
 myriadof.com, 1
 myrig.com, 1
 myrig.com.ua, 1
 myrig.io, 1
 myrig.ru, 1
 myrotvorets.center, 1
@@ -22499,17 +22495,16 @@ namskra.is, 1
 namu.live, 1
 namu.moe, 1
 namu.wiki, 1
 nanami.moe, 1
 nanarose.ch, 1
 nanch.com, 1
 nanderson.me, 1
 nanfangstone.com, 1
-nani.io, 1
 nankiseamansclub.com, 1
 nanogi.ga, 1
 nanotechnologist.com, 1
 nanovolt.nl, 1
 nanpuyue.com, 1
 nanubo.com, 1
 nanubo.de, 1
 naoar.com, 1
@@ -23296,17 +23291,16 @@ noodleyum.com, 1
 noodplan.co.za, 1
 noodweer.be, 1
 noon-entertainments.com, 1
 noop.ch, 1
 noordsee.de, 1
 noorsolidarity.com, 1
 nootropic.com, 1
 noovell.com, 1
-nopaste.xyz, 1
 nopaynocure.com, 1
 norad.sytes.net, 1
 nord-sud.be, 1
 nordakademie.de, 1
 nordic-survival.de, 1
 nordicirc.com, 1
 nordinfo.fi, 1
 nordlichter-brv.de, 1
@@ -23832,17 +23826,16 @@ omnisiens.se, 1
 omnitrack.org, 1
 omniverse.ru, 1
 omorashi.org, 1
 omoteura.com, 1
 omranic.com, 1
 omronwellness.com, 1
 omsdieppe.fr, 1
 on-tech.co.uk, 1
-ona.io, 1
 onaboat.se, 1
 onahonavi.com, 1
 onarto.com, 1
 onceuponarainbow.co.uk, 1
 oncf.asso.fr, 1
 oncodedesign.com, 1
 ond-inc.com, 1
 ondcp.gov, 1
@@ -23959,28 +23952,28 @@ oogami.name, 1
 oogartsennet.nl, 1
 ooharttemplates.com, 1
 oopsis.com, 1
 ooyo.be, 1
 op11.co.uk, 0
 opalesurfcasting.net, 1
 oparl.org, 1
 opatut.de, 1
-opcaobolsas.com.br, 1
 opcenter.de, 1
 ope.ee, 1
 open-bs.com, 1
 open-bs.ru, 1
 open-desk.org, 1
 open-freax.fr, 1
 open-future.be, 1
 open-infrastructure.net, 1
 open-letters.de, 1
 open-mesh.org, 1
 open-sauce-recipes.co.uk, 1
+open-source.gr, 1
 open.gl, 1
 openacademies.com, 1
 openacte.ch, 1
 openblox.org, 1
 openbsd.id, 1
 opencad.io, 1
 opencircuit.nl, 1
 openclima.com, 1
@@ -24018,22 +24011,22 @@ openstem.com.au, 1
 openstreetmap.is, 1
 opentexon.com, 1
 opentrack.info, 1
 opentrash.org, 1
 opentuition.com, 1
 openverse.com, 1
 openvz.org, 1
 openwaveguide.de, 1
+openwifi.gr, 1
 openwireless.org, 1
 operad.fr, 1
 operationforever.com, 1
 opfin.com, 1
 opiates.ca, 1
-opiates.net, 1
 opic.gov, 1
 opin.me, 1
 opinion8td.com, 1
 opinionicentrifuga.it, 1
 opinionipannolini.it, 1
 opioids.co.uk, 1
 opioids.com, 1
 opioids.gov, 1
@@ -24625,17 +24618,16 @@ pathwaytofaith.com, 1
 patika-biztositas.hu, 1
 patikabiztositas.hu, 1
 patouille-et-gribouille.fr, 1
 patralos.at, 0
 patriaco.net, 1
 patric-lenhart.de, 1
 patrick-othmer.de, 1
 patrick-robrecht.de, 1
-patrick.dark.name, 1
 patrickaudley.ca, 1
 patrickaudley.com, 1
 patrickbrosi.de, 1
 patrickbusch.net, 1
 patrickneuro.de, 1
 patrickschneider.me, 1
 patrikgarten.de, 1
 patriksima.cz, 1
@@ -24933,17 +24925,16 @@ peterandjoelle.co.uk, 1
 peterboers.info, 1
 peterdavehello.org, 1
 peterfiorella.com, 1
 peterfolta.net, 1
 peterhuetz.at, 1
 peterhuetz.com, 1
 peterjohnson.io, 1
 peterlew.is, 1
-peternagy.ie, 1
 petersontoscano.com, 1
 pethelpers.org, 1
 petit-archer.com, 1
 petite-maison.ch, 1
 petitsfrenchies.com, 1
 petja.me, 0
 petko.me, 1
 petlife.od.ua, 1
@@ -25472,17 +25463,16 @@ pmp-art.com, 1
 pmponline.de, 1
 pmsacorp.com, 1
 pmsf.eu, 1
 pmt-documenten.nl, 1
 pn.id.lv, 1
 pneu01.fr, 1
 pneu74.fr, 1
 pneuhaus-lemp.ch, 1
-pneusgppremium.com.br, 1
 pnimmobilier.ch, 1
 pnmhomecheckup.com, 1
 pnona.cz, 1
 pnsc.is, 1
 pnut.io, 0
 poba.fr, 1
 pocakking.tk, 1
 pocatellonissanparts.com, 1
@@ -25872,17 +25862,16 @@ primaconsulting.net, 1
 primalinea.pro, 1
 primates.com, 1
 primewho.org, 1
 primordialsnooze.com, 1
 primorus.lt, 1
 primotilesandbathrooms.co.uk, 1
 princeagency.com, 1
 princeofwhales.com, 1
-princesparktouch.com, 1
 princessbackpack.de, 1
 princessmargaretlotto.com, 1
 principalstest.com, 1
 principaltoolbox.com, 1
 principia-journal.de, 1
 principia-magazin.de, 1
 principia-online.de, 1
 princovi.cz, 1
@@ -26359,17 +26348,16 @@ qewc.com, 1
 qforum.org, 1
 qgustavor.tk, 1
 qhse-professionals.nl, 1
 qianalysis.com, 1
 qifu.me, 1
 qifu.org.cn, 1
 qikan.net, 1
 qiliang.wang, 1
-qimiao.io, 1
 qingpat.com, 1
 qingpei.me, 1
 qionouu.cn, 1
 qirinus.com, 1
 qitarabutrans.com, 1
 qits.de, 0
 qivonline.pt, 1
 qiwi.be, 1
@@ -27029,16 +27017,17 @@ remoteutilities.com, 1
 removedrepo.com, 1
 renascentia.asia, 1
 renaultclubticino.ch, 1
 renderloop.com, 1
 rene-schwarz.com, 1
 rene-stolp.de, 1
 renearends.nl, 1
 reneleu.ch, 1
+renem.net, 0
 renemayrhofer.com, 1
 renerehelse.no, 0
 reneschmidt.de, 1
 renewablefreedom.org, 1
 renewmedispa.com, 1
 renezuo.com, 1
 renkenlaw.com, 1
 renlen.nl, 1
@@ -27047,16 +27036,17 @@ renov8sa.co.za, 1
 renrenche.com, 0
 rens.nu, 1
 rent-a-coder.de, 1
 rentacaramerica.com, 1
 rentasweb.gob.ar, 1
 rentbrowser.com, 1
 rentinsingapore.com.sg, 1
 rentourhomeinprovence.com, 1
+renuo.ch, 1
 reorz.com, 1
 reox.at, 0
 repaik.com, 1
 repair.by, 1
 repaper.org, 1
 repaxan.com, 1
 replaceits.me, 1
 replicagunsswords.com, 0
@@ -27070,16 +27060,17 @@ reposaarenkuva.fi, 1
 reproduciblescience.org, 1
 reproductive-revolution.com, 1
 reproductiverevolution.com, 1
 reprogramming-predators.com, 1
 reprogrammingpredators.com, 1
 reprozip.org, 1
 repsomelt.com, 1
 reptrax.com, 1
+republic.gr, 1
 republique.org, 1
 repugnant-conclusion.com, 1
 repugnantconclusion.com, 1
 repustate.com, 1
 reputationweaver.com, 1
 reqognize.com, 1
 reqrut.net, 1
 request-trent.com, 1
@@ -27169,17 +27160,16 @@ reverseaustralia.com, 1
 reversecanada.com, 1
 reverseloansolutions.com, 1
 reversesouthafrica.com, 1
 review.jp, 1
 reviewninja.net, 1
 reviews.anime.my, 0
 revision.co.zw, 1
 revisionnotes.xyz, 1
-revistapequenosolhares.com.br, 1
 revivalinhisword.com, 1
 revivingtheredeemed.org, 1
 revlect.com, 1
 revolt.tv, 1
 revthefox.co.uk, 1
 rewardingexcellence.com, 1
 rewrite3.com, 1
 rex.st, 1
@@ -27458,16 +27448,17 @@ roelbazuin.com, 1
 roeldevries.me, 1
 roelf.org, 1
 roelhollander.eu, 1
 roelof.io, 1
 roelsworld.eu, 1
 roemhild.de, 1
 roerstaafjes.nl, 1
 roessner-network-solutions.com, 0
+roffe.nu, 1
 rofl.com.ua, 1
 roflcopter.fr, 1
 rofrank.space, 1
 rogagym.com, 1
 rogeiro.net, 1
 roger101.com, 1
 rogerdat.ovh, 1
 rogerhub.com, 1
@@ -27737,17 +27728,16 @@ ruigomes.me, 1
 ruiming.me, 0
 ruja.dk, 1
 ruk.ca, 1
 rukhaiyar.com, 1
 rullzer.com, 1
 rulu.co, 1
 rulu.tv, 1
 rulutv.com, 1
-rumlager.de, 1
 rummel-platz.de, 1
 rumplesinflatables.co.uk, 1
 rumtaste.com, 1
 rumtaste.de, 1
 run-forrest.run, 1
 runagain.ch, 1
 runcarina.com, 1
 rundumcolumn.xyz, 1
@@ -28412,16 +28402,17 @@ screen64.tk, 1
 screenlight.tv, 1
 screenmachine.com, 1
 screenparadigm.com, 1
 scripo-bay.com, 1
 script.google.com, 1
 scriptgates.ru, 1
 scripthost.org, 1
 scriptjunkie.us, 1
+scriptum.gr, 1
 scrisulfacebine.ro, 1
 scruffymen.com, 0
 scrumbleship.com, 1
 scrumstack.co.uk, 1
 scryfall.com, 1
 scs-simulatoren.de, 1
 scsd.si, 1
 scswam.com, 1
@@ -28586,16 +28577,17 @@ securitybrief.com.au, 1
 securitybrief.eu, 1
 securityfest.com, 1
 securityheaders.com, 1
 securityheaders.io, 1
 securityinet.com, 0
 securitykey.co, 1
 securitymap.wiki, 1
 securitypluspro.com, 1
+securityprimes.in, 1
 securitysnobs.com, 0
 securitysoapbox.com, 1
 securitystrata.com, 1
 securitystreak.com, 1
 securitytalk.pl, 1
 securitytestfan.gov, 1
 securitywatch.co.nz, 1
 securitywithnick.com, 1
@@ -29708,17 +29700,16 @@ smilingmiao.com, 1
 smime.io, 1
 smimea.info, 1
 smipty.cn, 1
 smipty.com, 1
 smit.com.ua, 1
 smith.is, 1
 smithandcanova.co.uk, 0
 sml.lc, 1
-smm.im, 1
 smoo.st, 1
 smoothgesturesplus.com, 1
 smoothics.at, 1
 smoothics.com, 1
 smoothics.eu, 1
 smoothics.mobi, 1
 smoothics.net, 1
 smorgasblog.ie, 1
@@ -29819,17 +29810,16 @@ socal-babes.com, 1
 soccersavings.com, 1
 soccorso-stradale.org, 1
 sochi-sochno.ru, 1
 soci.ml, 1
 social-events.net, 0
 social-media-strategies.it, 1
 socialdevelop.biz, 0
 socialdj.de, 1
-socialhams.net, 1
 socialmedia.ro, 1
 socialnitro.com, 1
 socialnous.co, 1
 socialrank.com, 1
 socialsecurity.gov, 0
 socialtrends.pl, 1
 socialweblearning.com, 1
 socialworkout.com, 1
@@ -30219,16 +30209,17 @@ sportstraineradvisor.com, 1
 sporttrampen.de, 0
 sportugalia.ru, 1
 sportxt.ru, 1
 spot-lumiere-led.com, 1
 spotlightsrule.com, 1
 spotrebitelskecentrum.sk, 1
 spottedpenguin.co.uk, 1
 spotupload.com, 1
+spr.id.au, 1
 sprachfreudehoch3.de, 1
 spreadsheets.google.com, 1
 spreadthenews.eu, 1
 spree.co.za, 1
 spreed.me, 1
 spricknet.de, 1
 sprigings.com, 1
 springerundpartner.de, 1
@@ -30886,16 +30877,17 @@ sumthing.com, 1
 sunboxstore.jp, 1
 sunbritetv.com, 1
 sunchasercats.com, 1
 sundanceusa.com, 1
 sundayfundayjapan.com, 1
 suneilpatel.com, 1
 sunfeathers.net, 1
 sunfireshop.com.br, 1
+sunflyer.cn, 0
 sunfox.cz, 1
 sunfulong.blog, 1
 sunfulong.me, 1
 sunjaydhama.com, 1
 sunn.ie, 1
 sunriseafricarelief.com, 1
 sunsetwx.com, 1
 sunshinesf.org, 1
@@ -31048,16 +31040,17 @@ swedishhost.se, 1
 sweep-me.net, 1
 sweep.cards, 1
 sweepay.ch, 1
 sweet-orr.com, 1
 sweetair.com, 1
 sweetgood.de, 1
 sweetlegs.jp, 1
 sweetll.me, 0
+sweets-mimatsu.com, 1
 sweetvanilla.jp, 1
 swehack.org, 1
 sweharris.org, 1
 swfloshatraining.com, 1
 swfmax.com, 1
 swift-devedge.de, 1
 swiftqueue.com, 1
 swilly.org, 1
@@ -31369,17 +31362,16 @@ tatiloley.com, 1
 tatort-fanpage.de, 1
 tatsidou.gr, 1
 tattoo.dating, 1
 taunhanh.us, 1
 tavolaquadrada.com.br, 1
 tavsys.net, 1
 taxaroo.com, 1
 taxaudit.com, 1
-taxi-24std.de, 1
 taxi-chamonix.fr, 1
 taxi-collectif.ch, 1
 taxicollectif.ch, 1
 taxiindenbosch.nl, 1
 taxis-collectifs.ch, 1
 taxisafmatosinhos.pt, 1
 taxiscollectifs.ch, 1
 taxlab.co.nz, 1
@@ -32197,16 +32189,17 @@ thunraz.com, 1
 thusoy.com, 0
 thuthuatios.com, 1
 thuviensoft.com, 1
 thuviensoft.net, 1
 thw-bernburg.de, 1
 thxandbye.de, 1
 thyngster.com, 1
 thynx.io, 1
+thzone.net, 1
 ti-js.com, 1
 ti-pla.net, 1
 ti-planet.org, 1
 tiacollection.com, 1
 tiagonunes.pt, 1
 tiaki.org, 1
 tianeptine.com, 1
 tianshili.me, 1
@@ -32464,16 +32457,17 @@ todacarreira.com, 1
 todaciencia.com, 1
 todamateria.com.br, 1
 todapolitica.com, 1
 todaymeow.com, 1
 todocracy.com, 1
 todoescine.com, 1
 todoist.com, 1
 todon.fr, 1
+todoscomciro.com, 1
 todosrv.com, 1
 toeglhofer.at, 1
 toeightycountries.com, 1
 toekomstperspectief.be, 1
 toerclub-ing-arnhem.nl, 1
 toetsplatform.be, 1
 tofa-koeln.de, 1
 tofe.io, 1
@@ -32897,17 +32891,16 @@ transsexualpantyhose.com, 1
 transverify.com, 1
 trashnothing.com, 1
 trask.no, 1
 traslocare.roma.it, 1
 trauertexte.info, 1
 traut.cloud, 1
 travador.com, 1
 travaux-toiture-idf.fr, 1
-travel-dealz.de, 1
 travel-to-nature.ch, 1
 travel1x1.com, 1
 travel365.it, 1
 travelarmenia.org, 1
 traveling-thailand.info, 1
 travellers.dating, 1
 travelling.expert, 1
 travellovers.fr, 1
@@ -33943,17 +33936,16 @@ vehicletax.service.gov.uk, 1
 veii.de, 1
 veil-framework.com, 1
 veit.zone, 1
 veke.fi, 1
 vekenz.com, 1
 velasense.com, 1
 velen.io, 1
 velonustraduction.com, 1
-velotyretz.fr, 1
 venalytics.com, 1
 venclave.com, 1
 vendigital.com, 1
 vendorconnect.nyc, 1
 vendserve.eu, 1
 venicecomputerrepair.com, 1
 venicefloridawebsitedesign.com, 1
 venicerealdeal.com, 1
@@ -34617,17 +34609,16 @@ waterfedpole.com, 1
 waterleeftinbeek.nl, 1
 watermonitor.gov, 1
 watersb.org, 1
 waterschaplimburg.nl, 1
 watertrails.io, 1
 waterworkscondos.com, 1
 watoo.tech, 1
 watsonwork.me, 1
-wattechweb.com, 1
 wave-ola.es, 1
 wave.is, 1
 wavesboardshop.com, 1
 wavesoftime.com, 1
 waveum.com, 1
 wawak.pl, 1
 waxdramatic.com, 1
 waylaydesign.com, 1
@@ -35199,17 +35190,16 @@ willkommen-fuerstenberg.de, 1
 willnorris.com, 1
 willow.technology, 1
 willowdalechurch.ca, 1
 willowtree.school, 1
 wills.co.tt, 1
 willstamper.name, 1
 willywangstory.com, 1
 willywangstory.com.tw, 1
-willywangstory.org, 1
 wiloca.it, 1
 wilseyrealty.com, 1
 wilsonovi.com, 1
 wimachtendienk.com, 1
 wimbo.nl, 1
 wimpernforyou.de, 1
 win7stylebuilder.com, 0
 winbuzzer.com, 1
@@ -35914,17 +35904,16 @@ xn--s-1gaa.fi, 1
 xn--sdkwa9azd389v01ya.com, 1
 xn--seelenwchter-mcb.eu, 1
 xn--spenijmazania-yhc.pl, 1
 xn--srenpind-54a.dk, 1
 xn--sz8h.ml, 1
 xn--t-oha.lv, 1
 xn--t8j2a3042d.xyz, 1
 xn--t8j4aa4nkg1h9bwcvud.com, 1
-xn--t8j4aa4nyhxa7duezbl49aqg5546e264d.net, 1
 xn--t8j4aa4nzg3a5euoxcwee.xyz, 1
 xn--tda.ml, 1
 xn--thorme-6uaf.ca, 1
 xn--tigreray-i1a.org, 1
 xn--u9j0ia6hb7347cg8wavz0avb0e.com, 1
 xn--u9jv84l7ea468b.com, 1
 xn--uort9oqoaj00bv04d.biz, 1
 xn--uorz58b8p0bpwa.biz, 1
@@ -36273,17 +36262,16 @@ yousei.ne.jp, 1
 yousite.by, 1
 yout.com, 1
 youth.gov, 1
 youth2009.org, 1
 youtous.me, 1
 youtsuu-raku.com, 1
 youtube.com, 1
 youtubedownloader.com, 1
-youtubeviews.ml, 1
 youwatchporn.com, 1
 yoxall.me.uk, 1
 yoyoost.duckdns.org, 1
 ypart.eu, 1
 ypcs.fi, 1
 ypid.de, 1
 ypiresia.fr, 0
 yplanapp.com, 1
@@ -36682,17 +36670,16 @@ zooxdata.com, 1
 zopy.com.br, 1
 zopyx.com, 1
 zor.com, 1
 zorgclustertool.nl, 1
 zorium.org, 1
 zorki.nl, 1
 zorntt.fr, 1
 zorz.info, 1
-zotero.org, 1
 zouk.info, 1
 zouyaoji.top, 1
 zravypapir.cz, 1
 zrn.in, 0
 zrniecka-pre-sny.sk, 1
 zrnieckapresny.sk, 1
 zrt.io, 1
 zscales.com, 1
@@ -36757,12 +36744,11 @@ zylai.com, 1
 zymmm.com, 1
 zypern-firma.com, 1
 zypr.pw, 1
 zyria.de, 1
 zyrillezuno.com, 1
 zyul.ddns.net, 1
 zyx.im, 0
 zyzardx.com, 1
-zzpd.nl, 1
 zzsec.org, 1
 zzw.ca, 1
 %%
--- a/taskcluster/ci/release-generate-checksums-beetmover/kind.yml
+++ b/taskcluster/ci/release-generate-checksums-beetmover/kind.yml
@@ -9,8 +9,14 @@ transforms:
    - taskgraph.transforms.release_notifications:transforms
    - taskgraph.transforms.task:transforms
 
 kind-dependencies:
    - release-generate-checksums-signing
 
 job-template:
    shipping-phase: promote
+   worker-type:
+      by-project:
+         mozilla-central: scriptworker-prov-v1/beetmoverworker-v1
+         mozilla-beta: scriptworker-prov-v1/beetmoverworker-v1
+         mozilla-release: scriptworker-prov-v1/beetmoverworker-v1
+         default: scriptworker-prov-v1/beetmoverworker-dev
--- a/taskcluster/ci/test/talos.yml
+++ b/taskcluster/ci/test/talos.yml
@@ -197,17 +197,17 @@ talos-g4:
     try-name: g4
     treeherder-symbol: T(g4)
     run-on-projects:
         by-test-platform:
             .*-qr/.*: ['mozilla-central', 'try']
             default: ['mozilla-beta', 'mozilla-central', 'mozilla-inbound', 'autoland', 'try']
     max-run-time:
         by-test-platform:
-            linux64.*: 900
+            linux64.*: 1500
             default: 1800
     mozharness:
         extra-options:
             - --suite=g4
             - --add-option
             - --webServer,localhost
 
 talos-g4-profiling:
@@ -218,17 +218,17 @@ talos-g4-profiling:
     mozharness:
         extra-options:
             - --suite=g4
             - --geckoProfile
             - --add-option
             - --webServer,localhost
     max-run-time:
         by-test-platform:
-            linux64.*: 900
+            linux64.*: 1500
             default: 1800
 
 talos-g5:
     description: "Talos g5"
     try-name: g5
     treeherder-symbol: T(g5)
     run-on-projects:
         by-test-platform:
--- a/taskcluster/taskgraph/transforms/job/mozharness_test.py
+++ b/taskcluster/taskgraph/transforms/job/mozharness_test.py
@@ -363,16 +363,19 @@ def mozharness_test_on_native_engine(con
         ("public/logs/", "workspace/build/upload/logs/"),
         ("public/test", "artifacts/"),
         ("public/test_info/", "workspace/build/blobber_upload_dir/"),
     ]]
 
     if test['reboot']:
         worker['reboot'] = test['reboot']
 
+    if test['max-run-time']:
+        worker['max-run-time'] = test['max-run-time']
+
     worker['env'] = env = {
         'GECKO_HEAD_REPOSITORY': config.params['head_repository'],
         'GECKO_HEAD_REV': config.params['head_rev'],
         'MOZHARNESS_CONFIG': ' '.join(mozharness['config']),
         'MOZHARNESS_SCRIPT': mozharness['script'],
         'MOZHARNESS_URL': {'task-reference': mozharness_url},
         'MOZILLA_BUILD_URL': {'task-reference': installer_url},
         "MOZ_NO_REMOTE": '1',
--- a/taskcluster/taskgraph/transforms/release_generate_checksums_beetmover.py
+++ b/taskcluster/taskgraph/transforms/release_generate_checksums_beetmover.py
@@ -3,17 +3,17 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 """
 Transform the `release-generate-checksums-beetmover` task to also append `build` as dependency
 """
 from __future__ import absolute_import, print_function, unicode_literals
 
 from taskgraph.transforms.base import TransformSequence
 from taskgraph.util.attributes import copy_attributes_from_dependent_job
-from taskgraph.util.schema import validate_schema, Schema
+from taskgraph.util.schema import validate_schema, Schema, resolve_keyed_by, optionally_keyed_by
 from taskgraph.util.scriptworker import (get_beetmover_bucket_scope,
                                          get_beetmover_action_scope,
                                          get_phase)
 from taskgraph.transforms.beetmover import craft_release_properties
 from taskgraph.transforms.task import task_description_schema
 from voluptuous import Required, Optional
 
 transforms = TransformSequence()
@@ -49,16 +49,17 @@ release_generate_checksums_beetmover_sch
 
     # treeherder is allowed here to override any defaults we use for beetmover.  See
     # taskcluster/taskgraph/transforms/task.py for the schema details, and the
     # below transforms for defaults of various values.
     Optional('treeherder'): task_description_schema['treeherder'],
 
     Optional('shipping-phase'): task_description_schema['shipping-phase'],
     Optional('shipping-product'): task_description_schema['shipping-product'],
+    Required('worker-type'): optionally_keyed_by('project', basestring),
 })
 
 
 @transforms.add
 def validate(config, jobs):
     for job in jobs:
         label = job.get('dependent-task', object).__dict__.get('label', '?no-label?')
         validate_schema(
@@ -97,20 +98,24 @@ def make_task_description(config, jobs):
                 "Can't beetmove a signing task with multiple dependencies")
         # update the dependencies with the dependencies of the signing task
         dependencies.update(dep_job.dependencies)
 
         bucket_scope = get_beetmover_bucket_scope(config)
         action_scope = get_beetmover_action_scope(config)
         phase = get_phase(config)
 
+        resolve_keyed_by(
+            job, 'worker-type', item_name=label, project=config.params['project']
+        )
+
         task = {
             'label': label,
             'description': description,
-            'worker-type': 'scriptworker-prov-v1/beetmoverworker-dev',
+            'worker-type': job['worker-type'],
             'scopes': [bucket_scope, action_scope],
             'dependencies': dependencies,
             'attributes': attributes,
             'run-on-projects': dep_job.attributes.get('run_on_projects'),
             'treeherder': treeherder,
             'shipping-phase': phase,
         }
 
--- a/taskcluster/taskgraph/transforms/release_generate_checksums_signing.py
+++ b/taskcluster/taskgraph/transforms/release_generate_checksums_signing.py
@@ -72,18 +72,16 @@ def make_release_generate_checksums_sign
             "paths": [
                 "public/build/SHA256SUMS",
                 "public/build/SHA512SUMS",
             ],
             "formats": ["gpg"]
         }]
 
         signing_cert_scope = get_signing_cert_scope(config)
-        # XXX hardcode on maple to get a green graph. DO NOT UPLIFT
-        signing_cert_scope = 'project:releng:signing:cert:dep-signing'
 
         task = {
             'label': label,
             'description': description,
             'worker-type': get_worker_type_for_scope(config, signing_cert_scope),
             'worker': {'implementation': 'scriptworker-signing',
                        'upstream-artifacts': upstream_artifacts,
                        'max-run-time': 3600},
--- a/taskcluster/taskgraph/transforms/task.py
+++ b/taskcluster/taskgraph/transforms/task.py
@@ -444,16 +444,19 @@ task_description_schema = Schema({
             Optional('tuxedo_server_url'): optionally_keyed_by('project', basestring),
             Optional('release_eta'): basestring,
             Extra: taskref_or_string,  # additional properties are allowed
         },
     }, {
         Required('implementation'): 'native-engine',
         Required('os'): Any('macosx', 'linux'),
 
+        # the maximum time to run, in seconds
+        Required('max-run-time'): int,
+
         # A link for an executable to download
         Optional('context'): basestring,
 
         # Tells the worker whether machine should reboot
         # after the task is finished.
         Optional('reboot'):
             Any('always', 'on-exception', 'on-failure'),
 
@@ -1216,16 +1219,17 @@ def build_macosx_engine_payload(config, 
         'expires': task_def['expires'],
     }, worker.get('artifacts', []))
 
     task_def['payload'] = {
         'context': worker['context'],
         'command': worker['command'],
         'env': worker['env'],
         'artifacts': artifacts,
+        'maxRunTime': worker['max-run-time'],
     }
     if worker.get('reboot'):
         task_def['payload'] = worker['reboot']
 
     if task.get('needs-sccache'):
         raise Exception('needs-sccache not supported in native-engine')
 
 
--- a/testing/mozharness/mozharness/mozilla/building/buildbase.py
+++ b/testing/mozharness/mozharness/mozilla/building/buildbase.py
@@ -1576,56 +1576,55 @@ or run without that action (ie: --no-{ac
         for ext in ['apk', 'dmg', 'tar.bz2', 'zip']:
             name = 'target.' + ext
             if os.path.exists(os.path.join(dist_dir, name)):
                 packageName = name
                 break
         else:
             self.fatal("could not determine packageName")
 
-        interests = ['libxul.so', 'classes.dex', 'omni.ja']
-        installer = os.path.join(dirs['abs_obj_dir'], 'dist', packageName)
+        interests = ['libxul.so', 'classes.dex', 'omni.ja', 'xul.dll']
+        installer = os.path.join(dist_dir, packageName)
         installer_size = 0
         size_measurements = []
 
+        def paths_with_sizes(installer):
+            if zipfile.is_zipfile(installer):
+                with zipfile.ZipFile(installer, 'r') as zf:
+                    for zi in zf.infolist():
+                        yield zi.filename, zi.file_size
+            elif tarfile.is_tarfile(installer):
+                with tarfile.open(installer, 'r:*') as tf:
+                    for ti in tf:
+                        yield ti.name, ti.size
+
         if os.path.exists(installer):
             installer_size = self.query_filesize(installer)
             self.info('Size of %s: %s bytes' % (packageName, installer_size))
             try:
                 subtests = {}
-                if zipfile.is_zipfile(installer):
-                    with zipfile.ZipFile(installer, 'r') as zf:
-                        for zi in zf.infolist():
-                            name = os.path.basename(zi.filename)
-                            size = zi.file_size
-                            if name in interests:
-                                if name in subtests:
-                                    # File seen twice in same archive;
-                                    # ignore to avoid confusion.
-                                    subtests[name] = None
-                                else:
-                                    subtests[name] = size
-                elif tarfile.is_tarfile(installer):
-                    with tarfile.open(installer, 'r:*') as tf:
-                        for ti in tf:
-                            name = os.path.basename(ti.name)
-                            size = ti.size
-                            if name in interests:
-                                if name in subtests:
-                                    # File seen twice in same archive;
-                                    # ignore to avoid confusion.
-                                    subtests[name] = None
-                                else:
-                                    subtests[name] = size
+                for path, size in paths_with_sizes(installer):
+                    name = os.path.basename(path)
+                    if name in interests:
+                        # We have to be careful here: desktop Firefox installers
+                        # contain two omni.ja files: one for the general runtime,
+                        # and one for the browser proper.
+                        if name == 'omni.ja':
+                            containing_dir = os.path.basename(os.path.dirname(path))
+                            if containing_dir == 'browser':
+                                name = 'browser-omni.ja'
+                        if name in subtests:
+                            self.fatal('should not see %s (%s) multiple times!'
+                                       % (name, path))
+                        subtests[name] = size
                 for name in subtests:
-                    if subtests[name] is not None:
-                        self.info('Size of %s: %s bytes' % (name,
-                                                            subtests[name]))
-                        size_measurements.append(
-                            {'name': name, 'value': subtests[name]})
+                    self.info('Size of %s: %s bytes' % (name,
+                                                        subtests[name]))
+                    size_measurements.append(
+                        {'name': name, 'value': subtests[name]})
             except:
                 self.info('Unable to search %s for component sizes.' % installer)
                 size_measurements = []
 
         if not installer_size and not size_measurements:
             return
 
         # We want to always collect metrics. But alerts for installer size are
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -147404,16 +147404,52 @@
       [
        "/css/css-ui/text-overflow-026-ref.html",
        "=="
       ]
      ],
      {}
     ]
    ],
+   "css/css-ui/text-overflow-027.html": [
+    [
+     "/css/css-ui/text-overflow-027.html",
+     [
+      [
+       "/css/css-ui/reference/text-overflow-027-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-ui/text-overflow-028.html": [
+    [
+     "/css/css-ui/text-overflow-028.html",
+     [
+      [
+       "/css/css-ui/reference/text-overflow-028-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "css/css-ui/text-overflow-029.html": [
+    [
+     "/css/css-ui/text-overflow-029.html",
+     [
+      [
+       "/css/css-ui/reference/text-overflow-029-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "css/css-values/attr-color-invalid-cast.html": [
     [
      "/css/css-values/attr-color-invalid-cast.html",
      [
       [
        "/css/css-values/reference/200-200-green.html",
        "=="
       ]
@@ -254364,16 +254400,21 @@
      {}
     ]
    ],
    "css/css-typed-om/stylevalue-subclasses/numeric-objects/resources/testhelper.js": [
     [
      {}
     ]
    ],
+   "css/css-typed-om/the-stylepropertymap/properties/resources/testsuite.js": [
+    [
+     {}
+    ]
+   ],
    "css/css-ui/OWNERS": [
     [
      {}
     ]
    ],
    "css/css-ui/reference/box-sizing-001-ref.html": [
     [
      {}
@@ -254504,16 +254545,31 @@
      {}
     ]
    ],
    "css/css-ui/reference/text-overflow-022-ref.html": [
     [
      {}
     ]
    ],
+   "css/css-ui/reference/text-overflow-027-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/css-ui/reference/text-overflow-028-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "css/css-ui/reference/text-overflow-029-ref.html": [
+    [
+     {}
+    ]
+   ],
    "css/css-ui/support/1x1-red.png": [
     [
      {}
     ]
    ],
    "css/css-ui/support/PTS/PngSuite.LICENSE": [
     [
      {}
@@ -291309,16 +291365,31 @@
      {}
     ]
    ],
    "webaudio/resources/audit.js": [
     [
      {}
     ]
    ],
+   "webaudio/resources/distance-model-testing.js": [
+    [
+     {}
+    ]
+   ],
+   "webaudio/resources/panner-formulas.js": [
+    [
+     {}
+    ]
+   ],
+   "webaudio/resources/panner-model-testing.js": [
+    [
+     {}
+    ]
+   ],
    "webaudio/resources/sin_440Hz_-6dBFS_1s.wav": [
     [
      {}
     ]
    ],
    "webaudio/resources/start-stop-exceptions.js": [
     [
      {}
@@ -312573,16 +312644,22 @@
     ]
    ],
    "css/css-typed-om/stylevalue-subclasses/cssSkew.tentative.html": [
     [
      "/css/css-typed-om/stylevalue-subclasses/cssSkew.tentative.html",
      {}
     ]
    ],
+   "css/css-typed-om/stylevalue-subclasses/cssSkewX.tentative.html": [
+    [
+     "/css/css-typed-om/stylevalue-subclasses/cssSkewX.tentative.html",
+     {}
+    ]
+   ],
    "css/css-typed-om/stylevalue-subclasses/cssTransformValue.tentative.html": [
     [
      "/css/css-typed-om/stylevalue-subclasses/cssTransformValue.tentative.html",
      {}
     ]
    ],
    "css/css-typed-om/stylevalue-subclasses/cssTranslate.tentative.html": [
     [
@@ -312879,16 +312956,28 @@
     ]
    ],
    "css/css-typed-om/the-stylepropertymap/inline/update.tentative.html": [
     [
      "/css/css-typed-om/the-stylepropertymap/inline/update.tentative.html",
      {}
     ]
    ],
+   "css/css-typed-om/the-stylepropertymap/properties/display.html": [
+    [
+     "/css/css-typed-om/the-stylepropertymap/properties/display.html",
+     {}
+    ]
+   ],
+   "css/css-typed-om/the-stylepropertymap/properties/margin-top.html": [
+    [
+     "/css/css-typed-om/the-stylepropertymap/properties/margin-top.html",
+     {}
+    ]
+   ],
    "css/css-ui/box-sizing-027.html": [
     [
      "/css/css-ui/box-sizing-027.html",
      {}
     ]
    ],
    "css/css-ui/caret-color-009.html": [
     [
@@ -315057,16 +315146,22 @@
     ]
    ],
    "custom-elements/parser/parser-uses-registry-of-owner-document.html": [
     [
      "/custom-elements/parser/parser-uses-registry-of-owner-document.html",
      {}
     ]
    ],
+   "custom-elements/pseudo-class-defined.html": [
+    [
+     "/custom-elements/pseudo-class-defined.html",
+     {}
+    ]
+   ],
    "custom-elements/reaction-timing.html": [
     [
      "/custom-elements/reaction-timing.html",
      {}
     ]
    ],
    "custom-elements/reactions/Attr.html": [
     [
@@ -359355,16 +359450,82 @@
     ]
    ],
    "webaudio/the-audio-api/the-offlineaudiocontext-interface/current-time-block-size.html": [
     [
      "/webaudio/the-audio-api/the-offlineaudiocontext-interface/current-time-block-size.html",
      {}
     ]
    ],
+   "webaudio/the-audio-api/the-pannernode-interface/distance-exponential.html": [
+    [
+     "/webaudio/the-audio-api/the-pannernode-interface/distance-exponential.html",
+     {}
+    ]
+   ],
+   "webaudio/the-audio-api/the-pannernode-interface/distance-inverse.html": [
+    [
+     "/webaudio/the-audio-api/the-pannernode-interface/distance-inverse.html",
+     {}
+    ]
+   ],
+   "webaudio/the-audio-api/the-pannernode-interface/distance-linear.html": [
+    [
+     "/webaudio/the-audio-api/the-pannernode-interface/distance-linear.html",
+     {}
+    ]
+   ],
+   "webaudio/the-audio-api/the-pannernode-interface/panner-automation-basic.html": [
+    [
+     "/webaudio/the-audio-api/the-pannernode-interface/panner-automation-basic.html",
+     {}
+    ]
+   ],
+   "webaudio/the-audio-api/the-pannernode-interface/panner-automation-equalpower-stereo.html": [
+    [
+     "/webaudio/the-audio-api/the-pannernode-interface/panner-automation-equalpower-stereo.html",
+     {}
+    ]
+   ],
+   "webaudio/the-audio-api/the-pannernode-interface/panner-automation-position.html": [
+    [
+     "/webaudio/the-audio-api/the-pannernode-interface/panner-automation-position.html",
+     {}
+    ]
+   ],
+   "webaudio/the-audio-api/the-pannernode-interface/panner-distance-clamping.html": [
+    [
+     "/webaudio/the-audio-api/the-pannernode-interface/panner-distance-clamping.html",
+     {}
+    ]
+   ],
+   "webaudio/the-audio-api/the-pannernode-interface/panner-equalpower-stereo.html": [
+    [
+     "/webaudio/the-audio-api/the-pannernode-interface/panner-equalpower-stereo.html",
+     {}
+    ]
+   ],
+   "webaudio/the-audio-api/the-pannernode-interface/panner-equalpower.html": [
+    [
+     "/webaudio/the-audio-api/the-pannernode-interface/panner-equalpower.html",
+     {}
+    ]
+   ],
+   "webaudio/the-audio-api/the-pannernode-interface/panner-rolloff-clamping.html": [
+    [
+     "/webaudio/the-audio-api/the-pannernode-interface/panner-rolloff-clamping.html",
+     {}
+    ]
+   ],
+   "webaudio/the-audio-api/the-pannernode-interface/pannernode-basic.html": [
+    [
+     "/webaudio/the-audio-api/the-pannernode-interface/pannernode-basic.html",
+     {}
+    ]
+   ],
    "webaudio/the-audio-api/the-pannernode-interface/test-pannernode-automation.html": [
     [
      "/webaudio/the-audio-api/the-pannernode-interface/test-pannernode-automation.html",
      {}
     ]
    ],
    "webaudio/the-audio-api/the-stereopanner-interface/no-dezippering.html": [
     [
@@ -514741,17 +514902,17 @@
    "b594b1907b2ca95278b8fc643b97480d693bab9f",
    "testharness"
   ],
   "css/css-typed-om/resources/1x1-green.png": [
    "51e7b6974a09eda6cb31337717c5eaeb9c44b443",
    "support"
   ],
   "css/css-typed-om/resources/testhelper.js": [
-   "62fc510703d52cd0894359c29d975920e26b594f",
+   "6bfe0c7b10e47c2f6acb95596ea11b8290b196ac",
    "support"
   ],
   "css/css-typed-om/styleMap-update-function.html": [
    "a1dee75d914b68753af742ce8e6dbbac0397a9a6",
    "testharness"
   ],
   "css/css-typed-om/stylevalue-normalization/normalize-ident.tentative.html": [
    "162ce70613e78bb007ea24ea525ec78ef17cd3bd",
@@ -514769,17 +514930,17 @@
    "4bc704fca50d3a114fe0fde76b6030516662d43a",
    "visual"
   ],
   "css/css-typed-om/stylevalue-normalization/positionvalue-normalization.tentative.html": [
    "9334ee684f4a2897f6a191d9217e63af5630cc0d",
    "testharness"
   ],
   "css/css-typed-om/stylevalue-normalization/transformvalue-normalization.tentative.html": [
-   "1b1af8a14ed0a1751ef3899e574e263c842440fd",
+   "a4c39f9ea72acba74027e6ffb26e221606dcd9ac",
    "testharness"
   ],
   "css/css-typed-om/stylevalue-objects/interface.html": [
    "5c9086db5b7f3a9d6e3109f1ce47385ad345f474",
    "testharness"
   ],
   "css/css-typed-om/stylevalue-objects/parse-invalid.html": [
    "d46bda9e4f7c50d27c9f1e18c643e2b1a8570896",
@@ -514805,17 +514966,17 @@
    "a71f7f5afdd97a55eeef2adc89914194ad5ecb0a",
    "testharness"
   ],
   "css/css-typed-om/stylevalue-serialization/cssPositionValue.html": [
    "155be052f2810afb0560b72e7c223293c02e61a8",
    "testharness"
   ],
   "css/css-typed-om/stylevalue-serialization/cssTransformValue.tentative.html": [
-   "71591a5fdc7f90841dcc204c70f1a3e611024edc",
+   "5bb6823ff35152e1a55f573d568e29b7edfcf2d7",
    "testharness"
   ],
   "css/css-typed-om/stylevalue-serialization/cssUnitValue.tentative.html": [
    "e1c27e0baa33d990c83ee3d562a3eeae3106b833",
    "testharness"
   ],
   "css/css-typed-om/stylevalue-serialization/cssUnparsedValue.html": [
    "7ba0e1c9db3799bad925036de1da7c51fd102610",
@@ -514856,16 +515017,20 @@
   "css/css-typed-om/stylevalue-subclasses/cssScale.tentative.html": [
    "779c99a24057f5a2c33fcda77f5897c142659518",
    "testharness"
   ],
   "css/css-typed-om/stylevalue-subclasses/cssSkew.tentative.html": [
    "91ff825d12373156b3c3b23d23bf866220ef1386",
    "testharness"
   ],
+  "css/css-typed-om/stylevalue-subclasses/cssSkewX.tentative.html": [
+   "be786095d55df3e6d9d4b10d8ef7c9da95beb1f6",
+   "testharness"
+  ],
   "css/css-typed-om/stylevalue-subclasses/cssTransformValue.tentative.html": [
    "c1ee0153bd654f64b64f74bf00b6b0709c7cb9ed",
    "testharness"
   ],
   "css/css-typed-om/stylevalue-subclasses/cssTranslate.tentative.html": [
    "700fae462f258404f3d0b8fad290613fc1929e1d",
    "testharness"
   ],
@@ -515064,16 +515229,28 @@
   "css/css-typed-om/the-stylepropertymap/inline/set.tentative.html": [
    "00d06230cd8f21d522ab895c853201f9910d0d90",
    "testharness"
   ],
   "css/css-typed-om/the-stylepropertymap/inline/update.tentative.html": [
    "30ee6179d77f18692867217c18852db94b1d10bb",
    "testharness"
   ],
+  "css/css-typed-om/the-stylepropertymap/properties/display.html": [
+   "344c75e256cf3284d6582c2cd3c9f726d6d7f443",
+   "testharness"
+  ],
+  "css/css-typed-om/the-stylepropertymap/properties/margin-top.html": [
+   "3a6cb963dd8ff07522ade6839f8de5493fd49414",
+   "testharness"
+  ],
+  "css/css-typed-om/the-stylepropertymap/properties/resources/testsuite.js": [
+   "b0099e66215cc2631bbcb5b2b0c87d16b6f60e21",
+   "support"
+  ],
   "css/css-ui/OWNERS": [
    "beeb8a77d396e48731fd1e69a922b6e2c84c2caa",
    "support"
   ],
   "css/css-ui/box-sizing-001.html": [
    "5e913f2edc75ae0369eb59f67f320ec552472160",
    "reftest"
   ],
@@ -516220,16 +516397,28 @@
   "css/css-ui/reference/text-overflow-021-ref.html": [
    "317e02ebc1fb90e7d91bed1fd982d2bf81a10cfc",
    "support"
   ],
   "css/css-ui/reference/text-overflow-022-ref.html": [
    "a223e8c0151a7ffc350466dd3b13f766f67425e8",
    "support"
   ],
+  "css/css-ui/reference/text-overflow-027-ref.html": [
+   "2ead9e9af4a591a5bf450f8449e9b658a24a8154",
+   "support"
+  ],
+  "css/css-ui/reference/text-overflow-028-ref.html": [
+   "86673d6286a6676157d19f000fa3b29b74f592b8",
+   "support"
+  ],
+  "css/css-ui/reference/text-overflow-029-ref.html": [
+   "4a01c40b4137a40b316be134899d33202b934850",
+   "support"
+  ],
   "css/css-ui/resize-001.html": [
    "cee9af6bf866dc360a2f6e8a8a8b29376205dfde",
    "manual"
   ],
   "css/css-ui/resize-002.html": [
    "6bac967ea52ac21e91e2360aadb98e8811a08174",
    "manual"
   ],
@@ -517356,16 +517545,28 @@
   "css/css-ui/text-overflow-026-ref.html": [
    "03c0337af58ba7bada64ab36721d9f1fe2f9a2f3",
    "support"
   ],
   "css/css-ui/text-overflow-026.html": [
    "5087fe90cb3ef8e340be316f1534cb6dba3e0d17",
    "reftest"
   ],
+  "css/css-ui/text-overflow-027.html": [
+   "3a3c0bc49087b5ae18c62fa2c50003f9ca8dccc2",
+   "reftest"
+  ],
+  "css/css-ui/text-overflow-028.html": [
+   "62dbaef147720aedb50e1ed682a72becee07f58d",
+   "reftest"
+  ],
+  "css/css-ui/text-overflow-029.html": [
+   "213162b8e95c0bf4f61a8fc01cc034310c87f6c9",
+   "reftest"
+  ],
   "css/css-ui/text-overflow-ref.html": [
    "db55b0b95a7406e9c4f00081b3e2cbe6b07363f7",
    "support"
   ],
   "css/css-ui/text-overflow.html": [
    "d3a6c835c23b82a85398e7981461a0cd3a75b861",
    "manual"
   ],
@@ -520409,73 +520610,73 @@
    "4cbcdb79cf6f1359855fd4c9668327bdbd15859b",
    "reftest"
   ],
   "css/css-writing-modes/float-lft-orthog-htb-in-vlr-002-ref.xht": [
    "3a6acd515d3631525965d274582b81f7df575a2d",
    "support"
   ],
   "css/css-writing-modes/float-lft-orthog-htb-in-vlr-002.xht": [
-   "f3e8f14fcaaa56c34406b30649f0587e49e74fb4",
+   "9f5089a9d34072d66d5be282abc2b4bda24717e0",
    "reftest"
   ],
   "css/css-writing-modes/float-lft-orthog-htb-in-vrl-002-ref.xht": [
    "83bbc497ac7e9124f1c1814a8867e46f33d84ccf",
    "support"
   ],
   "css/css-writing-modes/float-lft-orthog-htb-in-vrl-002.xht": [
-   "f87b363d913724d318af7424e624a0be494ec7a4",
+   "2c48926c21590e741a9cc0b895d9f3cc6839b345",
    "reftest"
   ],
   "css/css-writing-modes/float-lft-orthog-vlr-in-htb-002-ref.xht": [
    "cca786380598b2395ef041ade525cbb97bc063ac",
    "support"
   ],
   "css/css-writing-modes/float-lft-orthog-vlr-in-htb-002.xht": [
-   "66d49b63ea24b308023beef7fe0c572b13139110",
+   "a17d200553e582b65cb86a929f5c2d3d39274726",
    "reftest"
   ],
   "css/css-writing-modes/float-lft-orthog-vrl-in-htb-002-ref.xht": [
    "4d57c8be55869f0426185834f2d6cbbbe532027a",
    "support"
   ],
   "css/css-writing-modes/float-lft-orthog-vrl-in-htb-002.xht": [
-   "2644d7e8399b29cc6f8162c9962ee69a173c898e",
+   "f6ca89bfcb6e674bfdabe1c9537db0bafadbb032",
    "reftest"
   ],
   "css/css-writing-modes/float-rgt-orthog-htb-in-vlr-003-ref.xht": [
    "f55089e3f99e9316526460e31f975333b111d2ed",
    "support"
   ],
   "css/css-writing-modes/float-rgt-orthog-htb-in-vlr-003.xht": [
-   "0909fd3ad8e36dd2e18a2b29c2c0452854884a09",
+   "bfdcdbc8282ee66e17b1cae353302ea9b4f62937",
    "reftest"
   ],
   "css/css-writing-modes/float-rgt-orthog-htb-in-vrl-003-ref.xht": [
    "091209669a60176b10b508113938eff57dd9e09c",
    "support"
   ],
   "css/css-writing-modes/float-rgt-orthog-htb-in-vrl-003.xht": [
-   "a619d760c7c1c4ebd7e276fe8d9593cb89664e6b",
+   "b6c9bda1aeb5d641a3e316e3ddd2617ff0686b7b",
    "reftest"
   ],
   "css/css-writing-modes/float-rgt-orthog-vlr-in-htb-003-ref.xht": [
    "17ee3d60ef94c8b1939486a4149d635e677a49f4",
    "support"
   ],
   "css/css-writing-modes/float-rgt-orthog-vlr-in-htb-003.xht": [
-   "c1db3af5d5de4ab629dd51d843a5be33664fdfdb",
+   "794149a1b1bb8fe88e0ae451f544aeba5bdf8138",
    "reftest"
   ],
   "css/css-writing-modes/float-rgt-orthog-vrl-in-htb-003-ref.xht": [
    "2905ecba6a26413323a19b294fe0f848ff8a7314",
    "support"
   ],
   "css/css-writing-modes/float-rgt-orthog-vrl-in-htb-003.xht": [
-   "9912c24db61e65b88a4234466647bcafd1b30a88",
+   "03fce90ab3383410f008e868defeda95eec2518c",
    "reftest"
   ],
   "css/css-writing-modes/float-shrink-to-fit-vlr-003.xht": [
    "0d474ef72c50647a7a182abac0d661b73ec9c9f4",
    "reftest"
   ],
   "css/css-writing-modes/float-shrink-to-fit-vlr-005.xht": [
    "1c05ebcc852d6a31b9dde9609e7c73dfcedf86c9",
@@ -522025,289 +522226,289 @@
    "252c877b6b62e93b69b97a9dcc99498c5f56db65",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-001-ref.xht": [
    "31223eeb2b9b8e7077fd90fc18d29221c63cdb6b",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-001.xht": [
-   "062fa49d4917baad19d00f5b91a29424c8dde79d",
+   "901e425aec84a8b0d56cfc8e8a3b40131d1a954e",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-003-ref.xht": [
    "1fbb431cff566cb5215613c1b9b7f728869449ef",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-003.xht": [
-   "1c9e187e9ae9b0cd94067cb06b7dca1e7267ad62",
+   "05143b4edb1df38ef6c8e62a1889fac8b9cdf2ea",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-004-ref.xht": [
    "1c243c95bd30d7bf3fc90d8e9fa5aed68b6f80f7",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-004.xht": [
-   "e908a3973be90ed7f6e002e95dc32d488762a9fb",
+   "dd35913cd65c1afe305a1a7e1ff66286de6e6835",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-006-ref.xht": [
    "709241f95c6f7fa95020e05010bbfd0b1de4725d",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-006.xht": [
-   "0b678f8bf6b69e94a18d70b41a5c004eb3618b15",
+   "d8fdd3eb77926a78a3321d61347f3bfc8a1901d9",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-007-ref.xht": [
    "3b76e682dd6e169d459e458d587b6fea5dc71ac7",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-007.xht": [
-   "5a1443cd05c42ef1913b3286c954001ead7e4de0",
+   "14120c2ebd4c08b767b93a1edb7d267ab4f16941",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-008-ref.xht": [
    "53c323c3e644c0e561d89fd9e64bf0482e188427",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-008.xht": [
-   "3a77f22047e22a067cd1e5e73eee94b31fa5618a",
+   "b1a4db27c694fa023d6b309a3b54f2fd2b71dceb",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-009.xht": [
-   "2d4f8e5e439ca4f7ab20950cb80d34a2761b6569",
+   "40a12c005d3a2c4b509e0fbda3a7249b0df70562",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-010-ref.xht": [
    "7616fc5b8e0f7668aaf63cc29efdac03ec6ee6be",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-010.xht": [
-   "b9998ffdb4744fe6d1d71016552b166056773d6b",
+   "2859517023f8eb400a34fe92c72a9271ea66b902",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-011-ref.xht": [
    "b0735e7b25ee70a786a870ad2405e6f8c9c1b737",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-011.xht": [
-   "d49dc741995575554327d7dc51a8de7addecc61c",
+   "b9b49fa21f1bdd06f7e041fa0dace8de79ea5c53",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-012.xht": [
-   "ceb86c4d1018105f7323c52cd566ede0993dc57a",
+   "045640a233a5cbb2ea1986dda6e01f507a1ee52f",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-013-ref.xht": [
    "d30b49445cf2ca371c055e80addbb9fadb555ef3",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-013.xht": [
-   "786e589dfd035b20e20cd3095583f192f65166f3",
+   "26bdaabbeb5642186a4452122714d900f1f597fe",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-015-ref.xht": [
    "7b896cfd0e378a3b10b3dd4076d230d76506b37c",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-015.xht": [
-   "9e8449f6b72a4b18d1c020a3aa6a8232ae0efa4d",
+   "45eb0ef69a56268116f03430a0421b0e489797fb",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-016-ref.xht": [
    "54558796716648716b1ec507177972a1e5d4c9eb",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-016.xht": [
-   "85e1704703ff89d0d873a9054e1dba06d20149f8",
+   "f302fcfd9506a3bcd924afe1a6cd2ec4d9a2569c",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-018-ref.xht": [
    "9e84251c0996327b4e7b783a662ce07bcecd2447",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-018.xht": [
-   "bfbb7f84203ebb733d3c8ad527a80c9de3df0aa3",
+   "7ea64c9467f39293d4da4ce04f09d33c06143d4b",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-019-ref.xht": [
    "e61715ead3ca3c9e5e95643f14a5376bcb1e2b3a",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-019.xht": [
-   "f2b5731dd499062713db36d7d34312cb7f8888c7",
+   "7a4d00311194f62ddad5487ecf7c3a529330a14e",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-020-ref.xht": [
    "8c7ddc2be2595d97bdc96cf2f182ff3f8133e528",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-020.xht": [
-   "74e46119562afb3a4cb289e561c7da33ffadb0d4",
+   "ffc5650d73d9491bc9ea87c888566b7c07a43784",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-021.xht": [
-   "e137ac2cf9bcb1c49b5c9cd0846ea721c8c3c864",
+   "ec343d85e1ff79e81d222bf0de15a926a8898ac2",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-022-ref.xht": [
    "382ce632865ab6b2f7e3fe45c6f44037d1c0ea5e",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-022.xht": [
-   "260cde729a1c749fc557d5c0877eca2eb93e4693",
+   "207d9b8288bb77b047e485d65f94960374110228",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-023-ref.xht": [
    "865cba963a52939c284976fa080ca94b31a390ea",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-023.xht": [
-   "6d2f4be5557a52e649b9c37140c248e3409fa6b5",
+   "8267b122163cbd1159d53bd46e70eabe54cda7d7",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vlr-024.xht": [
-   "ea5fc6d5713fd925dd61f0c1329a13cc2c6abeca",
+   "ba77e91c9fb816a870cf61683c2277e4fe1658d4",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-001-ref.xht": [
    "3395ea2eff2432ec27e9c5442180d8fbfd72fe71",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-001.xht": [
-   "56c614672c8af64ba8bdd19325479be07c29deec",
+   "e476bf16eaaddbaf7d73bb6689bf410d0af92d14",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-003-ref.xht": [
    "8f6bb55295fbd5098f4926d881d867741db72d19",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-003.xht": [
-   "a5faf8b2fd80d158afabf4719dc11233bea63c21",
+   "bebce317cde666a913e6d6c654efd93f3aa0c46d",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-004.xht": [
-   "c007527fd14a528dfb28cb4c16b36e1bf248d9f3",
+   "9bea5e2666bf14be2d6b0d3588a400351a9f158a",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-006-ref.xht": [
    "6e1b0e5b60c86c845225df52c47c146266bdfc6a",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-006.xht": [
-   "3378a514319ee9987c519b9a535fec88258248d7",
+   "848c09a400cd57d16084ddee42c4fde05eb5f5bb",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-007-ref.xht": [
    "4febcb6ab14d38a073b749f00ebedb2562bde1b1",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-007.xht": [
-   "b8deeede88e4b6662aa993111fa8b3371fe1aec4",
+   "90cafa81f1c1224d7bc940c558dafce4a77b2e8d",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-008-ref.xht": [
    "207d331cc97a52b75d86d53473a872b8965c270e",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-008.xht": [
-   "ce09d940b2648fac1459aa2bb2c1a6025e135ebc",
+   "8fd1eca8e34927e478fcebfa954dbfab1a3f54df",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-009.xht": [
-   "87faddc35a193b61b70cd4448fa54b82dbb56563",
+   "aa41835735ad65ae75209c460c09b66467cf5a62",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-010-ref.xht": [
    "5401aa0f83edf64ae6f62ea242dab693b9d500bd",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-010.xht": [
-   "c601018b690eb8fe31a990630a4eb78f70cb9ef8",
+   "cc7e3b465ab5610c9db0e93981ef68b82f15177e",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-011-ref.xht": [
    "43d4b8c4c97279999db4146a17c4ce7652741701",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-011.xht": [
-   "6626f2e3624dc8bba52894b85a672dc052f11775",
+   "7961f9e20605e59318b836b091eacbcd02f49292",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-012.xht": [
-   "580d740a994fa7e4ed5f1f796221cb532a065418",
+   "1c5f31b836afa6a2e3a65abef90c0ccf346effbc",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-013-ref.xht": [
    "e249c388687e85456d84bd9db4b619dd1a8686e5",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-013.xht": [
-   "c84e96a87de1a3e53dd0abf7da31bf44ee2a8cf4",
+   "24c9838701a55a2b4635b945e1fa6123df1bdb8a",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-015-ref.xht": [
    "8f72220cc50b410b1d42e8b15a37b313cf17a363",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-015.xht": [
-   "69b1438ea40979c31fc58f4b9895155e2193de6e",
+   "f8b5a81827b4c514762148fdf7ae1ff779f81dd8",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-016.xht": [
-   "bbb293297011d12a4f0b65a4531cc4f344582414",
+   "472102eb4c09e1cdae7234f32ae3761372e24271",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-018-ref.xht": [
    "b8239a66ac9569b3f47a5e37c44443292c78d40c",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-018.xht": [
-   "633d56d95065490256404ba0b6af4d42e08dd172",
+   "6d006bee854cc4eb666fda1ee7e8a377e2fe3ae0",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-019-ref.xht": [
    "9d348a5c9d7e8661f7c23429a23da54e4d909add",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-019.xht": [
-   "b4190272dcc03dd6cf4805f99d025035e6e53666",
+   "abfc982953a9a4eb022c88c9ba832b3ed6ac22da",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-020-ref.xht": [
    "d65db617493cd491135bed7034b3b1a7f68a21a9",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-020.xht": [
-   "cbcc15795b61c0fb0115332799bd1451205e8570",
+   "575344cec5208daa1a897bfe5383a6bd4b6ceed0",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-021.xht": [
-   "7b5286b1a85f309d32ea7e79c99db59fe648c236",
+   "126c8c038a6911840d2c3b142933eac9a7814027",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-022-ref.xht": [
    "93c74e1f4edd9a972bd961d5e0fe6c58754dc7b6",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-022.xht": [
-   "9d75adf153d34f9f64c03a3b6a6df7a41aeead96",
+   "1f4331ecd50a115856e04633aca222e688e13af2",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-023-ref.xht": [
    "8f98562ad7c5caabe40b4280681abf82f73c4c3f",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-023.xht": [
-   "5a6b6fd245a48de4f9aec4914f6191c453ca3648",
+   "47e92d37e1c39bc207017b8fdbc313bc1fc3c8d5",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-htb-in-vrl-024.xht": [
-   "1d4fa6791fee2e7dac011966f27a23043181f08c",
+   "1ff60ed2d3504b206ce72a982e3c64a69f000ba9",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-prct-htb-in-vlr-001-ref.xht": [
    "15c27a50ebfc4f08ced0889b1ff63027593351e5",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-prct-htb-in-vlr-001.xht": [
    "54c034ffb25652897b9e29fa8327607caed57302",
@@ -522561,313 +522762,313 @@
    "592e40eff9a9b6f5a71d97eeed5b9873939b7f07",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-001-ref.xht": [
    "8241a375d6aab302ac3c3511b30c9b188b9e160f",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-001.xht": [
-   "a503274698e73601e160644439b9149c72dee0cf",
+   "0b98049173e4484d1feebe93dddaf7dfce2effca",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-003-ref.xht": [
    "028f3950b8fbf622d33b071522dc4661d0d24554",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-003.xht": [
-   "78ce838ba7870ef13f303d403a710052313ba5b7",
+   "e6d0c165a5082440cdb06538e6dab433a8fe42d9",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-004-ref.xht": [
    "05c0d7b2dd2aa47932312b4ab00bc5cf5be2dafa",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-004.xht": [
-   "6fce6cce59fd755d910dcf20cbc6ffa1150bc115",
+   "9775f488216af71fa8ef7b0e48bd9747bc21b09b",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-006-ref.xht": [
    "b845c6296e8d1b486f35040371de40d5b61fc7f2",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-006.xht": [
-   "cd6bf42940756a11bced234b08db2d34ed02e848",
+   "66fe7dbd070d2314bbbace86945adbec55f83478",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-007-ref.xht": [
    "586b50b58d770c8946f4aef9ec7f63863992db76",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-007.xht": [
-   "a1d52ce7cdc8f7c265c8f31337ab11d59b8d3289",
+   "b7962676e2a809a865f07b70eb457fd85c794706",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-008-ref.xht": [
    "9e36d2c0769b18f9ef227827f6376feb3b78bf07",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-008.xht": [
-   "ee9669997069ba792ea54b9e461c36b2de5df3bc",
+   "9d65e04e301dd1635daa24a1999131114dc84634",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-009-ref.xht": [
    "2296abf2111e6512bfb632c931917eeacde45031",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-009.xht": [
-   "c3363ddf411902cd7948cdba03dde2ba466801d6",
+   "25fd39a18025c51c28a7b73d1346e2e2fec505d4",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-010-ref.xht": [
    "f48e6cdd98a5343cb245887bfbc4ef5199b84e69",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-010.xht": [
-   "0d797c8456474b287533cc76cb3a82f16f0bf0a2",
+   "a5ff5ac0a5f198465a2ed6bbb75b4826e7fd1b0e",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-011-ref.xht": [
    "d488abc088bed258b10494cc8f58397145f1d717",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-011.xht": [
-   "10737fc5d803033123dff2339c63326103f29c37",
+   "551b986ea9094c7402993373dbae6e60038d0ebb",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-012-ref.xht": [
    "7befc64b3f9a4abdc9c1826128dcffb853fec093",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-012.xht": [
-   "63c626891651ce57f25e0f5ff02f3b399c4f54fe",
+   "4623a6952246c5d551420eee8d270fad765da16e",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-013-ref.xht": [
    "9b6b9b2868cc234e3e7ed8998177f3a441e21e32",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-013.xht": [
-   "9074ceab5bfd80cdbf9a20122aa4a4e714ccea1f",
+   "22266483e39f2224ad823cdd88a90daec0abe5e0",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-015-ref.xht": [
    "42dc6d420aae2938fb10a41394d18b3fbb3178ce",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-015.xht": [
-   "3422d57d67971aa4b3a4e89bfed9261ad9ab907f",
+   "5b777c91d90f461e746f7ca500b7383ff37346b0",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-016-ref.xht": [
    "0e3e920223575f9f9e441e97e3155f00282b9c6d",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-016.xht": [
-   "ec3d006c52ae738553545b5113a43cbb45941fb4",
+   "23b0b1e8e60077c7a308f78a9d501e994aac1970",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-018-ref.xht": [
    "5f3d41ab46b03fcd2d08ae55fd3d64b4df36441e",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-018.xht": [
-   "10903528f0d5fce57222066579a9849e22ebbe31",
+   "560cf570e9b5a9669f6c2d9496a6d4dca4c1624f",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-019-ref.xht": [
    "0cef155326ec219fb3b9922fc75191ace4131bc4",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-019.xht": [
-   "9e6bd5dc41e1d52cef3707e3536f9a72aa3ce0bd",
+   "f7d84c71be0494df9d8feb44711f6197bd1712d0",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-020-ref.xht": [
    "a723fd3992bda407bcee9f8ca2b8712bea6023d3",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-020.xht": [
-   "c9604dfbe57ec804862fca7d1679c92251179bf7",
+   "448a501ac157bbe1e385c3d24d04563d69dbc67a",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-021.xht": [
-   "0fd5dcddba4846687b72309675d795a4dcd332ef",
+   "39a7c6a43fc8ab5d3d8d06dc96d37759574f5dbf",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-022-ref.xht": [
    "8d2bc25abb24afc286b614265ebe60921adcdf0a",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-022.xht": [
-   "f625da38b3a590b3e86bde764f29d0ca3f96a311",
+   "1e5cd3518f89413d49c79b87a3e9e1b174f90cc0",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-023-ref.xht": [
    "34d6b9f280983490cba3567c71c5c11164306481",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-023.xht": [
-   "f05105575e7f4b433bb7cfc78242e73422e14211",
+   "148bc23619af19f5f46aba4c510104bd83ecce96",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vlr-in-htb-024.xht": [
-   "e8d83d586a0388aa20f76487f9573ab83a671f51",
+   "8734d242aff6d745f31590885b04959a01e56575",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-001-ref.xht": [
    "a5af7fb66abfcc055659f1f7297889b3f1a5a418",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-001.xht": [
-   "e734439a240603c66a2026d2f29b30b7b9c19380",
+   "f7528e5128ec256893239bbfe17e34b968b1f6a3",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-003-ref.xht": [
    "bbe9d3ec9bcd9ce5c8d55bb3b1115bb61aa2c07c",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-003.xht": [
-   "1399708a98eb73fa58846153afb366c95abf9e60",
+   "752f53a16758fe90656b93a245c4c88b4e9d7251",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-004-ref.xht": [
    "b32e4c8ca10c6715ef0794cbe1c34cd98e1af35a",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-004.xht": [
-   "6b3f40fdf1109e896260af19415665a4990235ae",
+   "72fb45c82e9ef4beb5b7c7a48c41b72fbc6dc27d",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-006-ref.xht": [
    "1960b3ca876ca764bae07e827a659f4ab1609925",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-006.xht": [
-   "d2921ce48fd18d470c7a9832e8efcfb1cfe3ddee",
+   "5896ee59ab55c09f6b6d4d41873152b53b1d1255",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-007-ref.xht": [
    "a6a7cb5b5d9b66f8e164b768b4febe9cba916abb",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-007.xht": [
-   "3a9e1291085511838539c1d660191f52983ea9d5",
+   "42e5de9da46adb6fffdc9a9901d2996305bf7d7f",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-008-ref.xht": [
    "650381805263bc7570564044cc16047513a7a5cd",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-008.xht": [
-   "8ffd5250ca99768e52b70466837185136cc5cb03",
+   "03825c7965f99db672b1bb255a0b50b8a2a374ea",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-009-ref.xht": [
    "67b482ca2bba31b822e4d291c5dd1e4e6a36a61c",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-009.xht": [
-   "82466fdc317cb3571af93da0a7afc977d7acd587",
+   "5692884df8c2402c729d0ee09ba74e62247c62ee",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-010-ref.xht": [
    "50dafd70a50970bca0019ebb6ad54d20005d8528",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-010.xht": [
-   "6da1576e5b89d01f685f173350022026f33abe4a",
+   "97390eb81ba0f0b694f1858313702c8ff88c30b6",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-011-ref.xht": [
    "cd77fe75ef0beafbd7d593b360197cc72ff265da",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-011.xht": [
-   "fd684bf6abf99a3b1aa54d179659645cc4a2fdea",
+   "1f8530d1738f1890876bf569bd2588312f31f367",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-012-ref.xht": [
    "4c7b503f89562a3827e307c1fcdc8da5b3e3ab95",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-012.xht": [
-   "6e0c7bfc9a2dd850226ed5e2337be1660c58cb2b",
+   "0c8601a96ec72775ccb9ae52edd617aba6f609d9",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-013-ref.xht": [
    "0118d2f7b8297dd6a6d10759ca029aef9db1cc33",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-013.xht": [
-   "c28d87a65f6a5218f4ed7915a422a5ecc82c3f68",
+   "b6ab9350512058ca1c209382f66ceac2a2ceef3d",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-015-ref.xht": [
    "176a57b8b1ca386428c385c6b1f5c8ce918b597e",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-015.xht": [
-   "8b5784b22d09a53f594fd658d56de338ae6fd8e9",
+   "c87df0ba948b61fd91e61ddbbacbe1c8d8a7e56a",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-016-ref.xht": [
    "598be8711537b9e293ccd4ebdc3dba30e9cfa7c5",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-016.xht": [
-   "46c21a215a48e884142b52a54ba34bfd02e19a4b",
+   "d273e6c00c4fa8cd37a6326f43fff8ae28720851",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-018-ref.xht": [
    "be5951266b80edf3b27e29384875dfb107a020fa",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-018.xht": [
-   "255802f531cbf3cc9e02cd47dc52c0052a607494",
+   "623381f2b77421b5d7846bbe5852da2a2e45f566",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-019-ref.xht": [
    "798d0be68512f0c59f403857b6e523266121b2a6",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-019.xht": [
-   "ef30488fa45a543d1c12c60868e9cada1a5d9cee",
+   "65ef8912d1681c0b72246f6dd26547704bae55ae",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-020-ref.xht": [
    "cf47bdbf58e4ffccbbb05cd71e3387cf3c901791",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-020.xht": [
-   "2883e0047361b95e3176e84fe0fee27d31e32f5e",
+   "1b65ce90afe50637dda87568855027bc48d3949b",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-021.xht": [
-   "871795a6d8e31bbab05ceb9965f8234aa115cf43",
+   "953ccfc3d0c9069f34146da22b5621f0d7356ed6",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-022-ref.xht": [
    "abc45262786f76c5d82ab19a6e697ea7a0781042",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-022.xht": [
-   "9832a45c218ebe19e611130f00247f07a27788f5",
+   "7b7d75785df63a55945ddc3c2887bc9af6d73bba",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-023-ref.xht": [
    "eb077b86b6f0a95ce3cf7e4c4019a3f91b1c210f",
    "support"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-023.xht": [
-   "1dea70c22f83b26e4bee4f0658a4236559a19d74",
+   "5faf4ab2bdb4f36cc51e499b90bac966763bbdbf",
    "reftest"
   ],
   "css/css-writing-modes/sizing-orthog-vrl-in-htb-024.xht": [
-   "82f45245816a1ecb4de68f919e88bd7cd96057c5",
+   "770cfe7939de94e221926b65bccfa057ee7711f2",
    "reftest"
   ],
   "css/css-writing-modes/support/100x100-lime.png": [
    "b02fc2d0ad1d95a2aeb6011022e63928841b183f",
    "support"
   ],
   "css/css-writing-modes/support/100x100-red.png": [
    "6fdfe9cdb3f6aca4564a08e443784e3abd952b52",
@@ -525005,17 +525206,17 @@
    "f0d47464da9d30e70733f09af78f3e9f982c4406",
    "testharness"
   ],
   "css/cssom/GetBoundingRect.html": [
    "7e5a8b25753ac970c2d192376c9dd93943b3dbb5",
    "testharness"
   ],
   "css/cssom/MediaList.html": [
-   "784bc428e8e65a0784dcf89c6e3e27305781cc72",
+   "0357bff95fc870624d13ad3bf61cdfff5b2ad1cf",
    "testharness"
   ],
   "css/cssom/MediaList2.xhtml": [
    "c7481f3c0fe943abb6d67004d6c4aaff12180e34",
    "testharness"
   ],
   "css/cssom/OWNERS": [
    "f131f271cb2f747e845584abcc445348e8c86521",
@@ -525033,33 +525234,33 @@
    "9199534f3b6cc473832562b1701ade3a05dde172",
    "testharness"
   ],
   "css/cssom/css-style-declaration-modifications.html": [
    "c169d758c1d91b75697b04cf72750f8ac1650e1a",
    "testharness"
   ],
   "css/cssom/cssimportrule.html": [
-   "da36c32a7ecad7542c73572917709ee394dc843c",
+   "f8a110a236529e78b528117b25866015d67568d9",
    "testharness"
   ],
   "css/cssom/cssom-cssText-serialize.html": [
    "66ad91da39c1e1da9021f6443e9b6d34baf57dcb",
    "testharness"
   ],
   "css/cssom/cssom-cssstyledeclaration-set.html": [
    "12f5dce3d37a718ac5c872f662cc9f3d9cf09179",
    "testharness"
   ],
   "css/cssom/cssom-fontfacerule-constructors.html": [
    "c064661df74571d374f49a693f3263fcf138e670",
    "testharness"
   ],
   "css/cssom/cssom-fontfacerule.html": [
-   "965a8f6289fa5c6e34bfd447de3b8ef86573fea1",
+   "ca5e2f162a4a0dd02f3c46e72b9e43e1b61d621a",
    "testharness"
   ],
   "css/cssom/cssom-ruleTypeAndOrder.html": [
    "3940c95b6c5664b0efee76cc90ffc466c218366f",
    "testharness"
   ],
   "css/cssom/cssom-setProperty-shorthand.html": [
    "14c752e5dbeab2d58983d53aceab08519379bf0f",
@@ -536961,17 +537162,17 @@
    "3eaf4dbfe67edd892c9a950c20a87c9b9ed565fa",
    "testharness"
   ],
   "custom-elements/attribute-changed-callback.html": [
    "320fb2bb26e7495d0829c39c113df3ea7ec1f4ef",
    "testharness"
   ],
   "custom-elements/builtin-coverage.html": [
-   "9163c06e2bf06b67e5ddf16a6b6d95ca7d64fb4d",
+   "47f6021a5d55b9fb0bd435cd42ceb022ef2b7f6e",
    "testharness"
   ],
   "custom-elements/connected-callbacks.html": [
    "615db12371d6f1f0ed6763abee3a84af9f87c0b2",
    "testharness"
   ],
   "custom-elements/custom-element-reaction-queue.html": [
    "68b226d776736e6044f842c440b42606b63c7175",
@@ -537032,16 +537233,20 @@
   "custom-elements/parser/parser-uses-create-an-element-for-a-token-svg.svg": [
    "51ecc75f42124e8071a767ef908ecc915cbf0fc1",
    "testharness"
   ],
   "custom-elements/parser/parser-uses-registry-of-owner-document.html": [
    "a62669ffcc75d54df38b65e33463566238c8644c",
    "testharness"
   ],
+  "custom-elements/pseudo-class-defined.html": [
+   "cf29756830dc12e60390c08486bbb3170c9c9c71",
+   "testharness"
+  ],
   "custom-elements/reaction-timing.html": [
    "2e390d9b3f4b725cfcaf02e4a5b088a2b7ca7f4d",
    "testharness"
   ],
   "custom-elements/reactions/Attr.html": [
    "f16c4bfdb097fbcaa4a039eaa25bc83ed72b2081",
    "testharness"
   ],
@@ -573589,17 +573794,17 @@
    "c2c952d562f601f2104014f6236368a7f6b84801",
    "testharness"
   ],
   "pointerevents/pointerlock/pointerevent_movementxy-manual.html": [
    "09da177c312d4112bc0177221cccaf787455db7e",
    "manual"
   ],
   "pointerevents/pointerlock/pointerevent_pointerlock_after_pointercapture-manual.html": [
-   "c3f3e1ed9ed8b404e4d6c68b9b518047ed87002f",
+   "272fc056c5a31a70d17fcde39fa99c27cde695b3",
    "manual"
   ],
   "pointerevents/pointerlock/pointerevent_pointerlock_supercedes_capture-manual.html": [
    "1968369ffe9917377fe3bb8801f8543aa9c0a9cf",
    "manual"
   ],
   "pointerevents/pointerlock/resources/pointerevent_movementxy-iframe.html": [
    "829b27c2a0f9281d65f7e2d760c7204781c71660",
@@ -583533,17 +583738,17 @@
    "b854db3540539d20aa0bef0f869edabd0b8b4d47",
    "testharness"
   ],
   "service-workers/service-worker/fetch-request-no-freshness-headers.https.html": [
    "9631947d3cec78547bd4666b8ca970d037648cc8",
    "testharness"
   ],
   "service-workers/service-worker/fetch-request-redirect.https.html": [
-   "e1ea127e72573e97a4d175c1780bfaae6f537972",
+   "d9df49b76012233e0aeb92f50a0613f90e8b3ee1",
    "testharness"
   ],
   "service-workers/service-worker/fetch-request-resources.https.html": [
    "d21ef5a4263e26cd3053a89171e2597424eaad82",
    "testharness"
   ],
   "service-workers/service-worker/fetch-request-xhr-sync.https.html": [
    "4aaa0b1995643f4e18c47d1947476a1a67fe997d",
@@ -583569,17 +583774,17 @@
    "989c30567eb1dd650dc7e2bf807e18961c991087",
    "testharness"
   ],
   "service-workers/service-worker/getregistrations.https.html": [
    "15c2be991ec5b02a0aecf54e6c7bb455f240141d",
    "testharness"
   ],
   "service-workers/service-worker/http-to-https-redirect-and-register.https.html": [
-   "95aee5b0d561467fb5da27f62210be9808539706",
+   "d9e1cc801c3ee075ceb5a5e68ce662cfb2432965",
    "testharness"
   ],
   "service-workers/service-worker/immutable-prototype-serviceworker.https.html": [
    "5c17042fa54cd1fdba6f7aae513412d4a223b432",
    "testharness"
   ],
   "service-workers/service-worker/import-scripts-redirect.https.html": [
    "ad5ca174b55222c41d1dc1a21fe0bc070357062b",
@@ -584945,17 +585150,17 @@
    "14d79d1008193c96f0eadaf3e47ef321a429b905",
    "testharness"
   ],
   "service-workers/service-worker/update-after-oneday.https.html": [
    "9f43ba359c4d564f75d4ce4b6a040aac6ba50d5b",
    "testharness"
   ],
   "service-workers/service-worker/update-bytecheck.https.html": [
-   "ab13a5489f964de56db2fe25c5895a8a55ab7d88",
+   "a39aa4877c3e47c8379b84f8520b6a726936867e",
    "testharness"
   ],
   "service-workers/service-worker/update-recovery.https.html": [
    "aac5705d6844e4a33200418504adb57053a45be2",
    "testharness"
   ],
   "service-workers/service-worker/update.https.html": [
    "d55da98b05b5885084474ebdbabdf6c0998f8bca",
@@ -592212,16 +592417,28 @@
   "webaudio/resources/audit-util.js": [
    "4405458b8f8bdc621c95c1d9ec1c1ad4e6002f1e",
    "support"
   ],
   "webaudio/resources/audit.js": [
    "1e7c1c4169bc54bd2046ff5b3392f846c6b7b40f",
    "support"
   ],
+  "webaudio/resources/distance-model-testing.js": [
+   "0be27d8bddd91a2c4c6e54d3b52af58bff2ed023",
+   "support"
+  ],
+  "webaudio/resources/panner-formulas.js": [
+   "872d9aa271558ee3e7aa293c8e3e44fd525461c0",
+   "support"
+  ],
+  "webaudio/resources/panner-model-testing.js": [
+   "4aa047ffeb14b216d1c329c8959f21e580e33b17",
+   "support"
+  ],
   "webaudio/resources/sin_440Hz_-6dBFS_1s.wav": [
    "09c866126524e4fc0d0fae84de8d34419b1a823b",
    "support"
   ],
   "webaudio/resources/start-stop-exceptions.js": [
    "70e0f890a721786f8afa4cd032e75ef85b5fc6bb",
    "support"
   ],
@@ -592420,16 +592637,60 @@
   "webaudio/the-audio-api/the-oscillatornode-interface/.gitkeep": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webaudio/the-audio-api/the-pannernode-interface/.gitkeep": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
+  "webaudio/the-audio-api/the-pannernode-interface/distance-exponential.html": [
+   "c1c94753ebcd1930e326d73c085e6c3197967cd5",
+   "testharness"
+  ],
+  "webaudio/the-audio-api/the-pannernode-interface/distance-inverse.html": [
+   "400d2a373de3e4255279930fca2ec559aed19688",
+   "testharness"
+  ],
+  "webaudio/the-audio-api/the-pannernode-interface/distance-linear.html": [
+   "8e5d7d23f893b7e79446a82f46807b6106ea5643",
+   "testharness"
+  ],
+  "webaudio/the-audio-api/the-pannernode-interface/panner-automation-basic.html": [
+   "2916ba8f03b18c8da0aa71ea37d57bd604b1de81",
+   "testharness"
+  ],
+  "webaudio/the-audio-api/the-pannernode-interface/panner-automation-equalpower-stereo.html": [
+   "43edf7a7bef1f4e9989b048c571659c83ad234f2",
+   "testharness"
+  ],
+  "webaudio/the-audio-api/the-pannernode-interface/panner-automation-position.html": [
+   "81123665ad1f8201907251ddb0bb2707b14925e1",
+   "testharness"
+  ],
+  "webaudio/the-audio-api/the-pannernode-interface/panner-distance-clamping.html": [
+   "820c902b9bcfeed9611ec9c3cba3ee2179a8cee7",
+   "testharness"
+  ],
+  "webaudio/the-audio-api/the-pannernode-interface/panner-equalpower-stereo.html": [
+   "ebe3d2622a8bdc3802159fa0809c1aea28053b09",
+   "testharness"
+  ],
+  "webaudio/the-audio-api/the-pannernode-interface/panner-equalpower.html": [
+   "28120d05419bb478f49f6bb2449fdf282af6624e",
+   "testharness"
+  ],
+  "webaudio/the-audio-api/the-pannernode-interface/panner-rolloff-clamping.html": [
+   "60a763393acf1470fff8b7670b381e28ae6f9270",
+   "testharness"
+  ],
+  "webaudio/the-audio-api/the-pannernode-interface/pannernode-basic.html": [
+   "074d64146ad36b989d783bf93fe295846287538f",
+   "testharness"
+  ],
   "webaudio/the-audio-api/the-pannernode-interface/test-pannernode-automation.html": [
    "09241a8acbc3a556ac4fb24c0ae4de8c8f70c2ed",
    "testharness"
   ],
   "webaudio/the-audio-api/the-periodicwave-interface/.gitkeep": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-typed-om/stylevalue-subclasses/cssSkewX.tentative.html.ini
@@ -0,0 +1,4 @@
+[cssSkewX.tentative.html]
+  [CSSSkewX tests]
+    expected: FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-typed-om/the-stylepropertymap/properties/display.html.ini
@@ -0,0 +1,4 @@
+[display.html]
+  ['display' property]
+    expected: FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-typed-om/the-stylepropertymap/properties/margin-top.html.ini
@@ -0,0 +1,4 @@
+[margin-top.html]
+  ['margin-top' property]
+    expected: FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/custom-elements/pseudo-class-defined.html.ini
@@ -0,0 +1,97 @@
+[pseudo-class-defined.html]
+  [<div> should be :defined]
+    expected: FAIL
+
+  [createElement("div") should be :defined]
+    expected: FAIL
+
+  [createElementNS("http://www.w3.org/1999/xhtml", "div") should be :defined]
+    expected: FAIL
+
+  [createElementNS("http://www.w3.org/2000/svg", "div") should be :defined]
+    expected: FAIL
+
+  [Without browsing context: createElement("div") should be :defined]
+    expected: FAIL
+
+  [Without browsing context: createElementNS("http://www.w3.org/1999/xhtml", "div") should be :defined]
+    expected: FAIL
+
+  [Without browsing context: createElementNS("http://www.w3.org/2000/svg", "div") should be :defined]
+    expected: FAIL
+
+  [<a-a> should not be :defined]
+    expected: FAIL
+
+  [createElement("a-a") should not be :defined]
+    expected: FAIL
+
+  [createElementNS("http://www.w3.org/1999/xhtml", "a-a") should not be :defined]
+    expected: FAIL
+
+  [createElementNS("http://www.w3.org/2000/svg", "a-a") should be :defined]
+    expected: FAIL
+
+  [Upgraded createElement("a-a") should be :defined]
+    expected: FAIL
+
+  [Upgraded createElementNS("http://www.w3.org/1999/xhtml", "a-a") should be :defined]
+    expected: FAIL
+
+  [Without browsing context: createElement("a-a") should not be :defined]
+    expected: FAIL
+
+  [Without browsing context: createElementNS("http://www.w3.org/1999/xhtml", "a-a") should not be :defined]
+    expected: FAIL
+
+  [Without browsing context: createElementNS("http://www.w3.org/2000/svg", "a-a") should be :defined]
+    expected: FAIL
+
+  [<font-face> should be :defined]
+    expected: FAIL
+
+  [createElement("font-face") should be :defined]
+    expected: FAIL
+
+  [createElementNS("http://www.w3.org/1999/xhtml", "font-face") should be :defined]
+    expected: FAIL
+
+  [createElementNS("http://www.w3.org/2000/svg", "font-face") should be :defined]
+    expected: FAIL
+
+  [Without browsing context: createElement("font-face") should be :defined]
+    expected: FAIL
+
+  [Without browsing context: createElementNS("http://www.w3.org/1999/xhtml", "font-face") should be :defined]
+    expected: FAIL
+
+  [Without browsing context: createElementNS("http://www.w3.org/2000/svg", "font-face") should be :defined]
+    expected: FAIL
+
+  [<abbr is=my-abbr> should not be :defined]
+    expected: FAIL
+
+  [createElement("abbr", { is: "my-abbr" }) should not be :defined]
+    expected: FAIL
+
+  [createElementNS("http://www.w3.org/1999/xhtml", "abbr", { is: "my-abbr" }) should not be :defined]
+    expected: FAIL
+
+  [createElementNS("http://www.w3.org/2000/svg", "abbr", { is: "my-abbr" }) should be :defined]
+    expected: FAIL
+
+  [Upgraded createElement("abbr", { is: "my-abbr" }) should be :defined]
+    expected: FAIL
+
+  [Upgraded createElementNS("http://www.w3.org/1999/xhtml", "abbr", { is: "my-abbr" }) should be :defined]
+    expected: FAIL
+
+  [Without browsing context: createElement("abbr", { is: "my-abbr" }) should not be :defined]
+    expected: FAIL
+
+  [Without browsing context: createElementNS("http://www.w3.org/1999/xhtml", "abbr", { is: "my-abbr" }) should not be :defined]
+    expected: FAIL
+
+  [Without browsing context: createElementNS("http://www.w3.org/2000/svg", "abbr", { is: "my-abbr" }) should be :defined]
+    expected: FAIL
+
--- a/testing/web-platform/meta/custom-elements/reactions/Element.html.ini
+++ b/testing/web-platform/meta/custom-elements/reactions/Element.html.ini
@@ -1,13 +1,12 @@
 [Element.html]
   prefs: [dom.webcomponents.shadowdom.enabled:true]
   disabled:
     if not stylo: Shadow DOM is stylo only.
-
   [removeAttribute on Element must not enqueue an attributeChanged reaction when removing an attribute that does not exist]
     expected: FAIL
 
   [removeAttributeNS on Element must not enqueue an attributeChanged reaction when removing an attribute that does not exist]
     expected: FAIL
 
   [removeAttributeNode on Element must not enqueue an attributeChanged reaction when removing an attribute that does not exist]
     expected: FAIL
--- a/testing/web-platform/meta/mozilla-sync
+++ b/testing/web-platform/meta/mozilla-sync
@@ -1,2 +1,2 @@
-local: c32b6b173c0008be57ce56cc78878c2e29ef5472
-upstream: bb1f35100ad0aedeeb6897dd640b360f80498027
+local: 001cf1ba27c3446ae6e4650a773a7022f4ce48b9
+upstream: 3197bbb8a67f73a36230d3c2deab7f70cd660727
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/webaudio/the-audio-api/the-pannernode-interface/panner-automation-basic.html.ini
@@ -0,0 +1,2 @@
+[panner-automation-basic.html]
+  expected: ERROR
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/webaudio/the-audio-api/the-pannernode-interface/panner-automation-position.html.ini
@@ -0,0 +1,2 @@
+[panner-automation-position.html]
+  expected: TIMEOUT
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/webaudio/the-audio-api/the-pannernode-interface/panner-distance-clamping.html.ini
@@ -0,0 +1,28 @@
+[panner-distance-clamping.html]
+  [X new PannerNode(c, {refDistance: -1}) did not throw an exception.]
+    expected: FAIL
+
+  [X panner.refDistance = -1 did not throw an exception.]
+    expected: FAIL
+
+  [< [ref-distance-error\] 2 out of 6 assertions were failed.]
+    expected: FAIL
+
+  [X new PannerNode(c, {maxDistance: -1}) did not throw an exception.]
+    expected: FAIL
+
+  [X new PannerNode(c, {maxDistance: 0}) did not throw an exception.]
+    expected: FAIL
+
+  [X panner.maxDistance = -1 did not throw an exception.]
+    expected: FAIL
+
+  [X panner.maxDistance = 0 did not throw an exception.]
+    expected: FAIL
+
+  [< [max-distance-error\] 4 out of 6 assertions were failed.]
+    expected: FAIL
+
+  [# AUDIT TASK RUNNER FINISHED: 2 out of 4 tasks were failed.]
+    expected: FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/webaudio/the-audio-api/the-pannernode-interface/panner-rolloff-clamping.html.ini
@@ -0,0 +1,40 @@
+[panner-rolloff-clamping.html]
+  [X Panner distanceModel: "linear", rolloffFactor: -1 expected to be equal to the array [0,0.018875712528824806,0.05621177703142166,0.06847958266735077,0.09856243431568146,0.12242205440998077,0.1495940238237381,0.16251686215400696,0.20651382207870483,0.21217726171016693,0.2435699999332428,0.2771494388580322,0.28300273418426514,0.32210540771484375,0.344368577003479,0.36553990840911865...\] but differs in 2047 places:\n\tIndex\tActual\t\t\tExpected\n\t[1\]\t2.8312625363469124e-2\t1.8875712528824806e-2\n\t[2\]\t8.4314860403537750e-2\t5.6211777031421661e-2\n\t[3\]\t1.0271595418453217e-1\t6.8479582667350769e-2\n\t[4\]\t1.4783872663974762e-1\t9.8562434315681458e-2\n\t...and 2043 more errors.]
+    expected: FAIL
+
+  [< [linear-clamp-low\] 1 out of 1 assertions were failed.]
+    expected: FAIL
+
+  [X Panner distanceModel: "linear", rolloffFactor: 2 expected to be equal to the array [0,0.009438800625503063,0.02810869924724102,0.03424321487545967,0.049286145716905594,0.06121714785695076,0.07480449229478836,0.08126655966043472,0.10326723754405975,0.10609924048185349,0.12179718166589737,0.1385885775089264,0.14151552319526672,0.16106881201267242,0.1722015142440796,0.18278823792934418...\] but differs in 2047 places:\n\tIndex\tActual\t\t\tExpected\n\t[1\]\t1.8877600496125524e-6\t9.4388006255030632e-3\n\t[2\]\t5.6217400015157182e-6\t2.8108699247241020e-2\n\t[3\]\t6.8486433519865386e-6\t3.4243214875459671e-2\n\t[4\]\t9.8572290880838409e-6\t4.9286145716905594e-2\n\t...and 2043 more errors.]
+    expected: FAIL
+
+  [< [linear-clamp-high\] 1 out of 1 assertions were failed.]
+    expected: FAIL
+
+  [X Panner distanceModel: "inverse", rolloffFactor: -1 expected to be equal to the array [0,0.018875712528824806,0.05621177703142166,0.06847958266735077,0.09856243431568146,0.12242205440998077,0.1495940238237381,0.16251686215400696,0.20651382207870483,0.21217726171016693,0.2435699999332428,0.2771494388580322,0.28300273418426514,0.32210540771484375,0.344368577003479,0.36553990840911865...\] but differs in 2047 places:\n\tIndex\tActual\t\t\tExpected\n\t[1\]\t0.0000000000000000e+0\t1.8875712528824806e-2\n\t[2\]\t0.0000000000000000e+0\t5.6211777031421661e-2\n\t[3\]\t0.0000000000000000e+0\t6.8479582667350769e-2\n\t[4\]\t0.0000000000000000e+0\t9.8562434315681458e-2\n\t...and 2043 more errors.]
+    expected: FAIL
+
+  [< [inverse-clamp\] 1 out of 1 assertions were failed.]
+    expected: FAIL
+
+  [X Panner distanceModel: "exponential", rolloffFactor: -2 expected to be equal to the array [0,0.018875712528824806,0.05621177703142166,0.06847958266735077,0.09856243431568146,0.12242205440998077,0.1495940238237381,0.16251686215400696,0.20651382207870483,0.21217726171016693,0.2435699999332428,0.2771494388580322,0.28300273418426514,0.32210540771484375,0.344368577003479,0.36553990840911865...\] but differs in 2047 places:\n\tIndex\tActual\t\t\tExpected\n\t[1\]\t4.7189281250000000e+5\t1.8875712528824806e-2\n\t[2\]\t1.4052943750000000e+6\t5.6211777031421661e-2\n\t[3\]\t1.7119896250000000e+6\t6.8479582667350769e-2\n\t[4\]\t2.4640607500000000e+6\t9.8562434315681458e-2\n\t...and 2043 more errors.]
+    expected: FAIL
+
+  [< [exponential-clamp\] 1 out of 1 assertions were failed.]
+    expected: FAIL
+
+  [# AUDIT TASK RUNNER FINISHED: 4 out of 4 tasks were failed.]
+    expected: FAIL
+
+  [X Panner distanceModel: "linear", rolloffFactor: -1 expected to be equal to the array [0,0.0188757237046957,0.056211769580841064,0.06847962737083435,0.09856244176626205,0.12242206931114197,0.1495940387248993,0.16251686215400696,0.2065138816833496,0.21217726171016693,0.24357002973556519,0.2771494686603546,0.2830027937889099,0.3221054673194885,0.344368577003479,0.36553993821144104...\] but differs in 2047 places:\n\tIndex\tActual\t\t\tExpected\n\t[1\]\t2.8312642127275467e-2\t1.8875723704695702e-2\n\t[2\]\t8.4314845502376556e-2\t5.6211769580841064e-2\n\t[3\]\t1.0271602123975754e-1\t6.8479627370834351e-2\n\t[4\]\t1.4783874154090881e-1\t9.8562441766262054e-2\n\t...and 2043 more errors.]
+    expected: FAIL
+
+  [X Panner distanceModel: "linear", rolloffFactor: 2 expected to be equal to the array [0,0.009438806213438511,0.028108695521950722,0.03424323722720146,0.04928614944219589,0.06121715530753136,0.07480449974536896,0.08126655966043472,0.10326726734638214,0.10609924048185349,0.12179719656705856,0.13858859241008759,0.1415155529975891,0.1610688418149948,0.1722015142440796,0.18278825283050537...\] but differs in 2047 places:\n\tIndex\tActual\t\t\tExpected\n\t[1\]\t1.8877611864809296e-6\t9.4388062134385109e-3\n\t[2\]\t5.6217390920210164e-6\t2.8108695521950722e-2\n\t[3\]\t6.8486474447126966e-6\t3.4243237227201462e-2\n\t[4\]\t9.8572299975785427e-6\t4.9286149442195892e-2\n\t...and 2043 more errors.]
+    expected: FAIL
+
+  [X Panner distanceModel: "inverse", rolloffFactor: -1 expected to be equal to the array [0,0.0188757237046957,0.056211769580841064,0.06847962737083435,0.09856244176626205,0.12242206931114197,0.1495940387248993,0.16251686215400696,0.2065138816833496,0.21217726171016693,0.24357002973556519,0.2771494686603546,0.2830027937889099,0.3221054673194885,0.344368577003479,0.36553993821144104...\] but differs in 2047 places:\n\tIndex\tActual\t\t\tExpected\n\t[1\]\t0.0000000000000000e+0\t1.8875723704695702e-2\n\t[2\]\t0.0000000000000000e+0\t5.6211769580841064e-2\n\t[3\]\t0.0000000000000000e+0\t6.8479627370834351e-2\n\t[4\]\t0.0000000000000000e+0\t9.8562441766262054e-2\n\t...and 2043 more errors.]
+    expected: FAIL
+
+  [X Panner distanceModel: "exponential", rolloffFactor: -2 expected to be equal to the array [0,0.0188757237046957,0.056211769580841064,0.06847962737083435,0.09856244176626205,0.12242206931114197,0.1495940387248993,0.16251686215400696,0.2065138816833496,0.21217726171016693,0.24357002973556519,0.2771494686603546,0.2830027937889099,0.3221054673194885,0.344368577003479,0.36553993821144104...\] but differs in 2047 places:\n\tIndex\tActual\t\t\tExpected\n\t[1\]\t4.7189309375000000e+5\t1.8875723704695702e-2\n\t[2\]\t1.4052942500000000e+6\t5.6211769580841064e-2\n\t[3\]\t1.7119906250000000e+6\t6.8479627370834351e-2\n\t[4\]\t2.4640610000000000e+6\t9.8562441766262054e-2\n\t...and 2043 more errors.]
+    expected: FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/webaudio/the-audio-api/the-pannernode-interface/pannernode-basic.html.ini
@@ -0,0 +1,2 @@
+[pannernode-basic.html]
+  expected: ERROR
--- a/testing/web-platform/tests/css/css-typed-om/resources/testhelper.js
+++ b/testing/web-platform/tests/css/css-typed-om/resources/testhelper.js
@@ -49,16 +49,19 @@ function assert_style_value_equals(a, b)
       assert_style_value_equals(a.y, b.y);
       assert_style_value_equals(a.z, b.z);
       assert_style_value_equals(a.is2D, b.is2D);
       break;
     case 'CSSSkew':
       assert_style_value_equals(a.ax, b.ax);
       assert_style_value_equals(a.ay, b.ay);
       break;
+    case 'CSSSkewX':
+      assert_style_value_equals(a.ax, b.ax);
+      break;
     case 'CSSPerspective':
       assert_style_value_equals(a.length, b.length);
       break;
     case 'CSSMatrixComponent':
       assert_matrix_approx_equals(a.matrix, b.matrix, 1e-6);
       break;
     case 'CSSURLImageValue':
       assert_equals(a.instrinsicWidth, b.instrinsicWidth);
--- a/testing/web-platform/tests/css/css-typed-om/stylevalue-normalization/transformvalue-normalization.tentative.html
+++ b/testing/web-platform/tests/css/css-typed-om/stylevalue-normalization/transformvalue-normalization.tentative.html
@@ -119,23 +119,28 @@ const gTestCases = [
     desc: 'rotateZ()'
   },
   {
     cssText: 'skew(90deg)',
     expected: new CSSSkew(CSS.deg(90), CSS.deg(0)),
     desc: 'skew() with only X'
   },
   {
+    cssText: 'skew(90deg, 0deg)',
+    expected: new CSSSkew(CSS.deg(90), CSS.deg(0)),
+    desc: 'skew() with X and Y which is 0 value'
+  },
+  {
     cssText: 'skew(90deg, 45deg)',
     expected: new CSSSkew(CSS.deg(90), CSS.deg(45)),
     desc: 'skew() with X and Y'
   },
   {
     cssText: 'skewX(90deg)',
-    expected: new CSSSkew(CSS.deg(90), CSS.deg(0)),
+    expected: new CSSSkewX(CSS.deg(90)),
     desc: 'skewX()'
   },
   {
     cssText: 'skewY(90deg)',
     expected: new CSSSkew(CSS.deg(0), CSS.deg(90)),
     desc: 'skewY()'
   },
   {
@@ -148,22 +153,23 @@ const gTestCases = [
 for (const {cssText, expected, desc} of gTestCases) {
   test(t => {
     test_transform_normalization(t, cssText, new CSSTransformValue([expected]));
   }, 'Normalizing a ' + desc + ' returns a ' + expected.constructor.name);
 }
 
 test(t => {
   test_transform_normalization(t,
-      'translate(1px) rotateX(90deg) perspective(1px) skew(90deg) scale3d(1, 2, 3)',
+      'translate(1px) rotateX(90deg) perspective(1px) skew(90deg) skewX(20deg) scale3d(1, 2, 3)',
       new CSSTransformValue([
         new CSSTranslate(CSS.px(1), CSS.px(0)),
         new CSSRotate(CSS.number(1), CSS.number(0), CSS.number(0), CSS.deg(90)),
         new CSSPerspective(CSS.px(1)),
         new CSSSkew(CSS.deg(90), CSS.deg(0)),
+        new CSSSkewX(CSS.deg(20)),
         new CSSScale(CSS.number(1), CSS.number(2), CSS.number(3)),
       ]));
 }, 'Normalizing a <transform-list> returns a CSSTransformValue containing all the transforms');
 
 test(t => {
   test_transform_normalization(t,
       'translate(calc(1px + 1em)) perspective(calc(1px + 1em))',
       new CSSTransformValue([
--- a/testing/web-platform/tests/css/css-typed-om/stylevalue-serialization/cssTransformValue.tentative.html
+++ b/testing/web-platform/tests/css/css-typed-om/stylevalue-serialization/cssTransformValue.tentative.html
@@ -45,16 +45,21 @@ const gTestCases = [
     desc: 'CSSSkew'
   },
   {
     value: new CSSSkew(CSS.deg(90), CSS.turn(0)),
     cssText: 'skew(90deg)',
     desc: 'CSSSkew with Y which is 0 value'
   },
   {
+    value: new CSSSkewX(CSS.deg(90)),
+    cssText: 'skewX(90deg)',
+    desc: 'CSSSkewX'
+  },
+  {
     value: new CSSPerspective(CSS.px(1)),
     cssText: 'perspective(1px)',
     desc: 'CSSPerspective'
   },
   {
     value: new CSSTransformValue([new CSSPerspective(CSS.px(1))]),
     cssText: 'perspective(1px)',
     desc: 'CSSTransformValue with a single transform'
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-typed-om/stylevalue-subclasses/cssSkewX.tentative.html
@@ -0,0 +1,62 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSSSkewX tests</title>
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#cssskewx">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../resources/testhelper.js"></script>
+<script>
+'use strict';
+
+const gInvalidTestCases = [
+  { value: 'auto', desc: 'a keyword'},
+  { value: 3.14, desc: 'a double'},
+  { value: 0, desc: 'a unitless zero'},
+  { value: '10deg', desc: 'a string angle'},
+  { value: CSS.number(10), desc: 'a number CSSUnitValue'},
+  { value: CSS.s(10), desc: 'a time dimension CSSUnitValue'},
+  { value: new CSSMathSum(CSS.px(1)), desc: 'a CSSMathValue of length type' },
+];
+
+for (const {value, desc} of gInvalidTestCases) {
+  test(() => {
+    assert_throws(new TypeError(), () => new CSSSkewX(value));
+  }, 'Constructing a CSSSkewX with ' + desc + ' throws a TypeError');
+}
+
+for (const {value, desc} of gInvalidTestCases) {
+  test(() => {
+    let skewX = new CSSSkewX(CSS.deg(0));
+    assert_throws(new TypeError(), () => skewX.ax = value);
+    assert_style_value_equals(skewX.ax, CSS.deg(0));
+  }, 'Updating CSSSkewX.ax with ' + desc + ' throws a TypeError');
+}
+
+const gValidTestCases = [
+  { value: CSS.deg(-3.14), desc: 'an angle CSSUnitValue' },
+  { value: new CSSMathSum(CSS.deg(1)), desc: 'a CSSMathValue of angle type' },
+];
+
+for (const {value: ax, desc: axDesc} of gValidTestCases) {
+  test(() => {
+    const skewX = new CSSSkewX(ax);
+    assert_equals(skewX.ax, ax);
+    assert_true(skewX.is2D);
+  }, 'CSSSkewX can be constructed from ' + axDesc);
+}
+
+for (const {value, desc} of gValidTestCases) {
+  test(() => {
+    let skewX = new CSSSkewX(CSS.deg(0));
+    skewX.ax = value;
+    assert_style_value_equals(skewX.ax, value);
+  }, 'CSSSkew.ax can be updated to ' + desc);
+}
+
+test(() => {
+  let skewX = new CSSSkewX(CSS.deg(0));
+  skewX.is2D = false;
+  assert_true(skewX.is2D);
+}, 'Modifying skewX.is2D is a no-op');
+
+</script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-typed-om/the-stylepropertymap/properties/display.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>'display' property</title>
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../../resources/testhelper.js"></script>
+<script src="resources/testsuite.js"></script>
+<body>
+<div id="log">
+<script>
+'use strict';
+
+runPropertyTests('display', [
+  {
+    specified: '<ident>',
+    examples: [new CSSKeywordValue('none'), new CSSKeywordValue('block')]
+  },
+]);
+
+</script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-typed-om/the-stylepropertymap/properties/margin-top.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>'margin-top' property</title>
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
+<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../../resources/testhelper.js"></script>
+<script src="resources/testsuite.js"></script>
+<body>
+<div id="log">
+<script>
+'use strict';
+
+runPropertyTests('margin-top', [
+  { specified: '0' },
+  { specified: '<ident>', examples: [new CSSKeywordValue('auto')] },
+  { specified: '<percentage>' },
+  { specified: '<length>' },
+]);
+
+</script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-typed-om/the-stylepropertymap/properties/resources/testsuite.js
@@ -0,0 +1,62 @@
+function testGet(propertyName, values, description) {
+  test(t => {
+    let element = createDivWithStyle(t);
+    let styleMap = element.attributeStyleMap;
+
+    for (const styleValue of values) {
+      element.style[propertyName] = styleValue.toString();
+
+      getComputedStyle(element); // Force a style recalc.
+      const result = styleMap.get(propertyName);
+      assert_style_value_equals(result, styleValue);
+    }
+  }, `Can get ${description} from '${propertyName}'`);
+}
+
+function testSet(propertyName, values, description) {
+  test(t => {
+    let element = createDivWithStyle(t);
+    let styleMap = element.attributeStyleMap;
+
+    for (const styleValue of values) {
+      styleMap.set(propertyName, styleValue);
+
+      getComputedStyle(element); // Force a style recalc.
+      assert_equals(element.style[propertyName], styleValue.toString());
+    }
+  }, `Can set '${propertyName}' to ${description}`);
+}
+
+function testGetSet(propertyName, values, description) {
+  testGet(propertyName, values, description);
+  testSet(propertyName, values, description);
+}
+
+function runPropertyTests(propertyName, testCases) {
+  for (const testCase of testCases) {
+    if (testCase.specified == '0') {
+      testSet(propertyName, [
+        new CSSUnitValue(0, 'number'),
+      ], 'unitless zero');
+    } else if (testCase.specified === '<length>') {
+      testGetSet(propertyName, [
+        new CSSUnitValue(0, 'px'),
+        new CSSUnitValue(-3.14, 'em'),
+        new CSSUnitValue(3.14, 'cm'),
+      ], 'a length CSSUnitValue');
+    } else if (testCase.specified == '<percentage>') {
+      testGetSet(propertyName, [
+        new CSSUnitValue(0, 'percent'),
+        new CSSUnitValue(-3.14, 'percent'),
+        new CSSUnitValue(3.14, 'percent'),
+      ], 'a percent CSSUnitValue');
+    } else if (testCase.specified == '<ident>') {
+      if (!testCase.examples) {
+        throw new Error('<ident> tests require examples');
+      }
+
+      testGetSet(propertyName, testCase.examples,
+        'a CSSKeywordValue');
+    }
+  }
+}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-ui/reference/text-overflow-027-ref.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test Reference</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
+<style>
+div { font-family: monospace; }
+</style>
+
+<p>The test passes if the following text is visible below: 123456 FE…</p>
+<div>123456 FE…</bdo></div>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-ui/reference/text-overflow-028-ref.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test Reference</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
+<style>
+div { font-family: monospace; }
+</style>
+
+<p>The test passes if the following text is visible below: …56 FEDCBA</p>
+<div>…56 FEDCBA</div>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-ui/reference/text-overflow-029-ref.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8">
+<title>CSS Basic User Interface Reference</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+<style>
+div { font: 20px monospace; }
+</style>
+
+<div>Test passed…</div>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-ui/text-overflow-027.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: text-overflow applies visually to bidi</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
+<link rel="help" href="http://www.w3.org/TR/css-ui-3/#text-overflow">
+<link rel="help" href="http://www.w3.org/TR/css-ui-4/#text-overflow">
+<link rel="match" href="reference/text-overflow-027-ref.html">
+<meta name="flags" content="">
+<meta name="assert" content="text-overflow is a visual operation that occurs after layout, and therfore ellides text from the visual end of the line, even in bidi situations">
+<style>
+div {
+  font-family: monospace;
+  width: 10ch;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: pre;
+}
+</style>
+
+<p>The test passes if the following text is visible below: 123456 FE…</p>
+<div>123456 <bdo dir=rtl>ABCDEF</bdo></div>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-ui/text-overflow-028.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: text-overflow applies visually to bidi</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
+<link rel="help" href="http://www.w3.org/TR/css-ui-3/#text-overflow">
+<link rel="help" href="http://www.w3.org/TR/css-ui-4/#text-overflow">
+<link rel="match" href="reference/text-overflow-028-ref.html">
+<meta name="flags" content="">
+<meta name="assert" content="text-overflow is a visual operation that occurs after layout, and therfore ellides text from the visual end of the line, even in bidi situations">
+<style>
+div {
+  font-family: monospace;
+  width: 10ch;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: pre;
+}
+</style>
+
+<p>The test passes if the following text is visible below: …56 FEDCBA</p>
+<div dir=rtl><bdo dir=rtl>ABCDEF</bdo> 123456</div>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-ui/text-overflow-029.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: text-overflow and bidi interaction</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+<link rel="help" href="http://www.w3.org/TR/css-ui-3/#text-overflow">
+<link rel="help" href="http://www.w3.org/TR/css-ui-4/#text-overflow">
+<link rel="match" href="reference/text-overflow-029-ref.html">
+<meta name="assert" content="When there's content of mixed directionality, text-overflow ellides the characters at the physical end of the line.">
+<meta name="flags" content="">
+<style>
+div {
+  font: 20px monospace;
+  width: 12.3ch; /* slightly more than 12ch because in some browsers (safari) the ellipsis is slightly large than other characters, even in monospace fonts. */
+  text-overflow: ellip