Merge inbound to mozilla-central. a=merge
authorshindli <shindli@mozilla.com>
Sat, 10 Nov 2018 23:36:30 +0200
changeset 445796 39dba5141dd90c70a861299459d418d230148d9f
parent 445795 6a07ed6d0eca689e242304967444cbda64188bed (current diff)
parent 445771 dc3687bbb5a39ec58e9e99375e1469305f4e1592 (diff)
child 445797 2d231a84c946db9dbc31e3e9f00e9804918ffbee
child 445818 6da4c56126cc8d0acb4cf4f1ece712ed102844cc
push id109769
push usershindli@mozilla.com
push dateSat, 10 Nov 2018 21:43:03 +0000
treeherdermozilla-inbound@2d231a84c946 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone65.0a1
first release with
nightly linux32
39dba5141dd9 / 65.0a1 / 20181110220227 / files
nightly linux64
39dba5141dd9 / 65.0a1 / 20181110220227 / files
nightly mac
39dba5141dd9 / 65.0a1 / 20181110220227 / files
nightly win32
39dba5141dd9 / 65.0a1 / 20181110220227 / files
nightly win64
39dba5141dd9 / 65.0a1 / 20181110220227 / files
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
releases
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge inbound to mozilla-central. a=merge
browser/components/enterprisepolicies/tests/browser/policytest.xpi
build/win32/mozconfig.vs2015-win64
build/win64/mozconfig.vs2015
devtools/client/themes/images/debugger/angular.svg
devtools/client/themes/images/debugger/arrow.svg
devtools/client/themes/images/debugger/blackBox.svg
devtools/client/themes/images/debugger/breakpoint.svg
devtools/client/themes/images/debugger/close.svg
devtools/client/themes/images/debugger/coffeescript.svg
devtools/client/themes/images/debugger/column-marker.svg
devtools/client/themes/images/debugger/disable-pausing.svg
devtools/client/themes/images/debugger/domain.svg
devtools/client/themes/images/debugger/extension.svg
devtools/client/themes/images/debugger/file.svg
devtools/client/themes/images/debugger/folder.svg
devtools/client/themes/images/debugger/javascript.svg
devtools/client/themes/images/debugger/pause.svg
devtools/client/themes/images/debugger/prettyPrint.svg
devtools/client/themes/images/debugger/react.svg
devtools/client/themes/images/debugger/resume.svg
devtools/client/themes/images/debugger/stepIn.svg
devtools/client/themes/images/debugger/stepOut.svg
devtools/client/themes/images/debugger/stepOver.svg
devtools/client/themes/images/debugger/tab.svg
devtools/client/themes/images/debugger/typescript.svg
devtools/client/themes/images/debugger/vuejs.svg
devtools/client/themes/images/devtools-reps/open-inspector.svg
devtools/client/themes/images/jump-definition.svg
testing/talos/talos/tests/devtools/addon/bootstrap.js
testing/talos/talos/tests/devtools/addon/chrome.manifest
testing/talos/talos/tests/devtools/addon/content/damp.html
testing/talos/talos/tests/devtools/addon/content/framescript.js
testing/talos/talos/tests/devtools/addon/content/initialize_browser.js
testing/talos/talos/tests/devtools/addon/install.rdf
testing/web-platform/meta/html/semantics/scripting-1/the-script-element/execution-timing/077.html.ini
testing/web-platform/meta/mixed-content/module-data-worker-import/http-csp/cross-origin-http/top-level/keep-scheme-redirect/blockable/opt-in-blocks.https.html.ini
testing/web-platform/meta/mixed-content/module-data-worker-import/http-csp/cross-origin-http/top-level/no-redirect/blockable/opt-in-blocks.https.html.ini
testing/web-platform/meta/mixed-content/module-data-worker-import/http-csp/cross-origin-http/top-level/swap-scheme-redirect/blockable/opt-in-blocks.https.html.ini
testing/web-platform/meta/mixed-content/module-data-worker-import/http-csp/same-host-http/top-level/keep-scheme-redirect/blockable/opt-in-blocks.https.html.ini
testing/web-platform/meta/mixed-content/module-data-worker-import/http-csp/same-host-http/top-level/no-redirect/blockable/opt-in-blocks.https.html.ini
testing/web-platform/meta/mixed-content/module-data-worker-import/http-csp/same-host-http/top-level/swap-scheme-redirect/blockable/opt-in-blocks.https.html.ini
testing/web-platform/meta/mixed-content/module-data-worker-import/meta-csp/cross-origin-http/top-level/no-redirect/blockable/opt-in-blocks.https.html.ini
testing/web-platform/meta/mixed-content/module-data-worker-import/meta-csp/same-host-http/top-level/no-redirect/blockable/opt-in-blocks.https.html.ini
testing/web-platform/meta/mixed-content/module-data-worker-import/no-opt-in/cross-origin-http/top-level/keep-scheme-redirect/blockable/no-opt-in-blocks.https.html.ini
testing/web-platform/meta/mixed-content/module-data-worker-import/no-opt-in/cross-origin-http/top-level/no-redirect/blockable/no-opt-in-blocks.https.html.ini
testing/web-platform/meta/mixed-content/module-data-worker-import/no-opt-in/cross-origin-http/top-level/swap-scheme-redirect/blockable/no-opt-in-blocks.https.html.ini
testing/web-platform/meta/mixed-content/module-data-worker-import/no-opt-in/same-host-http/top-level/keep-scheme-redirect/blockable/no-opt-in-blocks.https.html.ini
testing/web-platform/meta/mixed-content/module-data-worker-import/no-opt-in/same-host-http/top-level/no-redirect/blockable/no-opt-in-blocks.https.html.ini
testing/web-platform/meta/mixed-content/module-data-worker-import/no-opt-in/same-host-http/top-level/swap-scheme-redirect/blockable/no-opt-in-blocks.https.html.ini
testing/web-platform/meta/webrtc/RTCPeerConnection-getIdentityAssertion.sub.html.ini
testing/web-platform/meta/webrtc/RTCPeerConnection-peerIdentity.html.ini
testing/web-platform/tests/cors/allow-headers.htm
testing/web-platform/tests/css/css-flexbox/anonymous-flex-item-ref.html
testing/web-platform/tests/css/css-text/white-space/reference/white-space-empty-text-sibling-ref.html
testing/web-platform/tests/fetch/nosniff/parsing-nosniff.html
testing/web-platform/tests/fetch/nosniff/resources/nosniff-first.asis
testing/web-platform/tests/fetch/nosniff/resources/nosniff-last.asis
testing/web-platform/tests/fetch/nosniff/resources/nosniff-no-x.asis
testing/web-platform/tests/fetch/nosniff/resources/nosniff-quoted-single.asis
testing/web-platform/tests/fetch/nosniff/resources/nosniff-quoted.asis
testing/web-platform/tests/fetch/nosniff/resources/nosniff-uppercase.asis
testing/web-platform/tests/tools/appveyor.yml
testing/web-platform/tests/tools/runner/logo.svg
testing/web-platform/tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels-expected.wav
testing/web-platform/tests/webaudio/the-audio-api/the-gainnode-interface/gain-expected.wav
testing/web-platform/tests/webmessaging/with-options/broken-origin.tentative.html
testing/web-platform/tests/webmessaging/with-options/host-specific-origin.tentative.html
testing/web-platform/tests/webmessaging/with-options/message-channel-transferable.tentative.html
testing/web-platform/tests/webmessaging/with-options/no-target-origin.tentative.html
testing/web-platform/tests/webmessaging/with-options/null-transfer.tentative.html
testing/web-platform/tests/webmessaging/with-options/one-arg.tentative.html
testing/web-platform/tests/webmessaging/with-options/slash-origin.tentative.html
testing/web-platform/tests/webmessaging/with-options/undefined-transferable.tentative.html
testing/web-platform/tests/webmessaging/with-options/unknown-parameter.tentative.html
testing/web-platform/tests/webmessaging/without-ports/008.html
testing/web-platform/tests/webrtc/RTCPeerConnection-createOffer-offerToReceive.html
testing/web-platform/tests/webrtc/RTCPeerConnection-getIdentityAssertion.sub.html
testing/web-platform/tests/webrtc/RTCPeerConnection-peerIdentity.html
testing/web-platform/tests/webrtc/identity-helper.sub.js
testing/web-platform/tests/xhr/overridemimetype-unsent-state-force-shiftjis.htm
third_party/rust/cranelift-codegen/meta-python/gen_registers.py
third_party/rust/cranelift-codegen/meta-python/gen_types.py
third_party/rust/cranelift-codegen/src/preopt.rs
third_party/rust/wasmparser/check-rustfmt.sh
toolkit/components/telemetry/Histograms.json
toolkit/themes/osx/mochitests/.eslintrc.js
toolkit/themes/osx/mochitests/chrome.ini
toolkit/themes/osx/mochitests/test_bug510426.xul
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -156,21 +156,21 @@ dependencies = [
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "baldrdash"
 version = "0.1.0"
 dependencies = [
  "bindgen 0.43.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "cranelift-codegen 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "cranelift-wasm 0.20.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cranelift-codegen 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cranelift-wasm 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "env_logger 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "target-lexicon 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "target-lexicon 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "base64"
 version = "0.9.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -452,67 +452,71 @@ name = "cose-c"
 version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cose 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "cranelift-bforest"
-version = "0.20.0"
+version = "0.23.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "cranelift-entity 0.20.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cranelift-entity 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "cranelift-codegen"
-version = "0.20.0"
+version = "0.23.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "cranelift-bforest 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "cranelift-codegen-meta 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "cranelift-entity 0.20.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "failure_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cranelift-bforest 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cranelift-codegen-meta 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cranelift-entity 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "failure_derive 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "target-lexicon 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "target-lexicon 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "cranelift-codegen-meta"
-version = "0.20.0"
+version = "0.23.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cranelift-entity 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
 
 [[package]]
 name = "cranelift-entity"
-version = "0.20.1"
+version = "0.23.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "cranelift-frontend"
-version = "0.20.0"
+version = "0.23.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "cranelift-codegen 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cranelift-codegen 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "target-lexicon 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "cranelift-wasm"
-version = "0.20.1"
+version = "0.23.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "cranelift-codegen 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "cranelift-entity 0.20.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "cranelift-frontend 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "failure_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cranelift-codegen 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cranelift-entity 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cranelift-frontend 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "failure_derive 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "target-lexicon 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "wasmparser 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "wasmparser 0.21.8 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "crc"
 version = "1.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "build_const 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -839,32 +843,32 @@ version = "0.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "failure"
-version = "0.1.2"
+version = "0.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
- "failure_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "failure_derive 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "failure_derive"
-version = "0.1.2"
+version = "0.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "proc-macro2 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)",
  "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 0.14.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "synstructure 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "fake-simd"
 version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -2014,17 +2018,17 @@ dependencies = [
 ]
 
 [[package]]
 name = "redox_users"
 version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "argon2rs 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "redox_syscall 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "regex"
 version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2063,17 +2067,17 @@ dependencies = [
 
 [[package]]
 name = "rkv"
 version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "arrayref 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "bincode 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "lmdb-rkv 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "ordered-float 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
  "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "uuid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -2485,32 +2489,32 @@ dependencies = [
  "proc-macro2 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "synstructure"
-version = "0.9.0"
+version = "0.10.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "proc-macro2 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)",
  "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 0.14.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "target-lexicon"
-version = "0.0.3"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "failure_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "failure_derive 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_json 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "tempdir"
 version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
@@ -2890,17 +2894,17 @@ source = "registry+https://github.com/ru
 dependencies = [
  "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "wasmparser"
-version = "0.17.2"
+version = "0.21.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "webdriver"
 version = "0.38.0"
 dependencies = [
  "base64 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "cookie 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -3157,22 +3161,22 @@ dependencies = [
 "checksum constant_time_eq 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8ff012e225ce166d4422e0e78419d901719760f62ae2b7969ca6b564d1b54a9e"
 "checksum cookie 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1465f8134efa296b4c19db34d909637cb2bf0f7aaf21299e23e18fa29ac557cf"
 "checksum core-foundation 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c7caa6cb9e76ddddbea09a03266d6b3bc98cd41e9fb9b017c473e7cca593ec25"
 "checksum core-foundation-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b2a53cce0ddcf7e7e1f998738d757d5a3bf08bf799a180e50ebe50d298f52f5a"
 "checksum core-graphics 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)" = "62ceafe1622ffc9a332199096841d0ff9912ec8cf8f9cde01e254a7d5217cd10"
 "checksum core-text 13.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f3f46450d6f2397261af420b4ccce23807add2e45fa206410a03d66fb7f050ae"
 "checksum cose 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "72fa26cb151d3ae4b70f63d67d0fed57ce04220feafafbae7f503bef7aae590d"
 "checksum cose-c 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "49726015ab0ca765144fcca61e4a7a543a16b795a777fa53f554da2fffff9a94"
-"checksum cranelift-bforest 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1e96851b525021dd220259b9f29bf79d83f65b49e4f12b786d545aa929e4cad2"
-"checksum cranelift-codegen 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "16f418f1d1e6221812a7d35cff5b9a572dc978c002e33792134bbd50c07cacca"
-"checksum cranelift-codegen-meta 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1da3daa0109e7a0b7b322cea666cc223fb6a0d5170e83d23b3d5d2deaddca5f3"
-"checksum cranelift-entity 0.20.1 (registry+https://github.com/rust-lang/crates.io-index)" = "27412f153f2b517125dea9247ee8859a9ea3923d44384d54420e64fab9314752"
-"checksum cranelift-frontend 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "03c44cc7006b375e60e0c7edb6fc81abfbf20158374c03f5d0da981b373860a3"
-"checksum cranelift-wasm 0.20.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2a9d3454bf60ee6c3d1f54d6cf9ed82cfc1a2e7efb9ec1b16666bf2987c88bfa"
+"checksum cranelift-bforest 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8c5f8e1ab4f73b59a98531a8013d8ed3ca7edb4e36984cb301d9c06f6892787b"
+"checksum cranelift-codegen 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4437ec8212686e6cdacfea75aaedb4ab8b013869be1e8693a4cb97a60f135035"
+"checksum cranelift-codegen-meta 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4eac16097b96e9f609df735555f2d1658531750fbc3805bca1daca7671aef9eb"
+"checksum cranelift-entity 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9be3f82369346201c2e0cff720522e6eb55459e51c916b2199f25cff2058ca96"
+"checksum cranelift-frontend 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7d5d18ab2bc89a09b4275442a9559dc0f947b9a8ad9ae9ee89452a057df54ced"
+"checksum cranelift-wasm 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e5906a111814d43d84002ef974eb0c023804fd4d1866b34f43c1bb588a759ad8"
 "checksum crc 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bd5d02c0aac6bd68393ed69e00bbc2457f3e89075c6349db7189618dc4ddc1d7"
 "checksum crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f739f8c5363aca78cfb059edf753d8f0d36908c348f3d8d1503f03d8b75d9cf3"
 "checksum crossbeam-deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fe8153ef04a7594ded05b427ffad46ddeaf22e63fd48d42b3e1e3bb4db07cae7"
 "checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150"
 "checksum crossbeam-epoch 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2af0e75710d6181e234c8ecc79f14a97907850a541b13b0be1dd10992f2e4620"
 "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9"
 "checksum crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d636a8b3bcc1b409d7ffd3facef8f21dcb4009626adbd0c5e6c4305c07253c7b"
 "checksum cssparser 0.25.0 (registry+https://github.com/rust-lang/crates.io-index)" = "730363a45c4e248d4f21d3e5c1156d1a9cdec0855056c0d9539e814bc59865c3"
@@ -3196,18 +3200,18 @@ dependencies = [
 "checksum dwrote 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "18e895b763d82cafef31c7c1e2f4f17fb70f385ac651b0918a46ff5790664a63"
 "checksum either 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "18785c1ba806c258137c937e44ada9ee7e69a37e3c72077542cd2f069d78562a"
 "checksum ena 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "88dc8393b3c7352f94092497f6b52019643e493b6b890eb417cdb7c46117e621"
 "checksum encoding_c 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "769ecb8b33323998e482b218c0d13cd64c267609023b4b7ec3ee740714c318ee"
 "checksum encoding_rs 0.8.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f1a79fa56c329a5b087de13748054fb3b974c4a672c12c71f0b66e35c5addec5"
 "checksum env_logger 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0561146661ae44c579e993456bc76d11ce1e0c7d745e57b2fa7146b6e49fa2ad"
 "checksum error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff511d5dc435d703f4971bc399647c9bc38e20cb41452e3b9feb4765419ed3f3"
 "checksum euclid 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)" = "70a2ebdf55fb9d6329046e026329a55ef8fbaae5ea833f56e170beb3125a8a5f"
-"checksum failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7efb22686e4a466b1ec1a15c2898f91fa9cb340452496dca654032de20ff95b9"
-"checksum failure_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "946d0e98a50d9831f5d589038d2ca7f8f455b1c21028c0db0e84116a12696426"
+"checksum failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6dd377bcc1b1b7ce911967e3ec24fa19c3224394ec05b54aa7b083d498341ac7"
+"checksum failure_derive 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "64c2d913fe8ed3b6c6518eedf4538255b989945c14c2a7d5cbff62a5e2120596"
 "checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
 "checksum fixedbitset 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "85cb8fec437468d86dc7c83ca7cfc933341d561873275f22dd5eedefa63a6478"
 "checksum flate2 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9fac2277e84e5e858483756647a9d0aa8d9a2b7cba517fd84325a0aaa69a0909"
 "checksum fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6cc484842f1e2884faf56f529f960cc12ad8c71ce96cc7abba0a067c98fee344"
 "checksum foreign-types 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5ebc04f19019fff1f2d627b5581574ead502f80c48c88900575a46e0840fe5d0"
 "checksum freetype 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b659e75b7a7338fe75afd7f909fc2b71937845cffb6ebe54ba2e50f13d8e903d"
 "checksum fs2 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
 "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
@@ -3342,19 +3346,19 @@ dependencies = [
 "checksum string_cache 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "25d70109977172b127fe834e5449e5ab1740b9ba49fa18a2020f509174f25423"
 "checksum string_cache_codegen 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "479cde50c3539481f33906a387f2bd17c8e87cb848c35b6021d41fb81ff9b4d7"
 "checksum string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b1884d1bc09741d466d9b14e6d37ac89d6909cbcac41dd9ae982d4d063bbedfc"
 "checksum strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b4d15c810519a91cf877e7e36e63fe068815c678181439f2f29e2562147c3694"
 "checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550"
 "checksum syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)" = "91b52877572087400e83d24b9178488541e3d535259e04ff17a63df1e5ceff59"
 "checksum syn 0.14.6 (registry+https://github.com/rust-lang/crates.io-index)" = "4e4b5274d4a0a3d2749d5c158dc64d3403e60554dc61194648787ada5212473d"
 "checksum syn 0.15.7 (registry+https://github.com/rust-lang/crates.io-index)" = "455a6ec9b368f8c479b0ae5494d13b22dc00990d2f00d68c9dc6a2dc4f17f210"
+"checksum synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "73687139bf99285483c96ac0add482c3776528beac1d97d444f6e91f203a2015"
 "checksum synstructure 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "98cad891cd238c98e1f0aec9f7c0f620aa696e4e5f7daba56ac67b5e86a6b049"
-"checksum synstructure 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "85bb9b7550d063ea184027c9b8c20ac167cd36d3e06b3a40bceb9d746dc1a7b7"
-"checksum target-lexicon 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a34226bd63b5a26fc909f5f0d7ef4dc55d5851077035e49437e4e14bf567247f"
+"checksum target-lexicon 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4af5e2227f0b887d591d3724b796a96eff04226104d872f5b3883fcd427d64b9"
 "checksum tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "87974a6f5c1dfb344d733055601650059a3363de2a6104819293baff662132d6"
 "checksum term 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "fa63644f74ce96fbeb9b794f66aff2a52d601cbd5e80f4b97123e3899f4570f1"
 "checksum term_size 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2b6b55df3198cc93372e85dd2ed817f0e38ce8cc0f22eb32391bfad9c4bf209"
 "checksum termcolor 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "adc4587ead41bf016f11af03e55a624c06568b5a19db4e90fde573d805074f83"
 "checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096"
 "checksum textwrap 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c0b59b6b4b44d867f1370ef1bd91bfb262bf07bf0ae65c202ea2fbc16153b693"
 "checksum thin-slice 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c"
 "checksum thin-vec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "73fdf4b84c65a85168477b7fb6c498e0716bc9487fba24623389ea7f51708044"
@@ -3387,17 +3391,17 @@ dependencies = [
 "checksum url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f808aadd8cfec6ef90e4a14eb46f24511824d1ac596b9682703c87056c8678b7"
 "checksum utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "662fab6525a98beff2921d7f61a39e7d59e0b425ebc7d0d9e66d316e55124122"
 "checksum uuid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e1436e58182935dcd9ce0add9ea0b558e8a87befe01c1a301e6020aeb0876363"
 "checksum vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9e0a7d8bed3178a8fb112199d466eeca9ed09a14ba8ad67718179b4fd5487d0b"
 "checksum vec_map 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "887b5b631c2ad01628bbbaa7dd4c869f80d3186688f8d0b6f58774fbe324988c"
 "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
 "checksum walkdir 2.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "63636bd0eb3d00ccb8b9036381b526efac53caf112b7783b730ab3f8e44da369"
 "checksum want 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "797464475f30ddb8830cc529aaaae648d581f99e2036a928877dfde027ddf6b3"
-"checksum wasmparser 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fed18a63a6796175be2254fccca1da4e8b8fec0abca37ad155aea345feb50798"
+"checksum wasmparser 0.21.8 (registry+https://github.com/rust-lang/crates.io-index)" = "202e4cd4d99aa8adb8fe6280e099fdd2e5003c8d09c27de6969ff04dba60ef39"
 "checksum webidl 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0f807f7488d680893f7188aa09d7672a3a0a8461975a098a2edf0a52e3fee29"
 "checksum which 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4be6cfa54dab45266e98b5d7be2f8ce959ddd49abd141a05d52dce4b07f803bb"
 "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
 "checksum winapi 0.3.6 (git+https://github.com/froydnj/winapi-rs?branch=aarch64)" = "<none>"
 "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
 "checksum winapi-i686-pc-windows-gnu 0.4.0 (git+https://github.com/froydnj/winapi-rs?branch=aarch64)" = "<none>"
 "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (git+https://github.com/froydnj/winapi-rs?branch=aarch64)" = "<none>"
 "checksum wincolor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "eeb06499a3a4d44302791052df005d5232b927ed1a9658146d842165c4de7767"
--- a/accessible/tests/mochitest/jsat/test_traversal.html
+++ b/accessible/tests/mochitest/jsat/test_traversal.html
@@ -76,17 +76,17 @@
 
       queueTraversalSequence(gQueue, docAcc, TraversalRules.ListItem, null,
                              ["listitem-1-1", "listitem-2-1", "listitem-2-2",
                               "listitem-3-1", "listitem-3-2", "listitem-3-3",
                               "listitem-3-4", "listitem-3-5", "listitem-3-6",
                               "listitem-2-3"]);
 
       queueTraversalSequence(gQueue, docAcc, TraversalRules.Graphic, null,
-                             ["image-2", "image-3"]);
+                             ["image-1", "image-2", "image-3"]);
 
       queueTraversalSequence(gQueue, docAcc, TraversalRules.Link, null,
                              ["link-0", "link-1", "link-2", "link-3"]);
 
       queueTraversalSequence(gQueue, docAcc, TraversalRules.Anchor, null,
                              ["anchor-1", "anchor-2"]);
 
       queueTraversalSequence(gQueue, docAcc, TraversalRules.Separator, null,
@@ -111,17 +111,17 @@
                               "button-2-4", "Programming Language",
                               "A esoteric weapon wielded by only the most " +
                               "formidable warriors, for its unrelenting strict" +
                               " power is unfathomable.",
                               "• Lists of Programming Languages", "Lisp ",
                               "1. Scheme", "2. Racket", "3. Clojure",
                               "4. Standard Lisp", "link-0", " Lisp",
                               "checkbox-1-5", " LeLisp", "• JavaScript",
-                              "heading-5", "image-2", "image-3",
+                              "heading-5", "image-1", "image-2", "image-3",
                               "Not actually an image", "link-1", "anchor-1",
                               "link-2", "anchor-2", "link-3", "3", "1", "4",
                               "1", "Sunday", "M", "Week 1", "3", "4", "7", "2",
                               "5 8", "gridcell4", "Just an innocuous separator",
                               "Dirty Words", "Meaning", "Mud", "Wet Dirt",
                               "Dirt", "Messy Stuff", "statusbar-1", "statusbar-2",
                               "switch-1", "This is a MathML formula ", "math-1",
                               "with some text after."]);
--- a/accessible/tests/mochitest/tree/test_invalid_img.xhtml
+++ b/accessible/tests/mochitest/tree/test_invalid_img.xhtml
@@ -14,18 +14,18 @@
           src="../role.js"></script>
 
   <script>
   <![CDATA[
     function doTest() {
       document.getElementsByTagName("img")[0].firstChild.data = "2";
 
       var accTree = {
-        role: ROLE_TEXT,
-        children: [ { role: ROLE_TEXT_LEAF } ],
+        role: ROLE_GRAPHIC,
+        children: [],
       };
       testAccessibleTree("the_img", accTree);
       SimpleTest.finish();
     }
 
     SimpleTest.waitForExplicitFinish();
     addA11yLoadEvent(doTest);
   ]]>
--- a/browser/base/content/browser-captivePortal.js
+++ b/browser/base/content/browser-captivePortal.js
@@ -18,18 +18,18 @@ var CaptivePortalWatcher = {
    */
   _delayedCaptivePortalDetectedInProgress: false,
 
   // In the situation above, this is set to true while we wait for the recheck.
   // This flag exists so that tests can appropriately simulate a recheck.
   _waitingForRecheck: false,
 
   get _captivePortalNotification() {
-    let nb = document.getElementById("high-priority-global-notificationbox");
-    return nb.getNotificationWithValue(this.PORTAL_NOTIFICATION_VALUE);
+    return gHighPriorityNotificationBox.getNotificationWithValue(
+                                           this.PORTAL_NOTIFICATION_VALUE);
   },
 
   get canonicalURL() {
     return Services.prefs.getCharPref("captivedetect.canonicalURL");
   },
 
   get _browserBundle() {
     delete this._browserBundle;
@@ -223,19 +223,19 @@ var CaptivePortalWatcher = {
 
     let closeHandler = (aEventName) => {
       if (aEventName != "removed") {
         return;
       }
       gBrowser.tabContainer.removeEventListener("TabSelect", this);
     };
 
-    let nb = document.getElementById("high-priority-global-notificationbox");
-    nb.appendNotification(message, this.PORTAL_NOTIFICATION_VALUE, "",
-                          nb.PRIORITY_INFO_MEDIUM, buttons, closeHandler);
+    gHighPriorityNotificationBox.appendNotification(
+      message, this.PORTAL_NOTIFICATION_VALUE, "",
+      gHighPriorityNotificationBox.PRIORITY_INFO_MEDIUM, buttons, closeHandler);
 
     gBrowser.tabContainer.addEventListener("TabSelect", this);
   },
 
   _removeNotification() {
     let n = this._captivePortalNotification;
     if (!n || !n.parentNode) {
       return;
--- a/browser/base/content/browser-compacttheme.js
+++ b/browser/base/content/browser-compacttheme.js
@@ -17,17 +17,17 @@ var CompactTheme = {
     return this.styleSheet;
   },
 
   get isStyleSheetEnabled() {
     return this.styleSheet && !this.styleSheet.disabled;
   },
 
   get isThemeCurrentlyApplied() {
-    let theme = LightweightThemeManager.currentThemeForDisplay;
+    let theme = LightweightThemeManager.currentThemeWithPersistedData;
     return theme && (
            theme.id == "firefox-compact-dark@mozilla.org" ||
            theme.id == "firefox-compact-light@mozilla.org");
   },
 
   init() {
     Services.obs.addObserver(this, "lightweight-theme-styling-update");
 
--- a/browser/base/content/browser-data-submission-info-bar.js
+++ b/browser/base/content/browser-data-submission-info-bar.js
@@ -10,21 +10,16 @@ const LOGGER_PREFIX = "DataNotificationI
 var gDataNotificationInfoBar = {
   _OBSERVERS: [
     "datareporting:notify-data-policy:request",
     "datareporting:notify-data-policy:close",
   ],
 
   _DATA_REPORTING_NOTIFICATION: "data-reporting",
 
-  get _notificationBox() {
-    delete this._notificationBox;
-    return this._notificationBox = document.getElementById("global-notificationbox");
-  },
-
   get _log() {
     let Log = ChromeUtils.import("resource://gre/modules/Log.jsm", {}).Log;
     delete this._log;
     return this._log = Log.repository.getLoggerWithMessagePrefix(LOGGER_NAME, LOGGER_PREFIX);
   },
 
   init() {
     window.addEventListener("unload", () => {
@@ -34,17 +29,17 @@ var gDataNotificationInfoBar = {
     });
 
     for (let o of this._OBSERVERS) {
       Services.obs.addObserver(this, o, true);
     }
   },
 
   _getDataReportingNotification(name = this._DATA_REPORTING_NOTIFICATION) {
-    return this._notificationBox.getNotificationWithValue(name);
+    return gNotificationBox.getNotificationWithValue(name);
   },
 
   _displayDataPolicyInfoBar(request) {
     if (this._getDataReportingNotification()) {
       return;
     }
 
     let brandBundle = document.getElementById("bundle_brand");
@@ -63,21 +58,21 @@ var gDataNotificationInfoBar = {
       popup: null,
       callback: () => {
         this._actionTaken = true;
         window.openPreferences("privacy-reports", {origin: "dataReporting"});
       },
     }];
 
     this._log.info("Creating data reporting policy notification.");
-    this._notificationBox.appendNotification(
+    gNotificationBox.appendNotification(
       message,
       this._DATA_REPORTING_NOTIFICATION,
       null,
-      this._notificationBox.PRIORITY_INFO_HIGH,
+      gNotificationBox.PRIORITY_INFO_HIGH,
       buttons,
       event => {
         if (event == "removed") {
           Services.obs.notifyObservers(null, "datareporting:notify-data-policy:close");
         }
       }
     );
     // It is important to defer calling onUserNotifyComplete() until we're
--- a/browser/base/content/browser-gestureSupport.js
+++ b/browser/base/content/browser-gestureSupport.js
@@ -721,19 +721,17 @@ var gHistorySwipeAnimation = {
   _completeFadeOut: function HSA__completeFadeOut(aEvent) {
     gHistorySwipeAnimation._removeBoxes();
   },
 
   /**
    * Adds the boxes that contain the arrows used during the swipe animation.
    */
   _addBoxes: function HSA__addBoxes() {
-    let browserStack =
-      document.getAnonymousElementByAttribute(gBrowser.getPanel(),
-                                              "class", "browserStack");
+    let browserStack = gBrowser.getPanel().querySelector(".browserStack");
     this._container = this._createElement("historySwipeAnimationContainer",
                                           "stack");
     browserStack.appendChild(this._container);
 
     this._prevBox = this._createElement("historySwipeAnimationPreviousArrow",
                                         "box");
     this._prevBox.collapsed = true;
     this._prevBox.style.opacity = 0;
--- a/browser/base/content/browser.css
+++ b/browser/base/content/browser.css
@@ -367,18 +367,17 @@ toolbarpaletteitem {
 }
 %endif
 
 #main-window[inFullscreen][inDOMFullscreen] #navigator-toolbox,
 #main-window[inFullscreen][inDOMFullscreen] #fullscr-toggler,
 #main-window[inFullscreen][inDOMFullscreen] #sidebar-box,
 #main-window[inFullscreen][inDOMFullscreen] #sidebar-splitter,
 #main-window[inFullscreen]:not([OSXLionFullscreen]) toolbar:not([fullscreentoolbar=true]),
-#main-window[inFullscreen] #global-notificationbox,
-#main-window[inFullscreen] #high-priority-global-notificationbox {
+#main-window[inFullscreen] .global-notificationbox {
   visibility: collapse;
 }
 
 #navigator-toolbox[fullscreenShouldAnimate] {
   transition: 1.5s margin-top ease-out;
 }
 
 /* Rules to help integrate WebExtension buttons */
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -289,16 +289,50 @@ Object.defineProperty(this, "gNavToolbox
   configurable: true,
   enumerable: true,
   get() {
     delete this.gNavToolbox;
     return this.gNavToolbox = document.getElementById("navigator-toolbox");
   },
 });
 
+// High priority notification bars shown at the top of the window.
+Object.defineProperty(this, "gHighPriorityNotificationBox", {
+  configurable: true,
+  enumerable: true,
+  get() {
+    delete this.gHighPriorityNotificationBox;
+
+    let notificationbox = new MozElements.NotificationBox(element => {
+      element.classList.add("global-notificationbox");
+      element.setAttribute("notificationside", "top");
+      document.getElementById("appcontent").append(element);
+    });
+
+    return this.gHighPriorityNotificationBox = notificationbox;
+  },
+});
+
+// Regular notification bars shown at the bottom of the window.
+Object.defineProperty(this, "gNotificationBox", {
+  configurable: true,
+  enumerable: true,
+  get() {
+    delete this.gNotificationBox;
+
+    let notificationbox = new MozElements.NotificationBox(element => {
+      element.classList.add("global-notificationbox");
+      element.setAttribute("notificationside", "bottom");
+      document.getElementById("browser-bottombox").appendChild(element);
+    });
+
+    return this.gNotificationBox = notificationbox;
+  },
+});
+
 // Smart getter for the findbar.  If you don't wish to force the creation of
 // the findbar, check gFindBarInitialized first.
 
 Object.defineProperty(this, "gFindBar", {
   configurable: true,
   enumerable: true,
   get() {
     return gBrowser.getCachedFindBar();
@@ -522,18 +556,17 @@ const gStoragePressureObserver = {
   _lastNotificationTime: -1,
 
   observe(subject, topic, data) {
     if (topic != "QuotaManager::StoragePressure") {
       return;
     }
 
     const NOTIFICATION_VALUE = "storage-pressure-notification";
-    let notificationBox = document.getElementById("high-priority-global-notificationbox");
-    if (notificationBox.getNotificationWithValue(NOTIFICATION_VALUE)) {
+    if (gHighPriorityNotificationBox.getNotificationWithValue(NOTIFICATION_VALUE)) {
       // Do not display the 2nd notification when there is already one
       return;
     }
 
     // Don't display notification twice within the given interval.
     // This is because
     //   - not to annoy user
     //   - give user some time to clean space.
@@ -592,18 +625,19 @@ const gStoragePressureObserver = {
         callback(notificationBar, button) {
           // The advanced subpanes are only supported in the old organization, which will
           // be removed by bug 1349689.
           openPreferences("privacy-sitedata", { origin: "storagePressure" });
         },
       });
     }
 
-    notificationBox.appendNotification(
-      msg, NOTIFICATION_VALUE, null, notificationBox.PRIORITY_WARNING_HIGH, buttons, null);
+    gHighPriorityNotificationBox.appendNotification(
+      msg, NOTIFICATION_VALUE, null,
+      gHighPriorityNotificationBox.PRIORITY_WARNING_HIGH, buttons, null);
   },
 };
 
 var gPopupBlockerObserver = {
   handleEvent(aEvent) {
     if (aEvent.originalTarget != gBrowser.selectedBrowser)
       return;
 
@@ -3493,50 +3527,34 @@ var PrintPreviewListener = {
   },
   _hideChrome() {
     this._chromeState = {};
 
     this._chromeState.sidebarOpen = SidebarUI.isOpen;
     this._sidebarCommand = SidebarUI.currentID;
     SidebarUI.hide();
 
-    var notificationBox = gBrowser.getNotificationBox();
-    this._chromeState.notificationsOpen = !notificationBox.notificationsHidden;
-    notificationBox.notificationsHidden = true;
-
     this._chromeState.findOpen = gFindBarInitialized && !gFindBar.hidden;
     if (gFindBarInitialized)
       gFindBar.close();
 
-    var globalNotificationBox = document.getElementById("global-notificationbox");
-    this._chromeState.globalNotificationsOpen = !globalNotificationBox.notificationsHidden;
-    globalNotificationBox.notificationsHidden = true;
-
-    this._chromeState.syncNotificationsOpen = false;
-    var syncNotifications = document.getElementById("sync-notifications");
-    if (syncNotifications) {
-      this._chromeState.syncNotificationsOpen = !syncNotifications.notificationsHidden;
-      syncNotifications.notificationsHidden = true;
-    }
+    gBrowser.getNotificationBox().stack.hidden = true;
+    gNotificationBox.stack.hidden = true;
   },
   _showChrome() {
-    if (this._chromeState.notificationsOpen)
-      gBrowser.getNotificationBox().notificationsHidden = false;
-
-    if (this._chromeState.findOpen)
+    gNotificationBox.stack.hidden = false;
+    gBrowser.getNotificationBox().stack.hidden = false;
+
+    if (this._chromeState.findOpen) {
       gLazyFindCommand("open");
-
-    if (this._chromeState.globalNotificationsOpen)
-      document.getElementById("global-notificationbox").notificationsHidden = false;
-
-    if (this._chromeState.syncNotificationsOpen)
-      document.getElementById("sync-notifications").notificationsHidden = false;
-
-    if (this._chromeState.sidebarOpen)
+    }
+
+    if (this._chromeState.sidebarOpen) {
       SidebarUI.show(this._sidebarCommand);
+    }
   },
 
   activateBrowser(browser) {
     gBrowser.activateBrowserForPrintPreview(browser);
   },
 };
 
 var browserDragAndDrop = {
--- a/browser/base/content/browser.xul
+++ b/browser/base/content/browser.xul
@@ -1320,17 +1320,17 @@ xmlns="http://www.w3.org/1999/xhtml"
           <toolbarbutton id="sidebar-close" class="close-icon tabbable" tooltiptext="&sidebarCloseButton.tooltip;" oncommand="SidebarUI.hide();"/>
         </sidebarheader>
         <browser id="sidebar" flex="1" autoscroll="false" disablehistory="true" disablefullscreen="true"
                   style="min-width: 14em; width: 18em; max-width: 36em;" tooltip="aHTMLTooltip"/>
       </vbox>
 
       <splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" hidden="true"/>
       <vbox id="appcontent" flex="1">
-        <notificationbox id="high-priority-global-notificationbox" notificationside="top"/>
+        <!-- gHighPriorityNotificationBox will be added here lazily. -->
         <tabbox id="tabbrowser-tabbox"
                 flex="1" tabcontainer="tabbrowser-tabs">
           <tabpanels id="tabbrowser-tabpanels"
                      flex="1" class="plain" selectedIndex="0"/>
         </tabbox>
       </vbox>
       <vbox id="browser-border-end" hidden="true" layer="true"/>
     </hbox>
@@ -1363,12 +1363,12 @@ xmlns="http://www.w3.org/1999/xhtml"
       &pointerlockWarning.afterDomain.label;
     </html:div>
     <html:div class="pointerlockfswarning-generic-text">
       &pointerlockWarning.generic.label;
     </html:div>
   </html:div>
 
   <vbox id="browser-bottombox" layer="true">
-    <notificationbox id="global-notificationbox" notificationside="bottom"/>
+    <!-- gNotificationBox will be added here lazily. -->
   </vbox>
 
 </window>
--- a/browser/base/content/tabbrowser.js
+++ b/browser/base/content/tabbrowser.js
@@ -649,17 +649,24 @@ window._gBrowser = {
     return this.getBrowserContainer(aBrowser).parentNode;
   },
 
   getBrowserContainer(aBrowser) {
     return (aBrowser || this.selectedBrowser).parentNode.parentNode;
   },
 
   getNotificationBox(aBrowser) {
-    return this.getBrowserContainer(aBrowser).firstElementChild;
+    let browser = aBrowser || this.selectedBrowser;
+    if (!browser._notificationBox) {
+      browser._notificationBox = new MozElements.NotificationBox(element => {
+        element.setAttribute("notificationside", "top");
+        this.getBrowserContainer(browser).prepend(element);
+      });
+    }
+    return browser._notificationBox;
   },
 
   getTabModalPromptBox(aBrowser) {
     let browser = (aBrowser || this.selectedBrowser);
     if (!browser.tabModalPromptBox) {
       browser.tabModalPromptBox = new TabModalPromptBox(browser);
     }
     return browser.tabModalPromptBox;
--- a/browser/base/content/test/captivePortal/head.js
+++ b/browser/base/content/test/captivePortal/head.js
@@ -93,19 +93,18 @@ async function focusWindowAndWaitForPort
 function ensurePortalTab(win) {
   // For the tests that call this function, it's enough to ensure there
   // are two tabs in the window - the default tab and the portal tab.
   is(win.gBrowser.tabs.length, 2,
     "There should be a captive portal tab in the window.");
 }
 
 function ensurePortalNotification(win) {
-  let notificationBox =
-    win.document.getElementById("high-priority-global-notificationbox");
-  let notification = notificationBox.getNotificationWithValue(PORTAL_NOTIFICATION_VALUE);
+  let notification = win.gHighPriorityNotificationBox.getNotificationWithValue(
+                                                  PORTAL_NOTIFICATION_VALUE);
   isnot(notification, null,
     "There should be a captive portal notification in the window.");
   return notification;
 }
 
 // Helper to test whether the "Show Login Page" is visible in the captive portal
 // notification (it should be hidden when the portal tab is selected).
 function testShowLoginPageButtonVisibility(notification, visibility) {
@@ -117,19 +116,18 @@ function testShowLoginPageButtonVisibili
 }
 
 function ensureNoPortalTab(win) {
   is(win.gBrowser.tabs.length, 1,
     "There should be no captive portal tab in the window.");
 }
 
 function ensureNoPortalNotification(win) {
-  let notificationBox =
-    win.document.getElementById("high-priority-global-notificationbox");
-  is(notificationBox.getNotificationWithValue(PORTAL_NOTIFICATION_VALUE), null,
+  is(win.gHighPriorityNotificationBox
+    .getNotificationWithValue(PORTAL_NOTIFICATION_VALUE), null,
     "There should be no captive portal notification in the window.");
 }
 
 /**
  * Some tests open a new window and close it later. When the window is closed,
  * the original window opened by mochitest gains focus, generating an
  * activate event. If the next test also opens a new window
  * before this event has a chance to fire, CaptivePortalWatcher picks
--- a/browser/base/content/test/general/browser_datachoices_notification.js
+++ b/browser/base/content/test/general/browser_datachoices_notification.js
@@ -40,17 +40,17 @@ function promiseNextTick() {
 
 /**
  * Wait for a notification to be shown in a notification box.
  * @param {Object} aNotificationBox The notification box.
  * @return {Promise} Resolved when the notification is displayed.
  */
 function promiseWaitForAlertActive(aNotificationBox) {
   let deferred = PromiseUtils.defer();
-  aNotificationBox.addEventListener("AlertActive", function() {
+  aNotificationBox.stack.addEventListener("AlertActive", function() {
     deferred.resolve();
   }, {once: true});
   return deferred.promise;
 }
 
 /**
  * Wait for a notification to be closed.
  * @param {Object} aNotification The notification.
@@ -115,43 +115,41 @@ function clearAcceptedPolicy() {
 }
 
 add_task(async function test_single_window() {
   clearAcceptedPolicy();
 
   // Close all the notifications, then try to trigger the data choices infobar.
   await closeAllNotifications();
 
-  let notificationBox = document.getElementById("global-notificationbox");
-
   // Make sure that we have a coherent initial state.
   Assert.equal(Preferences.get(PREF_ACCEPTED_POLICY_VERSION, 0), 0,
                "No version should be set on init.");
   Assert.equal(Preferences.get(PREF_ACCEPTED_POLICY_DATE, 0), 0,
                "No date should be set on init.");
   Assert.ok(!TelemetryReportingPolicy.testIsUserNotified(),
             "User not notified about datareporting policy.");
 
-  let alertShownPromise = promiseWaitForAlertActive(notificationBox);
+  let alertShownPromise = promiseWaitForAlertActive(gNotificationBox);
   Assert.ok(!TelemetryReportingPolicy.canUpload(),
             "User should not be allowed to upload.");
 
   // Wait for the infobar to be displayed.
   triggerInfoBar(10 * 1000);
   await alertShownPromise;
 
-  Assert.equal(notificationBox.allNotifications.length, 1, "Notification Displayed.");
+  Assert.equal(gNotificationBox.allNotifications.length, 1, "Notification Displayed.");
   Assert.ok(TelemetryReportingPolicy.canUpload(), "User should be allowed to upload now.");
 
   await promiseNextTick();
-  let promiseClosed = promiseWaitForNotificationClose(notificationBox.currentNotification);
-  await checkInfobarButton(notificationBox.currentNotification);
+  let promiseClosed = promiseWaitForNotificationClose(gNotificationBox.currentNotification);
+  await checkInfobarButton(gNotificationBox.currentNotification);
   await promiseClosed;
 
-  Assert.equal(notificationBox.allNotifications.length, 0, "No notifications remain.");
+  Assert.equal(gNotificationBox.allNotifications.length, 0, "No notifications remain.");
 
   // Check that we are still clear to upload and that the policy data is saved.
   Assert.ok(TelemetryReportingPolicy.canUpload());
   Assert.equal(TelemetryReportingPolicy.testIsUserNotified(), true,
                "User notified about datareporting policy.");
   Assert.equal(Preferences.get(PREF_ACCEPTED_POLICY_VERSION, 0), TEST_POLICY_VERSION,
                "Version pref set.");
   Assert.greater(parseInt(Preferences.get(PREF_ACCEPTED_POLICY_DATE, null), 10), -1,
@@ -163,47 +161,41 @@ add_task(async function test_multiple_wi
 
   // Close all the notifications, then try to trigger the data choices infobar.
   await closeAllNotifications();
 
   // Ensure we see the notification on all windows and that action on one window
   // results in dismiss on every window.
   let otherWindow = await BrowserTestUtils.openNewBrowserWindow();
 
-  // Get the notification box for both windows.
-  let notificationBoxes = [
-    document.getElementById("global-notificationbox"),
-    otherWindow.document.getElementById("global-notificationbox"),
-  ];
-
-  Assert.ok(notificationBoxes[1], "2nd window has a global notification box.");
+  Assert.ok(otherWindow.gNotificationBox, "2nd window has a global notification box.");
 
   // Make sure that we have a coherent initial state.
   Assert.equal(Preferences.get(PREF_ACCEPTED_POLICY_VERSION, 0), 0, "No version should be set on init.");
   Assert.equal(Preferences.get(PREF_ACCEPTED_POLICY_DATE, 0), 0, "No date should be set on init.");
   Assert.ok(!TelemetryReportingPolicy.testIsUserNotified(), "User not notified about datareporting policy.");
 
   let showAlertPromises = [
-    promiseWaitForAlertActive(notificationBoxes[0]),
-    promiseWaitForAlertActive(notificationBoxes[1]),
+    promiseWaitForAlertActive(gNotificationBox),
+    promiseWaitForAlertActive(otherWindow.gNotificationBox),
   ];
 
   Assert.ok(!TelemetryReportingPolicy.canUpload(),
             "User should not be allowed to upload.");
 
   // Wait for the infobars.
   triggerInfoBar(10 * 1000);
   await Promise.all(showAlertPromises);
 
   // Both notification were displayed. Close one and check that both gets closed.
   let closeAlertPromises = [
-    promiseWaitForNotificationClose(notificationBoxes[0].currentNotification),
-    promiseWaitForNotificationClose(notificationBoxes[1].currentNotification),
+    promiseWaitForNotificationClose(gNotificationBox.currentNotification),
+    promiseWaitForNotificationClose(otherWindow.gNotificationBox.currentNotification),
   ];
-  notificationBoxes[0].currentNotification.close();
+  gNotificationBox.currentNotification.close();
   await Promise.all(closeAlertPromises);
 
   // Close the second window we opened.
   await BrowserTestUtils.closeWindow(otherWindow);
 
   // Check that we are clear to upload and that the policy data us saved.
   Assert.ok(TelemetryReportingPolicy.canUpload(), "User should be allowed to upload now.");
   Assert.equal(TelemetryReportingPolicy.testIsUserNotified(), true,
--- a/browser/base/content/test/general/browser_storagePressure_notification.js
+++ b/browser/base/content/test/general/browser_storagePressure_notification.js
@@ -23,43 +23,41 @@ function openAboutPrefPromise() {
 // Test only displaying notification once within the given interval
 add_task(async function() {
   const TEST_NOTIFICATION_INTERVAL_MS = 2000;
   await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.pressureNotification.minIntervalMS", TEST_NOTIFICATION_INTERVAL_MS]]});
   // Commenting this to see if we really need it
   // await SpecialPowers.pushPrefEnv({set: [["privacy.reduceTimerPrecision", false]]});
 
   await notifyStoragePressure();
-  let notificationbox = document.getElementById("high-priority-global-notificationbox");
-  let notification = notificationbox.getNotificationWithValue("storage-pressure-notification");
+  let notification = gHighPriorityNotificationBox.getNotificationWithValue("storage-pressure-notification");
   ok(notification instanceof XULElement, "Should display storage pressure notification");
   notification.close();
 
   await notifyStoragePressure();
-  notification = notificationbox.getNotificationWithValue("storage-pressure-notification");
+  notification = gHighPriorityNotificationBox.getNotificationWithValue("storage-pressure-notification");
   is(notification, null, "Should not display storage pressure notification more than once within the given interval");
 
   await new Promise(resolve => setTimeout(resolve, TEST_NOTIFICATION_INTERVAL_MS + 1));
   await notifyStoragePressure();
-  notification = notificationbox.getNotificationWithValue("storage-pressure-notification");
+  notification = gHighPriorityNotificationBox.getNotificationWithValue("storage-pressure-notification");
   ok(notification instanceof XULElement, "Should display storage pressure notification after the given interval");
   notification.close();
 });
 
 // Test guiding user to the about:preferences when usage exceeds the given threshold
 add_task(async function() {
   await SpecialPowers.pushPrefEnv({ set: [["browser.storageManager.pressureNotification.minIntervalMS", 0]] });
   let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "https://example.com");
 
   const BYTES_IN_GIGABYTE = 1073741824;
   const USAGE_THRESHOLD_BYTES = BYTES_IN_GIGABYTE *
     Services.prefs.getIntPref("browser.storageManager.pressureNotification.usageThresholdGB");
   await notifyStoragePressure(USAGE_THRESHOLD_BYTES);
-  let notificationbox = document.getElementById("high-priority-global-notificationbox");
-  let notification = notificationbox.getNotificationWithValue("storage-pressure-notification");
+  let notification = gHighPriorityNotificationBox.getNotificationWithValue("storage-pressure-notification");
   ok(notification instanceof XULElement, "Should display storage pressure notification");
 
   let prefBtn = notification.getElementsByTagName("button")[1];
   let aboutPrefPromise = openAboutPrefPromise();
   prefBtn.doCommand();
   await aboutPrefPromise;
   let aboutPrefTab = gBrowser.selectedTab;
   let prefDoc = gBrowser.selectedBrowser.contentDocument;
@@ -71,19 +69,18 @@ add_task(async function() {
 
 // Test not displaying the 2nd notification if one is already being displayed
 add_task(async function() {
   const TEST_NOTIFICATION_INTERVAL_MS = 0;
   await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.pressureNotification.minIntervalMS", TEST_NOTIFICATION_INTERVAL_MS]]});
 
   await notifyStoragePressure();
   await notifyStoragePressure();
-  let notificationbox = document.getElementById("high-priority-global-notificationbox");
-  let allNotifications = notificationbox.allNotifications;
+  let allNotifications = gHighPriorityNotificationBox.allNotifications;
   let pressureNotificationCount = 0;
   allNotifications.forEach(notification => {
     if (notification.getAttribute("value") == "storage-pressure-notification") {
       pressureNotificationCount++;
     }
   });
   is(pressureNotificationCount, 1, "Should not display the 2nd notification when there is already one");
-  notificationbox.removeAllNotifications();
+  gHighPriorityNotificationBox.removeAllNotifications();
 });
--- a/browser/base/content/test/general/head.js
+++ b/browser/base/content/test/general/head.js
@@ -8,44 +8,40 @@ ChromeUtils.defineModuleGetter(this, "Br
   "resource://testing-common/BrowserTestUtils.jsm");
 ChromeUtils.defineModuleGetter(this, "TabCrashHandler",
   "resource:///modules/ContentCrashHandlers.jsm");
 
 /**
  * Wait for a <notification> to be closed then call the specified callback.
  */
 function waitForNotificationClose(notification, cb) {
-  let parent = notification.parentNode;
-
   let observer = new MutationObserver(function onMutatations(mutations) {
     for (let mutation of mutations) {
       for (let i = 0; i < mutation.removedNodes.length; i++) {
         let node = mutation.removedNodes.item(i);
         if (node != notification) {
           continue;
         }
         observer.disconnect();
         cb();
       }
     }
   });
-  observer.observe(parent, {childList: true});
+  observer.observe(notification.control.stack, {childList: true});
 }
 
 function closeAllNotifications() {
-  let notificationBox = document.getElementById("global-notificationbox");
-
-  if (!notificationBox || !notificationBox.currentNotification) {
+  if (!gNotificationBox.currentNotification) {
     return Promise.resolve();
   }
 
   return new Promise(resolve => {
-    for (let notification of notificationBox.allNotifications) {
+    for (let notification of gNotificationBox.allNotifications) {
       waitForNotificationClose(notification, function() {
-        if (notificationBox.allNotifications.length === 0) {
+        if (gNotificationBox.allNotifications.length === 0) {
           resolve();
         }
       });
       notification.close();
     }
 
   });
 }
--- a/browser/base/content/test/urlbar/browser_urlbarSearchSingleWordNotification.js
+++ b/browser/base/content/test/urlbar/browser_urlbarSearchSingleWordNotification.js
@@ -21,17 +21,17 @@ function promiseNotification(aBrowser, v
           notificationObserver = null;
           resolve();
         }
       };
       if (notificationObserver) {
         notificationObserver.disconnect();
       }
       notificationObserver = new MutationObserver(checkForNotification);
-      notificationObserver.observe(notificationBox, {childList: true});
+      notificationObserver.observe(notificationBox.stack, {childList: true});
     } else {
       setTimeout(() => {
         is(notificationBox.getNotificationWithValue(value), null,
            `We are expecting to not get a notification for ${input}`);
         resolve();
       }, 1000);
     }
   });
--- a/browser/components/enterprisepolicies/Policies.jsm
+++ b/browser/components/enterprisepolicies/Policies.jsm
@@ -486,18 +486,38 @@ var Policies = {
         setAndLockPref("privacy.trackingprotection.enabled", false);
         setAndLockPref("privacy.trackingprotection.pbmode.enabled", false);
       }
     },
   },
 
   "Extensions": {
     onBeforeUIStartup(manager, param) {
+      let uninstallingPromise = Promise.resolve();
+      if ("Uninstall" in param) {
+        uninstallingPromise = runOncePerModification("extensionsUninstall", JSON.stringify(param.Uninstall), async () => {
+          // If we're uninstalling add-ons, re-run the extensionsInstall runOnce even if it hasn't
+          // changed, which will allow add-ons to be updated.
+          Services.prefs.clearUserPref("browser.policies.runOncePerModification.extensionsInstall");
+          let addons = await AddonManager.getAddonsByIDs(param.Uninstall);
+          for (let addon of addons) {
+            if (addon) {
+              try {
+                await addon.uninstall();
+              } catch (e) {
+                // This can fail for add-ons that can't be uninstalled.
+                // Just ignore.
+              }
+            }
+          }
+        });
+      }
       if ("Install" in param) {
-        runOncePerModification("extensionsInstall", JSON.stringify(param.Install), () => {
+        runOncePerModification("extensionsInstall", JSON.stringify(param.Install), async () => {
+          await uninstallingPromise;
           for (let location of param.Install) {
             let url;
             if (location.includes("://")) {
               // Assume location is an URI
               url = location;
             } else {
               // Assume location is a file path
               let xpiFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
@@ -539,31 +559,16 @@ var Policies = {
                 },
               };
               install.addListener(listener);
               install.install();
             });
           }
         });
       }
-      if ("Uninstall" in param) {
-        runOncePerModification("extensionsUninstall", JSON.stringify(param.Uninstall), async () => {
-          let addons = await AddonManager.getAddonsByIDs(param.Uninstall);
-          for (let addon of addons) {
-            if (addon) {
-              try {
-                addon.uninstall();
-              } catch (e) {
-                // This can fail for add-ons that can't be uninstalled.
-                // Just ignore.
-              }
-            }
-          }
-        });
-      }
       if ("Locked" in param) {
         for (let ID of param.Locked) {
           manager.disallowFeature(`modify-extension:${ID}`);
         }
       }
     },
   },
 
@@ -1041,37 +1046,42 @@ function runOnce(actionName, callback) {
 
 /**
  * runOncePerModification
  *
  * Helper function similar to runOnce. The difference is that runOnce runs the
  * callback once when the policy is set, then never again.
  * runOncePerModification runs the callback once each time the policy value
  * changes from its previous value.
+ * If the callback that was passed is an async function, you can await on this
+ * function to await for the callback.
  *
  * @param {string} actionName
  *        A given name which will be used to track if this callback has run.
  *        This string will be part of a pref name.
  * @param {string} policyValue
  *        The current value of the policy. This will be compared to previous
  *        values given to this function to determine if the policy value has
  *        changed. Regardless of the data type of the policy, this must be a
  *        string.
  * @param {Function} callback
  *        The callback to be run when the pref value changes
+ * @returns Promise
+ *        A promise that will resolve once the callback finishes running.
+ *
  */
-function runOncePerModification(actionName, policyValue, callback) {
+async function runOncePerModification(actionName, policyValue, callback) {
   let prefName = `browser.policies.runOncePerModification.${actionName}`;
   let oldPolicyValue = Services.prefs.getStringPref(prefName, undefined);
   if (policyValue === oldPolicyValue) {
     log.debug(`Not running action ${actionName} again because the policy's value is unchanged`);
-    return;
+    return Promise.resolve();
   }
   Services.prefs.setStringPref(prefName, policyValue);
-  callback();
+  return callback();
 }
 
 let gChromeURLSBlocked = false;
 
 // If any about page is blocked, we block the loading of all
 // chrome:// URLs in the browser window.
 function blockAboutPage(manager, feature, neededOnContentProcess = false) {
   manager.disallowFeature(feature, neededOnContentProcess);
--- a/browser/components/enterprisepolicies/tests/browser/browser.ini
+++ b/browser/components/enterprisepolicies/tests/browser/browser.ini
@@ -1,16 +1,17 @@
 [DEFAULT]
 support-files =
   head.js
   config_popups_cookies_addons_flash.json
   config_broken_json.json
   opensearch.html
   opensearchEngine.xml
-  policytest.xpi
+  policytest_v0.1.xpi
+  policytest_v0.2.xpi
   policy_websitefilter_block.html
   policy_websitefilter_exception.html
   ../../../../../toolkit/components/antitracking/test/browser/page.html
   ../../../../../toolkit/components/antitracking/test/browser/subResources.sjs
 
 [browser_policies_basic_tests.js]
 [browser_policies_broken_json.js]
 [browser_policies_enterprise_only.js]
--- a/browser/components/enterprisepolicies/tests/browser/browser_policy_extensions.js
+++ b/browser/components/enterprisepolicies/tests/browser/browser_policy_extensions.js
@@ -1,31 +1,33 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 "use strict";
 
 const addonID = "policytest@mozilla.com";
+const BASE_URL = "http://mochi.test:8888/browser/browser/components/enterprisepolicies/tests/browser";
 
 add_task(async function test_addon_install() {
   let installPromise = wait_for_addon_install();
   await setupPolicyEngineWithJson({
     "policies": {
       "Extensions": {
         "Install": [
-          "http://mochi.test:8888/browser/browser/components/enterprisepolicies/tests/browser/policytest.xpi",
+          `${BASE_URL}/policytest_v0.1.xpi`,
         ],
         "Locked": [
           addonID,
         ],
       },
     },
   });
   await installPromise;
   let addon = await AddonManager.getAddonByID(addonID);
   isnot(addon, null, "Addon not installed.");
+  is(addon.version, "0.1", "Addon version is correct");
 
   Assert.deepEqual(addon.installTelemetryInfo, {source: "enterprise-policy"},
                    "Got the expected addon.installTelemetryInfo");
 });
 
 add_task(async function test_addon_locked() {
   let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
   await BrowserOpenAddonsMgr("addons://list/extension");
@@ -36,17 +38,50 @@ add_task(async function test_addon_locke
     let disableBtn = content.document.getAnonymousElementByAttribute(flashEntry, "anonid", "disable-btn");
     let removeBtn = content.document.getAnonymousElementByAttribute(flashEntry, "anonid", "remove-btn");
     is(removeBtn.hidden, true, "Remove button should be hidden");
     is(disableBtn.hidden, true, "Disable button should be hidden");
   });
   BrowserTestUtils.removeTab(tab);
 });
 
+add_task(async function test_addon_reinstall() {
+  // Test that uninstalling and reinstalling the same addon ID works as expected.
+  // This can be used to update an addon.
+
+  let uninstallPromise = wait_for_addon_uninstall();
+  let installPromise = wait_for_addon_install();
+  await setupPolicyEngineWithJson({
+    "policies": {
+      "Extensions": {
+        "Uninstall": [
+          addonID,
+        ],
+        "Install": [
+          `${BASE_URL}/policytest_v0.2.xpi`,
+        ],
+      },
+    },
+  });
+
+  // Older version was uninstalled
+  await uninstallPromise;
+
+  // New version was installed
+  await installPromise;
+
+  let addon = await AddonManager.getAddonByID(addonID);
+  isnot(addon, null, "Addon still exists because the policy was used to update it.");
+  is(addon.version, "0.2", "New version is correct");
+});
+
+
 add_task(async function test_addon_uninstall() {
+  EnterprisePolicyTesting.resetRunOnceState();
+
   let uninstallPromise = wait_for_addon_uninstall();
   await setupPolicyEngineWithJson({
     "policies": {
       "Extensions": {
         "Uninstall": [
           addonID,
         ],
       },
rename from browser/components/enterprisepolicies/tests/browser/policytest.xpi
rename to browser/components/enterprisepolicies/tests/browser/policytest_v0.1.xpi
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..59d589eba9c7c639deb249aca36dd86a2419ef21
GIT binary patch
literal 297
zc$^FHW@Zs#-~htl>FK@<NPw3?fFU<AFEcH*xI{0jI6p5mf`{RMz~kt@fsdoVGKw&`
z_U+|6WWdw%-KKS_WatWIVefLbvJ_VF$S3}ttz4n^_xepp_)u{FZsc|;25Ey&KB0N~
zT2q6!s7vsl?U3+jox3RDWUKZ;)ylH`9ha00be%SeSN*!b?RerJqcf48HBPOTT5YtH
zzv%pz$y`6~MeY1A7F)#k^6<UK4}vz>Zkbs&`zB+6H#<j@nZm?Iplde*aey}?lPEL7
kH^_3l3_LK8IlKS~qWg^l?zaGMRyL3VMj&(t(r3WB0KV#CX8-^I
--- a/browser/components/nsBrowserGlue.js
+++ b/browser/components/nsBrowserGlue.js
@@ -1201,20 +1201,19 @@ BrowserGlue.prototype = {
         label:     win.gNavigatorBundle.getString("slowStartup.disableNotificationButton.label"),
         accessKey: win.gNavigatorBundle.getString("slowStartup.disableNotificationButton.accesskey"),
         callback() {
           Services.prefs.setBoolPref("browser.slowStartup.notificationDisabled", true);
         },
       },
     ];
 
-    let nb = win.document.getElementById("global-notificationbox");
-    nb.appendNotification(message, "slow-startup",
-                          "chrome://browser/skin/slowStartup-16.png",
-                          nb.PRIORITY_INFO_LOW, buttons);
+    win.gNotificationBox.appendNotification(message, "slow-startup",
+      "chrome://browser/skin/slowStartup-16.png",
+      win.gNotificationBox.PRIORITY_INFO_LOW, buttons);
   },
 
   /**
    * Show a notification bar offering a reset.
    *
    * @param reason
    *        String of either "unused" or "uninstall", specifying the reason
    *        why a profile reset is offered.
@@ -1245,20 +1244,19 @@ BrowserGlue.prototype = {
         label:     resetBundle.formatStringFromName("refreshProfile.resetButton.label", [productName], 1),
         accessKey: resetBundle.GetStringFromName("refreshProfile.resetButton.accesskey"),
         callback() {
           ResetProfile.openConfirmationDialog(win);
         },
       },
     ];
 
-    let nb = win.document.getElementById("global-notificationbox");
-    nb.appendNotification(message, "reset-profile-notification",
-                          "chrome://global/skin/icons/question-16.png",
-                          nb.PRIORITY_INFO_LOW, buttons);
+    win.gNotificationBox.appendNotification(message, "reset-profile-notification",
+      "chrome://global/skin/icons/question-16.png",
+      win.gNotificationBox.PRIORITY_INFO_LOW, buttons);
   },
 
   _notifyUnsignedAddonsDisabled() {
     let win = BrowserWindowTracker.getTopWindow();
     if (!win)
       return;
 
     let message = win.gNavigatorBundle.getString("unsignedAddonsDisabled.message");
@@ -1267,19 +1265,19 @@ BrowserGlue.prototype = {
         label:     win.gNavigatorBundle.getString("unsignedAddonsDisabled.learnMore.label"),
         accessKey: win.gNavigatorBundle.getString("unsignedAddonsDisabled.learnMore.accesskey"),
         callback() {
           win.BrowserOpenAddonsMgr("addons://list/extension?unsigned=true");
         },
       },
     ];
 
-    let nb = win.document.getElementById("high-priority-global-notificationbox");
-    nb.appendNotification(message, "unsigned-addons-disabled", "",
-                          nb.PRIORITY_WARNING_MEDIUM, buttons);
+    win.gHighPriorityNotificationBox.appendNotification(message,
+      "unsigned-addons-disabled", "",
+      win.gHighPriorityNotificationBox.PRIORITY_WARNING_MEDIUM, buttons);
   },
 
   _firstWindowTelemetry(aWindow) {
     let scaling = aWindow.devicePixelRatio * 100;
     try {
       Services.telemetry.getHistogramById("DISPLAY_SCALING").add(scaling);
     } catch (ex) {}
   },
@@ -1830,32 +1828,31 @@ BrowserGlue.prototype = {
       let url = getNotifyString({propName: "notificationURL",
                                  prefName: "startup.homepage_override_url"});
       let label = getNotifyString({propName: "notificationButtonLabel",
                                    stringName: "pu.notifyButton.label"});
       let key = getNotifyString({propName: "notificationButtonAccessKey",
                                  stringName: "pu.notifyButton.accesskey"});
 
       let win = BrowserWindowTracker.getTopWindow();
-      let notifyBox = win.document.getElementById("high-priority-global-notificationbox");
 
       let buttons = [
                       {
                         label,
                         accessKey: key,
                         popup:     null,
                         callback(aNotificationBar, aButton) {
                           win.openTrustedLinkIn(url, "tab");
                         },
                       },
                     ];
 
-      notifyBox.appendNotification(text, "post-update-notification",
-                                   null, notifyBox.PRIORITY_INFO_LOW,
-                                   buttons);
+      win.gHighPriorityNotificationBox.appendNotification(text,
+        "post-update-notification", null,
+        win.gHighPriorityNotificationBox.PRIORITY_INFO_LOW, buttons);
     }
 
     if (!actions.includes("showAlert"))
       return;
 
     let title = getNotifyString({propName: "alertTitle",
                                  stringName: "puAlertTitle",
                                  stringParams: [appName]});
@@ -2924,19 +2921,19 @@ BrowserGlue.prototype = {
       getFormattedString("flashHang.message", [productName]);
     let buttons = [{
       label: win.gNavigatorBundle.getString("flashHang.helpButton.label"),
       accessKey: win.gNavigatorBundle.getString("flashHang.helpButton.accesskey"),
       callback() {
         win.openTrustedLinkIn("https://support.mozilla.org/kb/flash-protected-mode-autodisabled", "tab");
       },
     }];
-    let nb = win.document.getElementById("global-notificationbox");
-    nb.appendNotification(message, "flash-hang", null,
-                          nb.PRIORITY_INFO_MEDIUM, buttons);
+
+    win.gNotificationBox.appendNotification(message, "flash-hang", null,
+      win.gNotificationBox.PRIORITY_INFO_MEDIUM, buttons);
   },
 
   _updateFxaBadges() {
     let state = UIState.get();
     if (state.status == UIState.STATUS_LOGIN_FAILED ||
         state.status == UIState.STATUS_NOT_VERIFIED) {
       AppMenuNotifications.showBadgeOnlyNotification("fxa-needs-authentication");
     } else {
@@ -3184,18 +3181,16 @@ var DefaultBrowserCheck = {
       let optionsKey = shellBundle.getString("setDefaultBrowserOptions.accesskey");
 
       let neverLabel = shellBundle.getString("setDefaultBrowserNever.label");
       let neverKey = shellBundle.getString("setDefaultBrowserNever.accesskey");
 
       let yesButtonKey = shellBundle.getString("setDefaultBrowserConfirm.accesskey");
       let notNowButtonKey = shellBundle.getString("setDefaultBrowserNotNow.accesskey");
 
-      let notificationBox = win.document.getElementById("high-priority-global-notificationbox");
-
       this._createPopup(win, {
         label: notNowButton,
         accesskey: notNowButtonKey,
       }, {
         label: neverLabel,
         accesskey: neverKey,
       });
 
@@ -3212,21 +3207,20 @@ var DefaultBrowserCheck = {
           label: optionsMessage,
           accessKey: optionsKey,
           popup: this.OPTIONPOPUP,
         },
       ];
 
       let iconPixels = win.devicePixelRatio > 1 ? "32" : "16";
       let iconURL = "chrome://branding/content/icon" + iconPixels + ".png";
-      const priority = notificationBox.PRIORITY_WARNING_HIGH;
+      const priority = win.gHighPriorityNotificationBox.PRIORITY_WARNING_HIGH;
       let callback = this._onNotificationEvent.bind(this);
-      this._notification = notificationBox.appendNotification(promptMessage, "default-browser",
-                                                              iconURL, priority, buttons,
-                                                              callback);
+      this._notification = win.gHighPriorityNotificationBox.appendNotification(
+        promptMessage, "default-browser", iconURL, priority, buttons, callback);
     } else {
       // Modal prompt
       let promptTitle = shellBundle.getString("setDefaultBrowserTitle");
       let promptMessage = shellBundle.getFormattedString("setDefaultBrowserMessage",
                                                          [brandShortName]);
       let askLabel = shellBundle.getFormattedString("setDefaultBrowserDontAsk",
                                                     [brandShortName]);
 
--- a/browser/components/preferences/colors.xul
+++ b/browser/components/preferences/colors.xul
@@ -1,14 +1,14 @@
 <?xml version="1.0"?>
 
-# -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-# 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/.
+<!-- -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- -->
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
 <?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?>
 
 <dialog id="ColorsDialog" type="child" class="prefwindow"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         xmlns:html="http://www.w3.org/1999/xhtml"
         data-l10n-id="colors-window"
@@ -25,76 +25,69 @@
 
   <script type="application/javascript" src="chrome://browser/content/utilityOverlay.js"/>
   <script type="application/javascript" src="chrome://global/content/preferencesBindings.js"/>
 
   <keyset>
     <key data-l10n-id="colors-close-key" modifiers="accel" oncommand="Preferences.close(event)"/>
   </keyset>
 
-  <vbox>
-
-    <script type="application/javascript" src="chrome://browser/content/preferences/colors.js"/>
-
-    <hbox>
-      <groupbox flex="1">
-        <caption><label data-l10n-id="colors-text-and-background"/></caption>
-        <hbox align="center">
-          <label data-l10n-id="colors-text-header" control="foregroundtextmenu"/>
-          <spacer flex="1"/>
-          <html:input type="color" id="foregroundtextmenu"
-                      preference="browser.display.foreground_color"/>
-        </hbox>
-        <hbox align="center" style="margin-top: 5px">
-          <label data-l10n-id="colors-background" control="backgroundmenu" />
-          <spacer flex="1"/>
-          <html:input type="color" id="backgroundmenu"
-                      preference="browser.display.background_color"/>
-        </hbox>
-        <separator class="thin"/>
-        <hbox align="center">
-          <checkbox id="browserUseSystemColors" data-l10n-id="colors-use-system"
-                    preference="browser.display.use_system_colors"/>
-        </hbox>
-      </groupbox>
+  <hbox>
+    <groupbox flex="1">
+      <caption><label data-l10n-id="colors-text-and-background"/></caption>
+      <hbox align="center">
+        <label data-l10n-id="colors-text-header" control="foregroundtextmenu"/>
+        <spacer flex="1"/>
+        <html:input type="color" id="foregroundtextmenu"
+                    preference="browser.display.foreground_color"/>
+      </hbox>
+      <hbox align="center" style="margin-top: 5px">
+        <label data-l10n-id="colors-background" control="backgroundmenu" />
+        <spacer flex="1"/>
+        <html:input type="color" id="backgroundmenu"
+                    preference="browser.display.background_color"/>
+      </hbox>
+      <separator class="thin"/>
+      <hbox align="center">
+        <checkbox id="browserUseSystemColors" data-l10n-id="colors-use-system"
+                  preference="browser.display.use_system_colors"/>
+      </hbox>
+    </groupbox>
 
-      <groupbox flex="1">
-        <caption><label data-l10n-id="colors-links-header"/></caption>
-        <hbox align="center">
-          <label data-l10n-id="colors-unvisited-links" control="unvisitedlinkmenu" />
-          <spacer flex="1"/>
-          <html:input type="color" id="unvisitedlinkmenu"
-                      preference="browser.anchor_color"/>
-        </hbox>
-        <hbox align="center" style="margin-top: 5px">
-          <label data-l10n-id="colors-visited-links" control="visitedlinkmenu" />
-          <spacer flex="1"/>
-          <html:input type="color" id="visitedlinkmenu"
-                      preference="browser.visited_color"/>
-        </hbox>
-        <separator class="thin"/>
-        <hbox align="center">
-          <checkbox id="browserUnderlineAnchors" data-l10n-id="colors-underline-links"
-                    preference="browser.underline_anchors"/>
-        </hbox>
-      </groupbox>
-    </hbox>
-#ifdef XP_WIN
-    <vbox align="start">
-#else
-    <vbox>
-#endif
-      <label data-l10n-id="colors-page-override" control="useDocumentColors" />
-      <hbox>
-        <menulist id="useDocumentColors" preference="browser.display.document_color_use" flex="1">
-          <menupopup>
-            <menuitem data-l10n-id="colors-page-override-option-always"
-                      value="2" id="documentColorAlways"/>
-            <menuitem data-l10n-id="colors-page-override-option-auto"
-                      value="0" id="documentColorAutomatic"/>
-            <menuitem data-l10n-id="colors-page-override-option-never"
-                      value="1" id="documentColorNever"/>
-          </menupopup>
-        </menulist>
+    <groupbox flex="1">
+      <caption><label data-l10n-id="colors-links-header"/></caption>
+      <hbox align="center">
+        <label data-l10n-id="colors-unvisited-links" control="unvisitedlinkmenu" />
+        <spacer flex="1"/>
+        <html:input type="color" id="unvisitedlinkmenu"
+                    preference="browser.anchor_color"/>
+      </hbox>
+      <hbox align="center" style="margin-top: 5px">
+        <label data-l10n-id="colors-visited-links" control="visitedlinkmenu" />
+        <spacer flex="1"/>
+        <html:input type="color" id="visitedlinkmenu"
+                    preference="browser.visited_color"/>
+      </hbox>
+      <separator class="thin"/>
+      <hbox align="center">
+        <checkbox id="browserUnderlineAnchors" data-l10n-id="colors-underline-links"
+                  preference="browser.underline_anchors"/>
       </hbox>
-    </vbox>
-  </vbox>
+    </groupbox>
+  </hbox>
+
+  <label data-l10n-id="colors-page-override" control="useDocumentColors" />
+  <hbox>
+    <menulist id="useDocumentColors" preference="browser.display.document_color_use" flex="1">
+      <menupopup>
+        <menuitem data-l10n-id="colors-page-override-option-always"
+                  value="2" id="documentColorAlways"/>
+        <menuitem data-l10n-id="colors-page-override-option-auto"
+                  value="0" id="documentColorAutomatic"/>
+        <menuitem data-l10n-id="colors-page-override-option-never"
+                  value="1" id="documentColorNever"/>
+      </menupopup>
+    </menulist>
+  </hbox>
+
+  <!-- Load the script after the elements for layout issues (bug 1501755). -->
+  <script type="application/javascript" src="chrome://browser/content/preferences/colors.js"/>
 </dialog>
--- a/browser/components/preferences/connection.xul
+++ b/browser/components/preferences/connection.xul
@@ -39,113 +39,113 @@
   <hbox id="proxyExtensionContent"
         align="top" hidden="true" class="extension-controlled">
     <description control="disableProxyExtension" flex="1" />
     <button id="disableProxyExtension"
             class="extension-controlled-button accessory-button"
             data-l10n-id="connection-disable-extension" />
   </hbox>
 
-    <groupbox>
-      <caption><label data-l10n-id="connection-proxy-configure" /></caption>
+  <groupbox>
+    <caption><label data-l10n-id="connection-proxy-configure" /></caption>
 
-  <radiogroup id="networkProxyType" preference="network.proxy.type"
-              onsyncfrompreference="return gConnectionsDialog.readProxyType();">
-    <radio value="0" data-l10n-id="connection-proxy-option-no" />
-    <radio value="4" data-l10n-id="connection-proxy-option-auto" />
-    <radio value="5" data-l10n-id="connection-proxy-option-system" id="systemPref" hidden="true" />
-    <radio value="1" data-l10n-id="connection-proxy-option-manual"/>
-    <grid class="indent" flex="1">
-      <columns>
-        <column/>
-        <column flex="1"/>
-      </columns>
-      <rows>
-        <row align="center">
-          <hbox pack="end">
-            <label data-l10n-id="connection-proxy-http" control="networkProxyHTTP" />
-          </hbox>
-          <hbox align="center">
-            <textbox id="networkProxyHTTP" flex="1"
-                     preference="network.proxy.http" onsyncfrompreference="return gConnectionsDialog.readHTTPProxyServer();"/>
-            <label data-l10n-id="connection-proxy-http-port" control="networkProxyHTTP_Port" />
-            <textbox id="networkProxyHTTP_Port" class="proxy-port-input" type="number" max="65535" hidespinbuttons="true"
-                     preference="network.proxy.http_port" onsyncfrompreference="return gConnectionsDialog.readHTTPProxyPort();"/>
-          </hbox>
-        </row>
-        <row>
-          <hbox/>
-          <hbox>
-            <checkbox id="shareAllProxies" data-l10n-id="connection-proxy-http-share"
-                      preference="network.proxy.share_proxy_settings"
-                      onsyncfrompreference="return gConnectionsDialog.updateProtocolPrefs();"/>
-          </hbox>
-        </row>
-        <row align="center">
-          <hbox pack="end">
-            <label data-l10n-id="connection-proxy-ssl" control="networkProxySSL"/>
-          </hbox>
-          <hbox align="center">
-            <textbox id="networkProxySSL" flex="1" preference="network.proxy.ssl"
-                     onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('ssl', false);"/>
-            <label data-l10n-id="connection-proxy-ssl-port" control="networkProxySSL_Port" />
-            <textbox id="networkProxySSL_Port" class="proxy-port-input" type="number" max="65535" size="5" preference="network.proxy.ssl_port"
-                     hidespinbuttons="true" onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('ssl', true);"/>
-          </hbox>
-        </row>
-        <row align="center">
-          <hbox pack="end">
-            <label data-l10n-id="connection-proxy-ftp" control="networkProxyFTP"/>
-          </hbox>
-          <hbox align="center">
-            <textbox id="networkProxyFTP" flex="1" preference="network.proxy.ftp"
-                     onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('ftp', false);"/>
-            <label data-l10n-id="connection-proxy-ftp-port" control="networkProxyFTP_Port"/>
-            <textbox id="networkProxyFTP_Port" class="proxy-port-input" type="number" max="65535" size="5" preference="network.proxy.ftp_port"
-                     hidespinbuttons="true" onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('ftp', true);"/>
-          </hbox>
-        </row>
-        <row align="center">
-          <hbox pack="end">
-            <label data-l10n-id="connection-proxy-socks" control="networkProxySOCKS"/>
-          </hbox>
-          <hbox align="center">
-            <textbox id="networkProxySOCKS" flex="1" preference="network.proxy.socks"
-                     onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('socks', false);"/>
-            <label data-l10n-id="connection-proxy-socks-port" control="networkProxySOCKS_Port"/>
-            <textbox id="networkProxySOCKS_Port" class="proxy-port-input" type="number" max="65535" size="5" preference="network.proxy.socks_port"
-                     hidespinbuttons="true" onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('socks', true);"/>
-          </hbox>
-        </row>
-        <row>
-          <spacer/>
-          <box pack="start">
-          <radiogroup id="networkProxySOCKSVersion" orient="horizontal"
-                      preference="network.proxy.socks_version">
-            <radio id="networkProxySOCKSVersion4" value="4" data-l10n-id="connection-proxy-socks4" />
-            <radio id="networkProxySOCKSVersion5" value="5" data-l10n-id="connection-proxy-socks5" />
-          </radiogroup>
-          </box>
-        </row>
-        <label data-l10n-id="connection-proxy-noproxy" control="networkProxyNone"/>
-        <textbox id="networkProxyNone" preference="network.proxy.no_proxies_on" multiline="true" rows="2"/>
-        <label control="networkProxyNone" data-l10n-id="connection-proxy-noproxy-desc" />
-      </rows>
-    </grid>
-    <radio value="2" data-l10n-id="connection-proxy-autotype" />
-    <hbox class="indent" flex="1" align="center">
-      <textbox id="networkProxyAutoconfigURL" flex="1" preference="network.proxy.autoconfig_url"
-               oninput="gConnectionsDialog.updateReloadButton();"/>
-      <button id="autoReload" icon="refresh"
-              data-l10n-id="connection-proxy-reload"
-              oncommand="gConnectionsDialog.reloadPAC();"
-              preference="pref.advanced.proxies.disable_button.reload"/>
-    </hbox>
-  </radiogroup>
-    </groupbox>
+    <radiogroup id="networkProxyType" preference="network.proxy.type"
+                onsyncfrompreference="return gConnectionsDialog.readProxyType();">
+      <radio value="0" data-l10n-id="connection-proxy-option-no" />
+      <radio value="4" data-l10n-id="connection-proxy-option-auto" />
+      <radio value="5" data-l10n-id="connection-proxy-option-system" id="systemPref" hidden="true" />
+      <radio value="1" data-l10n-id="connection-proxy-option-manual"/>
+      <grid class="indent" flex="1">
+        <columns>
+          <column/>
+          <column flex="1"/>
+        </columns>
+        <rows>
+          <row align="center">
+            <hbox pack="end">
+              <label data-l10n-id="connection-proxy-http" control="networkProxyHTTP" />
+            </hbox>
+            <hbox align="center">
+              <textbox id="networkProxyHTTP" flex="1"
+                       preference="network.proxy.http" onsyncfrompreference="return gConnectionsDialog.readHTTPProxyServer();"/>
+              <label data-l10n-id="connection-proxy-http-port" control="networkProxyHTTP_Port" />
+              <textbox id="networkProxyHTTP_Port" class="proxy-port-input" type="number" max="65535" hidespinbuttons="true"
+                       preference="network.proxy.http_port" onsyncfrompreference="return gConnectionsDialog.readHTTPProxyPort();"/>
+            </hbox>
+          </row>
+          <row>
+            <hbox/>
+            <hbox>
+              <checkbox id="shareAllProxies" data-l10n-id="connection-proxy-http-share"
+                        preference="network.proxy.share_proxy_settings"
+                        onsyncfrompreference="return gConnectionsDialog.updateProtocolPrefs();"/>
+            </hbox>
+          </row>
+          <row align="center">
+            <hbox pack="end">
+              <label data-l10n-id="connection-proxy-ssl" control="networkProxySSL"/>
+            </hbox>
+            <hbox align="center">
+              <textbox id="networkProxySSL" flex="1" preference="network.proxy.ssl"
+                       onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('ssl', false);"/>
+              <label data-l10n-id="connection-proxy-ssl-port" control="networkProxySSL_Port" />
+              <textbox id="networkProxySSL_Port" class="proxy-port-input" type="number" max="65535" size="5" preference="network.proxy.ssl_port"
+                       hidespinbuttons="true" onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('ssl', true);"/>
+            </hbox>
+          </row>
+          <row align="center">
+            <hbox pack="end">
+              <label data-l10n-id="connection-proxy-ftp" control="networkProxyFTP"/>
+            </hbox>
+            <hbox align="center">
+              <textbox id="networkProxyFTP" flex="1" preference="network.proxy.ftp"
+                       onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('ftp', false);"/>
+              <label data-l10n-id="connection-proxy-ftp-port" control="networkProxyFTP_Port"/>
+              <textbox id="networkProxyFTP_Port" class="proxy-port-input" type="number" max="65535" size="5" preference="network.proxy.ftp_port"
+                       hidespinbuttons="true" onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('ftp', true);"/>
+            </hbox>
+          </row>
+          <row align="center">
+            <hbox pack="end">
+              <label data-l10n-id="connection-proxy-socks" control="networkProxySOCKS"/>
+            </hbox>
+            <hbox align="center">
+              <textbox id="networkProxySOCKS" flex="1" preference="network.proxy.socks"
+                       onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('socks', false);"/>
+              <label data-l10n-id="connection-proxy-socks-port" control="networkProxySOCKS_Port"/>
+              <textbox id="networkProxySOCKS_Port" class="proxy-port-input" type="number" max="65535" size="5" preference="network.proxy.socks_port"
+                       hidespinbuttons="true" onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('socks', true);"/>
+            </hbox>
+          </row>
+          <row>
+            <spacer/>
+            <box pack="start">
+            <radiogroup id="networkProxySOCKSVersion" orient="horizontal"
+                        preference="network.proxy.socks_version">
+              <radio id="networkProxySOCKSVersion4" value="4" data-l10n-id="connection-proxy-socks4" />
+              <radio id="networkProxySOCKSVersion5" value="5" data-l10n-id="connection-proxy-socks5" />
+            </radiogroup>
+            </box>
+          </row>
+          <label data-l10n-id="connection-proxy-noproxy" control="networkProxyNone"/>
+          <textbox id="networkProxyNone" preference="network.proxy.no_proxies_on" multiline="true" rows="2"/>
+          <label control="networkProxyNone" data-l10n-id="connection-proxy-noproxy-desc" />
+        </rows>
+      </grid>
+      <radio value="2" data-l10n-id="connection-proxy-autotype" />
+      <hbox class="indent" flex="1" align="center">
+        <textbox id="networkProxyAutoconfigURL" flex="1" preference="network.proxy.autoconfig_url"
+                 oninput="gConnectionsDialog.updateReloadButton();"/>
+        <button id="autoReload" icon="refresh"
+                data-l10n-id="connection-proxy-reload"
+                oncommand="gConnectionsDialog.reloadPAC();"
+                preference="pref.advanced.proxies.disable_button.reload"/>
+      </hbox>
+    </radiogroup>
+  </groupbox>
   <separator class="thin"/>
   <checkbox id="autologinProxy"
             data-l10n-id="connection-proxy-autologin"
             preference="signon.autologin.proxy" />
   <checkbox id="networkProxySOCKSRemoteDNS"
             preference="network.proxy.socks_remote_dns"
             data-l10n-id="connection-proxy-socks-remote-dns" />
   <checkbox id="networkDnsOverHttps"
--- a/browser/components/preferences/fonts.xul
+++ b/browser/components/preferences/fonts.xul
@@ -24,19 +24,16 @@
 
   <script type="application/javascript" src="chrome://browser/content/utilityOverlay.js"/>
   <script type="application/javascript" src="chrome://global/content/preferencesBindings.js"/>
 
   <keyset>
     <key data-l10n-id="fonts-window-close" modifiers="accel" oncommand="Preferences.close(event)"/>
   </keyset>
 
-  <script type="application/javascript" src="chrome://mozapps/content/preferences/fontbuilder.js"/>
-  <script type="application/javascript" src="chrome://browser/content/preferences/fonts.js"/>
-
   <!-- Fonts for: [ Language ] -->
   <groupbox>
     <caption>
       <hbox align="center">
         <label data-l10n-id="fonts-langgroup-header" control="selectLangs"/>
       </hbox>
       <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
       <hbox>
@@ -283,9 +280,13 @@
             <menuitem data-l10n-id="fonts-languages-fallback-name-turkish"     value="windows-1254"/>
             <menuitem data-l10n-id="fonts-languages-fallback-name-vietnamese"  value="windows-1258"/>
             <menuitem data-l10n-id="fonts-languages-fallback-name-other"       value="windows-1252"/>
           </menupopup>
         </menulist>
       </hbox>
     </hbox>
   </groupbox>
+
+  <!-- Load the script after the elements for layout issues (bug 1501755). -->
+  <script type="application/javascript" src="chrome://mozapps/content/preferences/fontbuilder.js"/>
+  <script type="application/javascript" src="chrome://browser/content/preferences/fonts.js"/>
 </dialog>
--- a/browser/components/preferences/in-content/home.xul
+++ b/browser/components/preferences/in-content/home.xul
@@ -20,84 +20,81 @@
 </hbox>
 
 <groupbox id="homepageGroup"
           data-category="paneHome"
           hidden="true">
   <caption><label data-l10n-id="home-new-windows-tabs-header"/></caption>
   <description data-l10n-id="home-new-windows-tabs-description2" />
 
-  <vbox>
-    <hbox id="homepageAndNewWindowsOption">
-      <label control="homeMode" data-l10n-id="home-homepage-mode-label" flex="1" />
-
-      <vbox class="homepageMenuItemContainer" flex="1">
-        <textbox id="homePrefHidden"
-                preference="browser.startup.homepage"
-                onsyncfrompreference="return gHomePane.syncFromHomePref();"
-                hidden="true" />
-        <menulist id="homeMode"
-                  class="check-home-page-controlled"
-                  data-preference-related="browser.startup.homepage">
-          <menupopup>
-              <menuitem value="0" data-l10n-id="home-mode-choice-default" />
-              <menuitem value="2" data-l10n-id="home-mode-choice-custom" />
-              <menuitem value="1" data-l10n-id="home-mode-choice-blank" />
-          </menupopup>
-        </menulist>
+  <hbox id="homepageAndNewWindowsOption">
+    <label control="homeMode" data-l10n-id="home-homepage-mode-label" flex="1" />
 
-        <vbox id="customSettings" hidden="true">
-          <textbox id="homePageUrl"
-                  class="uri-element check-home-page-controlled"
-                  data-preference-related="browser.startup.homepage"
-                  type="autocomplete"
-                  data-l10n-id="home-homepage-custom-url"
-                  autocompletesearch="unifiedcomplete" />
-          <hbox class="homepage-buttons">
-            <button id="useCurrentBtn"
-                    flex="1"
-                    class="homepage-button check-home-page-controlled"
-                    data-l10n-id="use-current-pages"
-                    data-l10n-args='{"tabCount": 0}'
-                    disabled="true"
-                    preference="pref.browser.homepage.disable_button.current_page"/>
-            <button id="useBookmarkBtn"
-                    flex="1"
-                    class="homepage-button check-home-page-controlled"
-                    data-l10n-id="choose-bookmark"
-                    preference="pref.browser.homepage.disable_button.bookmark_page"
-                    search-l10n-ids="select-bookmark-window.title, select-bookmark-desc"/>
-          </hbox>
-        </vbox>
-      </vbox>
-    </hbox>
-    <hbox id="newTabsOption">
-      <label control="newTabMode" data-l10n-id="home-newtabs-mode-label" flex="1" />
-
-      <menulist id="newTabMode"
-                  flex="1"
-                  preference="browser.newtabpage.enabled"
-                  onsyncfrompreference="return gHomePane.syncFromNewTabPref();"
-                  onsynctopreference="return gHomePane.syncToNewTabPref(this.value);">
+    <vbox class="homepageMenuItemContainer" flex="1">
+      <textbox id="homePrefHidden"
+              preference="browser.startup.homepage"
+              onsyncfrompreference="return gHomePane.syncFromHomePref();"
+              hidden="true" />
+      <menulist id="homeMode"
+                class="check-home-page-controlled"
+                data-preference-related="browser.startup.homepage">
         <menupopup>
             <menuitem value="0" data-l10n-id="home-mode-choice-default" />
+            <menuitem value="2" data-l10n-id="home-mode-choice-custom" />
             <menuitem value="1" data-l10n-id="home-mode-choice-blank" />
         </menupopup>
       </menulist>
-    </hbox>
 
-    <hbox id="browserHomePageExtensionContent"
-          align="center" hidden="true" class="extension-controlled">
-      <description control="disableHomePageExtension" flex="1" />
-      <button id="disableHomePageExtension"
-              class="extension-controlled-button accessory-button"
-              data-l10n-id="disable-extension" />
-    </hbox>
-    <hbox id="browserNewTabExtensionContent"
-          align="center" hidden="true" class="extension-controlled">
-      <description control="disableNewTabExtension" flex="1" />
-      <button id="disableNewTabExtension"
-              class="extension-controlled-button accessory-button"
-              data-l10n-id="disable-extension" />
-    </hbox>
+      <vbox id="customSettings" hidden="true">
+        <textbox id="homePageUrl"
+                class="uri-element check-home-page-controlled"
+                data-preference-related="browser.startup.homepage"
+                type="autocomplete"
+                data-l10n-id="home-homepage-custom-url"
+                autocompletesearch="unifiedcomplete" />
+        <hbox class="homepage-buttons">
+          <button id="useCurrentBtn"
+                  flex="1"
+                  class="homepage-button check-home-page-controlled"
+                  data-l10n-id="use-current-pages"
+                  data-l10n-args='{"tabCount": 0}'
+                  disabled="true"
+                  preference="pref.browser.homepage.disable_button.current_page"/>
+          <button id="useBookmarkBtn"
+                  flex="1"
+                  class="homepage-button check-home-page-controlled"
+                  data-l10n-id="choose-bookmark"
+                  preference="pref.browser.homepage.disable_button.bookmark_page"
+                  search-l10n-ids="select-bookmark-window.title, select-bookmark-desc"/>
+        </hbox>
+      </vbox>
+    </vbox>
+  </hbox>
+  <hbox id="newTabsOption">
+    <label control="newTabMode" data-l10n-id="home-newtabs-mode-label" flex="1" />
 
-  </vbox>
+    <menulist id="newTabMode"
+                flex="1"
+                preference="browser.newtabpage.enabled"
+                onsyncfrompreference="return gHomePane.syncFromNewTabPref();"
+                onsynctopreference="return gHomePane.syncToNewTabPref(this.value);">
+      <menupopup>
+          <menuitem value="0" data-l10n-id="home-mode-choice-default" />
+          <menuitem value="1" data-l10n-id="home-mode-choice-blank" />
+      </menupopup>
+    </menulist>
+  </hbox>
+
+  <hbox id="browserHomePageExtensionContent"
+        align="center" hidden="true" class="extension-controlled">
+    <description control="disableHomePageExtension" flex="1" />
+    <button id="disableHomePageExtension"
+            class="extension-controlled-button accessory-button"
+            data-l10n-id="disable-extension" />
+  </hbox>
+  <hbox id="browserNewTabExtensionContent"
+        align="center" hidden="true" class="extension-controlled">
+    <description control="disableNewTabExtension" flex="1" />
+    <button id="disableNewTabExtension"
+            class="extension-controlled-button accessory-button"
+            data-l10n-id="disable-extension" />
+  </hbox>
 </groupbox>
--- a/browser/components/preferences/in-content/main.xul
+++ b/browser/components/preferences/in-content/main.xul
@@ -135,154 +135,152 @@
       data-category="paneGeneral">
   <label class="header-name" flex="1" data-l10n-id="language-and-appearance-header"/>
 </hbox>
 
 <!-- Fonts and Colors -->
 <groupbox id="fontsGroup" data-category="paneGeneral" hidden="true">
   <caption><label data-l10n-id="fonts-and-colors-header"/></caption>
 
-  <vbox>
-    <hbox id="fontSettings">
-      <hbox align="center" flex="1">
-        <label control="defaultFont" data-l10n-id="default-font"/>
-        <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
-        <hbox flex="1">
-          <menulist id="defaultFont" flex="1" delayprefsave="true" onsyncfrompreference="return FontBuilder.readFontSelection(this);"/>
-        </hbox>
-        <label id="defaultFontSizeLabel" control="defaultFontSize" data-l10n-id="default-font-size"></label>
-        <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
-        <hbox>
-          <menulist id="defaultFontSize" delayprefsave="true">
-            <menupopup>
-              <menuitem value="9" label="9"/>
-              <menuitem value="10" label="10"/>
-              <menuitem value="11" label="11"/>
-              <menuitem value="12" label="12"/>
-              <menuitem value="13" label="13"/>
-              <menuitem value="14" label="14"/>
-              <menuitem value="15" label="15"/>
-              <menuitem value="16" label="16"/>
-              <menuitem value="17" label="17"/>
-              <menuitem value="18" label="18"/>
-              <menuitem value="20" label="20"/>
-              <menuitem value="22" label="22"/>
-              <menuitem value="24" label="24"/>
-              <menuitem value="26" label="26"/>
-              <menuitem value="28" label="28"/>
-              <menuitem value="30" label="30"/>
-              <menuitem value="32" label="32"/>
-              <menuitem value="34" label="34"/>
-              <menuitem value="36" label="36"/>
-              <menuitem value="40" label="40"/>
-              <menuitem value="44" label="44"/>
-              <menuitem value="48" label="48"/>
-              <menuitem value="56" label="56"/>
-              <menuitem value="64" label="64"/>
-              <menuitem value="72" label="72"/>
-            </menupopup>
-          </menulist>
-        </hbox>
+  <hbox id="fontSettings">
+    <hbox align="center" flex="1">
+      <label control="defaultFont" data-l10n-id="default-font"/>
+      <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
+      <hbox flex="1">
+        <menulist id="defaultFont" flex="1" delayprefsave="true" onsyncfrompreference="return FontBuilder.readFontSelection(this);"/>
       </hbox>
-
+      <label id="defaultFontSizeLabel" control="defaultFontSize" data-l10n-id="default-font-size"></label>
       <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
       <hbox>
-        <button id="advancedFonts"
-                class="accessory-button"
-                icon="select-font"
-                data-l10n-id="advanced-fonts"
-                search-l10n-ids="
-                  fonts-window.title,
-                  fonts-langgroup-header,
-                  fonts-proportional-size,
-                  fonts-proportional-header,
-                  fonts-serif,
-                  fonts-sans-serif,
-                  fonts-monospace,
-                  fonts-langgroup-arabic.label,
-                  fonts-langgroup-armenian.label,
-                  fonts-langgroup-bengali.label,
-                  fonts-langgroup-simpl-chinese.label,
-                  fonts-langgroup-trad-chinese-hk.label,
-                  fonts-langgroup-trad-chinese.label,
-                  fonts-langgroup-cyrillic.label,
-                  fonts-langgroup-devanagari.label,
-                  fonts-langgroup-ethiopic.label,
-                  fonts-langgroup-georgian.label,
-                  fonts-langgroup-el.label,
-                  fonts-langgroup-gujarati.label,
-                  fonts-langgroup-gurmukhi.label,
-                  fonts-langgroup-japanese.label,
-                  fonts-langgroup-hebrew.label,
-                  fonts-langgroup-kannada.label,
-                  fonts-langgroup-khmer.label,
-                  fonts-langgroup-korean.label,
-                  fonts-langgroup-latin.label,
-                  fonts-langgroup-malayalam.label,
-                  fonts-langgroup-math.label,
-                  fonts-langgroup-odia.label,
-                  fonts-langgroup-sinhala.label,
-                  fonts-langgroup-tamil.label,
-                  fonts-langgroup-telugu.label,
-                  fonts-langgroup-thai.label,
-                  fonts-langgroup-tibetan.label,
-                  fonts-langgroup-canadian.label,
-                  fonts-langgroup-other.label,
-                  fonts-minsize,
-                  fonts-minsize-none.label,
-                  fonts-default-serif.label,
-                  fonts-default-sans-serif.label,
-                  fonts-allow-own.label,
-                  fonts-languages-fallback-header,
-                  fonts-languages-fallback-label,
-                  fonts-languages-fallback-desc,
-                  fonts-languages-fallback-name-auto.label,
-                  fonts-languages-fallback-name-arabic.label,
-                  fonts-languages-fallback-name-baltic.label,
-                  fonts-languages-fallback-name-ceiso.label,
-                  fonts-languages-fallback-name-cewindows.label,
-                  fonts-languages-fallback-name-simplified.label,
-                  fonts-languages-fallback-name-traditional.label,
-                  fonts-languages-fallback-name-cyrillic.label,
-                  fonts-languages-fallback-name-greek.label,
-                  fonts-languages-fallback-name-hebrew.label,
-                  fonts-languages-fallback-name-japanese.label,
-                  fonts-languages-fallback-name-korean.label,
-                  fonts-languages-fallback-name-thai.label,
-                  fonts-languages-fallback-name-turkish.label,
-                  fonts-languages-fallback-name-vietnamese.label,
-                  fonts-languages-fallback-name-other.label,
-                " />
+        <menulist id="defaultFontSize" delayprefsave="true">
+          <menupopup>
+            <menuitem value="9" label="9"/>
+            <menuitem value="10" label="10"/>
+            <menuitem value="11" label="11"/>
+            <menuitem value="12" label="12"/>
+            <menuitem value="13" label="13"/>
+            <menuitem value="14" label="14"/>
+            <menuitem value="15" label="15"/>
+            <menuitem value="16" label="16"/>
+            <menuitem value="17" label="17"/>
+            <menuitem value="18" label="18"/>
+            <menuitem value="20" label="20"/>
+            <menuitem value="22" label="22"/>
+            <menuitem value="24" label="24"/>
+            <menuitem value="26" label="26"/>
+            <menuitem value="28" label="28"/>
+            <menuitem value="30" label="30"/>
+            <menuitem value="32" label="32"/>
+            <menuitem value="34" label="34"/>
+            <menuitem value="36" label="36"/>
+            <menuitem value="40" label="40"/>
+            <menuitem value="44" label="44"/>
+            <menuitem value="48" label="48"/>
+            <menuitem value="56" label="56"/>
+            <menuitem value="64" label="64"/>
+            <menuitem value="72" label="72"/>
+          </menupopup>
+        </menulist>
       </hbox>
     </hbox>
-    <hbox id="colorsSettings">
-      <spacer flex="1" />
-      <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
-      <hbox>
-        <button id="colors"
-                class="accessory-button"
-                icon="select-color"
-                data-l10n-id="colors-settings"
-                search-l10n-ids="
-                  colors-page-override,
-                  colors-page-override-option-always.label,
-                  colors-page-override-option-auto.label,
-                  colors-page-override-option-never.label,
-                  colors-text-and-background,
-                  colors-text-header,
-                  colors-background,
-                  colors-use-system,
-                  colors-underline-links,
-                  colors-links-header,
-                  colors-unvisited-links,
-                  colors-visited-links
-                "/>
-      </hbox>
+
+    <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
+    <hbox>
+      <button id="advancedFonts"
+              class="accessory-button"
+              icon="select-font"
+              data-l10n-id="advanced-fonts"
+              search-l10n-ids="
+                fonts-window.title,
+                fonts-langgroup-header,
+                fonts-proportional-size,
+                fonts-proportional-header,
+                fonts-serif,
+                fonts-sans-serif,
+                fonts-monospace,
+                fonts-langgroup-arabic.label,
+                fonts-langgroup-armenian.label,
+                fonts-langgroup-bengali.label,
+                fonts-langgroup-simpl-chinese.label,
+                fonts-langgroup-trad-chinese-hk.label,
+                fonts-langgroup-trad-chinese.label,
+                fonts-langgroup-cyrillic.label,
+                fonts-langgroup-devanagari.label,
+                fonts-langgroup-ethiopic.label,
+                fonts-langgroup-georgian.label,
+                fonts-langgroup-el.label,
+                fonts-langgroup-gujarati.label,
+                fonts-langgroup-gurmukhi.label,
+                fonts-langgroup-japanese.label,
+                fonts-langgroup-hebrew.label,
+                fonts-langgroup-kannada.label,
+                fonts-langgroup-khmer.label,
+                fonts-langgroup-korean.label,
+                fonts-langgroup-latin.label,
+                fonts-langgroup-malayalam.label,
+                fonts-langgroup-math.label,
+                fonts-langgroup-odia.label,
+                fonts-langgroup-sinhala.label,
+                fonts-langgroup-tamil.label,
+                fonts-langgroup-telugu.label,
+                fonts-langgroup-thai.label,
+                fonts-langgroup-tibetan.label,
+                fonts-langgroup-canadian.label,
+                fonts-langgroup-other.label,
+                fonts-minsize,
+                fonts-minsize-none.label,
+                fonts-default-serif.label,
+                fonts-default-sans-serif.label,
+                fonts-allow-own.label,
+                fonts-languages-fallback-header,
+                fonts-languages-fallback-label,
+                fonts-languages-fallback-desc,
+                fonts-languages-fallback-name-auto.label,
+                fonts-languages-fallback-name-arabic.label,
+                fonts-languages-fallback-name-baltic.label,
+                fonts-languages-fallback-name-ceiso.label,
+                fonts-languages-fallback-name-cewindows.label,
+                fonts-languages-fallback-name-simplified.label,
+                fonts-languages-fallback-name-traditional.label,
+                fonts-languages-fallback-name-cyrillic.label,
+                fonts-languages-fallback-name-greek.label,
+                fonts-languages-fallback-name-hebrew.label,
+                fonts-languages-fallback-name-japanese.label,
+                fonts-languages-fallback-name-korean.label,
+                fonts-languages-fallback-name-thai.label,
+                fonts-languages-fallback-name-turkish.label,
+                fonts-languages-fallback-name-vietnamese.label,
+                fonts-languages-fallback-name-other.label,
+              " />
     </hbox>
-  </vbox>
+  </hbox>
+  <hbox id="colorsSettings">
+    <spacer flex="1" />
+    <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
+    <hbox>
+      <button id="colors"
+              class="accessory-button"
+              icon="select-color"
+              data-l10n-id="colors-settings"
+              search-l10n-ids="
+                colors-page-override,
+                colors-page-override-option-always.label,
+                colors-page-override-option-auto.label,
+                colors-page-override-option-never.label,
+                colors-text-and-background,
+                colors-text-header,
+                colors-background,
+                colors-use-system,
+                colors-underline-links,
+                colors-links-header,
+                colors-unvisited-links,
+                colors-visited-links
+              "/>
+    </hbox>
+  </hbox>
 </groupbox>
 
 <!-- Languages -->
 <groupbox id="languagesGroup" data-category="paneGeneral" hidden="true">
   <caption><label data-l10n-id="language-header"/></caption>
 
   <vbox id="browserLanguagesBox" align="start" hidden="true">
     <description flex="1" controls="chooseBrowserLanguage" data-l10n-id="choose-browser-language-description"/>
--- a/browser/components/preferences/jar.mn
+++ b/browser/components/preferences/jar.mn
@@ -7,17 +7,17 @@ browser.jar:
     content/browser/preferences/applicationManager.js
     content/browser/preferences/blocklists.xul
     content/browser/preferences/blocklists.js
     content/browser/preferences/browserLanguages.xul
     content/browser/preferences/browserLanguages.js
     content/browser/preferences/clearSiteData.css
     content/browser/preferences/clearSiteData.js
     content/browser/preferences/clearSiteData.xul
-*   content/browser/preferences/colors.xul
+    content/browser/preferences/colors.xul
     content/browser/preferences/colors.js
     content/browser/preferences/connection.xul
     content/browser/preferences/connection.js
     content/browser/preferences/fonts.xul
     content/browser/preferences/fonts.js
     content/browser/preferences/handlers.css
     content/browser/preferences/languages.xul
     content/browser/preferences/languages.js
--- a/browser/components/preferences/siteDataRemoveSelected.xul
+++ b/browser/components/preferences/siteDataRemoveSelected.xul
@@ -17,36 +17,34 @@
         ondialogaccept="gSiteDataRemoveSelected.ondialogaccept(); return true;"
         ondialogcancel="gSiteDataRemoveSelected.ondialogcancel(); return true;"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
   <linkset>
     <link rel="localization" href="browser/preferences/siteDataSettings.ftl"/>
   </linkset>
 
-  <script src="chrome://browser/content/preferences/siteDataRemoveSelected.js"/>
-
-  <vbox id="contentContainer" flex="1">
-    <hbox>
-      <vbox>
-        <image class="question-icon"/>
-      </vbox>
-      <vbox flex="1">
-        <!-- Only show this label on OS X because of no dialog title -->
-        <label id="removing-label"
-               data-l10n-id="site-data-removing-header"
+  <hbox>
+    <vbox>
+      <image class="question-icon"/>
+    </vbox>
+    <vbox flex="1">
+      <!-- Only show this label on OS X because of no dialog title -->
+      <label id="removing-label"
+             data-l10n-id="site-data-removing-header"
 #ifndef XP_MACOSX
-               hidden="true"
+             hidden="true"
 #endif
-        />
-        <separator class="thin"/>
-        <description id="removing-description" data-l10n-id="site-data-removing-desc"/>
-      </vbox>
-    </hbox>
+      />
+      <separator class="thin"/>
+      <description id="removing-description" data-l10n-id="site-data-removing-desc"/>
+    </vbox>
+  </hbox>
+
+  <separator/>
 
-    <separator/>
+  <label data-l10n-id="site-data-removing-table"/>
+  <separator class="thin"/>
+  <richlistbox id="removalList" class="theme-listbox" flex="1"/>
 
-    <label data-l10n-id="site-data-removing-table"/>
-    <separator class="thin"/>
-    <richlistbox id="removalList" class="theme-listbox" flex="1"/>
-  </vbox>
-
+  <!-- Load the script after the elements for layout issues (bug 1501755). -->
+  <script src="chrome://browser/content/preferences/siteDataRemoveSelected.js"/>
 </dialog>
--- a/browser/components/tests/browser/browser_bug538331.js
+++ b/browser/components/tests/browser/browser_bug538331.js
@@ -289,18 +289,16 @@ const BG_NOTIFY_TESTS = [
     notificationButtonLabel: "button label",
     notificationButtonAccessKey: "b",
   },
 ];
 
 // Test showing a notification after an update
 // _showUpdateNotification in nsBrowserGlue.js
 function testShowNotification() {
-  let notifyBox = document.getElementById("high-priority-global-notificationbox");
-
   // Catches any windows opened by these tests (e.g. alert windows) and closes
   // them
   gWindowCatcher.start();
 
   for (let i = 0; i < BG_NOTIFY_TESTS.length; i++) {
     let testCase = BG_NOTIFY_TESTS[i];
     ok(true, "Test showNotification " + (i + 1) + ": " + testCase.description);
 
@@ -323,17 +321,18 @@ function testShowNotification() {
       writeUpdatesToXMLFile(XML_EMPTY);
     }
 
     reloadUpdateManagerData();
     Services.prefs.setBoolPref(PREF_POSTUPDATE, true);
 
     gBG.observe(null, "browser-glue-test", "post-update-notification");
 
-    let updateBox = notifyBox.getNotificationWithValue("post-update-notification");
+    let updateBox = gHighPriorityNotificationBox.getNotificationWithValue(
+                                                    "post-update-notification");
     if (testCase.actions && testCase.actions.includes("showNotification") &&
         !testCase.actions.includes("silent")) {
       ok(updateBox, "Update notification box should have been displayed");
       if (updateBox) {
         if (testCase.notificationText) {
           is(updateBox.label, testCase.notificationText, "Update notification box " +
              "should have the label provided by the update");
         }
@@ -352,17 +351,17 @@ function testShowNotification() {
         // is correct.
         if (i == (BG_NOTIFY_TESTS.length - 1)) {
           // Wait for any windows caught by the windowcatcher to close
           gWindowCatcher.finish(function() {
             BrowserTestUtils.waitForNewTab(gBrowser).then(testNotificationURL);
             button.click();
           });
         } else {
-          notifyBox.removeAllNotifications(true);
+          gHighPriorityNotificationBox.removeAllNotifications(true);
         }
       } else if (i == (BG_NOTIFY_TESTS.length - 1)) {
         // If updateBox is null the test has already reported errors so bail
         finish_test();
       }
     } else {
       ok(!updateBox, "Update notification box should not have been displayed");
     }
--- a/browser/extensions/pdfjs/README.mozilla
+++ b/browser/extensions/pdfjs/README.mozilla
@@ -1,5 +1,5 @@
 This is the PDF.js project output, https://github.com/mozilla/pdf.js
 
-Current extension version is: 2.1.26
+Current extension version is: 2.1.42
 
-Taken from upstream commit: f6bc9340
+Taken from upstream commit: 2194aef0
--- a/browser/extensions/pdfjs/content/build/pdf.js
+++ b/browser/extensions/pdfjs/content/build/pdf.js
@@ -118,18 +118,18 @@ return /******/ (function(modules) { // 
 /************************************************************************/
 /******/ ([
 /* 0 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
 
 
-var pdfjsVersion = '2.1.26';
-var pdfjsBuild = 'f6bc9340';
+var pdfjsVersion = '2.1.42';
+var pdfjsBuild = '2194aef0';
 var pdfjsSharedUtil = __w_pdfjs_require__(1);
 var pdfjsDisplayAPI = __w_pdfjs_require__(7);
 var pdfjsDisplayTextLayer = __w_pdfjs_require__(19);
 var pdfjsDisplayAnnotationLayer = __w_pdfjs_require__(20);
 var pdfjsDisplayDOMUtils = __w_pdfjs_require__(8);
 var pdfjsDisplaySVG = __w_pdfjs_require__(21);
 let pdfjsDisplayWorkerOptions = __w_pdfjs_require__(13);
 let pdfjsDisplayAPICompatibility = __w_pdfjs_require__(10);
@@ -4221,17 +4221,17 @@ function _fetchDocument(worker, source, 
     return Promise.reject(new Error('Worker was destroyed'));
   }
   if (pdfDataRangeTransport) {
     source.length = pdfDataRangeTransport.length;
     source.initialData = pdfDataRangeTransport.initialData;
   }
   return worker.messageHandler.sendWithPromise('GetDocRequest', {
     docId,
-    apiVersion: '2.1.26',
+    apiVersion: '2.1.42',
     source: {
       data: source.data,
       url: source.url,
       password: source.password,
       disableAutoFetch: source.disableAutoFetch,
       rangeChunkSize: source.rangeChunkSize,
       length: source.length
     },
@@ -5094,17 +5094,17 @@ class WorkerTransport {
       const page = this.pageCache[data.pageIndex];
       page._renderPageChunk(data.operatorList, data.intent);
     }, this);
     messageHandler.on('commonobj', function (data) {
       if (this.destroyed) {
         return;
       }
       const [id, type, exportedData] = data;
-      if (this.commonObjs.hasData(id)) {
+      if (this.commonObjs.has(id)) {
         return;
       }
       switch (type) {
         case 'Font':
           const params = this._params;
           if ('error' in exportedData) {
             const exportedError = exportedData.error;
             (0, _util.warn)(`Error during font loading: ${exportedError}`);
@@ -5139,17 +5139,17 @@ class WorkerTransport {
       }
     }, this);
     messageHandler.on('obj', function (data) {
       if (this.destroyed) {
         return;
       }
       const [id, pageIndex, type, imageData] = data;
       const pageProxy = this.pageCache[pageIndex];
-      if (pageProxy.objs.hasData(id)) {
+      if (pageProxy.objs.has(id)) {
         return;
       }
       switch (type) {
         case 'JpegStream':
           return new Promise((resolve, reject) => {
             const img = new Image();
             img.onload = function () {
               resolve(img);
@@ -5354,73 +5354,55 @@ class WorkerTransport {
     return (0, _util.shadow)(this, 'loadingParams', {
       disableAutoFetch: params.disableAutoFetch,
       disableCreateObjectURL: params.disableCreateObjectURL,
       disableFontFace: params.disableFontFace,
       nativeImageDecoderSupport: params.nativeImageDecoderSupport
     });
   }
 }
-var PDFObjects = function PDFObjectsClosure() {
-  function PDFObjects() {
-    this.objs = Object.create(null);
-  }
-  PDFObjects.prototype = {
-    ensureObj: function PDFObjects_ensureObj(objId) {
-      if (this.objs[objId]) {
-        return this.objs[objId];
-      }
-      var obj = {
-        capability: (0, _util.createPromiseCapability)(),
-        data: null,
-        resolved: false
-      };
-      this.objs[objId] = obj;
-      return obj;
-    },
-    get: function PDFObjects_get(objId, callback) {
-      if (callback) {
-        this.ensureObj(objId).capability.promise.then(callback);
-        return null;
-      }
-      var obj = this.objs[objId];
-      if (!obj || !obj.resolved) {
-        throw new Error(`Requesting object that isn't resolved yet ${objId}`);
-      }
-      return obj.data;
-    },
-    resolve: function PDFObjects_resolve(objId, data) {
-      var obj = this.ensureObj(objId);
-      obj.resolved = true;
-      obj.data = data;
-      obj.capability.resolve(data);
-    },
-    isResolved: function PDFObjects_isResolved(objId) {
-      var objs = this.objs;
-      if (!objs[objId]) {
-        return false;
-      }
-      return objs[objId].resolved;
-    },
-    hasData: function PDFObjects_hasData(objId) {
-      return this.isResolved(objId);
-    },
-    getData: function PDFObjects_getData(objId) {
-      var objs = this.objs;
-      if (!objs[objId] || !objs[objId].resolved) {
-        return null;
-      }
-      return objs[objId].data;
-    },
-    clear: function PDFObjects_clear() {
-      this.objs = Object.create(null);
-    }
-  };
-  return PDFObjects;
-}();
+class PDFObjects {
+  constructor() {
+    this._objs = Object.create(null);
+  }
+  _ensureObj(objId) {
+    if (this._objs[objId]) {
+      return this._objs[objId];
+    }
+    return this._objs[objId] = {
+      capability: (0, _util.createPromiseCapability)(),
+      data: null,
+      resolved: false
+    };
+  }
+  get(objId, callback = null) {
+    if (callback) {
+      this._ensureObj(objId).capability.promise.then(callback);
+      return null;
+    }
+    const obj = this._objs[objId];
+    if (!obj || !obj.resolved) {
+      throw new Error(`Requesting object that isn't resolved yet ${objId}.`);
+    }
+    return obj.data;
+  }
+  has(objId) {
+    const obj = this._objs[objId];
+    return obj ? obj.resolved : false;
+  }
+  resolve(objId, data) {
+    const obj = this._ensureObj(objId);
+    obj.resolved = true;
+    obj.data = data;
+    obj.capability.resolve(data);
+  }
+  clear() {
+    this._objs = Object.create(null);
+  }
+}
 var RenderTask = function RenderTaskClosure() {
   function RenderTask(internalRenderTask) {
     this._internalRenderTask = internalRenderTask;
     this.onContinue = null;
   }
   RenderTask.prototype = {
     get promise() {
       return this._internalRenderTask.capability.promise;
@@ -5487,16 +5469,19 @@ var InternalRenderTask = function Intern
       this.graphicsReady = true;
       if (this.graphicsReadyCallback) {
         this.graphicsReadyCallback();
       }
     },
     cancel: function InternalRenderTask_cancel() {
       this.running = false;
       this.cancelled = true;
+      if (this.gfx) {
+        this.gfx.endDrawing();
+      }
       if (this._canvas) {
         canvasInRendering.delete(this._canvas);
       }
       this.callback(new _dom_utils.RenderingCancelledException('Rendering cancelled, page ' + this.pageNumber, 'canvas'));
     },
     operatorListChanged: function InternalRenderTask_operatorListChanged() {
       if (!this.graphicsReady) {
         if (!this.graphicsReadyCallback) {
@@ -5550,18 +5535,18 @@ var InternalRenderTask = function Intern
         }
       });
     }
   };
   return InternalRenderTask;
 }();
 var version, build;
 {
-  exports.version = version = '2.1.26';
-  exports.build = build = 'f6bc9340';
+  exports.version = version = '2.1.42';
+  exports.build = build = '2194aef0';
 }
 exports.getDocument = getDocument;
 exports.LoopbackPort = LoopbackPort;
 exports.PDFDataRangeTransport = PDFDataRangeTransport;
 exports.PDFWorker = PDFWorker;
 exports.PDFDocumentProxy = PDFDocumentProxy;
 exports.PDFPageProxy = PDFPageProxy;
 exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory;
@@ -6719,17 +6704,17 @@ var CanvasGraphics = function CanvasGrap
         if (fnId !== _util.OPS.dependency) {
           this[fnId].apply(this, argsArray[i]);
         } else {
           var deps = argsArray[i];
           for (var n = 0, nn = deps.length; n < nn; n++) {
             var depObjId = deps[n];
             var common = depObjId[0] === 'g' && depObjId[1] === '_';
             var objsPool = common ? commonObjs : objs;
-            if (!objsPool.isResolved(depObjId)) {
+            if (!objsPool.has(depObjId)) {
               objsPool.get(depObjId, continueCallback);
               return i;
             }
           }
         }
         i++;
         if (i === argsArrayLen) {
           return i;
@@ -10486,18 +10471,18 @@ class TextWidgetAnnotationElement extend
         element.style.letterSpacing = 'calc(' + combWidth + 'px - 1ch)';
       }
     } else {
       element = document.createElement('div');
       element.textContent = this.data.fieldValue;
       element.style.verticalAlign = 'middle';
       element.style.display = 'table-cell';
       let font = null;
-      if (this.data.fontRefName) {
-        font = this.page.commonObjs.getData(this.data.fontRefName);
+      if (this.data.fontRefName && this.page.commonObjs.has(this.data.fontRefName)) {
+        font = this.page.commonObjs.get(this.data.fontRefName);
       }
       this._setTextStyle(element, font);
     }
     if (this.data.textAlignment !== null) {
       element.style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];
     }
     this.container.appendChild(element);
     return this.container;
@@ -11009,14 +10994,14 @@ exports.SVGGraphics = SVGGraphics;
 /***/ }),
 /* 22 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
 
 
 module.exports = function isNodeJS() {
-  return typeof process === 'object' && process + '' === '[object process]';
+  return typeof process === 'object' && process + '' === '[object process]' && !process.versions['nw'];
 };
 
 /***/ })
 /******/ ]);
 });
\ No newline at end of file
--- a/browser/extensions/pdfjs/content/build/pdf.worker.js
+++ b/browser/extensions/pdfjs/content/build/pdf.worker.js
@@ -118,18 +118,18 @@ return /******/ (function(modules) { // 
 /************************************************************************/
 /******/ ([
 /* 0 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
 
 
-var pdfjsVersion = '2.1.26';
-var pdfjsBuild = 'f6bc9340';
+var pdfjsVersion = '2.1.42';
+var pdfjsBuild = '2194aef0';
 var pdfjsCoreWorker = __w_pdfjs_require__(1);
 exports.WorkerMessageHandler = pdfjsCoreWorker.WorkerMessageHandler;
 
 /***/ }),
 /* 1 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
@@ -173,17 +173,16 @@ var WorkerTask = function WorkerTaskClos
     ensureNotTerminated() {
       if (this.terminated) {
         throw new Error('Worker task was terminated');
       }
     }
   };
   return WorkerTask;
 }();
-;
 var PDFWorkerStream = function PDFWorkerStreamClosure() {
   function PDFWorkerStream(msgHandler) {
     this._msgHandler = msgHandler;
     this._contentLength = null;
     this._fullRequestReader = null;
     this._rangeRequestReaders = [];
   }
   PDFWorkerStream.prototype = {
@@ -322,17 +321,17 @@ var WorkerMessageHandler = {
     });
   },
   createDocumentHandler(docParams, port) {
     var pdfManager;
     var terminated = false;
     var cancelXHRs = null;
     var WorkerTasks = [];
     let apiVersion = docParams.apiVersion;
-    let workerVersion = '2.1.26';
+    let workerVersion = '2.1.42';
     if (apiVersion !== workerVersion) {
       throw new Error(`The API version "${apiVersion}" does not match ` + `the Worker version "${workerVersion}".`);
     }
     var docId = docParams.docId;
     var docBaseUrl = docParams.docBaseUrl;
     var workerHandlerName = docParams.docId + '_worker';
     var handler = new _message_handler.MessageHandler(workerHandlerName, docId, port);
     handler.postMessageTransfers = docParams.postMessageTransfers;
@@ -40017,201 +40016,205 @@ Object.defineProperty(exports, "__esModu
   value: true
 });
 exports.PostScriptParser = exports.PostScriptLexer = undefined;
 
 var _util = __w_pdfjs_require__(2);
 
 var _primitives = __w_pdfjs_require__(12);
 
-var PostScriptParser = function PostScriptParserClosure() {
-  function PostScriptParser(lexer) {
+class PostScriptParser {
+  constructor(lexer) {
     this.lexer = lexer;
     this.operators = [];
     this.token = null;
     this.prev = null;
   }
-  PostScriptParser.prototype = {
-    nextToken: function PostScriptParser_nextToken() {
-      this.prev = this.token;
-      this.token = this.lexer.getToken();
-    },
-    accept: function PostScriptParser_accept(type) {
-      if (this.token.type === type) {
-        this.nextToken();
-        return true;
-      }
-      return false;
-    },
-    expect: function PostScriptParser_expect(type) {
-      if (this.accept(type)) {
-        return true;
-      }
-      throw new _util.FormatError(`Unexpected symbol: found ${this.token.type} expected ${type}.`);
-    },
-    parse: function PostScriptParser_parse() {
+  nextToken() {
+    this.prev = this.token;
+    this.token = this.lexer.getToken();
+  }
+  accept(type) {
+    if (this.token.type === type) {
       this.nextToken();
-      this.expect(PostScriptTokenTypes.LBRACE);
+      return true;
+    }
+    return false;
+  }
+  expect(type) {
+    if (this.accept(type)) {
+      return true;
+    }
+    throw new _util.FormatError(`Unexpected symbol: found ${this.token.type} expected ${type}.`);
+  }
+  parse() {
+    this.nextToken();
+    this.expect(PostScriptTokenTypes.LBRACE);
+    this.parseBlock();
+    this.expect(PostScriptTokenTypes.RBRACE);
+    return this.operators;
+  }
+  parseBlock() {
+    while (true) {
+      if (this.accept(PostScriptTokenTypes.NUMBER)) {
+        this.operators.push(this.prev.value);
+      } else if (this.accept(PostScriptTokenTypes.OPERATOR)) {
+        this.operators.push(this.prev.value);
+      } else if (this.accept(PostScriptTokenTypes.LBRACE)) {
+        this.parseCondition();
+      } else {
+        return;
+      }
+    }
+  }
+  parseCondition() {
+    const conditionLocation = this.operators.length;
+    this.operators.push(null, null);
+    this.parseBlock();
+    this.expect(PostScriptTokenTypes.RBRACE);
+    if (this.accept(PostScriptTokenTypes.IF)) {
+      this.operators[conditionLocation] = this.operators.length;
+      this.operators[conditionLocation + 1] = 'jz';
+    } else if (this.accept(PostScriptTokenTypes.LBRACE)) {
+      const jumpLocation = this.operators.length;
+      this.operators.push(null, null);
+      const endOfTrue = this.operators.length;
       this.parseBlock();
       this.expect(PostScriptTokenTypes.RBRACE);
-      return this.operators;
-    },
-    parseBlock: function PostScriptParser_parseBlock() {
-      while (true) {
-        if (this.accept(PostScriptTokenTypes.NUMBER)) {
-          this.operators.push(this.prev.value);
-        } else if (this.accept(PostScriptTokenTypes.OPERATOR)) {
-          this.operators.push(this.prev.value);
-        } else if (this.accept(PostScriptTokenTypes.LBRACE)) {
-          this.parseCondition();
-        } else {
-          return;
-        }
-      }
-    },
-    parseCondition: function PostScriptParser_parseCondition() {
-      var conditionLocation = this.operators.length;
-      this.operators.push(null, null);
-      this.parseBlock();
-      this.expect(PostScriptTokenTypes.RBRACE);
-      if (this.accept(PostScriptTokenTypes.IF)) {
-        this.operators[conditionLocation] = this.operators.length;
-        this.operators[conditionLocation + 1] = 'jz';
-      } else if (this.accept(PostScriptTokenTypes.LBRACE)) {
-        var jumpLocation = this.operators.length;
-        this.operators.push(null, null);
-        var endOfTrue = this.operators.length;
-        this.parseBlock();
-        this.expect(PostScriptTokenTypes.RBRACE);
-        this.expect(PostScriptTokenTypes.IFELSE);
-        this.operators[jumpLocation] = this.operators.length;
-        this.operators[jumpLocation + 1] = 'j';
-        this.operators[conditionLocation] = endOfTrue;
-        this.operators[conditionLocation + 1] = 'jz';
-      } else {
-        throw new _util.FormatError('PS Function: error parsing conditional.');
-      }
-    }
-  };
-  return PostScriptParser;
-}();
-var PostScriptTokenTypes = {
+      this.expect(PostScriptTokenTypes.IFELSE);
+      this.operators[jumpLocation] = this.operators.length;
+      this.operators[jumpLocation + 1] = 'j';
+      this.operators[conditionLocation] = endOfTrue;
+      this.operators[conditionLocation + 1] = 'jz';
+    } else {
+      throw new _util.FormatError('PS Function: error parsing conditional.');
+    }
+  }
+}
+const PostScriptTokenTypes = {
   LBRACE: 0,
   RBRACE: 1,
   NUMBER: 2,
   OPERATOR: 3,
   IF: 4,
   IFELSE: 5
 };
-var PostScriptToken = function PostScriptTokenClosure() {
-  function PostScriptToken(type, value) {
-    this.type = type;
-    this.value = value;
-  }
-  var opCache = Object.create(null);
-  PostScriptToken.getOperator = function PostScriptToken_getOperator(op) {
-    var opValue = opCache[op];
-    if (opValue) {
-      return opValue;
-    }
-    return opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op);
-  };
-  PostScriptToken.LBRACE = new PostScriptToken(PostScriptTokenTypes.LBRACE, '{');
-  PostScriptToken.RBRACE = new PostScriptToken(PostScriptTokenTypes.RBRACE, '}');
-  PostScriptToken.IF = new PostScriptToken(PostScriptTokenTypes.IF, 'IF');
-  PostScriptToken.IFELSE = new PostScriptToken(PostScriptTokenTypes.IFELSE, 'IFELSE');
+const PostScriptToken = function PostScriptTokenClosure() {
+  const opCache = Object.create(null);
+  class PostScriptToken {
+    constructor(type, value) {
+      this.type = type;
+      this.value = value;
+    }
+    static getOperator(op) {
+      const opValue = opCache[op];
+      if (opValue) {
+        return opValue;
+      }
+      return opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op);
+    }
+    static get LBRACE() {
+      return (0, _util.shadow)(this, 'LBRACE', new PostScriptToken(PostScriptTokenTypes.LBRACE, '{'));
+    }
+    static get RBRACE() {
+      return (0, _util.shadow)(this, 'RBRACE', new PostScriptToken(PostScriptTokenTypes.RBRACE, '}'));
+    }
+    static get IF() {
+      return (0, _util.shadow)(this, 'IF', new PostScriptToken(PostScriptTokenTypes.IF, 'IF'));
+    }
+    static get IFELSE() {
+      return (0, _util.shadow)(this, 'IFELSE', new PostScriptToken(PostScriptTokenTypes.IFELSE, 'IFELSE'));
+    }
+  }
   return PostScriptToken;
 }();
-var PostScriptLexer = function PostScriptLexerClosure() {
-  function PostScriptLexer(stream) {
+class PostScriptLexer {
+  constructor(stream) {
     this.stream = stream;
     this.nextChar();
     this.strBuf = [];
   }
-  PostScriptLexer.prototype = {
-    nextChar: function PostScriptLexer_nextChar() {
-      return this.currentChar = this.stream.getByte();
-    },
-    getToken: function PostScriptLexer_getToken() {
-      var comment = false;
-      var ch = this.currentChar;
-      while (true) {
-        if (ch < 0) {
-          return _primitives.EOF;
-        }
-        if (comment) {
-          if (ch === 0x0A || ch === 0x0D) {
-            comment = false;
-          }
-        } else if (ch === 0x25) {
-          comment = true;
-        } else if (!(0, _util.isSpace)(ch)) {
-          break;
-        }
-        ch = this.nextChar();
-      }
-      switch (ch | 0) {
-        case 0x30:
-        case 0x31:
-        case 0x32:
-        case 0x33:
-        case 0x34:
-        case 0x35:
-        case 0x36:
-        case 0x37:
-        case 0x38:
-        case 0x39:
-        case 0x2B:
-        case 0x2D:
-        case 0x2E:
-          return new PostScriptToken(PostScriptTokenTypes.NUMBER, this.getNumber());
-        case 0x7B:
-          this.nextChar();
-          return PostScriptToken.LBRACE;
-        case 0x7D:
-          this.nextChar();
-          return PostScriptToken.RBRACE;
-      }
-      var strBuf = this.strBuf;
-      strBuf.length = 0;
-      strBuf[0] = String.fromCharCode(ch);
-      while ((ch = this.nextChar()) >= 0 && (ch >= 0x41 && ch <= 0x5A || ch >= 0x61 && ch <= 0x7A)) {
+  nextChar() {
+    return this.currentChar = this.stream.getByte();
+  }
+  getToken() {
+    let comment = false;
+    let ch = this.currentChar;
+    while (true) {
+      if (ch < 0) {
+        return _primitives.EOF;
+      }
+      if (comment) {
+        if (ch === 0x0A || ch === 0x0D) {
+          comment = false;
+        }
+      } else if (ch === 0x25) {
+        comment = true;
+      } else if (!(0, _util.isSpace)(ch)) {
+        break;
+      }
+      ch = this.nextChar();
+    }
+    switch (ch | 0) {
+      case 0x30:
+      case 0x31:
+      case 0x32:
+      case 0x33:
+      case 0x34:
+      case 0x35:
+      case 0x36:
+      case 0x37:
+      case 0x38:
+      case 0x39:
+      case 0x2B:
+      case 0x2D:
+      case 0x2E:
+        return new PostScriptToken(PostScriptTokenTypes.NUMBER, this.getNumber());
+      case 0x7B:
+        this.nextChar();
+        return PostScriptToken.LBRACE;
+      case 0x7D:
+        this.nextChar();
+        return PostScriptToken.RBRACE;
+    }
+    const strBuf = this.strBuf;
+    strBuf.length = 0;
+    strBuf[0] = String.fromCharCode(ch);
+    while ((ch = this.nextChar()) >= 0 && (ch >= 0x41 && ch <= 0x5A || ch >= 0x61 && ch <= 0x7A)) {
+      strBuf.push(String.fromCharCode(ch));
+    }
+    const str = strBuf.join('');
+    switch (str.toLowerCase()) {
+      case 'if':
+        return PostScriptToken.IF;
+      case 'ifelse':
+        return PostScriptToken.IFELSE;
+      default:
+        return PostScriptToken.getOperator(str);
+    }
+  }
+  getNumber() {
+    let ch = this.currentChar;
+    const strBuf = this.strBuf;
+    strBuf.length = 0;
+    strBuf[0] = String.fromCharCode(ch);
+    while ((ch = this.nextChar()) >= 0) {
+      if (ch >= 0x30 && ch <= 0x39 || ch === 0x2D || ch === 0x2E) {
         strBuf.push(String.fromCharCode(ch));
-      }
-      var str = strBuf.join('');
-      switch (str.toLowerCase()) {
-        case 'if':
-          return PostScriptToken.IF;
-        case 'ifelse':
-          return PostScriptToken.IFELSE;
-        default:
-          return PostScriptToken.getOperator(str);
-      }
-    },
-    getNumber: function PostScriptLexer_getNumber() {
-      var ch = this.currentChar;
-      var strBuf = this.strBuf;
-      strBuf.length = 0;
-      strBuf[0] = String.fromCharCode(ch);
-      while ((ch = this.nextChar()) >= 0) {
-        if (ch >= 0x30 && ch <= 0x39 || ch === 0x2D || ch === 0x2E) {
-          strBuf.push(String.fromCharCode(ch));
-        } else {
-          break;
-        }
-      }
-      var value = parseFloat(strBuf.join(''));
-      if (isNaN(value)) {
-        throw new _util.FormatError(`Invalid floating point number: ${value}`);
-      }
-      return value;
-    }
-  };
-  return PostScriptLexer;
-}();
+      } else {
+        break;
+      }
+    }
+    const value = parseFloat(strBuf.join(''));
+    if (isNaN(value)) {
+      throw new _util.FormatError(`Invalid floating point number: ${value}`);
+    }
+    return value;
+  }
+}
 exports.PostScriptLexer = PostScriptLexer;
 exports.PostScriptParser = PostScriptParser;
 
 /***/ }),
 /* 44 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
@@ -40865,17 +40868,17 @@ exports.PDFImage = PDFImage;
 /***/ }),
 /* 46 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
 
 
 module.exports = function isNodeJS() {
-  return typeof process === 'object' && process + '' === '[object process]';
+  return typeof process === 'object' && process + '' === '[object process]' && !process.versions['nw'];
 };
 
 /***/ }),
 /* 47 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
 
--- a/browser/extensions/pdfjs/content/web/viewer.js
+++ b/browser/extensions/pdfjs/content/web/viewer.js
@@ -4110,39 +4110,41 @@ class PDFFindController {
     if (!pdfDocument) {
       return;
     }
     this._pdfDocument = pdfDocument;
     this._firstPageCapability.resolve();
   }
   executeCommand(cmd, state) {
     const pdfDocument = this._pdfDocument;
-    if (this._state === null || cmd !== 'findagain') {
+    if (this._state === null || this._shouldDirtyMatch(cmd)) {
       this._dirtyMatch = true;
     }
     this._state = state;
     this._updateUIState(FindState.PENDING);
     this._firstPageCapability.promise.then(() => {
       if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) {
         return;
       }
       this._extractText();
+      const findbarClosed = !this._highlightMatches;
       if (this._findTimeout) {
         clearTimeout(this._findTimeout);
         this._findTimeout = null;
       }
       if (cmd === 'find') {
         this._findTimeout = setTimeout(() => {
           this._nextMatch();
           this._findTimeout = null;
         }, FIND_TIMEOUT);
-      } else if (cmd === 'findagain' && !this._dirtyMatch) {
-        const updateHighlightAll = !this._highlightMatches && this._state.highlightAll;
+      } else if (this._dirtyMatch) {
         this._nextMatch();
-        if (updateHighlightAll) {
+      } else if (cmd === 'findagain') {
+        this._nextMatch();
+        if (findbarClosed && this._state.highlightAll) {
           this._updateAllPages();
         }
       } else {
         this._nextMatch();
       }
     });
   }
   _reset() {
@@ -4173,16 +4175,28 @@ class PDFFindController {
   }
   get _query() {
     if (this._state.query !== this._rawQuery) {
       this._rawQuery = this._state.query;
       this._normalizedQuery = normalize(this._state.query);
     }
     return this._normalizedQuery;
   }
+  _shouldDirtyMatch(cmd) {
+    switch (cmd) {
+      case 'findagain':
+        const pageNumber = this._selected.pageIdx + 1;
+        const linkService = this._linkService;
+        if (pageNumber >= 1 && pageNumber <= linkService.pagesCount && linkService.page !== pageNumber && linkService.isPageVisible && !linkService.isPageVisible(pageNumber)) {
+          break;
+        }
+        return false;
+    }
+    return true;
+  }
   _prepareMatches(matchesWithLength, matches, matchesLength) {
     function isSubTerm(matchesWithLength, currentIndex) {
       const currentElem = matchesWithLength[currentIndex];
       const nextElem = matchesWithLength[currentIndex + 1];
       if (currentIndex < matchesWithLength.length - 1 && currentElem.match === nextElem.match) {
         currentElem.skipped = true;
         return true;
       }
@@ -5201,16 +5215,19 @@ class PDFLinkService {
     }
     let refStr = pageRef.num + ' ' + pageRef.gen + ' R';
     this._pagesRefCache[refStr] = pageNum;
   }
   _cachedPageNumber(pageRef) {
     let refStr = pageRef.num + ' ' + pageRef.gen + ' R';
     return this._pagesRefCache && this._pagesRefCache[refStr] || null;
   }
+  isPageVisible(pageNumber) {
+    return this.pdfViewer.isPageVisible(pageNumber);
+  }
 }
 function isValidExplicitDestination(dest) {
   if (!Array.isArray(dest)) {
     return false;
   }
   let destLength = dest.length,
       allowNull = true;
   if (destLength < 2) {
@@ -5279,16 +5296,19 @@ class SimpleLinkService {
     return '#';
   }
   getAnchorUrl(hash) {
     return '#';
   }
   setHash(hash) {}
   executeNamedAction(action) {}
   cachePageRef(pageNum, pageRef) {}
+  isPageVisible(pageNumber) {
+    return true;
+  }
 }
 exports.PDFLinkService = PDFLinkService;
 exports.SimpleLinkService = SimpleLinkService;
 
 /***/ }),
 /* 19 */
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -7065,16 +7085,28 @@ class BaseViewer {
       first: view,
       last: view,
       views: [view]
     };
   }
   _getVisiblePages() {
     throw new Error('Not implemented: _getVisiblePages');
   }
+  isPageVisible(pageNumber) {
+    if (!this.pdfDocument) {
+      return false;
+    }
+    if (this.pageNumber < 1 || pageNumber > this.pagesCount) {
+      console.error(`${this._name}.isPageVisible: "${pageNumber}" is out of bounds.`);
+      return false;
+    }
+    return this._getVisiblePages().views.some(function (view) {
+      return view.id === pageNumber;
+    });
+  }
   cleanup() {
     for (let i = 0, ii = this._pages.length; i < ii; i++) {
       if (this._pages[i] && this._pages[i].renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) {
         this._pages[i].reset();
       }
     }
   }
   _cancelRendering() {
--- a/browser/extensions/pdfjs/moz.yaml
+++ b/browser/extensions/pdfjs/moz.yaml
@@ -15,15 +15,15 @@ origin:
   description: Portable Document Format (PDF) viewer that is built with HTML5
 
   # Full URL for the package's homepage/etc
   # Usually different from repository url
   url: https://github.com/mozilla/pdf.js
 
   # Human-readable identifier for this version/release
   # Generally "version NNN", "tag SSS", "bookmark SSS"
-  release: version 2.1.26
+  release: version 2.1.42
 
   # The package's license, where possible using the mnemonic from
   # https://spdx.org/licenses/
   # Multiple licenses can be specified (as a YAML list)
   # A "LICENSE" file must exist containing the full license text
   license: Apache-2.0
--- a/browser/locales/en-US/chrome/browser/browser.properties
+++ b/browser/locales/en-US/chrome/browser/browser.properties
@@ -856,17 +856,17 @@ userContextShopping.label = Shopping
 userContextNone.label = No Container
 
 userContextPersonal.accesskey = P
 userContextWork.accesskey = W
 userContextBanking.accesskey = B
 userContextShopping.accesskey = S
 userContextNone.accesskey = N
 
-userContext.aboutPage.label = Manage containers
+userContext.aboutPage.label = Manage Containers
 userContext.aboutPage.accesskey = O
 
 userContextOpenLink.label = Open Link in New %S Tab
 
 muteTab.label = Mute Tab
 muteTab.accesskey = M
 unmuteTab.label = Unmute Tab
 unmuteTab.accesskey = m
--- a/browser/modules/ContentCrashHandlers.jsm
+++ b/browser/modules/ContentCrashHandlers.jsm
@@ -862,18 +862,18 @@ var UnsubmittedCrashHandler = {
     let chromeWin = BrowserWindowTracker.getTopWindow();
     if (!chromeWin) {
       // Can't show a notification in this case. We'll hopefully
       // get another opportunity to have the user submit their
       // crash reports later.
       return null;
     }
 
-    let nb =  chromeWin.document.getElementById("global-notificationbox");
-    let notification = nb.getNotificationWithValue(notificationID);
+    let notification = chromeWin.gNotificationBox
+                                .getNotificationWithValue(notificationID);
     if (notification) {
       return null;
     }
 
     let buttons = [{
       label: gNavigatorBundle.GetStringFromName("pendingCrashReports.send"),
       callback: () => {
         this.submitReports(reportIDs);
@@ -910,20 +910,19 @@ var UnsubmittedCrashHandler = {
           CrashSubmit.ignore(reportID);
         });
         if (onAction) {
           onAction();
         }
       }
     };
 
-    return nb.appendNotification(message, notificationID,
-                                 "chrome://browser/skin/tab-crashed.svg",
-                                 nb.PRIORITY_INFO_HIGH, buttons,
-                                 eventCallback);
+    return chromeWin.gNotificationBox.appendNotification(message,
+      notificationID, "chrome://browser/skin/tab-crashed.svg",
+      chromeWin.gNotificationBox.PRIORITY_INFO_HIGH, buttons, eventCallback);
   },
 
   get autoSubmit() {
     return Services.prefs
                    .getBoolPref("browser.crashReports.unsubmittedCheck.autoSubmit2");
   },
 
   set autoSubmit(val) {
--- a/browser/modules/ProcessHangMonitor.jsm
+++ b/browser/modules/ProcessHangMonitor.jsm
@@ -415,18 +415,18 @@ var ProcessHangMonitor = {
       this.hideNotification(win);
     }
   },
 
   /**
    * Show the notification for a hang.
    */
   showNotification(win, report) {
-    let nb = win.document.getElementById("high-priority-global-notificationbox");
-    let notification = nb.getNotificationWithValue("process-hang");
+    let notification =
+        win.gHighPriorityNotificationBox.getNotificationWithValue("process-hang");
     if (notification) {
       return;
     }
 
     let bundle = win.gNavigatorBundle;
 
     let buttons = [{
         label: bundle.getString("processHang.button_stop.label"),
@@ -482,29 +482,29 @@ var ProcessHangMonitor = {
         label: bundle.getString("processHang.button_debug.label"),
         accessKey: bundle.getString("processHang.button_debug.accessKey"),
         callback() {
           ProcessHangMonitor.debugScript(win);
         },
       });
     }
 
-    nb.appendNotification(message, "process-hang",
-                          "chrome://browser/content/aboutRobots-icon.png",
-                          nb.PRIORITY_WARNING_HIGH, buttons);
+    win.gHighPriorityNotificationBox.appendNotification(message, "process-hang",
+      "chrome://browser/content/aboutRobots-icon.png",
+      win.gHighPriorityNotificationBox.PRIORITY_WARNING_HIGH, buttons);
   },
 
   /**
    * Ensure that no hang notifications are visible in |win|.
    */
   hideNotification(win) {
-    let nb = win.document.getElementById("high-priority-global-notificationbox");
-    let notification = nb.getNotificationWithValue("process-hang");
+    let notification =
+        win.gHighPriorityNotificationBox.getNotificationWithValue("process-hang");
     if (notification) {
-      nb.removeNotification(notification);
+      win.gHighPriorityNotificationBox.removeNotification(notification);
     }
   },
 
   /**
    * Install event handlers on |win| to watch for events that would
    * cause a different hang report to be displayed.
    */
   trackWindow(win) {
--- a/browser/modules/test/browser/browser_ProcessHangNotifications.js
+++ b/browser/modules/test/browser/browser_ProcessHangNotifications.js
@@ -1,25 +1,21 @@
 /* globals ProcessHangMonitor */
 
 const { WebExtensionPolicy } =
   Cu.getGlobalForObject(ChromeUtils.import("resource://gre/modules/Services.jsm", {}));
 
 ChromeUtils.import("resource://gre/modules/UpdateUtils.jsm");
 
-function getNotificationBox(aWindow) {
-  return aWindow.document.getElementById("high-priority-global-notificationbox");
-}
-
 function promiseNotificationShown(aWindow, aName) {
   return new Promise((resolve) => {
-    let notification = getNotificationBox(aWindow);
-    notification.addEventListener("AlertActive", function() {
-      is(notification.allNotifications.length, 1, "Notification Displayed.");
-      resolve(notification);
+    let notificationBox = aWindow.gHighPriorityNotificationBox;
+    notificationBox.stack.addEventListener("AlertActive", function() {
+      is(notificationBox.allNotifications.length, 1, "Notification Displayed.");
+      resolve(notificationBox);
     }, {once: true});
   });
 }
 
 function pushPrefs(...aPrefs) {
   return SpecialPowers.pushPrefEnv({"set": aPrefs});
 }
 
--- a/browser/modules/test/browser/browser_UnsubmittedCrashHandler.js
+++ b/browser/modules/test/browser/browser_UnsubmittedCrashHandler.js
@@ -164,29 +164,26 @@ function waitForIgnoredReports(reportIDs
   for (let reportID of reportIDs) {
     let file = dir.clone();
     file.append(reportID + ".dmp.ignore");
     promises.push(OS.File.exists(file.path));
   }
   return Promise.all(promises);
 }
 
-let gNotificationBox;
-
 add_task(async function setup() {
   // Pending crash reports are stored in the UAppData folder,
   // which exists outside of the profile folder. In order to
   // not overwrite / clear pending crash reports for the poor
   // soul who runs this test, we use AppData.jsm to point to
   // a special made-up directory inside the profile
   // directory.
   await makeFakeAppDir();
   // We'll assume that the notifications will be shown in the current
   // browser window's global notification box.
-  gNotificationBox = document.getElementById("global-notificationbox");
 
   // If we happen to already be seeing the unsent crash report
   // notification, it's because the developer running this test
   // happened to have some unsent reports in their UAppDir.
   // We'll remove the notification without touching those reports.
   let notification =
     gNotificationBox.getNotificationWithValue("pending-crash-reports");
   if (notification) {
@@ -234,17 +231,16 @@ add_task(async function setup() {
   await SpecialPowers.pushPrefEnv({
     set: [
       ["browser.crashReports.unsubmittedCheck.enabled", true],
     ],
   });
   UnsubmittedCrashHandler.init();
 
   registerCleanupFunction(function() {
-    gNotificationBox = null;
     clearPendingCrashReports();
     env.set("MOZ_CRASHREPORTER_URL", oldServerURL);
   });
 });
 
 /**
  * Tests that if there are no pending crash reports, then the
  * notification will not show up.
@@ -263,17 +259,16 @@ add_task(async function test_no_pending_
  * Tests that there is a notification if there is one pending
  * crash report.
  */
 add_task(async function test_one_pending() {
   await createPendingCrashReports(1);
   let notification =
     await UnsubmittedCrashHandler.checkForUnsubmittedCrashReports();
   Assert.ok(notification, "There should be a notification");
-
   gNotificationBox.removeNotification(notification, true);
   clearPendingCrashReports();
 });
 
 /**
  * Tests that an ignored crash report does not suppress a notification that
  * would be trigged by another, unignored crash report.
  */
--- a/browser/themes/linux/browser.css
+++ b/browser/themes/linux/browser.css
@@ -446,16 +446,21 @@ notification[value="translation"] menuli
   background-color: -moz-dialog;
   border: 1px ThreeDShadow;
   border-style: none solid;
 }
 
 .browserContainer > findbar {
   background-color: var(--toolbar-bgcolor);
   color: var(--toolbar-color);
+}
+
+.browserContainer > findbar:-moz-lwtheme {
+  background-color: var(--lwt-accent-color);
+  background-image: linear-gradient(var(--toolbar-bgcolor), var(--toolbar-bgcolor));
   text-shadow: none;
 }
 
 /* Tabstrip */
 
 %include ../shared/tabs.inc.css
 
 #tabbrowser-tabs {
--- a/browser/themes/osx/browser.css
+++ b/browser/themes/osx/browser.css
@@ -561,18 +561,18 @@ html|input.urlbar-input {
 .browserContainer > findbar {
   background: @scopeBarBackground@;
   border-top: @scopeBarSeparatorBorder@;
   color: -moz-DialogText;
   text-shadow: none;
 }
 
 .browserContainer > findbar:-moz-lwtheme {
-  background-color: var(--toolbar-bgcolor);
-  background-image: none;
+  background-color: var(--lwt-accent-color);
+  background-image: linear-gradient(var(--toolbar-bgcolor), var(--toolbar-bgcolor));
   color: var(--toolbar-color);
 }
 
 .openintabs-menuitem {
   list-style-image: none;
 }
 
 /* ::::: tabbrowser ::::: */
--- a/browser/themes/windows/browser.css
+++ b/browser/themes/windows/browser.css
@@ -660,16 +660,21 @@ html|*.urlbar-input:-moz-lwtheme::placeh
 
 #browser {
   --sidebar-border-color: ThreeDLightShadow;
 }
 
 .browserContainer > findbar {
   background-color: var(--toolbar-bgcolor);
   color: var(--toolbar-color);
+}
+
+.browserContainer > findbar:-moz-lwtheme {
+  background-color: var(--lwt-accent-color);
+  background-image: linear-gradient(var(--toolbar-bgcolor), var(--toolbar-bgcolor));
   text-shadow: none;
 }
 
 /* Tabstrip */
 
 #TabsToolbar {
   min-height: 0;
   padding: 0;
deleted file mode 100644
--- a/build/win32/mozconfig.vs2015-win64
+++ /dev/null
@@ -1,27 +0,0 @@
-if [ -z "${VSPATH}" ]; then
-    TOOLTOOL_DIR=${TOOLTOOL_DIR:-$topsrcdir}
-    VSPATH="$(cd ${TOOLTOOL_DIR} && pwd)/vs2015u3"
-fi
-
-if [ -d "${VSPATH}" ]; then
-    VSWINPATH="$(cd ${VSPATH} && pwd -W)"
-
-    export WINDOWSSDKDIR="${VSWINPATH}/SDK"
-    export WIN32_REDIST_DIR="${VSPATH}/VC/redist/x86/Microsoft.VC140.CRT"
-    export WIN_UCRT_REDIST_DIR="${VSPATH}/SDK/Redist/ucrt/DLLs/x86"
-
-    export PATH="${VSPATH}/VC/bin/amd64_x86:${VSPATH}/VC/bin/amd64:${VSPATH}/VC/bin:${VSPATH}/SDK/bin/x86:${VSPATH}/SDK/bin/x64:${VSPATH}/DIA SDK/bin:${PATH}"
-    export PATH="${VSPATH}/VC/redist/x86/Microsoft.VC140.CRT:${VSPATH}/VC/redist/x64/Microsoft.VC140.CRT:${VSPATH}/SDK/Redist/ucrt/DLLs/x86:${VSPATH}/SDK/Redist/ucrt/DLLs/x64:${PATH}"
-
-    export INCLUDE="${VSPATH}/VC/include:${VSPATH}/VC/atlmfc/include:${VSPATH}/SDK/Include/10.0.14393.0/ucrt:${VSPATH}/SDK/Include/10.0.14393.0/shared:${VSPATH}/SDK/Include/10.0.14393.0/um:${VSPATH}/SDK/Include/10.0.14393.0/winrt:${VSPATH}/DIA SDK/include"
-    export LIB="${VSPATH}/VC/lib:${VSPATH}/VC/atlmfc/lib:${VSPATH}/SDK/lib/10.0.14393.0/ucrt/x86:${VSPATH}/SDK/lib/10.0.14393.0/um/x86:${VSPATH}/DIA SDK/lib"
-fi
-
-. $topsrcdir/build/mozconfig.vs-common
-
-mk_export_correct_style WINDOWSSDKDIR
-mk_export_correct_style INCLUDE
-mk_export_correct_style LIB
-mk_export_correct_style PATH
-mk_export_correct_style WIN32_REDIST_DIR
-mk_export_correct_style WIN_UCRT_REDIST_DIR
--- a/build/win32/mozconfig.vs2017
+++ b/build/win32/mozconfig.vs2017
@@ -6,24 +6,25 @@ fi
 if [ -d "${VSPATH}" ]; then
     VSWINPATH="$(cd ${VSPATH} && pwd -W)"
 
     export WINDOWSSDKDIR="${VSWINPATH}/SDK"
     export WIN32_REDIST_DIR="${VSPATH}/VC/redist/x86/Microsoft.VC141.CRT"
     export WIN_UCRT_REDIST_DIR="${VSPATH}/SDK/Redist/ucrt/DLLs/x86"
     export WIN_DIA_SDK_BIN_DIR="${VSPATH}/DIA SDK/bin/amd64"
 
-    export PATH="${VSPATH}/VC/bin/Hostx86/x86:${VSPATH}/VC/bin/Hostx64/x86:${VSPATH}/VC/bin/Hostx64/x64:${VSPATH}/SDK/bin/10.0.17134.0/x64:${WIN_DIA_SDK_BIN_DIR}:${PATH}"
+    win_sdk_version="10.0.17134.0"
+    export PATH="${VSPATH}/VC/bin/Hostx86/x86:${VSPATH}/VC/bin/Hostx64/x86:${VSPATH}/VC/bin/Hostx64/x64:${VSPATH}/SDK/bin/${win_sdk_version}/x64:${WIN_DIA_SDK_BIN_DIR}:${PATH}"
     export PATH="${VSPATH}/VC/redist/x86/Microsoft.VC141.CRT:${VSPATH}/SDK/Redist/ucrt/DLLs/x86:${PATH}"
 
-    export INCLUDE="${VSPATH}/VC/include:${VSPATH}/VC/atlmfc/include:${VSPATH}/SDK/Include/10.0.17134.0/ucrt:${VSPATH}/SDK/Include/10.0.17134.0/shared:${VSPATH}/SDK/Include/10.0.17134.0/um:${VSPATH}/SDK/Include/10.0.17134.0/winrt:${VSPATH}/DIA SDK/include"
-    export LIB="${VSPATH}/VC/lib/x86:${VSPATH}/VC/atlmfc/lib/x86:${VSPATH}/SDK/Lib/10.0.17134.0/ucrt/x86:${VSPATH}/SDK/Lib/10.0.17134.0/um/x86:${VSPATH}/DIA SDK/lib"
+    export INCLUDE="${VSPATH}/VC/include:${VSPATH}/VC/atlmfc/include:${VSPATH}/SDK/Include/${win_sdk_version}/ucrt:${VSPATH}/SDK/Include/${win_sdk_version}/shared:${VSPATH}/SDK/Include/${win_sdk_version}/um:${VSPATH}/SDK/Include/${win_sdk_version}/winrt:${VSPATH}/DIA SDK/include"
+    export LIB="${VSPATH}/VC/lib/x86:${VSPATH}/VC/atlmfc/lib/x86:${VSPATH}/SDK/Lib/${win_sdk_version}/ucrt/x86:${VSPATH}/SDK/Lib/${win_sdk_version}/um/x86:${VSPATH}/DIA SDK/lib"
 
     export WIN64_LINK="${VSPATH}/VC/bin/Hostx64/x64/link.exe"
-    export WIN64_LIB="${VSPATH}/VC/lib/x64:${VSPATH}/VC/atlmfc/lib/x64:${VSPATH}/SDK/Lib/10.0.17134.0/ucrt/x64:${VSPATH}/SDK/Lib/10.0.17134.0/um/x64:${VSPATH}/DIA SDK/lib/amd64"
+    export WIN64_LIB="${VSPATH}/VC/lib/x64:${VSPATH}/VC/atlmfc/lib/x64:${VSPATH}/SDK/Lib/${win_sdk_version}/ucrt/x64:${VSPATH}/SDK/Lib/${win_sdk_version}/um/x64:${VSPATH}/DIA SDK/lib/amd64"
 fi
 
 ac_add_options --target=i686-pc-mingw32
 ac_add_options --host=x86_64-pc-mingw32
 
 . $topsrcdir/build/mozconfig.vs-common
 
 mk_export_correct_style WINDOWSSDKDIR
deleted file mode 100644
--- a/build/win64/mozconfig.vs2015
+++ /dev/null
@@ -1,26 +0,0 @@
-if [ -z "${VSPATH}" ]; then
-    TOOLTOOL_DIR=${TOOLTOOL_DIR:-$topsrcdir}
-    VSPATH="$(cd ${TOOLTOOL_DIR} && pwd)/vs2015u3"
-fi
-
-if [ -d "${VSPATH}" ]; then
-    VSWINPATH="$(cd ${VSPATH} && pwd -W)"
-
-    export WINDOWSSDKDIR="${VSWINPATH}/SDK"
-    export WIN32_REDIST_DIR=${VSPATH}/VC/redist/x64/Microsoft.VC140.CRT
-    export WIN_UCRT_REDIST_DIR="${VSPATH}/SDK/Redist/ucrt/DLLs/x64"
-
-    export PATH="${VSPATH}/VC/bin/amd64:${VSPATH}/VC/bin:${VSPATH}/SDK/bin/x64:${VSPATH}/VC/redist/x64/Microsoft.VC140.CRT:${VSPATH}/SDK/Redist/ucrt/DLLs/x64:${VSPATH}/DIA SDK/bin/amd64:${PATH}"
-
-    export INCLUDE="${VSPATH}/VC/include:${VSPATH}/VC/atlmfc/include:${VSPATH}/SDK/Include/10.0.14393.0/ucrt:${VSPATH}/SDK/Include/10.0.14393.0/shared:${VSPATH}/SDK/Include/10.0.14393.0/um:${VSPATH}/SDK/Include/10.0.14393.0/winrt:${VSPATH}/DIA SDK/include"
-    export LIB="${VSPATH}/VC/lib/amd64:${VSPATH}/VC/atlmfc/lib/amd64:${VSPATH}/SDK/lib/10.0.14393.0/ucrt/x64:${VSPATH}/SDK/lib/10.0.14393.0/um/x64:${VSPATH}/DIA SDK/lib/amd64"
-fi
-
-. $topsrcdir/build/mozconfig.vs-common
-
-mk_export_correct_style WINDOWSSDKDIR
-mk_export_correct_style INCLUDE
-mk_export_correct_style LIB
-mk_export_correct_style PATH
-mk_export_correct_style WIN32_REDIST_DIR
-mk_export_correct_style WIN_UCRT_REDIST_DIR
--- a/build/win64/mozconfig.vs2017
+++ b/build/win64/mozconfig.vs2017
@@ -6,20 +6,21 @@ fi
 if [ -d "${VSPATH}" ]; then
     VSWINPATH="$(cd ${VSPATH} && pwd -W)"
 
     export WINDOWSSDKDIR="${VSWINPATH}/SDK"
     export WIN32_REDIST_DIR=${VSPATH}/VC/redist/x64/Microsoft.VC141.CRT
     export WIN_UCRT_REDIST_DIR="${VSPATH}/SDK/Redist/ucrt/DLLs/x64"
     export WIN_DIA_SDK_BIN_DIR="${VSPATH}/DIA SDK/bin/amd64"
 
-    export PATH="${VSPATH}/VC/bin/Hostx64/x64:${VSPATH}/SDK/bin/10.0.17134.0/x64:${VSPATH}/VC/redist/x64/Microsoft.VC141.CRT:${VSPATH}/SDK/Redist/ucrt/DLLs/x64:${WIN_DIA_SDK_BIN_DIR}:${PATH}"
+    win_sdk_version="10.0.17134.0"
+    export PATH="${VSPATH}/VC/bin/Hostx64/x64:${VSPATH}/SDK/bin/${win_sdk_version}/x64:${VSPATH}/VC/redist/x64/Microsoft.VC141.CRT:${VSPATH}/SDK/Redist/ucrt/DLLs/x64:${WIN_DIA_SDK_BIN_DIR}:${PATH}"
 
-    export INCLUDE="${VSPATH}/VC/include:${VSPATH}/VC/atlmfc/include:${VSPATH}/SDK/Include/10.0.17134.0/ucrt:${VSPATH}/SDK/Include/10.0.17134.0/shared:${VSPATH}/SDK/Include/10.0.17134.0/um:${VSPATH}/SDK/Include/10.0.17134.0/winrt:${VSPATH}/DIA SDK/include"
-    export LIB="${VSPATH}/VC/lib/x64:${VSPATH}/VC/atlmfc/lib/x64:${VSPATH}/SDK/Lib/10.0.17134.0/ucrt/x64:${VSPATH}/SDK/Lib/10.0.17134.0/um/x64:${VSPATH}/DIA SDK/lib/amd64"
+    export INCLUDE="${VSPATH}/VC/include:${VSPATH}/VC/atlmfc/include:${VSPATH}/SDK/Include/${win_sdk_version}/ucrt:${VSPATH}/SDK/Include/${win_sdk_version}/shared:${VSPATH}/SDK/Include/${win_sdk_version}/um:${VSPATH}/SDK/Include/${win_sdk_version}/winrt:${VSPATH}/DIA SDK/include"
+    export LIB="${VSPATH}/VC/lib/x64:${VSPATH}/VC/atlmfc/lib/x64:${VSPATH}/SDK/Lib/${win_sdk_version}/ucrt/x64:${VSPATH}/SDK/Lib/${win_sdk_version}/um/x64:${VSPATH}/DIA SDK/lib/amd64"
 fi
 
 . $topsrcdir/build/mozconfig.vs-common
 
 mk_export_correct_style WINDOWSSDKDIR
 mk_export_correct_style WIN32_REDIST_DIR
 mk_export_correct_style WIN_UCRT_REDIST_DIR
 mk_export_correct_style WIN_DIA_SDK_BIN_DIR
--- a/config/rules.mk
+++ b/config/rules.mk
@@ -907,25 +907,31 @@ environment_cleaner += PYTHON='$(shell w
 else
 environment_cleaner =
 endif
 
 ifdef MOZ_USING_SCCACHE
 sccache_wrap := RUSTC_WRAPPER='$(CCACHE)'
 endif
 
+ifdef MOZ_CODE_COVERAGE
+ifeq (gcc,$(CC_TYPE))
+CODE_COVERAGE_GCC=1
+endif
+endif
+
 ifndef MOZ_ASAN
 ifndef MOZ_TSAN
 ifndef MOZ_UBSAN
-ifndef MOZ_CODE_COVERAGE
+ifneq (1,$(CODE_COVERAGE_GCC))
 ifndef FUZZING_INTERFACES
 # Pass the compilers and flags in use to cargo for use in build scripts.
 # * Don't do this for ASAN/TSAN builds because we don't pass our custom linker (see below)
 #   which will muck things up.
-# * Don't do this for code coverage builds because the way rustc invokes the linker doesn't
+# * Don't do this for GCC code coverage builds because the way rustc invokes the linker doesn't
 #   work with GCC 6: https://bugzilla.mozilla.org/show_bug.cgi?id=1477305
 #
 # We don't pass HOST_{CC,CXX} down in any form because our host value might not match
 # what cargo chooses and there's no way to control cargo's selection, so we just have to
 # hope that if something needs to build a host C source file it can find a usable compiler!
 #
 # We're passing these for consumption by the `cc` crate, which doesn't use the same
 # convention as cargo itself:
--- a/devtools/client/debugger/new/dist/debugger.css
+++ b/devtools/client/debugger/new/dist/debugger.css
@@ -238,17 +238,17 @@
   font-weight: normal;
 }
 
 /******************************************************************************/
 /* Open DOMNode in inspector or Accessible in accessibility inspector button */
 
 button.open-accessibility-inspector,
 button.open-inspector {
-  mask: url("chrome://devtools/skin/images/devtools-reps/open-inspector.svg") no-repeat;
+  mask: url("../../../shared/components/reps/images/open-inspector.svg") no-repeat;
   display: inline-block;
   background-color: var(--comment-node-color);
   height: 16px;
   margin-left: 0.25em;
   vertical-align: middle;
   cursor: pointer;
 }
 
@@ -259,17 +259,17 @@ button.open-inspector {
 .open-inspector:hover {
   background-color: var(--theme-highlight-blue);
 }
 
 /******************************************************************************/
 /* Jump to definition button */
 
 button.jump-definition {
-  mask: url("chrome://devtools/skin/images/devtools-reps/jump-definition.svg") no-repeat;
+  mask: url("../../../shared/components/reps/images/jump-definition.svg") no-repeat;
   display: inline-block;
   background-color: var(--comment-node-color);
   height: 16px;
   margin-left: 0.25em;
   vertical-align: middle;
 }
 
 .jump-definition:hover {
@@ -333,17 +333,17 @@ button.jump-definition {
   padding-inline-start: 15px
 }
 
 .tree .tree-node[data-expandable="true"] {
   cursor: default;
 }
 
 .tree-node img.arrow {
-  mask: url("chrome://devtools/skin/images/devtools-components/arrow.svg") no-repeat;
+  mask: url("../images/arrow.svg") no-repeat;
   mask-size: 100%;
   width: 9px;
   height: 9px;
   margin-inline-start: 1px;
   margin-inline-end: 4px;
   background-color: var(--theme-splitter-color, #9B9B9B);
   transform: rotate(-90deg);
   transition: transform 0.125s ease;
@@ -1030,49 +1030,49 @@ img.extension {
 }
 
 img.result-item-icon {
   height: 18px;
   width: 18px;
 }
 
 img.domain {
-  mask: url("chrome://devtools/skin/images/debugger/domain.svg") no-repeat;
+  mask: url("../images/domain.svg") no-repeat;
 }
 
 img.folder {
-  mask: url("chrome://devtools/skin/images/debugger/folder.svg") no-repeat;
+  mask: url("../images/folder.svg") no-repeat;
 }
 
 img.coffeescript {
-  mask: url("chrome://devtools/skin/images/debugger/coffeescript.svg") no-repeat;
+  mask: url("../images/coffeescript.svg") no-repeat;
 }
 
 img.javascript {
-  mask: url("chrome://devtools/skin/images/debugger/javascript.svg") no-repeat;
+  mask: url("../images/javascript.svg") no-repeat;
 }
 
 img.tab {
-  mask: url("chrome://devtools/skin/images/debugger/tab.svg") no-repeat;
+  mask: url("../images/tab.svg") no-repeat;
 }
 
 img.react {
-  mask: url("chrome://devtools/skin/images/debugger/react.svg") no-repeat;
+  mask: url("../images/react.svg") no-repeat;
 }
 
 img.typescript {
-  mask: url("chrome://devtools/skin/images/debugger/typescript.svg") no-repeat;
+  mask: url("../images/typescript.svg") no-repeat;
 }
 
 img.extension {
-  mask: url("chrome://devtools/skin/images/debugger/extension.svg") no-repeat;
+  mask: url("../images/extension.svg") no-repeat;
 }
 
 img.file {
-  mask: url("chrome://devtools/skin/images/debugger/file.svg") no-repeat;
+  mask: url("../images/file.svg") no-repeat;
   width: 13px;
   height: 13px;
 }
 
 img.domain,
 img.folder,
 img.file,
 .sources-list img.source-icon,
@@ -1091,17 +1091,17 @@ img.result-item-icon {
 
 .refresh svg,
 .shortcut svg,
 .worker svg {
   margin-inline-end: 5px;
 }
 
 img.arrow {
-  mask: url("chrome://devtools/skin/images/debugger/arrow.svg");
+  mask: url("../images/arrow.svg");
   margin-inline-end: 5px;
   margin-top: 3px;
   width: 9px;
   height: 9px;
   padding-top: 9px;
   background: var(--disclosure-arrow);
   mask-size: 100%;
   display: inline-block;
@@ -1239,17 +1239,17 @@ html[dir="rtl"] .managed-tree .tree .nod
   display: flex;
   flex-direction: row;
   justify-content: center;
   align-items: center;
   padding: 0;
 }
 
 .close-btn .close {
-  mask: url("chrome://devtools/skin/images/debugger/close.svg") no-repeat;
+  mask: url("../images/close.svg") no-repeat;
   mask-size: 100%;
   background-color: var(--theme-comment);
   width: 8px;
   height: 8px;
   transition: all 0.15s ease-in-out;
   padding: 0;
   margin-top: 0;
 }
@@ -1857,17 +1857,17 @@ html .toggle-button.end.vertical svg {
 }
 
 .source-outline-panel {
   flex: 1;
   overflow: auto;
 }
 
 .sources-list .managed-tree .tree .node img.blackBox {
-  mask: url("chrome://devtools/skin/images/debugger/blackBox.svg") no-repeat;
+  mask: url("../images/blackBox.svg") no-repeat;
   mask-size: 100%;
   background-color: var(--theme-highlight-blue);
   width: 13px;
   height: 13px;
   display: inline-block;
   margin-inline-end: 6px;
   margin-inline-start: 1px;
   margin-top: 2px;
@@ -2177,34 +2177,34 @@ menuseparator {
 
 .source-icon,
 .source-icon svg {
   width: 15px;
   height: 15px;
 }
 
 .source-icon.prettyPrint {
-  mask: url("chrome://devtools/skin/images/debugger/prettyPrint.svg") no-repeat;
+  mask: url("../images/prettyPrint.svg") no-repeat;
   mask-size: 100%;
   background: var(--theme-highlight-blue);
   fill: var(--theme-textbox-box-shadow);
 }
 
 .source-icon.vue {
-  background: url("chrome://devtools/skin/images/debugger/vuejs.svg") 1px 1px no-repeat;
+  background: url("../images/vuejs.svg") 1px 1px no-repeat;
   background-size: 15px;
 }
 
 .source-icon.angular {
-  background: url("chrome://devtools/skin/images/debugger/angular.svg") 1px 1px no-repeat;
+  background: url("../images/angular.svg") 1px 1px no-repeat;
   background-size: 13px 13px;
 }
 
 .source-icon.blackBox {
-  mask: url("chrome://devtools/skin/images/debugger/blackBox.svg") no-repeat;
+  mask: url("../images/blackBox.svg") no-repeat;
   mask-size: 100%;
   background: var(--theme-highlight-blue);
 }
 
 .source-icon.react {
   mask-size: 100%;
   background: var(--theme-highlight-bluegrey);
 }
@@ -2269,24 +2269,24 @@ menuseparator {
 
 .source-footer > .commands > div.loader {
   vertical-align: top;
   width: 20px;
   margin: 0 4px;
 }
 
 .source-footer > .commands > .action > img.prettyPrint {
-  mask: url("chrome://devtools/skin/images/debugger/prettyPrint.svg") no-repeat;
+  mask: url("../images/prettyPrint.svg") no-repeat;
   height: 16px;
   width: 16px;
   background: var(--theme-body-color);
 }
 
 .source-footer > .commands > .action > img.blackBox {
-  mask: url("chrome://devtools/skin/images/debugger/blackBox.svg") no-repeat;
+  mask: url("../images/blackBox.svg") no-repeat;
   height: 16px;
   width: 16px;
   background: var(--theme-body-color);
 }
 
 .source-footer .commands .coverage {
   color: var(--theme-body-color);
 }
@@ -2677,34 +2677,34 @@ menuseparator {
 .call-site {
   position: relative;
   border-bottom: 2px solid lightgrey;
   cursor: pointer;
 }
 
 .call-site::before {
   content: "";
-  mask: url("chrome://devtools/skin/images/debugger/column-marker.svg") no-repeat 100% 100%;
+  mask: url("../images/column-marker.svg") no-repeat 100% 100%;
   mask-size: contain;
   display: inline-block;
   background-color: var(--blue-55);
   opacity: 0.5;
   width: 9px;
   height: 12px;
 }
 
 .call-site-bp {
   position: relative;
   border-bottom: 2px solid #aed3ef;
   cursor: pointer;
 }
 
 .call-site-bp::before {
   content: "";
-  mask: url("chrome://devtools/skin/images/debugger/column-marker.svg") no-repeat 100% 100%;
+  mask: url("../images/column-marker.svg") no-repeat 100% 100%;
   mask-size: contain;
   display: inline-block;
   background-color: var(--blue-55);
   width: 9px;
   height: 12px;
 }
 
 .theme-dark .call-site {
@@ -2840,17 +2840,17 @@ html[dir="rtl"] .editor-mount {
   > .CodeMirror-gutter-wrapper:hover
   > .CodeMirror-linenumber::after {
   content: "";
   position: absolute;
   top: 1px;
   height: 12px;
   width: 9px;
   background-color: var(--gutter-hover-background-color);
-  mask: url("chrome://devtools/skin/images/debugger/breakpoint.svg") no-repeat;
+  mask: url("../images/breakpoint.svg") no-repeat;
   mask-size: auto 12px;
   mask-position: right;
 }
 
 .editor-wrapper .breakpoints {
   position: absolute;
   top: 0;
   left: 0;
@@ -3814,61 +3814,61 @@ img.replay-previous,
 img.replay-next,
 img.resume,
 img.shortcuts,
 img.skipPausing {
   background-color: var(--theme-body-color);
 }
 
 .command-bar img.pause {
-  mask: url("chrome://devtools/skin/images/debugger/pause.svg") no-repeat;
+  mask: url("../images/pause.svg") no-repeat;
 }
 
 .command-bar img.stepOver {
-  mask: url("chrome://devtools/skin/images/debugger/stepOver.svg") no-repeat;
+  mask: url("../images/stepOver.svg") no-repeat;
 }
 
 .command-bar img.stepIn {
-  mask: url("chrome://devtools/skin/images/debugger/stepIn.svg") no-repeat;
+  mask: url("../images/stepIn.svg") no-repeat;
 }
 
 .command-bar img.stepOut {
-  mask: url("chrome://devtools/skin/images/debugger/stepOut.svg") no-repeat;
+  mask: url("../images/stepOut.svg") no-repeat;
 }
 
 .command-bar img.resume {
-  mask: url("chrome://devtools/skin/images/debugger/resume.svg") no-repeat;
+  mask: url("../images/resume.svg") no-repeat;
 }
 
 .command-bar img.rewind {
-  mask: url("chrome://devtools/skin/images/debugger/resume.svg") no-repeat;
+  mask: url("../images/resume.svg") no-repeat;
   transform: scaleX(-1);
 }
 
 .command-bar img.reverseStepOver {
-  mask: url("chrome://devtools/skin/images/debugger/stepOver.svg") no-repeat;
+  mask: url("../images/stepOver.svg") no-repeat;
   transform: scaleX(-1);
 }
 
 .command-bar img.reverseStepIn {
-  mask: url("chrome://devtools/skin/images/debugger/stepIn.svg") no-repeat;
+  mask: url("../images/stepIn.svg") no-repeat;
   transform: scaleX(-1);
 }
 
 .command-bar img.reverseStepOut {
-  mask: url("chrome://devtools/skin/images/debugger/stepOut.svg") no-repeat;
+  mask: url("../images/stepOut.svg") no-repeat;
   transform: scaleX(-1);
 }
 
 .command-bar .filler {
   flex-grow: 1;
 }
 
 .command-bar img.shortcuts {
-  mask: url("chrome://devtools/skin/images/help.svg") no-repeat;
+  mask: url("../images/help.svg") no-repeat;
   mask-size: contain;
 }
 
 .command-bar .replay-inactive {
   opacity: 0.5;
 }
 
 .command-bar .step-position {
@@ -3881,17 +3881,17 @@ img.skipPausing {
   color: var(--theme-highlight-blue);
 }
 
 .command-bar .subSettings {
   float: right;
 }
 
 .command-bar .skipPausing {
-  mask: url("chrome://devtools/skin/images/debugger/disable-pausing.svg") no-repeat;
+  mask: url("../images/disable-pausing.svg") no-repeat;
   mask-size: 100%;
 }
 
 .command-bar .active .skipPausing {
   background-color: var(--theme-highlight-blue);
 }
 
 .bottom {
@@ -4311,34 +4311,34 @@ html .welcomebox .toggle-button-end.coll
   align-self: center;
 }
 
 .source-tab .prettyPrint path {
   fill: var(--theme-textbox-box-shadow);
 }
 
 .source-tab img.react {
-  mask: url("chrome://devtools/skin/images/debugger/react.svg") no-repeat;
+  mask: url("../images/react.svg") no-repeat;
   mask-size: 100%;
   height: 14px;
   width: 14px;
   background: var(--theme-highlight-bluegrey);
   top: 0;
 }
 
 .source-tab .blackBox path {
   fill: var(--theme-textbox-box-shadow);
 }
 
 .theme-dark .source-tab .blackBox circle {
   fill: var(--theme-body-color);
 }
 
 img.moreTabs {
-  mask: url("chrome://devtools/skin/images/command-chevron.svg") no-repeat;
+  mask: url("../images/command-chevron.svg") no-repeat;
   mask-size: 100%;
   width: 12px;
   height: 12px;
   display: block;
   background: var(--theme-body-color);
   margin-left: 6px;
 }
 
@@ -4456,29 +4456,29 @@ html[dir="rtl"] .dropdown {
   width: var(--icon-size);
   height: var(--icon-size);
   margin-right: 5px;
   vertical-align: middle;
   display: inline-block;
 }
 
 .dropdown-icon.prettyPrint {
-  mask: url("chrome://devtools/skin/images/debugger/prettyPrint.svg") no-repeat;
+  mask: url("../images/prettyPrint.svg") no-repeat;
   mask-size: 100%;
   background: var(--theme-highlight-blue);
 }
 
 .dropdown-icon.blackBox {
-  mask: url("chrome://devtools/skin/images/debugger/blackBox.svg") no-repeat;
+  mask: url("../images/blackBox.svg") no-repeat;
   mask-size: 100%;
   background: var(--theme-highlight-blue);
 }
 
 .dropdown-icon.file {
-  mask: url("chrome://devtools/skin/images/debugger/file.svg") no-repeat;
+  mask: url("../images/file.svg") no-repeat;
   mask-size: 100%;
   margin-bottom: 7px;
 }
 
 .dropdown ul {
   list-style: none;
   line-height: 2em;
   font-size: 1em;
rename from devtools/client/themes/images/debugger/angular.svg
rename to devtools/client/debugger/new/images/angular.svg
rename from devtools/client/themes/images/debugger/arrow.svg
rename to devtools/client/debugger/new/images/arrow.svg
rename from devtools/client/themes/images/debugger/blackBox.svg
rename to devtools/client/debugger/new/images/blackBox.svg
rename from devtools/client/themes/images/debugger/breakpoint.svg
rename to devtools/client/debugger/new/images/breakpoint.svg
rename from devtools/client/themes/images/debugger/close.svg
rename to devtools/client/debugger/new/images/close.svg
rename from devtools/client/themes/images/debugger/coffeescript.svg
rename to devtools/client/debugger/new/images/coffeescript.svg
rename from devtools/client/themes/images/debugger/column-marker.svg
rename to devtools/client/debugger/new/images/column-marker.svg
new file mode 100644
--- /dev/null
+++ b/devtools/client/debugger/new/images/command-chevron.svg
@@ -0,0 +1,6 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 16 16" v="2">
+  <path fill="context-fill" d="M8.707 7.293l-5-5a1 1 0 0 0-1.414 1.414L6.586 8l-4.293 4.293a1 1 0 1 0 1.414 1.414l5-5a1 1 0 0 0 0-1.414zm6 0l-5-5a1 1 0 0 0-1.414 1.414L12.586 8l-4.293 4.293a1 1 0 1 0 1.414 1.414l5-5a1 1 0 0 0 0-1.414z"></path>
+</svg>
rename from devtools/client/themes/images/debugger/disable-pausing.svg
rename to devtools/client/debugger/new/images/disable-pausing.svg
rename from devtools/client/themes/images/debugger/domain.svg
rename to devtools/client/debugger/new/images/domain.svg
rename from devtools/client/themes/images/debugger/extension.svg
rename to devtools/client/debugger/new/images/extension.svg
rename from devtools/client/themes/images/debugger/file.svg
rename to devtools/client/debugger/new/images/file.svg
rename from devtools/client/themes/images/debugger/folder.svg
rename to devtools/client/debugger/new/images/folder.svg
new file mode 100644
--- /dev/null
+++ b/devtools/client/debugger/new/images/help.svg
@@ -0,0 +1,7 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" v="2">
+  <path fill="context-fill" d="M13.15 17a1.15 1.15 0 1 1-2.3 0 1.15 1.15 0 0 1 2.3 0zM10.5 9.5c0-.764.616-1.5 1.5-1.5s1.5.736 1.5 1.5c0 .311-.144.635-.408.974-.199.254-.386.43-.57.6-.077.072-.153.143-.23.219a1.676 1.676 0 0 1-.048.045c-.13.117-.466.42-.698.757C11.22 12.569 11 13.18 11 14a1 1 0 1 0 2 0c0-.431.106-.645.194-.772.051-.074.114-.144.197-.225.04-.039.08-.075.129-.12l.003-.002.009-.008c.05-.045.114-.104.175-.166l.086-.08a8.13 8.13 0 0 0 .876-.924c.4-.512.831-1.264.831-2.203C15.5 7.764 14.116 6 12 6S8.5 7.764 8.5 9.5a1 1 0 1 0 2 0z"></path>
+  <path fill="context-fill" fill-rule="evenodd" clip-rule="evenodd" d="M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10zm0-2a8 8 0 1 0 0-16 8 8 0 0 0 0 16z"></path>
+</svg>
rename from devtools/client/themes/images/debugger/javascript.svg
rename to devtools/client/debugger/new/images/javascript.svg
new file mode 100644
--- /dev/null
+++ b/devtools/client/debugger/new/images/moz.build
@@ -0,0 +1,34 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+DevToolsModules(
+	'angular.svg',
+    'arrow.svg',
+    'blackBox.svg',
+    'breakpoint.svg',
+    'close.svg',
+    'coffeescript.svg',
+    'column-marker.svg',
+    'command-chevron.svg',
+    'disable-pausing.svg',
+    'domain.svg',
+    'extension.svg',
+    'file.svg',
+    'folder.svg',
+    'help.svg',
+    'javascript.svg',
+    'pause.svg',
+    'prettyPrint.svg',
+    'react.svg',
+    'resume.svg',
+    'stepIn.svg',
+    'stepOut.svg',
+    'stepOver.svg',
+    'tab.svg',
+    'typescript.svg',
+    'vuejs.svg',
+
+)
\ No newline at end of file
rename from devtools/client/themes/images/debugger/pause.svg
rename to devtools/client/debugger/new/images/pause.svg
rename from devtools/client/themes/images/debugger/prettyPrint.svg
rename to devtools/client/debugger/new/images/prettyPrint.svg
rename from devtools/client/themes/images/debugger/react.svg
rename to devtools/client/debugger/new/images/react.svg
rename from devtools/client/themes/images/debugger/resume.svg
rename to devtools/client/debugger/new/images/resume.svg
rename from devtools/client/themes/images/debugger/stepIn.svg
rename to devtools/client/debugger/new/images/stepIn.svg
rename from devtools/client/themes/images/debugger/stepOut.svg
rename to devtools/client/debugger/new/images/stepOut.svg
rename from devtools/client/themes/images/debugger/stepOver.svg
rename to devtools/client/debugger/new/images/stepOver.svg
rename from devtools/client/themes/images/debugger/tab.svg
rename to devtools/client/debugger/new/images/tab.svg
rename from devtools/client/themes/images/debugger/typescript.svg
rename to devtools/client/debugger/new/images/typescript.svg
rename from devtools/client/themes/images/debugger/vuejs.svg
rename to devtools/client/debugger/new/images/vuejs.svg
--- a/devtools/client/debugger/new/moz.build
+++ b/devtools/client/debugger/new/moz.build
@@ -1,15 +1,16 @@
 # vim: set filetype=python:
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 DIRS += [
   'dist',
+  'images',
   'src',
 ]
 
 include('node-templates.mozbuild')
 
 DevToolsModules(
     'panel.js',
 )
--- a/devtools/client/inspector/fonts/test/browser.ini
+++ b/devtools/client/inspector/fonts/test/browser.ini
@@ -20,13 +20,14 @@ support-files =
 skip-if = !e10s # too slow on !e10s, logging fully serialized actors (Bug 1446595)
 subsuite = clipboard
 [browser_fontinspector_all-fonts.js]
 [browser_fontinspector_edit-previews.js]
 [browser_fontinspector_editor-font-size-conversion.js]
 [browser_fontinspector_editor-values.js]
 [browser_fontinspector_editor-keywords.js]
 [browser_fontinspector_expand-css-code.js]
+[browser_fontinspector_input-element-used-font.js]
 [browser_fontinspector_no-fonts.js]
 [browser_fontinspector_other-fonts.js]
 [browser_fontinspector_reveal-in-page.js]
 [browser_fontinspector_text-node.js]
 [browser_fontinspector_theme-change.js]
new file mode 100644
--- /dev/null
+++ b/devtools/client/inspector/fonts/test/browser_fontinspector_input-element-used-font.js
@@ -0,0 +1,26 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+"use strict";
+
+const TEST_URI = URL_ROOT + "doc_browser_fontinspector.html";
+
+// Verify that a styled input field element is showing proper font information
+// in its font tab.
+// Non-regression test for https://bugzilla.mozilla.org/show_bug.cgi?id=1435469
+add_task(async function() {
+  await pushPref("devtools.inspector.fonteditor.enabled", true);
+
+  const { inspector, view } = await openFontInspectorForURL(TEST_URI);
+  const viewDoc = view.document;
+
+  const onInspectorUpdated = inspector.once("fontinspector-updated");
+  await selectNode(".input-field", inspector);
+
+  info("Waiting for font editor to render");
+  await onInspectorUpdated;
+
+  const fontEls = getUsedFontsEls(viewDoc);
+  ok(fontEls.length == 1, `Used fonts found for styled input element`);
+  ok(fontEls[0].textContent == "Ostrich Sans Medium",
+    `Proper font found: 'Ostrich Sans Medium' for styled input.`);
+});
--- a/devtools/client/inspector/fonts/test/doc_browser_fontinspector.html
+++ b/devtools/client/inspector/fonts/test/doc_browser_fontinspector.html
@@ -40,22 +40,28 @@
   }
   .black-text {
     font-family: bar;
     font-weight: 800;
   }
   .viewport-size {
     font-size: 10vw;
   }
+  .input-field {
+    font-family: bar;
+    font-size: 36px;
+    color: blue;
+  }
 </style>
 
 <body>
   BODY
   <div>DIV
     <span class="nested-span">NESTED SPAN</span>
   </div>
   <iframe src="test_iframe.html"></iframe>
   <div class="normal-text">NORMAL DIV</div>
   <div class="bold-text">BOLD DIV</div>
   <div class="black-text">800 DIV</div>
   <div class="empty"></div>
   <div class="viewport-size">VIEWPORT SIZE</div>
+  <input class="input-field" value="Input text value"/>
 </body>
--- a/devtools/client/inspector/rules/test/browser_rules_highlight-used-fonts.js
+++ b/devtools/client/inspector/rules/test/browser_rules_highlight-used-fonts.js
@@ -27,63 +27,81 @@ const TEST_URI = `
       font-family: georgia, arial;
     }
     #id7 {
       font-family: foo, serif !important;
     }
     #id8 {
       font-family: important;
     }
+    #id9::before {
+      content: ' ';
+      font-family: foo, monospace;
+    }
   </style>
   <div id="id1">Text</div>
   <div id="id2">Text</div>
   <div id="id3">Text</div>
   <div id="id4">Text</div>
   <div id="id5">Text</div>
   <div id="id6">A &#586;</div>
   <div id="id7">Text</div>
   <div id="id8">Text</div>
+  <div id="id9">Text</div>
 `;
 
 // Tests that font-family properties in the rule-view correctly
 // indicates which font is in use.
 // Each entry in the test array should contain:
 // {
-//   selector: the rule-view selector to look for font-family in
+//   baseSelector: the rule-view selector to look for font-family in
 //   nb: the number of fonts this property should have
 //   used: the indexes of all the fonts that should be highlighted, or null if none should
 //         be highlighted
+//   selectBeforePseudoElement: Whether the before pseudo element should be selectd or not
 // }
 const TESTS = [
-  {selector: "#id1", nb: 3, used: [2]}, // sans-serif
-  {selector: "#id2", nb: 1, used: [0]}, // serif
-  {selector: "#id3", nb: 4, used: [1]}, // monospace
-  {selector: "#id4", nb: 2, used: null},
-  {selector: "#id5", nb: 1, used: [0]}, // monospace
-  {selector: "#id7", nb: 2, used: [1]}, // serif
-  {selector: "#id8", nb: 1, used: null},
+  {baseSelector: "#id1", nb: 3, used: [2]}, // sans-serif
+  {baseSelector: "#id2", nb: 1, used: [0]}, // serif
+  {baseSelector: "#id3", nb: 4, used: [1]}, // monospace
+  {baseSelector: "#id4", nb: 2, used: null},
+  {baseSelector: "#id5", nb: 1, used: [0]}, // monospace
+  {baseSelector: "#id7", nb: 2, used: [1]}, // serif
+  {baseSelector: "#id8", nb: 1, used: null},
+  {baseSelector: "#id9", nb: 2, used: [1], selectBeforePseudoElement: true}, // monospace
 ];
 
 if (Services.appinfo.OS !== "Linux") {
   // Both georgia and arial are used because the second character can't be rendered with
   // georgia, so the browser falls back. Also, skip this on Linux which has neither of
   // these fonts.
-  TESTS.push({selector: "#id6", nb: 2, used: [0, 1]});
+  TESTS.push({baseSelector: "#id6", nb: 2, used: [0, 1]});
 }
 
 add_task(async function() {
   await addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI));
   const {inspector, view} = await openRuleView();
 
-  for (const {selector, nb, used} of TESTS) {
+  for (const {baseSelector, nb, used, selectBeforePseudoElement} of TESTS) {
     const onFontHighlighted = view.once("font-highlighted");
-    await selectNode(selector, inspector);
+
+    if (selectBeforePseudoElement) {
+      // Query the first children node to get the before pseudo element:
+      const baseNode = await getNodeFront(baseSelector, inspector);
+      const pseudoElement =
+          (await inspector.walker.children(baseNode)).nodes[0];
+      await selectNode(pseudoElement, inspector);
+    } else {
+      await selectNode(baseSelector, inspector);
+    }
     await onFontHighlighted;
 
-    info("Looking for fonts in font-family property in selector " + selector);
+    const selector =
+       !selectBeforePseudoElement ? baseSelector : `${baseSelector}::before`;
+    info(`Looking for fonts in font-family property for: <${selector}>`);
 
     const prop = getRuleViewProperty(view, selector, "font-family").valueSpan;
     const fonts = prop.querySelectorAll(".ruleview-font-family");
 
     ok(fonts.length, "Fonts found in the property");
     is(fonts.length, nb, "Correct number of fonts found in the property");
 
     const highlighted = [...fonts].filter(span => span.classList.contains("used-font"));
--- a/devtools/client/jar.mn
+++ b/devtools/client/jar.mn
@@ -173,17 +173,16 @@ devtools.jar:
     skin/images/rewind.svg (themes/images/rewind.svg)
     skin/images/debugger-step-in.svg (themes/images/debugger-step-in.svg)
     skin/images/debugger-step-out.svg (themes/images/debugger-step-out.svg)
     skin/images/debugger-step-over.svg (themes/images/debugger-step-over.svg)
     skin/images/dock-bottom.svg (themes/images/dock-bottom.svg)
     skin/images/dock-side-left.svg (themes/images/dock-side-left.svg)
     skin/images/dock-side-right.svg (themes/images/dock-side-right.svg)
     skin/images/dock-undock.svg (themes/images/dock-undock.svg)
-    skin/images/jump-definition.svg (themes/images/jump-definition.svg)
     skin/floating-scrollbars-responsive-design.css (themes/floating-scrollbars-responsive-design.css)
     skin/inspector.css (themes/inspector.css)
     skin/images/profiler-stopwatch.svg (themes/images/profiler-stopwatch.svg)
     skin/images/debugging-addons.svg (themes/images/debugging-addons.svg)
     skin/images/debugging-tabs.svg (themes/images/debugging-tabs.svg)
     skin/images/debugging-workers.svg (themes/images/debugging-workers.svg)
     skin/images/datastore.svg (themes/images/datastore.svg)
     skin/images/globe.svg (themes/images/globe.svg)
@@ -243,41 +242,16 @@ devtools.jar:
     skin/images/pane-expand.svg (themes/images/pane-expand.svg)
     skin/images/help.svg (themes/images/help.svg)
     skin/images/read-only.svg (themes/images/read-only.svg)
     skin/images/reveal.svg (themes/images/reveal.svg)
     skin/images/select-arrow.svg (themes/images/select-arrow.svg)
     skin/images/settings.svg (themes/images/settings.svg)
     skin/images/lock.svg (themes/images/lock.svg)
 
-    # Debugger
-    skin/images/debugger/angular.svg (themes/images/debugger/angular.svg)
-    skin/images/debugger/arrow.svg (themes/images/debugger/arrow.svg)
-    skin/images/debugger/blackBox.svg (themes/images/debugger/blackBox.svg)
-    skin/images/debugger/breakpoint.svg (themes/images/debugger/breakpoint.svg)
-    skin/images/debugger/close.svg (themes/images/debugger/close.svg)
-    skin/images/debugger/coffeescript.svg (themes/images/debugger/coffeescript.svg)
-    skin/images/debugger/column-marker.svg (themes/images/debugger/column-marker.svg)
-    skin/images/debugger/disable-pausing.svg (themes/images/debugger/disable-pausing.svg)
-    skin/images/debugger/domain.svg (themes/images/debugger/domain.svg)
-    skin/images/debugger/extension.svg (themes/images/debugger/extension.svg)
-    skin/images/debugger/file.svg (themes/images/debugger/file.svg)
-    skin/images/debugger/folder.svg (themes/images/debugger/folder.svg)
-    skin/images/debugger/javascript.svg (themes/images/debugger/javascript.svg)
-    skin/images/debugger/pause.svg (themes/images/debugger/pause.svg)
-    skin/images/debugger/prettyPrint.svg (themes/images/debugger/prettyPrint.svg)
-    skin/images/debugger/react.svg (themes/images/debugger/react.svg)
-    skin/images/debugger/resume.svg (themes/images/debugger/resume.svg)
-    skin/images/debugger/stepIn.svg (themes/images/debugger/stepIn.svg)
-    skin/images/debugger/stepOut.svg (themes/images/debugger/stepOut.svg)
-    skin/images/debugger/stepOver.svg (themes/images/debugger/stepOver.svg)
-    skin/images/debugger/tab.svg (themes/images/debugger/tab.svg)
-    skin/images/debugger/typescript.svg (themes/images/debugger/typescript.svg)
-    skin/images/debugger/vuejs.svg (themes/images/debugger/vuejs.svg)
-
     # Netmonitor
     content/netmonitor/src/assets/styles/httpi.css (netmonitor/src/assets/styles/httpi.css)
     content/netmonitor/src/assets/styles/netmonitor.css (netmonitor/src/assets/styles/netmonitor.css)
     content/netmonitor/src/assets/styles/NetworkDetailsPanel.css (netmonitor/src/assets/styles/NetworkDetailsPanel.css)
     content/netmonitor/src/assets/styles/CustomRequestPanel.css (netmonitor/src/assets/styles/CustomRequestPanel.css)
     content/netmonitor/src/assets/styles/RequestList.css (netmonitor/src/assets/styles/RequestList.css)
     content/netmonitor/src/assets/styles/StatisticsPanel.css (netmonitor/src/assets/styles/StatisticsPanel.css)
     content/netmonitor/src/assets/styles/StatusBar.css (netmonitor/src/assets/styles/StatusBar.css)
@@ -288,13 +262,9 @@ devtools.jar:
     content/netmonitor/index.html (netmonitor/index.html)
     content/netmonitor/src/assets/styles/StatusCode.css (netmonitor/src/assets/styles/StatusCode.css)
 
     # Application panel
     content/application/index.html (application/index.html)
 
     # Devtools-components
     skin/images/devtools-components/arrow.svg (themes/images/devtools-components/arrow.svg)
-    skin/images/devtools-components/checkbox.svg (themes/images/devtools-components/checkbox.svg)
-
-    # Devtools-reps
-    skin/images/devtools-reps/jump-definition.svg (themes/images/devtools-reps/jump-definition.svg)
-    skin/images/devtools-reps/open-inspector.svg (themes/images/devtools-reps/open-inspector.svg)
+    skin/images/devtools-components/checkbox.svg (themes/images/devtools-components/checkbox.svg)
\ No newline at end of file
--- a/devtools/client/scratchpad/index.xul
+++ b/devtools/client/scratchpad/index.xul
@@ -406,23 +406,23 @@
     <menuitem id="sp-text-reloadAndRun"
               label="&reloadAndRun.label;"
               key="sp-key-reloadAndRun"
               accesskey="&reloadAndRun.accesskey;"
               command="sp-cmd-reloadAndRun"/>
   </menupopup>
 </popupset>
 
-<notificationbox id="scratchpad-notificationbox" flex="1">
+<vbox id="scratchpad-container" flex="1">
   <hbox flex="1">
     <vbox id="scratchpad-editor" flex="1"/>
     <splitter class="devtools-side-splitter"/>
     <tabbox id="scratchpad-sidebar" class="devtools-sidebar-tabs"
                                     width="300"
                                     hidden="true">
       <tabs/>
       <tabpanels flex="1"/>
     </tabbox>
   </hbox>
   <toolbar id="statusbar-line-col" class="devtools-toolbar"/>
-</notificationbox>
+</vbox>
 
 </window>
--- a/devtools/client/scratchpad/scratchpad.js
+++ b/devtools/client/scratchpad/scratchpad.js
@@ -325,24 +325,16 @@ var Scratchpad = {
     this._dirty = aValue;
     if (!aValue && this.editor) {
       this.editor.setClean();
     }
     this._updateTitle();
   },
 
   /**
-   * Retrieve the xul:notificationbox DOM element. It notifies the user when
-   * the current code execution context is SCRATCHPAD_CONTEXT_BROWSER.
-   */
-  get notificationBox() {
-    return document.getElementById("scratchpad-notificationbox");
-  },
-
-  /**
    * Hide the menu bar.
    */
   hideMenu: function SP_hideMenu() {
     document.getElementById("sp-menu-toolbar").style.display = "none";
   },
 
   /**
    * Show the menu bar.
@@ -1566,16 +1558,20 @@ var Scratchpad = {
    *
    * @param Event aEvent
    */
   onLoad: function SP_onLoad(aEvent) {
     if (aEvent.target != document) {
       return;
     }
 
+    this.notificationBox = new window.MozElements.NotificationBox(element => {
+      document.getElementById("scratchpad-container").prepend(element);
+    });
+
     const chrome = Services.prefs.getBoolPref(DEVTOOLS_CHROME_ENABLED);
     if (chrome) {
       const environmentMenu = document.getElementById("sp-environment-menu");
       const errorConsoleCommand = document.getElementById("sp-cmd-errorConsole");
       const chromeContextCommand = document.getElementById("sp-cmd-browserContext");
       environmentMenu.removeAttribute("hidden");
       chromeContextCommand.removeAttribute("disabled");
       errorConsoleCommand.removeAttribute("disabled");
@@ -1626,17 +1622,17 @@ var Scratchpad = {
 
       this.editor.on("change", this._onChanged);
       // Keep a reference to the bound version for use in onUnload.
       this.updateStatusBar = Scratchpad.updateStatusBar.bind(this);
       this.editor.on("cursorActivity", this.updateStatusBar);
       const okstring = this.strings.GetStringFromName("selfxss.okstring");
       const msg = this.strings.formatStringFromName("selfxss.msg", [okstring], 1);
       this._onPaste = WebConsoleUtils.pasteHandlerGen(this.editor.container.contentDocument.body,
-                                                      document.querySelector("#scratchpad-notificationbox"),
+                                                      this.notificationBox,
                                                       msg, okstring);
       editorElement.addEventListener("paste", this._onPaste, true);
       editorElement.addEventListener("drop", this._onPaste);
       this.editor.on("saveRequested", () => this.saveFile());
       this.editor.focus();
       this.editor.setCursor({ line: lines.length, ch: lines.pop().length });
 
       // Add the commands controller for the source-editor.
--- a/devtools/client/scratchpad/test/browser_scratchpad_edit_ui_updates.js
+++ b/devtools/client/scratchpad/test/browser_scratchpad_edit_ui_updates.js
@@ -56,17 +56,17 @@ function runTests() {
   let isContextMenu = false;
 
   const oldVal = sp.editor.getText();
 
   const testSelfXss = function(oldVal) {
     // Self xss prevention tests (bug 994134)
     info("Self xss paste tests");
     is(WebConsoleUtils.usageCount, 0, "Test for usage count getter");
-    const notificationbox = doc.getElementById("scratchpad-notificationbox");
+    const notificationbox = sp.notificationBox;
     const notification = notificationbox.getNotificationWithValue("selfxss-notification");
     ok(notification, "Self-xss notification shown");
     is(oldVal, sp.editor.getText(), "Paste blocked by self-xss prevention");
     Services.prefs.setIntPref("devtools.selfxss.count", 10);
     notificationbox.removeAllNotifications(true);
     openMenu(10, 10, firstShow);
   };
 
--- a/devtools/client/scratchpad/test/browser_scratchpad_open.js
+++ b/devtools/client/scratchpad/test/browser_scratchpad_open.js
@@ -73,18 +73,18 @@ function testOpenInvalidState() {
 function testOpenTestFile() {
   openScratchpad(function(win) {
     ok(win, "scratchpad opened for file open");
     try {
       win.Scratchpad.importFromFile(
         "http://example.com/browser/devtools/client/scratchpad/test/NS_ERROR_ILLEGAL_INPUT.txt",
         "silent",
         function(aStatus, content) {
-          const nb = win.document.querySelector("#scratchpad-notificationbox");
-          is(nb.querySelectorAll("notification").length, 1, "There is just one notification");
+          const nb = win.Scratchpad.notificationBox;
+          is(nb.allNotifications.length, 1, "There is just one notification");
           const cn = nb.currentNotification;
           is(cn.priority, nb.PRIORITY_WARNING_HIGH, "notification priority is correct");
           is(cn.value, "file-import-convert-failed", "notification value is corrent");
           is(cn.type, "warning", "notification type is correct");
           done();
         });
       ok(true, "importFromFile does not cause exception");
     } catch (exception) {
new file mode 100644
--- /dev/null
+++ b/devtools/client/shared/components/reps/images/jump-definition.svg
@@ -0,0 +1,8 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" stroke="#000" fill="none" stroke-linecap="round">
+  <path d="M5.5 3.5l2 2M5.5 7.5l2-2"/>
+  <path d="M7 5.5H4.006c-1.012 0-1.995 1.017-2.011 2.024-.005.023-.005 1.347 0 3.971" stroke-linejoin="round"/>
+  <path d="M10.5 5.5h4M9.5 3.5h5M9.5 7.5h5"/>
+</svg>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/devtools/client/shared/components/reps/images/moz.build
@@ -0,0 +1,10 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+DevToolsModules(
+    'jump-definition.svg',
+    'open-inspector.svg',
+)
rename from devtools/client/themes/images/devtools-reps/open-inspector.svg
rename to devtools/client/shared/components/reps/images/open-inspector.svg
--- a/devtools/client/shared/components/reps/moz.build
+++ b/devtools/client/shared/components/reps/moz.build
@@ -1,11 +1,15 @@
 # -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
 # vim: set filetype=python:
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
+DIRS += [
+	'images',
+]
+
 DevToolsModules(
     'reps-old.js',
     'reps.css',
     'reps.js',
 )
--- a/devtools/client/shared/components/reps/reps.css
+++ b/devtools/client/shared/components/reps/reps.css
@@ -238,17 +238,17 @@
   font-weight: normal;
 }
 
 /******************************************************************************/
 /* Open DOMNode in inspector or Accessible in accessibility inspector button */
 
 button.open-accessibility-inspector,
 button.open-inspector {
-  mask: url("chrome://devtools/skin/images/devtools-reps/open-inspector.svg") no-repeat;
+  mask: url("./images/open-inspector.svg") no-repeat;
   display: inline-block;
   background-color: var(--comment-node-color);
   height: 16px;
   margin-left: 0.25em;
   vertical-align: middle;
   cursor: pointer;
 }
 
@@ -259,17 +259,17 @@ button.open-inspector {
 .open-inspector:hover {
   background-color: var(--theme-highlight-blue);
 }
 
 /******************************************************************************/
 /* Jump to definition button */
 
 button.jump-definition {
-  mask: url("chrome://devtools/skin/images/devtools-reps/jump-definition.svg") no-repeat;
+  mask: url("./images/jump-definition.svg") no-repeat;
   display: inline-block;
   background-color: var(--comment-node-color);
   height: 16px;
   margin-left: 0.25em;
   vertical-align: middle;
 }
 
 .jump-definition:hover {
deleted file mode 100644
--- a/devtools/client/themes/images/jump-definition.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" stroke="context-stroke" fill="none" stroke-linecap="round">
-  <path d="M5.5 3.5l2 2M5.5 7.5l2-2"/>
-  <path d="M7 5.5H4.006c-1.012 0-1.995 1.017-2.011 2.024-.005.023-.005 1.347 0 3.971" stroke-linejoin="round"/>
-  <path d="M10.5 5.5h4M9.5 3.5h5M9.5 7.5h5"/>
-</svg>
\ No newline at end of file
--- a/devtools/client/webide/content/webide.js
+++ b/devtools/client/webide/content/webide.js
@@ -58,16 +58,20 @@ window.addEventListener("unload", functi
 var UI = {
   init: function() {
     this._telemetry = new Telemetry();
 
     // webide is not connected with a toolbox so we pass -1 as the
     // toolbox session id.
     this._telemetry.toolOpened("webide", -1, this);
 
+    this.notificationBox = new window.MozElements.NotificationBox(element => {
+      document.getElementById("containerbox")
+              .insertAdjacentElement("afterbegin", element);
+    });
     AppManager.init();
 
     this.appManagerUpdate = this.appManagerUpdate.bind(this);
     AppManager.on("app-manager-update", this.appManagerUpdate);
 
     Cmds.showProjectPanel();
     Cmds.showRuntimePanel();
 
@@ -283,25 +287,24 @@ var UI = {
     const buttons = [{
       label: Strings.GetStringFromName("notification_showTroubleShooting_label"),
       accessKey: Strings.GetStringFromName("notification_showTroubleShooting_accesskey"),
       callback: function() {
         Cmds.showTroubleShooting();
       },
     }];
 
-    const nbox = document.querySelector("#notificationbox");
+    const nbox = this.notificationBox;
     nbox.removeAllNotifications(true);
     nbox.appendNotification(text, "webide:errornotification", null,
                             nbox.PRIORITY_WARNING_LOW, buttons);
   },
 
   dismissErrorNotification: function() {
-    const nbox = document.querySelector("#notificationbox");
-    nbox.removeAllNotifications(true);
+    this.notificationBox.removeAllNotifications(true);
   },
 
   /** ******** COMMANDS **********/
 
   /**
    * This module emits various events when state changes occur.
    *
    * The events this module may emit include:
@@ -814,17 +817,17 @@ var UI = {
 
     return this.busyUntil(this.toolboxPromise, "opening toolbox");
   },
 
   _showToolbox: function(target, iframe) {
     const splitter = document.querySelector(".devtools-horizontal-splitter");
     splitter.removeAttribute("hidden");
 
-    document.querySelector("notificationbox").insertBefore(iframe, splitter.nextSibling);
+    document.getElementById("containerbox").insertBefore(iframe, splitter.nextSibling);
     const host = Toolbox.HostType.CUSTOM;
     const options = { customIframe: iframe, zoom: false, uid: iframe.uid };
 
     document.querySelector("#action-button-debug").setAttribute("active", "true");
 
     return gDevTools.showToolbox(target, null, host, options);
   },
 };
--- a/devtools/client/webide/content/webide.xul
+++ b/devtools/client/webide/content/webide.xul
@@ -134,17 +134,17 @@
           <image class="panel-button-image"/>
           <label class="panel-button-label" value="&runtimeButton_label;"/>
         </toolbarbutton>
       </hbox>
 
     </vbox>
   </toolbar>
 
-  <notificationbox flex="1" id="notificationbox">
+  <vbox flex="1" id="containerbox">
     <div flex="1" id="deck-panels">
       <vbox id="project-listing-panel" class="project-listing panel-list" flex="1">
         <div id="project-listing-wrapper" class="panel-list-wrapper">
           <iframe id="project-listing-panel-details" flex="1" src="project-listing.xhtml" tooltip="aHTMLTooltip"/>
         </div>
       </vbox>
       <splitter class="devtools-side-splitter" id="project-listing-splitter"/>
       <deck flex="1" id="deck" selectedIndex="-1">
@@ -159,11 +159,11 @@
       <vbox id="runtime-listing-panel" class="runtime-listing panel-list" flex="1">
         <div id="runtime-listing-wrapper" class="panel-list-wrapper">
           <iframe id="runtime-listing-panel-details" flex="1" src="runtime-listing.xhtml" tooltip="aHTMLTooltip"/>
         </div>
       </vbox>
     </div>
     <splitter hidden="true" class="devtools-horizontal-splitter" orient="vertical"/>
     <!-- toolbox iframe will be inserted here -->
-  </notificationbox>
+  </vbox>
 
 </window>
--- a/devtools/client/webide/test/test_basic.html
+++ b/devtools/client/webide/test/test_basic.html
@@ -27,28 +27,28 @@
 
           ok(win, "Found a window");
           ok(win.AppManager, "App Manager accessible");
           const appmgr = win.AppManager;
           ok(appmgr.connection, "App Manager connection ready");
           ok(appmgr.runtimeList, "Runtime list ready");
 
             // test error reporting
-          const nbox = win.document.querySelector("#notificationbox");
-          let notification =  nbox.getNotificationWithValue("webide:errornotification");
+          const nbox = win.UI.notificationBox;
+          let notification = nbox.getNotificationWithValue("webide:errornotification");
           ok(!notification, "No notification yet");
           const deferred = new Promise((resolve, reject) => {
             nextTick().then(() => {
               reject("BOOM!");
             });
           });
           try {
             await win.UI.busyUntil(deferred, "xx");
           } catch (e) { /* This *will* fail */ }
-          notification =  nbox.getNotificationWithValue("webide:errornotification");
+          notification = nbox.getNotificationWithValue("webide:errornotification");
           ok(notification, "Error has been reported");
 
           await closeWebIDE(win);
 
           SimpleTest.finish();
         })();
       };
     </script>
--- a/devtools/client/webide/test/test_fullscreenToolbox.html
+++ b/devtools/client/webide/test/test_fullscreenToolbox.html
@@ -44,17 +44,17 @@
             docProject.querySelectorAll("#project-panel-runtimeapps .panel-item")[0].click();
           });
 
           await waitForUpdate(win, "project");
 
           ok(win.UI.toolboxPromise, "Toolbox promise exists");
           await win.UI.toolboxPromise;
 
-          const nbox = win.document.querySelector("#notificationbox");
+          const nbox = win.document.getElementById("containerbox");
           ok(!nbox.hasAttribute("toolboxfullscreen"), "Toolbox is not fullscreen");
 
           win.Cmds.showRuntimeDetails();
 
           ok(!nbox.hasAttribute("toolboxfullscreen"), "Toolbox is not fullscreen");
 
           await win.Cmds.disconnectRuntime();
 
--- a/devtools/server/actors/styles.js
+++ b/devtools/server/actors/styles.js
@@ -292,17 +292,23 @@ var PageStyleActor = protocol.ActorClass
    *   object with 'fontFaces', a list of fonts that apply to this node.
    */
   getUsedFontFaces: function(node, options) {
     // node.rawNode is defined for NodeActor objects
     const actualNode = node.rawNode || node;
     const contentDocument = actualNode.ownerDocument;
     // We don't get fonts for a node, but for a range
     const rng = contentDocument.createRange();
-    rng.selectNodeContents(actualNode);
+    const isPseudoElement =
+      Boolean(CssLogic.getBindingElementAndPseudo(actualNode).pseudo);
+    if (isPseudoElement) {
+      rng.selectNodeContents(actualNode);
+    } else {
+      rng.selectNode(actualNode);
+    }
     const fonts = InspectorUtils.getUsedFontFaces(rng);
     const fontsArray = [];
 
     for (let i = 0; i < fonts.length; i++) {
       const font = fonts[i];
       const fontFace = {
         name: font.name,
         CSSFamilyName: font.CSSFamilyName,
--- a/devtools/shared/fronts/csscoverage.js
+++ b/devtools/shared/fronts/csscoverage.js
@@ -39,17 +39,17 @@ const CSSUsageFront = protocol.FrontClas
     this.manage(this);
   },
 
   _onStateChange: protocol.preEvent("state-change", function(ev) {
     isRunning = ev.isRunning;
     ev.target = target;
 
     if (isRunning) {
-      const gnb = chromeWindow.document.getElementById("global-notificationbox");
+      const gnb = chromeWindow.gNotificationBox;
       notification = gnb.getNotificationWithValue("csscoverage-running");
 
       if (notification == null) {
         const notifyStop = reason => {
           if (reason == "removed") {
             this.stop();
           }
         };
--- a/dom/base/test/test_warning_for_blocked_cross_site_request.html
+++ b/dom/base/test/test_warning_for_blocked_cross_site_request.html
@@ -4,49 +4,68 @@
 https://bugzilla.mozilla.org/show_bug.cgi?id=713980
 -->
 <head>
   <meta charset="utf-8">
   <title>Test for Bug 713980</title>
   <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
 
-  <!-- Load a cross-origin webfont without CORS (common pain point -->
+  <!-- Load a cross-origin webfont without CORS (common pain point) and some
+       other styles that require anonymous CORS -->
   <style>
     @font-face {
       font-family: "bad_cross_origin_webfont";
       src: url('http://example.org/tests/dom/security/test/csp/file_CSP.sjs?testid=font_bad&type=application/octet-stream');
     }
     div#bad_webfont { font-family: "bad_cross_origin_webfont"; }
+
+    div#bad_shape_outside { shape-outside: url('http://example.org/tests/dom/security/test/csp/file_CSP.sjs?testid=bad_shape_outside&type=image/png'); }
+
+    div#bad_mask_image { mask-image: url('http://example.org/tests/dom/security/test/csp/file_CSP.sjs?testid=bad_mask_image&type=image/svg+xml'); }
   </style>
 </head>
 <body>
 <pre id="test">
 
 <script class="testbody" type="text/javascript">
 SimpleTest.waitForExplicitFinish();
 
 var tests = {
+  xhr : {
+    uri_test : "http://invalid",
+    result : null,
+    category: "CORSAllowOriginNotMatchingOrigin"
+  },
   font : {
     uri_test : "font_bad",
     result : null,
     category: "CORSMissingAllowOrigin",
   },
-  xhr : {
-    uri_test : "http://invalid",
+  shape_outside : {
+    uri_test : "bad_shape_outside",
     result : null,
-    category: "CORSAllowOriginNotMatchingOrigin"
+    category: "CORSMissingAllowOrigin",
+    ignore_windowID: true,
+  },
+  mask_image : {
+    uri_test : "bad_mask_image",
+    result : null,
+    category: "CORSMissingAllowOrigin",
+    ignore_windowID: true,
   },
 }
 
 function testsComplete() {
   for (var testName in tests) {
     var test = tests[testName];
-    if (test.result == null)
+    if (test.result == null) {
+      info("Still waiting on (at least) " + testName + ".");
       return false;
+    }
   }
   return true;
 }
 
 SpecialPowers.registerConsoleListener(function CORSMsgListener(aMsg) {
   if (!/Cross-Origin Request Blocked/.test(aMsg.message))
     return;
 
@@ -58,17 +77,19 @@ SpecialPowers.registerConsoleListener(fu
 
     var testRegexp = new RegExp(test.uri_test);
     if (testRegexp.test(aMsg.message)) {
       test.result = true;
       ok(true, "Got \"Cross-site request blocked\" warning message for " + testName);
       ok(aMsg.category == category,
          "Got warning message with category \"" + aMsg.category + "\", expected \"" + category + "\"");
       // Got the message we wanted - make sure it is destined for a valid inner window
-      ok(aMsg.windowID != 0, "Valid (non-zero) windowID for the cross-site request blocked message.");
+      if(!test.ignore_windowID) {
+        ok(aMsg.windowID != 0, "Valid (non-zero) windowID for the cross-site request blocked message.");
+      }
       break;
     }
   }
 
   if (testsComplete()) {
     SimpleTest.executeSoon(cleanup);
   }
 });
@@ -78,19 +99,31 @@ function cleanup() {
   SimpleTest.finish();
 }
 
 // Send a cross-origin XHR request without CORS
 var xhr = new XMLHttpRequest();
 xhr.open("GET", "http://example.org/tests/dom/security/test/cors/file_CrossSiteXHR_server.sjs?allowOrigin=http://invalid", true);
 xhr.send(null);
 
+let badDiv;
+
 // Create a div that triggers a cross-origin webfont request
 // We do this in Javascript in order to guarantee the console listener has
 // already been registered; otherwise, there could be a race.
-var badDiv = document.createElement('div');
+badDiv = document.createElement('div');
 badDiv.setAttribute('id', 'bad_webfont');
 document.body.appendChild(badDiv);
+
+// Create a div that triggers a cross-origin request for a shape-outside image
+badDiv = document.createElement('div');
+badDiv.setAttribute('id', 'bad_shape_outside');
+document.body.appendChild(badDiv);
+
+// Create a div that triggers a cross-origin request for a mask-image
+badDiv = document.createElement('div');
+badDiv.setAttribute('id', 'bad_mask_image');
+document.body.appendChild(badDiv);
 </script>
 
 </pre>
 </body>
 </html>
--- a/dom/html/reftests/468263-2-alternate-ref.html
+++ b/dom/html/reftests/468263-2-alternate-ref.html
@@ -1,7 +1,8 @@
 <!DOCTYPE HTML>
 <html>
 <body>
     <img id="image1" src="">
+    <img id="image2">
     <input id="image3" type="image">
 </body>
 </html>
--- a/gfx/thebes/gfxDWriteFontList.cpp
+++ b/gfx/thebes/gfxDWriteFontList.cpp
@@ -1067,17 +1067,17 @@ gfxDWriteFontList::InitFontListForPlatfo
         return NS_ERROR_FAILURE;
     }
 
     QueryPerformanceCounter(&t2); // base-class/interop initialization
 
     mSystemFonts = Factory::GetDWriteSystemFonts(true);
     NS_ASSERTION(mSystemFonts != nullptr, "GetSystemFontCollection failed!");
 
-    if (FAILED(hr)) {
+    if (!mSystemFonts) {
         Telemetry::Accumulate(Telemetry::DWRITEFONT_INIT_PROBLEM,
                               uint32_t(errSystemFontCollection));
         return NS_ERROR_FAILURE;
     }
 
     QueryPerformanceCounter(&t3); // system font collection
 
     GetFontsFromCollection(mSystemFonts);
--- a/image/test/crashtests/delaytest.html
+++ b/image/test/crashtests/delaytest.html
@@ -1,15 +1,16 @@
 <!DOCTYPE HTML>
 <html class="reftest-wait">
 <head>
 <title>Delayed image reftest wrapper</title>
 </head>
 <body>
-<img id="image1">
+<!-- non-empty alt to avoid the broken image icon -->
+<img id="image1" alt=" ">
 <script>
 // This loads a externally specified image, forces a draw (in case of
 // decode-on-draw), waits 350ms, and then triggers the reftest snapshot.
 // This allows the animation on the page to complete.
 //
 // Use as "delaytest.html?animation.png"
 //
 
--- a/image/test/mochitest/green-background.html
+++ b/image/test/mochitest/green-background.html
@@ -4,17 +4,18 @@
 <title>Background color wrapper for clear image tests</title>
 <style>
 img {
   background-color: rgb(0, 255, 0);
 }
 </style>
 </head>
 <body>
-<img id="image1">
+<!-- non-empty alt to avoid the broken image icon -->
+<img id="image1" alt=" ">
 <script>
 // Loads an externally specified image and displays it
 // with a green background. Intended for use with tests
 // involving clear images.
 
 // Use as "green-background.html?image.png".
 
 // Get the image URL.
--- a/image/test/reftest/apng/delaytest.html
+++ b/image/test/reftest/apng/delaytest.html
@@ -1,15 +1,16 @@
 <!DOCTYPE HTML>
 <html class="reftest-wait">
 <head>
 <title>Delayed image reftest wrapper</title>
 </head>
 <body>
-<img id="image1">
+<!-- non-empty alt to avoid the broken image icon -->
+<img id="image1" alt=" ">
 <script>
 // This loads a externally specified image, forces a draw (in case of
 // decode-on-draw), waits 100ms, and then triggers the reftest snapshot.
 // This allows the animation on the page to complete.
 //
 // Use as "delaytest.html?animation.png"
 //
 
--- a/image/test/reftest/bmp/bmp-corrupted/wrapper.html
+++ b/image/test/reftest/bmp/bmp-corrupted/wrapper.html
@@ -9,20 +9,20 @@
   // The image is loaded async after the page loads
   // wait for it to finish loading
   function onImageLoad() { 
     document.documentElement.removeAttribute("class");
   };
 </script>
 </head>
 <body>
-<img id="image1">
+<!-- non-empty alt to avoid the broken image icon -->
+<img id="image1" alt=" ">
 <script>
   // Use as "wrapper.html?image.png"
   var imgURL = document.location.search.substr(1);
   document.images[0].onload = onImageLoad;
   document.images[0].onerror = onImageLoad;
-  document.images[0].alt = "";
   document.images[0].src = imgURL;
 </script>
 </body>
 </html>
 
--- a/image/test/reftest/bmp/bmpsuite/b/wrapper.html
+++ b/image/test/reftest/bmp/bmpsuite/b/wrapper.html
@@ -9,20 +9,20 @@
   // The image is loaded async after the page loads
   // wait for it to finish loading
   function onImageLoad() { 
     document.documentElement.removeAttribute("class");
   };
 </script>
 </head>
 <body>
-<img id="image1">
+<!-- non-empty alt to avoid the broken image icon -->
+<img id="image1" alt=" ">
 <script>
   // Use as "wrapper.html?image.png"
   var imgURL = document.location.search.substr(1);
   document.images[0].onload = onImageLoad;
   document.images[0].onerror = onImageLoad;
-  document.images[0].alt = "";
   document.images[0].src = imgURL;
 </script>
 </body>
 </html>
 
--- a/image/test/reftest/bmp/bmpsuite/q/wrapper.html
+++ b/image/test/reftest/bmp/bmpsuite/q/wrapper.html
@@ -9,20 +9,20 @@
   // The image is loaded async after the page loads
   // wait for it to finish loading
   function onImageLoad() { 
     document.documentElement.removeAttribute("class");
   };
 </script>
 </head>
 <body>
-<img id="image1">
+<!-- non-empty alt to avoid the broken image icon -->
+<img id="image1" alt=" ">
 <script>
   // Use as "wrapper.html?image.png"
   var imgURL = document.location.search.substr(1);
   document.images[0].onload = onImageLoad;
   document.images[0].onerror = onImageLoad;
-  document.images[0].alt = "";
   document.images[0].src = imgURL;
 </script>
 </body>
 </html>
 
--- a/image/test/reftest/bmp/bmpsuite/x/wrapper.html
+++ b/image/test/reftest/bmp/bmpsuite/x/wrapper.html
@@ -9,20 +9,20 @@
   // The image is loaded async after the page loads
   // wait for it to finish loading
   function onImageLoad() {
     document.documentElement.removeAttribute("class");
   };
 </script>
 </head>
 <body>
-<img id="image1">
+<!-- non-empty alt to avoid the broken image icon -->
+<img id="image1" alt=" ">
 <script>
   // Use as "wrapper.html?image.png"
   var imgURL = document.location.search.substr(1);
   document.images[0].onload = onImageLoad;
   document.images[0].onerror = onImageLoad;
-  document.images[0].alt = "";
   document.images[0].src = imgURL;
 </script>
 </body>
 </html>
 
--- a/image/test/reftest/downscaling/downscale-16px.html
+++ b/image/test/reftest/downscaling/downscale-16px.html
@@ -9,20 +9,20 @@
   // The image is loaded async after the page loads.
   // Wait for it to finish loading.
   function onImageLoad() {
     document.documentElement.removeAttribute("class");
   };
 </script>
 </head>
 <body>
-<img width="16px" height="16px" id="image1">
+<!-- non-empty alt to avoid the broken image icon -->
+<img width="16px" height="16px" id="image1" alt=" ">
 <script>
   // Use as "wrapper.html?image.png"
   var imgURL = document.location.search.substr(1);
   document.images[0].onload = onImageLoad;
   document.images[0].onerror = onImageLoad;
-  document.images[0].alt = "";
   document.images[0].src = imgURL;
 </script>
 </body>
 </html>
 
--- a/image/test/reftest/downscaling/downscale-8px.html
+++ b/image/test/reftest/downscaling/downscale-8px.html
@@ -9,19 +9,19 @@
   // The image is loaded async after the page loads.
   // Wait for it to finish loading.
   function onImageLoad() {
     document.documentElement.removeAttribute("class");
   };
 </script>
 </head>
 <body>
-<img width="8px" id="image1">
+<!-- non-empty alt to avoid the broken image icon -->
+<img width="8px" id="image1" alt=" ">
 <script>
   // Use as "wrapper.html?image.png"
   var imgURL = document.location.search.substr(1);
   document.images[0].onload = onImageLoad;
   document.images[0].onerror = onImageLoad;
-  document.images[0].alt = "";
   document.images[0].src = imgURL;
 </script>
 </body>
 </html>
--- a/image/test/reftest/gif/delaytest.html
+++ b/image/test/reftest/gif/delaytest.html
@@ -1,15 +1,16 @@
 <!DOCTYPE HTML>
 <html class="reftest-wait">
 <head>
 <title>Delayed image reftest wrapper</title>
 </head>
 <body>
-<img id="image1">
+<!-- non-empty alt to avoid the broken image icon -->
+<img id="image1" alt=" ">
 <script>
 // This loads a externally specified image, forces a draw (in case of
 // decode-on-draw), waits 100ms, and then triggers the reftest snapshot.
 // This allows the animation on the page to complete.
 //
 // Use as "delaytest.html?animation.png"
 //
 
--- a/image/test/reftest/ico/cur/wrapper.html
+++ b/image/test/reftest/ico/cur/wrapper.html
@@ -9,17 +9,18 @@
   // The image is loaded async after the page loads
   // wait for it to finish loading
   function onImageLoad() { 
     document.documentElement.removeAttribute("class");
   };
 </script>
 </head>
 <body>
-<img id="image1">
+<!-- non-empty alt to avoid the broken image icon -->
+<img id="image1" alt=" ">
 <script>
   // Use as "wrapper.html?image.png
   var imgURL = document.location.search.substr(1);
   document.images[0].onload = onImageLoad;
   document.images[0].onerror = onImageLoad;
   document.images[0].src = imgURL;
 </script>
 </body>
--- a/image/test/reftest/ico/ico-bmp-corrupted/wrapper.html
+++ b/image/test/reftest/ico/ico-bmp-corrupted/wrapper.html
@@ -46,34 +46,34 @@
     // the <img> element we're going to snapshot. That's because for some of the
     // tests that use wrapper.html, an error is only detected when decoding the
     // actual image data - i.e., the error isn't detected in the header. The
     // precise time when we detect the error, unfortunately, affects how we draw
     // the image. This will be fixed in bug 1182531, and then we can simplify this
     // code.
 
     var finalImg = document.getElementById('image1');
-    finalImg.alt = "";
     finalImg.onload = finalImg.onerror = step3;
     finalImg.src = gImg.src;
   }
 
   function step3() {
     // We're ready to take the snapshot, but pump the event loop first just to
     // be sure that everything has settled down.
     runAfterAsyncEvents(takeSnapshot);
   }
 
   function takeSnapshot() {
     document.documentElement.removeAttribute("class");
   }
 </script>
 </head>
 <body>
-<img id="image1">
+<!-- non-empty alt to avoid the broken image icon -->
+<img id="image1" alt=" ">
 <script>
   // Use as "wrapper.html?image.png
   gImg = document.createElement('img');
   gImg.onload = gImg.onerror = onImageLoad;
   gImg.src = document.location.search.substr(1);
 </script>
 </body>
 </html>
--- a/image/test/reftest/ico/ico-png/wrapper.html
+++ b/image/test/reftest/ico/ico-png/wrapper.html
@@ -9,20 +9,20 @@
   // The image is loaded async after the page loads
   // wait for it to finish loading
   function onImageLoad() { 
     document.documentElement.removeAttribute("class");
   };
 </script>
 </head>
 <body>
-<img id="image1">
+<!-- non-empty alt to avoid the broken image icon -->
+<img id="image1" alt=" ">
 <script>
   // Use as "wrapper.html?image.png
   var imgURL = document.location.search.substr(1);
   document.images[0].onload = onImageLoad;
   document.images[0].onerror = onImageLoad;
-  document.images[0].alt = "";
   document.images[0].src = imgURL;
 </script>
 </body>
 </html>
 
--- a/image/test/reftest/pngsuite-background/wrapper.html
+++ b/image/test/reftest/pngsuite-background/wrapper.html
@@ -9,17 +9,18 @@
   // The image is loaded async after the page loads
   // wait for it to finish loading
   function onImageLoad() { 
     document.documentElement.removeAttribute("class");
   };
 </script>
 </head>
 <body>
-<img id="image1">
+<!-- non-empty alt to avoid the broken image icon -->
+<img id="image1" alt=" ">
 <script>
   // Use as "wrapper.html?image.png
   var imgURL = document.location.search.substr(1);
   document.images[0].onload = onImageLoad;
   document.images[0].onerror = onImageLoad;
   document.images[0].src = imgURL;
 </script>
 </body>
--- a/image/test/reftest/pngsuite-corrupted/wrapper.html
+++ b/image/test/reftest/pngsuite-corrupted/wrapper.html
@@ -9,20 +9,20 @@
   // The image is loaded async after the page loads
   // wait for it to finish loading
   function onImageLoad() { 
     document.documentElement.removeAttribute("class");
   };
 </script>
 </head>
 <body>
-<img id="image1">
+<!-- non-empty alt to avoid the broken image icon -->
+<img id="image1" alt=" ">
 <script>
   // Use as "wrapper.html?image.png
   var imgURL = document.location.search.substr(1);
   document.images[0].onload = onImageLoad;
   document.images[0].onerror = onImageLoad;
-  document.images[0].alt = "";
   document.images[0].src = imgURL;
 </script>
 </body>
 </html>
 
--- a/image/test/reftest/pngsuite-transparency/wrapper.html
+++ b/image/test/reftest/pngsuite-transparency/wrapper.html
@@ -9,17 +9,18 @@
   // The image is loaded async after the page loads
   // wait for it to finish loading
   function onImageLoad() { 
     document.documentElement.removeAttribute("class");
   };
 </script>
 </head>
 <body>
-<img id="image1">
+<!-- non-empty alt to avoid the broken image icon -->
+<img id="image1" alt=" ">
 <script>
   // Use as "wrapper.html?image.png
   var imgURL = document.location.search.substr(1);
   document.images[0].onload = onImageLoad;
   document.images[0].onerror = onImageLoad;
   document.images[0].src = imgURL;
 </script>
 </body>
--- a/js/src/gc/Nursery.cpp
+++ b/js/src/gc/Nursery.cpp
@@ -869,16 +869,17 @@ js::Nursery::collect(JS::gcreason::Reaso
     TimeDuration totalTime = profileDurations_[ProfileKey::Total];
     rt->addTelemetry(JS_TELEMETRY_GC_MINOR_US, totalTime.ToMicroseconds());
     rt->addTelemetry(JS_TELEMETRY_GC_MINOR_REASON, reason);
     if (totalTime.ToMilliseconds() > 1.0) {
         rt->addTelemetry(JS_TELEMETRY_GC_MINOR_REASON_LONG, reason);
     }
     rt->addTelemetry(JS_TELEMETRY_GC_NURSERY_BYTES, sizeOfHeapCommitted());
     rt->addTelemetry(JS_TELEMETRY_GC_PRETENURE_COUNT, pretenureCount);
+    rt->addTelemetry(JS_TELEMETRY_GC_NURSERY_PROMOTION_RATE, promotionRate * 100);
 
     stats().endNurseryCollection(reason);
     gcTracer.traceMinorGCEnd();
     timeInChunkAlloc_ = mozilla::TimeDuration();
 
     if (enableProfiling_ && totalTime >= profileThreshold_) {
         stats().maybePrintProfileHeaders();
 
--- a/js/src/jsfriendapi.h
+++ b/js/src/jsfriendapi.h
@@ -150,16 +150,17 @@ enum {
     JS_TELEMETRY_GC_NON_INCREMENTAL_REASON,
     JS_TELEMETRY_GC_SCC_SWEEP_TOTAL_MS,
     JS_TELEMETRY_GC_SCC_SWEEP_MAX_PAUSE_MS,
     JS_TELEMETRY_GC_MINOR_REASON,
     JS_TELEMETRY_GC_MINOR_REASON_LONG,
     JS_TELEMETRY_GC_MINOR_US,
     JS_TELEMETRY_GC_NURSERY_BYTES,
     JS_TELEMETRY_GC_PRETENURE_COUNT,
+    JS_TELEMETRY_GC_NURSERY_PROMOTION_RATE,
     JS_TELEMETRY_PRIVILEGED_PARSER_COMPILE_LAZY_AFTER_MS,
     JS_TELEMETRY_WEB_PARSER_COMPILE_LAZY_AFTER_MS,
     JS_TELEMETRY_END
 };
 
 typedef void
 (*JSAccumulateTelemetryDataCallback)(int id, uint32_t sample, const char* key);
 
--- a/js/src/tests/jstests.list
+++ b/js/src/tests/jstests.list
@@ -422,19 +422,16 @@ skip script test262/language/expressions
 skip script test262/language/expressions/await/await-monkey-patched-promise.js
 skip script test262/language/expressions/await/async-await-interleaved.js
 skip script test262/language/expressions/await/for-await-of-interleaved.js
 skip script test262/language/expressions/await/async-generator-interleaved.js
 
 # https://bugzilla.mozilla.org/show_bug.cgi?id=1321616
 skip script test262/annexB/built-ins/Function/createdynfn-html-close-comment-params.js
 
-# https://bugzilla.mozilla.org/show_bug.cgi?id=1334813
-skip script test262/built-ins/DataView/length.js
-
 # https://bugzilla.mozilla.org/show_bug.cgi?id=1462741
 skip script test262/built-ins/Function/prototype/toString/well-known-intrinsic-object-functions.js
 
 # https://bugzilla.mozilla.org/show_bug.cgi?id=1462745
 skip script test262/annexB/language/function-code/block-decl-nested-blocks-with-fun-decl.js
 
 # https://bugzilla.mozilla.org/show_bug.cgi?id=1406171
 skip script test262/built-ins/Reflect/ownKeys/return-on-corresponding-order-large-index.js
--- a/js/src/wasm/WasmSignalHandlers.cpp
+++ b/js/src/wasm/WasmSignalHandlers.cpp
@@ -62,16 +62,20 @@ using mozilla::DebugOnly;
 # define ESP_sig(p) ((p)->Esp)
 # define RIP_sig(p) ((p)->Rip)
 # define RSP_sig(p) ((p)->Rsp)
 # define RBP_sig(p) ((p)->Rbp)
 # define R11_sig(p) ((p)->R11)
 # define R13_sig(p) ((p)->R13)
 # define R14_sig(p) ((p)->R14)
 # define R15_sig(p) ((p)->R15)
+# define EPC_sig(p) ((p)->Pc)
+# define RFP_sig(p) ((p)->Fp)
+# define R31_sig(p) ((p)->Sp)
+# define RLR_sig(p) ((p)->Lr)
 #elif defined(__OpenBSD__)
 # define EIP_sig(p) ((p)->sc_eip)
 # define EBP_sig(p) ((p)->sc_ebp)
 # define ESP_sig(p) ((p)->sc_esp)
 # define RIP_sig(p) ((p)->sc_rip)
 # define RSP_sig(p) ((p)->sc_rsp)
 # define RBP_sig(p) ((p)->sc_rbp)
 # define R11_sig(p) ((p)->sc_r11)
@@ -318,17 +322,17 @@ struct macos_arm_context {
 # define PC_sig(p) EIP_sig(p)
 # define FP_sig(p) EBP_sig(p)
 # define SP_sig(p) ESP_sig(p)
 #elif defined(__arm__)
 # define FP_sig(p) R11_sig(p)
 # define SP_sig(p) R13_sig(p)
 # define LR_sig(p) R14_sig(p)
 # define PC_sig(p) R15_sig(p)
-#elif defined(__aarch64__)
+#elif defined(_M_ARM64) || defined(__aarch64__)
 # define PC_sig(p) EPC_sig(p)
 # define FP_sig(p) RFP_sig(p)
 # define SP_sig(p) R31_sig(p)
 # define LR_sig(p) RLR_sig(p)
 #elif defined(__mips__)
 # define PC_sig(p) EPC_sig(p)
 # define FP_sig(p) RFP_sig(p)
 # define SP_sig(p) RSP_sig(p)
@@ -821,21 +825,16 @@ ProcessHasSignalHandlers()
 
     // Initalize ThreadLocal flag used by WasmTrapHandler
     sAlreadyHandlingTrap.infallibleInit();
 
     // Install a SIGSEGV handler to handle safely-out-of-bounds asm.js heap
     // access and/or unaligned accesses.
 #if defined(XP_WIN)
 
-# if defined(_M_ARM64)
-    // The AArch64 Windows build is not ready for this yet.
-    return false;
-# endif
-
 # if defined(MOZ_ASAN)
     // Under ASan we need to let the ASan runtime's ShadowExceptionHandler stay
     // in the first handler position. This requires some coordination with
     // MemoryProtectionExceptionHandler::isDisabled().
     const bool firstHandler = false;
 # else
     // Otherwise, WasmTrapHandler needs to go first, so that we can recover
     // from wasm faults and continue execution without triggering handlers
--- a/js/src/wasm/cranelift/Cargo.toml
+++ b/js/src/wasm/cranelift/Cargo.toml
@@ -3,19 +3,19 @@ name = "baldrdash"
 version = "0.1.0"
 authors = ["The Spidermonkey and Cranelift developers"]
 
 [lib]
 crate-type = ["rlib"]
 name = "baldrdash"
 
 [dependencies]
-cranelift-codegen = "0.20.0"
-cranelift-wasm = "0.20.1"
-target-lexicon = "0.0.3"
+cranelift-codegen = "0.23.0"
+cranelift-wasm = "0.23.0"
+target-lexicon = "0.2.0"
 log = { version = "0.4.4", default-features = false, features = ["release_max_level_info"] }
 env_logger = "0.5.6"
 
 [build-dependencies]
 bindgen = {version = "0.43", default-features = false} # disable `logging` to reduce code size
 
 # Uncomment this to enable perf support in release mode.
 #[profile.release]
--- a/js/src/wasm/cranelift/src/baldrdash.rs
+++ b/js/src/wasm/cranelift/src/baldrdash.rs
@@ -11,19 +11,16 @@
  * 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.
  */
 
 // Safe wrappers to the low-level ABI.  This re-exports all types in
 // baldrapi but none of the functions.
 
-// TODO: Should many u32 arguments and return values here really be
-// usize, to be more conventional?
-
 use baldrapi::CraneliftModuleEnvironment;
 use cranelift_codegen::binemit::CodeOffset;
 use cranelift_codegen::cursor::{Cursor, FuncCursor};
 use cranelift_codegen::entity::EntityRef;
 use cranelift_codegen::ir::immediates::{Ieee32, Ieee64};
 use cranelift_codegen::ir::stackslot::StackSize;
 use cranelift_codegen::ir::{self, InstBuilder};
 use cranelift_codegen::{CodegenError, CodegenResult};
@@ -195,20 +192,20 @@ impl<'a> ModuleEnvironment<'a> {
     }
     pub fn func_import_tls_offset(&self, func_index: FuncIndex) -> usize {
         unsafe { baldrapi::env_func_import_tls_offset(self.env, func_index.index()) }
     }
     pub fn func_is_import(&self, func_index: FuncIndex) -> bool {
         unsafe { baldrapi::env_func_is_import(self.env, func_index.index()) }
     }
     pub fn signature(&self, sig_index: SignatureIndex) -> FuncTypeWithId {
-        FuncTypeWithId(unsafe { baldrapi::env_signature(self.env, sig_index) })
+        FuncTypeWithId(unsafe { baldrapi::env_signature(self.env, sig_index.index()) })
     }
     pub fn table(&self, table_index: TableIndex) -> TableDesc {
-        TableDesc(unsafe { baldrapi::env_table(self.env, table_index) })
+        TableDesc(unsafe { baldrapi::env_table(self.env, table_index.index()) })
     }
     pub fn global(&self, global_index: GlobalIndex) -> GlobalDesc {
-        GlobalDesc(unsafe { baldrapi::env_global(self.env, global_index) })
+        GlobalDesc(unsafe { baldrapi::env_global(self.env, global_index.index()) })
     }
     pub fn min_memory_length(&self) -> i64 {
         self.env.min_memory_length as i64
     }
 }
--- a/js/src/wasm/cranelift/src/compile.rs
+++ b/js/src/wasm/cranelift/src/compile.rs
@@ -87,19 +87,18 @@ impl<'a, 'b> BatchCompiler<'a, 'b> {
             isa: make_isa(static_environ)?,
             context: cranelift_codegen::Context::new(),
             trans: cranelift_wasm::FuncTranslator::new(),
             current_func: CompiledFunc::new(),
         })
     }
 
     pub fn compile(&mut self) -> CodegenResult<()> {
-        let orig_size = self.context.compile(&*self.isa)?;
-        let size = self.remove_return_inst(orig_size) as usize;
-        self.binemit(size)
+        let size = self.context.compile(&*self.isa)?;
+        self.binemit(size as usize)
     }
 
     /// Translate the WebAssembly code to Cranelift IR.
     pub fn translate_wasm(
         &mut self,
         func: &bd::FuncCompileInput,
     ) -> WasmResult<bd::FuncTypeWithId> {
         self.context.clear();
@@ -114,47 +113,16 @@ impl<'a, 'b> BatchCompiler<'a, 'b> {
         self.trans
             .translate(func.bytecode(), &mut self.context.func, tenv)?;
 
         info!("Translated wasm function {}.", func.index);
         debug!("Content: {}", self.context.func.display(&*self.isa));
         Ok(wsig)
     }
 
-    /// Remove the trailing return instruction from the current function to make room for a custom
-    /// epilogue.
-    ///
-    /// Return the new function size in bytes, adjusted from size.
-    fn remove_return_inst(&mut self, size: CodeOffset) -> CodeOffset {
-        // Get the last instruction in the function.
-        let mut pos = FuncCursor::new(&mut self.context.func);
-
-        // Move to the bottom of the last EBB in the function.
-        pos.prev_ebb().expect("empty function");
-
-        // Move to the last instruction in the last EBB.
-        let inst = pos.prev_inst().expect("last EBB has not terminator");
-
-        // TODO There might be an issue here, if there can be more than one
-        // IR returns per IR function.
-
-        if pos.func.dfg[inst].opcode().is_return() {
-            let enc = pos.func.encodings[inst];
-            let ret_size = self.isa.encoding_info().bytes(enc);
-            // Remove the return instruction. This leaves the IR in an invalid state where the last
-            // EBB has no terminator. The code emitter shouldn't mind this. If it does want to
-            // verify the IR in the future, we could use a zero-sized return encoding instead.
-            pos.remove_inst();
-            return size - ret_size;
-        }
-
-        // Function doesn't have a return instruction.
-        size
-    }
-
     /// Emit binary machine code to `emitter`.
     fn binemit(&mut self, size: usize) -> CodegenResult<()> {
         let frame_pushed = self.frame_pushed();
         let contains_calls = self.contains_calls();
 
         info!("Emitting {} bytes, frame_pushed={}\n.", size, frame_pushed);
 
         self.current_func.reset(frame_pushed, contains_calls);
--- a/js/src/wasm/cranelift/src/cpu.rs
+++ b/js/src/wasm/cranelift/src/cpu.rs
@@ -28,32 +28,23 @@ use std::mem;
 use std::str::FromStr;
 use target_lexicon;
 use utils::{BasicError, DashResult};
 
 use baldrdash::StaticEnvironment;
 
 impl From<isa::LookupError> for BasicError {
     fn from(err: isa::LookupError) -> BasicError {
-        let msg = match err {
-            isa::LookupError::SupportDisabled => "ISA support is disabled",
-            isa::LookupError::Unsupported => "unsupported ISA",
-        };
-        BasicError::new(msg.to_string())
+        BasicError::new(err.to_string())
     }
 }
 
 impl From<settings::SetError> for BasicError {
     fn from(err: settings::SetError) -> BasicError {
-        let msg = match err {
-            settings::SetError::BadName => "bad setting name",
-            settings::SetError::BadType => "bad setting type",
-            settings::SetError::BadValue => "bad setting value",
-        };
-        BasicError::new(msg.to_string())
+        BasicError::new(err.to_string())
     }
 }
 
 /// Allocate a `TargetISA` object that can be used to generate code for the CPU we're running on.
 ///
 /// TODO: SM runs on more than x86 chips. Support them.
 ///
 /// # Errors
@@ -98,20 +89,16 @@ pub fn make_isa(env: &StaticEnvironment)
 }
 
 /// Create a `Flags` object for the shared settings.
 ///
 /// This only fails if one of Cranelift's settings has been removed or renamed.
 fn make_shared_flags() -> settings::SetResult<settings::Flags> {
     let mut sb = settings::builder();
 
-    // Since we're using SM's epilogue insertion code, we can only handle a single return
-    // instruction at the end of the function.
-    sb.enable("return_at_end")?;
-
     // We don't install SIGFPE handlers, but depend on explicit traps around divisions.
     sb.enable("avoid_div_traps")?;
 
     // Cranelift needs to know how many words are pushed by `GenerateFunctionPrologue` so it can
     // compute frame pointer offsets accurately.
     //
     // 1. Return address (whether explicitly pushed on ARM or implicitly on x86).
     // 2. TLS register.
@@ -130,10 +117,13 @@ fn make_shared_flags() -> settings::SetR
     }
 
     // Baldrdash does its own stack overflow checks, so we don't need Cranelift doing any for us.
     sb.set("probestack_enabled", "false")?;
 
     // Let's optimize for speed.
     sb.set("opt_level", "best")?;
 
+    // TODO: Enable jump tables (requires emitting readonly data separately from text).
+    sb.set("jump_tables_enabled", "false")?;
+
     Ok(settings::Flags::new(sb))
 }
--- a/js/src/wasm/cranelift/src/wasm2clif.rs
+++ b/js/src/wasm/cranelift/src/wasm2clif.rs
@@ -16,25 +16,25 @@
 //! This module deals with the translation of WebAssembly binary functions to Cranelift IR.
 //!
 //! The code here deals with adapting the `cranelift_wasm` module to the specifics of BaldrMonkey's
 //! internal data structures.
 
 use baldrdash as bd;
 use compile::{symbolic_function_name, wasm_function_name};
 use cranelift_codegen::cursor::{Cursor, FuncCursor};
-use cranelift_codegen::entity::EntityMap;
+use cranelift_codegen::entity::{EntityRef, PrimaryMap, SecondaryMap};
 use cranelift_codegen::ir;
 use cranelift_codegen::ir::condcodes::IntCC;
 use cranelift_codegen::ir::InstBuilder;
-use cranelift_codegen::isa::TargetIsa;
+use cranelift_codegen::isa::{CallConv, TargetFrontendConfig, TargetIsa};
 use cranelift_codegen::packed_option::PackedOption;
-use cranelift_codegen::settings::{CallConv, Flags};
+use cranelift_codegen::settings::Flags;
 use cranelift_wasm::{
-    self, FuncIndex, GlobalIndex, MemoryIndex, SignatureIndex, TableIndex, WasmResult,
+    self, FuncIndex, GlobalIndex, MemoryIndex, ReturnMode, SignatureIndex, TableIndex, WasmResult,
 };
 use std::collections::HashMap;
 use target_lexicon::Triple;
 
 /// Get the integer type used for representing pointers on this platform.
 fn native_pointer_type() -> ir::Type {
     if cfg!(target_pointer_width = "64") {
         ir::types::I64
@@ -53,16 +53,21 @@ pub fn native_pointer_size() -> i32 {
 }
 
 /// Convert a TlsData offset into a `Offset32` for a global decl.
 fn offset32(offset: usize) -> ir::immediates::Offset32 {
     assert!(offset <= i32::max_value() as usize);
     (offset as i32).into()
 }
 
+/// Convert a usize offset into a `Imm64` for an iadd_imm.
+fn imm64(offset: usize) -> ir::immediates::Imm64 {
+    (offset as i64).into()
+}
+
 /// Initialize a `Signature` from a wasm signature.
 fn init_sig_from_wsig(sig: &mut ir::Signature, wsig: bd::FuncTypeWithId) {
     sig.clear(CallConv::Baldrdash);
     for &arg in wsig.args() {
         sig.params.push(ir::AbiParam::new(arg.into()));
     }
 
     if let Some(ret_type) = wsig.ret_type().into() {
@@ -97,33 +102,36 @@ pub fn init_sig(
 /// A `TargetIsa` and `ModuleEnvironment` joined so we can implement `FuncEnvironment`.
 pub struct TransEnv<'a, 'b, 'c> {
     isa: &'a TargetIsa,
     env: &'b bd::ModuleEnvironment<'b>,
     static_env: &'c bd::StaticEnvironment,
 
     /// Information about the function pointer tables `self.env` knowns about. Indexed by table
     /// index.
-    tables: Vec<TableInfo>,
+    tables: PrimaryMap<TableIndex, TableInfo>,
 
     /// For those signatures whose ID is stored in a global, keep track of the globals we have
     /// created so far.
     ///
     /// Note that most signatures are of the immediate form, and we don't keep any records for
     /// those.
     ///
     /// The key to this table is the TLS offset returned by `sig_idTlsOffset()`.
     signatures: HashMap<i32, ir::GlobalValue>,
 
     /// Global variables containing `FuncImportTls` information about imported functions.
     /// This vector is indexed by a `FuncIndex`, taking advantage of the fact that WebAssembly
     /// imported functions are numbered starting from 0.
     ///
     /// Any `None` entries in this table are simply global variables that have not yet been created.
-    func_gvs: EntityMap<FuncIndex, PackedOption<ir::GlobalValue>>,
+    func_gvs: SecondaryMap<FuncIndex, PackedOption<ir::GlobalValue>>,
+
+    /// The `vmctx` global value.
+    vmctx_gv: PackedOption<ir::GlobalValue>,
 
     /// Global variable representing the `TlsData::instance` field which points to the current
     /// instance.
     instance_gv: PackedOption<ir::GlobalValue>,
 
     /// Global variable representing the `TlsData::interrupt` field which points to the current
     /// interrupt flag.
     interrupt_gv: PackedOption<ir::GlobalValue>,
@@ -144,93 +152,116 @@ impl<'a, 'b, 'c> TransEnv<'a, 'b, 'c> {
         isa: &'a TargetIsa,
         env: &'b bd::ModuleEnvironment,
         static_env: &'c bd::StaticEnvironment,
     ) -> Self {
         TransEnv {
             isa,
             env,
             static_env,
-            tables: Vec::new(),
+            tables: PrimaryMap::new(),
             signatures: HashMap::new(),
-            func_gvs: EntityMap::new(),
+            func_gvs: SecondaryMap::new(),
+            vmctx_gv: None.into(),
             instance_gv: None.into(),
             interrupt_gv: None.into(),
             symbolic: [None.into(); 2],
             cx_addr: None.into(),
             realm_addr: None.into(),
         }
     }
 
+    /// Get the `vmctx` global value.
+    fn get_vmctx_gv(&mut self, func: &mut ir::Function) -> ir::GlobalValue {
+        match self.vmctx_gv.expand() {
+            Some(gv) => gv,
+            None => {
+                // We need to allocate the global variable.
+                let gv = func.create_global_value(ir::GlobalValueData::VMContext);
+                self.vmctx_gv = Some(gv).into();
+                gv
+            }
+        }
+    }
+
     /// Get information about `table`.
     /// Create it if necessary.
     fn get_table(&mut self, func: &mut ir::Function, table: TableIndex) -> TableInfo {
         // Allocate all tables up to the requested index.
-        while self.tables.len() <= table {
-            let wtab = self.env.table(self.tables.len());
-            self.tables.push(TableInfo::new(wtab, func));
+        let vmctx = self.get_vmctx_gv(func);
+        while self.tables.len() <= table.index() {
+            let wtab = self.env.table(TableIndex::new(self.tables.len()));
+            self.tables.push(TableInfo::new(wtab, func, vmctx));
         }
         self.tables[table].clone()
     }
 
     /// Get the global variable storing the ID of the given signature.
     fn sig_global(&mut self, func: &mut ir::Function, offset: usize) -> ir::GlobalValue {
+        let vmctx = self.get_vmctx_gv(func);
         *self.signatures.entry(offset as i32).or_insert_with(|| {
-            func.create_global_value(ir::GlobalValueData::VMContext {
-                offset: offset32(offset),
+            func.create_global_value(ir::GlobalValueData::IAddImm {
+                base: vmctx,
+                offset: imm64(offset),
+                global_type: native_pointer_type(),
             })
         })
     }
 
     /// Get the global variable storing the `FuncImportTls` struct for an imported function.
     fn func_import_global(&mut self, func: &mut ir::Function, index: FuncIndex) -> ir::GlobalValue {
         // See if we already allocated a global for this import.
         if let Some(gv) = self.func_gvs.get(index).and_then(|gv| gv.expand()) {
             return gv;
         }
         // We need to create a global variable for `import_index`.
-        let gv = func.create_global_value(ir::GlobalValueData::VMContext {
-            offset: offset32(self.env.func_import_tls_offset(index)),
+        let vmctx = self.get_vmctx_gv(func);
+        let gv = func.create_global_value(ir::GlobalValueData::IAddImm {
+            base: vmctx,
+            offset: imm64(self.env.func_import_tls_offset(index)),
+            global_type: native_pointer_type(),
         });
         // Save it for next time.
         self.func_gvs[index] = gv.into();
         gv
     }
 
     /// Generate code that loads the current instance pointer.
     fn load_instance(&mut self, pos: &mut FuncCursor) -> ir::Value {
         let gv = match self.instance_gv.expand() {
             Some(gv) => gv,
             None => {
                 // We need to allocate the global variable.
-                let gv = pos
-                    .func
-                    .create_global_value(ir::GlobalValueData::VMContext {
-                        offset: offset32(self.static_env.instanceTlsOffset),
-                    });
+                let vmctx = self.get_vmctx_gv(pos.func);
+                let gv = pos.func.create_global_value(ir::GlobalValueData::IAddImm {
+                    base: vmctx,
+                    offset: imm64(self.static_env.instanceTlsOffset),
+                    global_type: native_pointer_type(),
+                });
                 self.instance_gv = gv.into();
                 gv
             }
         };
         let ga = pos.ins().global_value(native_pointer_type(), gv);
         pos.ins()
             .load(native_pointer_type(), ir::MemFlags::new(), ga, 0)
     }
 
     /// Generate code that loads the current instance pointer.
     fn load_interrupt_flag(&mut self, pos: &mut FuncCursor) -> ir::Value {
         let gv = match self.interrupt_gv.expand() {
             Some(gv) => gv,
             None => {
                 // We need to allocate the global variable.
-                let gv = pos
-                    .func
-                    .create_global_value(ir::GlobalValueData::VMContext {
-                        offset: offset32(self.static_env.interruptTlsOffset),
-                    });
+                let vmctx = self.get_vmctx_gv(pos.func);
+                let gv = pos.func.create_global_value(ir::GlobalValueData::IAddImm {
+                    base: vmctx,
+                    offset: imm64(self.static_env.interruptTlsOffset),
+                    global_type: native_pointer_type(),
+                });
                 self.interrupt_gv = gv.into();
                 gv
             }
         };
         let ga = pos.ins().global_value(native_pointer_type(), gv);
         pos.ins()
             .load(native_pointer_type(), ir::MemFlags::new(), ga, 0)
     }
@@ -259,27 +290,33 @@ impl<'a, 'b, 'c> TransEnv<'a, 'b, 'c> {
         self.symbolic[symidx] = fnref.into();
         (fnref, signature)
     }
 
     /// Update the JSContext's realm value. This is called after a call to restore the
     /// realm value, in case the call has used a different realm.
     fn switch_to_wasm_tls_realm(&mut self, pos: &mut FuncCursor) {
         if self.cx_addr.is_none() {
+            let vmctx = self.get_vmctx_gv(&mut pos.func);
             self.cx_addr = pos
                 .func
-                .create_global_value(ir::GlobalValueData::VMContext {
-                    offset: offset32(self.static_env.cxTlsOffset),
+                .create_global_value(ir::GlobalValueData::IAddImm {
+                    base: vmctx,
+                    offset: imm64(self.static_env.cxTlsOffset),
+                    global_type: native_pointer_type(),
                 }).into();
         }
         if self.realm_addr.is_none() {
+            let vmctx = self.get_vmctx_gv(&mut pos.func);
             self.realm_addr = pos
                 .func
-                .create_global_value(ir::GlobalValueData::VMContext {
-                    offset: offset32(self.static_env.realmTlsOffset),
+                .create_global_value(ir::GlobalValueData::IAddImm {
+                    base: vmctx,
+                    offset: imm64(self.static_env.realmTlsOffset),
+                    global_type: native_pointer_type(),
                 }).into();
         }
 
         let ptr = native_pointer_type();
         let mut flags = ir::MemFlags::new();
         flags.set_aligned();
         flags.set_notrap();
 
@@ -332,22 +369,18 @@ impl<'a, 'b, 'c> TransEnv<'a, 'b, 'c> {
             offset32(self.static_env.realmFuncImportTlsOffset),
         );
         pos.ins()
             .store(flags, realm, cx, offset32(self.static_env.realmCxOffset));
     }
 }
 
 impl<'a, 'b, 'c> cranelift_wasm::FuncEnvironment for TransEnv<'a, 'b, 'c> {
-    fn flags(&self) -> &Flags {
-        self.isa.flags()
-    }
-
-    fn triple(&self) -> &Triple {
-        self.isa.triple()
+    fn target_config(&self) -> TargetFrontendConfig {
+        self.isa.frontend_config()
     }
 
     fn pointer_type(&self) -> ir::Type {
         native_pointer_type()
     }
 
     fn make_global(
         &mut self,
@@ -359,66 +392,72 @@ impl<'a, 'b, 'c> cranelift_wasm::FuncEnv
             // Constant globals have a known value at compile time. We insert an instruction to
             // materialize the constant at the front of the entry block.
             let mut pos = FuncCursor::new(func);
             pos.next_ebb().expect("empty function");
             pos.next_inst();
             cranelift_wasm::GlobalVariable::Const(global.emit_constant(&mut pos))
         } else {
             // This is a global variable. Here we don't care if it is mutable or not.
-            let offset = offset32(global.tls_offset());
-            let mut gv = func.create_global_value(ir::GlobalValueData::VMContext { offset });
+            let offset = global.tls_offset();
+            let mut gv = self.get_vmctx_gv(func);
 
             // Some globals are represented as a pointer to the actual data, in which case we
             // must do an extra dereference to get to them.
             if global.is_indirect() {
-                gv = func.create_global_value(ir::GlobalValueData::Deref {
+                gv = func.create_global_value(ir::GlobalValueData::Load {
                     base: gv,
-                    offset: offset32(0),
-                    memory_type: native_pointer_type(),
+                    offset: offset32(offset),
+                    global_type: native_pointer_type(),
+                    readonly: false,
+                });
+            } else {
+                gv = func.create_global_value(ir::GlobalValueData::IAddImm {
+                    base: gv,
+                    offset: imm64(offset),
+                    global_type: native_pointer_type(),
                 });
             }
 
             // Create a Cranelift global variable. We don't need to remember the reference, the
             // function translator does that for us.
             cranelift_wasm::GlobalVariable::Memory {
                 gv,
                 ty: global.value_type().into(),
             }
         }
     }
 
     fn make_heap(&mut self, func: &mut ir::Function, index: MemoryIndex) -> ir::Heap {
-        assert_eq!(index, 0, "Only one WebAssembly memory supported");
+        assert_eq!(index.index(), 0, "Only one WebAssembly memory supported");
         // Get the address of the `TlsData::memoryBase` field.
-        let base_addr =
-            func.create_global_value(ir::GlobalValueData::VMContext { offset: 0.into() });
-        // Get the `TlsData::memoryBase` field.
-        let base = func.create_global_value(ir::GlobalValueData::Deref {
+        let base_addr = self.get_vmctx_gv(func);
+        // Get the `TlsData::memoryBase` field. We assume this is never modified during execution
+        // of the function.
+        let base = func.create_global_value(ir::GlobalValueData::Load {
             base: base_addr,
             offset: offset32(0),
-            memory_type: native_pointer_type(),
+            global_type: native_pointer_type(),
+            readonly: true,
         });
         let min_size = ir::immediates::Imm64::new(self.env.min_memory_length());
-        let guard_size = ir::immediates::Imm64::new(self.static_env.memoryGuardSize as i64);
+        let guard_size = imm64(self.static_env.memoryGuardSize);
 
         let bound = self.static_env.staticMemoryBound;
         let style = if bound > 0 {
             // We have a static heap.
             let bound = (bound as i64).into();
             ir::HeapStyle::Static { bound }
         } else {
-            let offset = native_pointer_size().into();
-            // Get the address of the `TlsData::boundsCheckLimit` field.
-            let bound_gv_addr = func.create_global_value(ir::GlobalValueData::VMContext { offset });
             // Get the `TlsData::boundsCheckLimit` field.
-            let bound_gv = func.create_global_value(ir::GlobalValueData::Deref {
-                base: bound_gv_addr,
-                offset: offset32(0),
-                memory_type: ir::types::I32,
+            let bound_gv = func.create_global_value(ir::GlobalValueData::Load {
+                base: base_addr,
+                offset: native_pointer_size().into(),
+                global_type: ir::types::I32,
+                readonly: false,
             });
             ir::HeapStyle::Dynamic { bound_gv }
         };
 
         func.create_heap(ir::HeapData {
             base,
             min_size,
             guard_size,
@@ -443,26 +482,28 @@ impl<'a, 'b, 'c> cranelift_wasm::FuncEnv
         func.import_signature(sigdata)
     }
 
     fn make_table(&mut self, func: &mut ir::Function, index: TableIndex) -> ir::Table {
         let table_desc = self.get_table(func, index);
 
         // TODO we'd need a better way to synchronize the shape of GlobalDataDesc and these
         // offsets.
-        let bound_gv = func.create_global_value(ir::GlobalValueData::Deref {
+        let bound_gv = func.create_global_value(ir::GlobalValueData::Load {
             base: table_desc.global,
             offset: 0.into(),
-            memory_type: ir::types::I32,
+            global_type: ir::types::I32,
+            readonly: false,
         });
 
-        let base_gv = func.create_global_value(ir::GlobalValueData::Deref {
+        let base_gv = func.create_global_value(ir::GlobalValueData::Load {
             base: table_desc.global,
-            offset: native_pointer_size().into(),
-            memory_type: native_pointer_type(),
+            offset: offset32(native_pointer_size() as usize),
+            global_type: native_pointer_type(),
+            readonly: false,
         });
 
         func.create_table(ir::TableData {
             base_gv,
             min_size: ir::immediates::Imm64::new(0),
             bound_gv,
             element_size: ir::immediates::Imm64::new(i64::from(self.pointer_bytes()) * 2),
             index_type: ir::types::I32,
@@ -491,17 +532,17 @@ impl<'a, 'b, 'c> cranelift_wasm::FuncEnv
         sig_ref: ir::SigRef,
         callee: ir::Value,
         call_args: &[ir::Value],
     ) -> WasmResult<ir::Inst> {
         let wsig = self.env.signature(sig_index);
 
         // TODO: When compiling asm.js, the table index in inferred from the signature index.
         // Currently, WebAssembly doesn't support multiple tables. That may change.
-        assert_eq!(table_index, 0);
+        assert_eq!(table_index.index(), 0);
         let wtable = self.get_table(pos.func, table_index);
 
         // Follows `MacroAssembler::wasmCallIndirect`:
 
         // 1. Materialize the signature ID.
         let sigid_value = match wsig.id_kind() {
             bd::FuncTypeIdDescKind::None => None,
             bd::FuncTypeIdDescKind::Immediate => {
@@ -515,34 +556,30 @@ impl<'a, 'b, 'c> cranelift_wasm::FuncEnv
                 Some(
                     pos.ins()
                         .load(native_pointer_type(), ir::MemFlags::new(), addr, 0),
                 )
             }
         };
 
         // 2. Bounds check the callee against the table length.
-        // TODO reuse this once !491 is merged.
-        //let (bound_gv, base_gv) = {
-        //let table_data = &pos.func.tables[table];
-        //(table_data.bound_gv, table_data.base_gv)
-        //};
+        let (bound_gv, base_gv) = {
+            let table_data = &pos.func.tables[table];
+            (table_data.bound_gv, table_data.base_gv)
+        };
 
-        //let tlength = pos.ins().global_value(ir::types::I32, bound_gv);
-        let gv_addr = pos.ins().global_value(native_pointer_type(), wtable.global);
-        let tlength = wtable.load_length(&mut pos, gv_addr);
+        let tlength = pos.ins().global_value(ir::types::I32, bound_gv);
 
         let oob = pos
             .ins()
             .icmp(IntCC::UnsignedGreaterThanOrEqual, callee, tlength);
         pos.ins().trapnz(oob, ir::TrapCode::OutOfBounds);
 
         // 3. Load the wtable base pointer from a global.
-        //let tbase = pos.ins().global_value(native_pointer_type(), base_gv);
-        let tbase = wtable.load_base(&mut pos, gv_addr);
+        let tbase = pos.ins().global_value(native_pointer_type(), base_gv);
 
         // 4. Load callee pointer from wtable.
         let callee_x = if native_pointer_type() != ir::types::I32 {
             pos.ins().uextend(native_pointer_type(), callee)
         } else {
             callee
         };
         let callee_scaled = pos.ins().imul_imm(callee_x, wtable.entry_size());
@@ -581,17 +618,17 @@ impl<'a, 'b, 'c> cranelift_wasm::FuncEnv
         args.extend(call_args.iter().cloned(), &mut pos.func.dfg.value_lists);
         args.push(vmctx, &mut pos.func.dfg.value_lists);
         if let Some(sigid) = sigid_value {
             args.push(sigid, &mut pos.func.dfg.value_lists);
         }
 
         let call = pos
             .ins()
-            .CallIndirect(ir::Opcode::CallIndirect, ir::types::VOID, sig_ref, args)
+            .CallIndirect(ir::Opcode::CallIndirect, ir::types::INVALID, sig_ref, args)
             .0;
         self.switch_to_wasm_tls_realm(&mut pos);
         Ok(call)
     }
 
     fn translate_call(
         &mut self,
         mut pos: FuncCursor,
@@ -631,33 +668,33 @@ impl<'a, 'b, 'c> cranelift_wasm::FuncEnv
             // Now make an indirect call to `fit_code`.
             // TODO: We don't need the `FuncRef` that was allocated for this callee since we're
             // using an indirect call. We would need to change the `FuncTranslator` interface to
             // deal.
             args.insert(0, fit_code, &mut pos.func.dfg.value_lists);
             let sig = pos.func.dfg.ext_funcs[callee].signature;
             let call = pos
                 .ins()
-                .CallIndirect(ir::Opcode::CallIndirect, ir::types::VOID, sig, args)
+                .CallIndirect(ir::Opcode::CallIndirect, ir::types::INVALID, sig, args)
                 .0;
             self.switch_to_wasm_tls_realm(&mut pos);
             Ok(call)
         } else {
             // This is a call to a local function.
 
             // Then we need to pass on the VM context pointer.
             let vmctx = pos
                 .func
                 .special_param(ir::ArgumentPurpose::VMContext)
                 .expect("Missing vmctx arg");
             args.push(vmctx, &mut pos.func.dfg.value_lists);
 
             Ok(pos
                 .ins()
-                .Call(ir::Opcode::Call, ir::types::VOID, callee, args)
+                .Call(ir::Opcode::Call, ir::types::INVALID, callee, args)
                 .0)
         }
     }
 
     fn translate_memory_grow(
         &mut self,
         mut pos: FuncCursor,
         index: MemoryIndex,
@@ -727,16 +764,22 @@ impl<'a, 'b, 'c> cranelift_wasm::FuncEnv
         self.switch_to_wasm_tls_realm(&mut pos);
         Ok(pos.func.dfg.first_result(call))
     }
 
     fn translate_loop_header(&mut self, mut pos: FuncCursor) {
         let interrupt = self.load_interrupt_flag(&mut pos);
         pos.ins().trapnz(interrupt, ir::TrapCode::Interrupt);
     }
+
+    fn return_mode(&self) -> ReturnMode {
+        // Since we're using SM's epilogue insertion code, we can only handle a single return
+        // instruction at the end of the function.
+        ReturnMode::FallthroughReturn
+    }
 }
 
 /// Information about a function table.
 #[derive(Clone)]
 struct TableInfo {
     /// Global variable containing a `wasm::TableTls` struct with two fields:
     ///
     /// 0: Unsigned 32-bit table length.
@@ -744,22 +787,26 @@ struct TableInfo {
     pub global: ir::GlobalValue,
 
     /// Is this an external table?
     pub external: bool,
 }
 
 impl TableInfo {
     /// Create a TableInfo and its global variable in `func`.
-    pub fn new(wtab: bd::TableDesc, func: &mut ir::Function) -> TableInfo {
+    pub fn new(wtab: bd::TableDesc, func: &mut ir::Function, vmctx: ir::GlobalValue) -> TableInfo {
         // Create the global variable.
         let offset = wtab.tls_offset();
         assert!(offset < i32::max_value() as usize);
-        let offset = (offset as i32).into();
-        let global = func.create_global_value(ir::GlobalValueData::VMContext { offset });
+        let offset = imm64(offset);
+        let global = func.create_global_value(ir::GlobalValueData::IAddImm {
+            base: vmctx,
+            offset,
+            global_type: native_pointer_type(),
+        });
 
         TableInfo {
             global,
             external: wtab.is_external(),
         }
     }
 
     /// Load the table length.
--- a/js/xpconnect/src/XPCJSContext.cpp
+++ b/js/xpconnect/src/XPCJSContext.cpp
@@ -76,18 +76,21 @@
 static MOZ_THREAD_LOCAL(XPCJSContext*) gTlsContext;
 
 using namespace mozilla;
 using namespace xpc;
 using namespace JS;
 using mozilla::dom::AutoEntryScript;
 
 // The watchdog thread loop is pretty trivial, and should not require much stack
-// space to do its job. So only give it 32KiB.
-static constexpr size_t kWatchdogStackSize = 32 * 1024;
+// space to do its job. So only give it 32KiB or the platform minimum.
+#if ! defined(PTHREAD_STACK_MIN)
+#define PTHREAD_STACK_MIN 0
+#endif
+static constexpr size_t kWatchdogStackSize = PTHREAD_STACK_MIN < 32 * 1024 ? 32 * 1024 : PTHREAD_STACK_MIN;
 
 static void WatchdogMain(void* arg);
 class Watchdog;
 class WatchdogManager;
 class MOZ_RAII AutoLockWatchdog final
 {
     MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
     Watchdog* const mWatchdog;
--- a/js/xpconnect/src/XPCJSRuntime.cpp
+++ b/js/xpconnect/src/XPCJSRuntime.cpp
@@ -2773,16 +2773,19 @@ AccumulateTelemetryCallback(int id, uint
         Telemetry::Accumulate(Telemetry::GC_PRETENURE_COUNT, sample);
         break;
       case JS_TELEMETRY_PRIVILEGED_PARSER_COMPILE_LAZY_AFTER_MS:
         Telemetry::Accumulate(Telemetry::JS_PRIVILEGED_PARSER_COMPILE_LAZY_AFTER_MS, sample);
         break;
       case JS_TELEMETRY_WEB_PARSER_COMPILE_LAZY_AFTER_MS:
         Telemetry::Accumulate(Telemetry::JS_WEB_PARSER_COMPILE_LAZY_AFTER_MS, sample);
         break;
+      case JS_TELEMETRY_GC_NURSERY_PROMOTION_RATE:
+        Telemetry::Accumulate(Telemetry::GC_NURSERY_PROMOTION_RATE, sample);
+        break;
       default:
         MOZ_ASSERT_UNREACHABLE("Unexpected JS_TELEMETRY id");
     }
 }
 
 static void
 SetUseCounterCallback(JSObject* obj, JSUseCounter counter)
 {
--- a/layout/generic/nsImageFrame.cpp
+++ b/layout/generic/nsImageFrame.cpp
@@ -114,17 +114,17 @@ static bool HaveSpecifiedSize(const nsSt
   // - if width and height are specified as either coord or percentage, then
   //   the size of the image frame is constrained
   return aStylePosition->mWidth.IsCoordPercentCalcUnit() &&
          aStylePosition->mHeight.IsCoordPercentCalcUnit();
 }
 
 // Decide whether we can optimize away reflows that result from the
 // image's intrinsic size changing.
-inline bool HaveFixedSize(const ReflowInput& aReflowInput)
+static bool HaveFixedSize(const ReflowInput& aReflowInput)
 {
   NS_ASSERTION(aReflowInput.mStylePosition, "crappy reflowInput - null stylePosition");
   // Don't try to make this optimization when an image has percentages
   // in its 'width' or 'height'.  The percentages might be treated like
   // auto (especially for intrinsic width calculations and for heights).
   return aReflowInput.mStylePosition->mHeight.ConvertsToLength() &&
          aReflowInput.mStylePosition->mWidth.ConvertsToLength();
 }
@@ -574,65 +574,61 @@ nsImageFrame::SourceRectToDest(const nsI
 
 // This is a macro so that we don't evaluate the boolean last arg
 // unless we have to; it can be expensive
 #define IMAGE_OK(_state, _loadingOK)                                           \
    (!(_state).HasAtLeastOneOfStates(BAD_STATES) ||                                    \
     (!(_state).HasAtLeastOneOfStates(NS_EVENT_STATE_BROKEN | NS_EVENT_STATE_USERDISABLED) && \
      (_state).HasState(NS_EVENT_STATE_LOADING) && (_loadingOK)))
 
-/* static */
-bool
+static bool HasAltText(const Element& aElement)
+{
+  // We always return some alternate text for <input>, see
+  // nsCSSFrameConstructor::GetAlternateTextFor.
+  if (aElement.IsHTMLElement(nsGkAtoms::input)) {
+    return true;
+  }
+
+  MOZ_ASSERT(aElement.IsHTMLElement(nsGkAtoms::img));
+  nsAutoString altText;
+  return aElement.GetAttr(nsGkAtoms::alt, altText) && !altText.IsEmpty();
+}
+
+
+// Check if we want to use an image frame or just let the frame constructor make
+// us into an inline.
+/* static */ bool
 nsImageFrame::ShouldCreateImageFrameFor(const Element& aElement,
                                         ComputedStyle& aStyle)
 {
   EventStates state = aElement.State();
   if (IMAGE_OK(state, HaveSpecifiedSize(aStyle.StylePosition()))) {
     // Image is fine; do the image frame thing
     return true;
   }
 
-  // Check if we want to use a placeholder box with an icon or just
-  // let the presShell make us into inline text.  Decide as follows:
-  //
-  //  - if our special "force icons" style is set, show an icon
-  //  - else if our "do not show placeholders" pref is set, skip the icon
-  //  - else:
-  //  - if there is a src attribute, there is no alt attribute,
-  //    and this is not an <object> (which could not possibly have
-  //    such an attribute), show an icon.
-  //  - if QuirksMode, and the IMG has a size show an icon.
-  //  - otherwise, skip the icon
-  bool useSizedBox;
-
   if (aStyle.StyleUIReset()->mForceBrokenImageIcon) {
-    useSizedBox = true;
+    return true;
   }
-  else if (gIconLoad && gIconLoad->mPrefForceInlineAltText) {
-    useSizedBox = false;
+
+  // if our "do not show placeholders" pref is set, skip the icon
+  if (gIconLoad && gIconLoad->mPrefForceInlineAltText) {
+    return false;
   }
-  else if (aElement.HasAttr(kNameSpaceID_None, nsGkAtoms::src) &&
-           !aElement.HasAttr(kNameSpaceID_None, nsGkAtoms::alt) &&
-           !aElement.IsHTMLElement(nsGkAtoms::object) &&
-           !aElement.IsHTMLElement(nsGkAtoms::input)) {
-    // Use a sized box if we have no alt text.  This means no alt attribute
-    // and the node is not an object or an input (since those always have alt
-    // text).
-    useSizedBox = true;
+
+  if (!HasAltText(aElement)) {
+    return true;
   }
-  else if (aElement.OwnerDoc()->GetCompatibilityMode() !=
-           eCompatibility_NavQuirks) {
-    useSizedBox = false;
+
+  if (aElement.OwnerDoc()->GetCompatibilityMode() == eCompatibility_NavQuirks) {
+    // FIXME(emilio): We definitely don't reframe when this changes...
+    return HaveSpecifiedSize(aStyle.StylePosition());
   }
-  else {
-    // check whether we have specified size
-    useSizedBox = HaveSpecifiedSize(aStyle.StylePosition());
-  }
-
-  return useSizedBox;
+
+  return false;
 }
 
 nsresult
 nsImageFrame::Notify(imgIRequest* aRequest,
                      int32_t aType,
                      const nsIntRect* aRect)
 {
   if (aType == imgINotificationObserver::SIZE_AVAILABLE) {
--- a/layout/reftests/backgrounds/really-big-background.html
+++ b/layout/reftests/backgrounds/really-big-background.html
@@ -1,2 +1,2 @@
 <!DOCTYPE html>
-<img style="background-image: url(really-big-background.png); width: 1600px; height: 1200px; position: absolute;"></img>
+<img alt=" " style="background-image: url(really-big-background.png); width: 1600px; height: 1200px; position: absolute;"></img>
--- a/layout/reftests/bugs/521602.html
+++ b/layout/reftests/bugs/521602.html
@@ -1,4 +1,5 @@
 <body onload="document.getElementById('i').removeAttribute('src');">
 <div style="outline: 1px solid black">
-<img id="i" src="data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%C8%00%00%00%C8%04%03%00%00%00_v%B3%AD%00%00%000PLTE%9D%0B%08%1F%20%1E231%3F%40%3EOQNefdnpm%7F%81~%97%99%96%9F%A1%9E%AE%B0%AD%CC%CE%CB%DE%E0%DD%FE%FF%FC%00%01%00%0F%11%0Di%C4%2B%A9%00%00%00%01tRNS%00%40%E6%D8%0f%00%00%00%01bKGD%00%88%05%1DH%00%00%00%10acTl%00%00%00%0B%00%00%00%00_v%B3%ADi%C4%2B%A9%0D%7Biv%00%00%09RIDATx%9C%ED%9C%7Dl%1Bg%1D%C7%7F%8E%ED8%CE%F9r%99x%1B*k3%95n%7Ft%0D%A1%A1%A4UI%14Q%10%8C%0D%16%A6%F1%07bJ%B32%40%1A%D2%9A%B5%EB%3A%A8%D6%1A1i%7FtL%E9%10%FFP%91%1A%A11%ED%0F2%B7i%95i%DE%1C%0B%26U%02%AD%98l%EAx%99%8A%9Bvi%DAd%97g%0C%8DVE9%9E%B7%7B%B3%EF.%CFs%F6y%DA%C8%CF9%FB%9E%97%BB%CF%3Do%DF%E7wO%7C%06%A8%B6%0E%C7%FEO%BF%C0%3E%2B5%B9%EA4'%A4%D8%D3%18%88%5Em%B3%8E%C4%EE%9CO%269%0B%BC%80%D6%A5%7C%9DE%10%B0%89%BD%D1CR%FF%8AG%0Fi%D1%9BP%12(%9Ch%02%04%3A%1A%04%09%3CM%B1!%90'%E0p%D0y%8A%8D%60(w%C0%9B%D7%03%D2%CF%EC%2F%D5%0FI%E2b%7C%2B%20%3D%B1%3CR%3F%24%8E%B7%23%F5%9FfeHC%EA%3D%C8%12%B8%BA~%135%24%DD%03%E5%AFF%0DQ7%C0rO%E8%A3%DBG%C5%F2%BD%0Ec%A1%19%B0%7B%BBX%BEc0%18%9A%A1%5C%FF%7DI%24_r%00%A4j%EB~%A7%3C%A4%86~%FB5%91%83~%B2S%0A2%F3%C0%0F%1D%A1D%EE%D5%1D%02%07)%0B%EB%E1%AA%04%E4qx%C5%11Jf%D5%B7%04%0E%8A%0D-%C0%F4%9D%E2%90%EDp%0EZ%07%CDP%BA%A7mA%E0%A0%F1%3Fu%822%F0ia%C8%1Dp(%F3%99%9C%19%CA%CC%1D%12%E9%C3%3B%D2r%83%E4%E7Ss%CFo%B4B%F1%E1%1F%8B%1Ct)5%24%C3P%EF%D37%5C%B3%83%FB%9E%12%99%D2%94%2B)%C11%CB%2Cq%B1w%5B%D9%0E%F6%AC%13%19%C8%CA%A2%24d%D1%19j%BFsN%A4%1E%14%24%07%99%D0%9D%C3%24%F9%E8%8D%5D%02%07%A9y%0C)%BC%2C%CAP%8D%D3%CB%B7%DB%CD%10%7Bv%7BE%E8%B8%D4w%40_%1A%14%84%A4%16%E0%AFw%CD%DEk%06%3B%A6%FAE%86%09%40%9B%0E%1BAPK!F%DAy*k%06%8BS%5D%97%C4%0E%9C%04%ED%85M%82%90Iw%B08U%E9%15%3C%12%E2%FF.%AF%9C%89%DA%14%C0%1F%0F8%20%85%C5%DD%A2%90%E7%07Es%9E%84_%9F%DF%60%07%CF%E4%173%A2%87%BE%2B%DC%8B%13%BB%B6%E6%1DU%D6%D2%BF%BE%E4%97%F5%25%D5%99t%02%DE%10%86%A8%FB%B6%FCj%AF3b%E6%B2O%CEV%FD%9B%D9%87%0Ffy%E8%95K%10%CF%89B%C4%ED%E0%93kwe%E3%5C%0F%D2%E7%F3pN%B4%DD%25l%1E%BAg!1%C2%02%1D%FD%00%BFh%3C%03%DEV%DE%99-'x%3B%A4%AE%00%049%F5am%B1u%EF%DA%B1%E9%2C%0F%3D%9E%86%91%08%20%0B%DAk%5B%F4Y%AB%1D%C6%23%40%00%7C%F9%A1%13%07%E6%BB%CCP%E6%3F%91%40%5E%D7%F5%BE%CB%D6%B8Mv%06%DF3%86%B4%17t%5D_%3A%96%E5!%AD%0F%A4fyA%D37%8D%8F%8E%FFm%9E7J%FB%8E%DA%B5%99J%FD%90K%AFI%2C%E0%84%86t%E0%B9%1D%94R%24'7%EDZ%C7%CAy%EA%B7%F7%05%12E%C3C%BC%09%0D%BFj%AB%B6j%0D4%03Id%C6y5y%84%06%12%0C%24%93%B9%E9%10%8DT%17%02%03%0C%03%13I%5D%E0%18%12%89%0C%92%8Ew4%BE%917D3%19%B2%10zq%F8%94%1A%D28%84%9D%1C%0C%8D7%80%C1_%F4ZH6%E9%E2%D8%10%00%C4%20%C8%8C%E7%10D%03l%8Ff%0C%09%D1%B4*%08%AE%3B%D6%00%B8%9A%0C%C3%A0%9B%05%09Y%5D%1A%3D%BD%0D%D1%CC%92%D8E%05%1B%02%B2e%E1%10%DC%9E%B4U%C85%1A%24%D6%B0!%3C%CE%0D%91%C2%F0%1AF%B4%86p%BB%02%EF%5Df%9B%D0%9Ee%D0%8D%D4%1D%85%90%FD0%7DY%F6%98%10%C3%1E%B4p%83L%C0J%F6%AElw%11%B7f%FC%1B%EB%FD5%EFF%8D%AC%D5%82%20!%D4%25Z%88F%86%BA%C1%86%B2%C6D_%A3C%90%C9%B2)%F9d%18%D2%D1jP9%23%8A%AF%89O%A9%9A%25!H%B3%F4%98%08%3BW%19%A6%F1Ts%90%C6%B5%07%D84%20U%12%AE%E5%F4hS%CB5%06A%A6%B6%819%178%B4KfJ5%5C%10*%FAD%D8%11BL%E5%5D%10%83H%3F%92%87%A0*%88y%F1%A4%FAL%95w%96%C2%9A%D0%24%20%06%B2%9B%00%98%E8%5B%CD%C0%E7%5C%ABMX%B3%85%80h%5C%CF%11%BFLD%3D%056%BF%D0%1D%C4.%C5%EC%5Df_%94r%D8%C2%88%B6%B4E'%C0%B6E7%93%ACZc%8Du%5B%AA%87d%DC%D0%DE%1B%19%04%8F%15%EE%86%D7%D7%3FL%99%A7%E2M%AFY%A3%0A%C5%05%07%19a%9C%DF*%E3%9Aj%EB%06%D1s%AEW4%1E5%10%E2%D6r%13B%D5%98%EExs%F4%0Bb%14%03%F9%40%0C%26%C7%B8%26%03%D4Pt%BDK%F3%830q%C4%82%D8%18%88%E6~%01%9FGp%83%B0%3B%3D%FF%DE%25%061e%DE%D9%BB%D8%9D%22%A2%FD%8BBxl%1D%25%E1%C5%09%25%FA%A2%0D_%17D%CE%9A%02%F9%F0Xuu!%9F%FDp%0A%A3yA%D0%07%15%C2%E4%9Dm%40%BD-%B2P%C3g*%EEq%D9%DE%BF%E1%9C%14%C4%98%1Au%0F%C1!%F4%60.%D4P%7F%D1%99%60y%9An%87R%0C%E2%12G%C7B%0D_%C1%B1%12%98%B3_%E5%E0%87%80%B0%5B%1E%06%A1%F3%A3%E5%CB%23%B6%8Ac%03%88%C7%1A%16%82%1C%25%01%2B%91O%C6U%A5%90%818d%9EM%81%F6%8D%17XUop%1F%DF%D9%1E%C2%10%C3p%F6.v%1C%5D%A8%01%E6N%B0%DE%85%98%F7o%B8z%97puy%94%ACA%99%02L%C8%8B%AB%13%22%D6%F3%FF%7F'%05%E9%95%D1P%90%95%D3%EB%BF%17k%0A%C4%1C%8B%88%DF%C2k%C4%8F%A7%1B%5B%BC1%EF%B1%EB2%8D%2B%3DX%8B%CE%86%F5%0Av%1E%E5%20%96%04%3A%97s%EC%AD%B1%10%B3%BA%22%858%A7%26'%A4~%B3%17%CA%18%C4p%BD%04%20g%F5%AF%0B%40%2C%97%9D%2F%D6%BBz%17h%2B%F5%AE%BDpJ%A40Uf%FF'C%C8%AEC%98%C7J%24!%15h%ED%8C%1Cr%13%B4W%E4!%92%F6%BDr%BC'r%C8%99O%0C%0FE%0Ei%BF%B0%24%F2%DD%EB%FALYX%FC%C6H%E4%90%8BC%13b_%5D%0Dk*%FE%5B%CA%17%A3%AD%AF%C4%85%3C%5C%80%89%EEH%FF%A9%14%FF%E5%BB%E5%05%18%9E%0C1%1C%C5-14%BD%06%D4ee%3EJH%1A)7%40%EB%5B%B03J%88%BA%003%A3%E3%A3P%1C%8B%12%F2N%EF%E6%F7.%03%B4t%F1%88(%BEzu%9F%CCC%93am%DDp%B9%3DGv%A2%AC%AEO6%E3%EBpG%9A%019S%FD%80Y%14%0D%1F%FBn%13%1A%3E%CC%F4.m%99%2BM%80%C0%96f%40%8A%A5%26%40%E2%D1%3B%11%003%A2%0Fi%D4c%0F5%81%01%DB%9A%01%F9%F0%7Fcd%D5%3E%80%F6%CC%A9%B1%18%D0_%7B%88n%DESo%82%DBN%12H%E1eYH%06r%829%D3%230%F5m%FCyq%FD%E6%A7%24!%007%0B%8E%CEd%0E%E2X%F6T%3C%1F%3D(%0D%99%F8%AFX%3E%7C%5B%FEg%7C%3D%A9%0A%C09I%D5%98%06%5DP%95%139%20%B5%15%C7%90%8EQ9%C8fxR0gzP!%EEA%82%40%B2r%90%BE%C0TW%B5%7Cq%80%04%DB%B0%E7%D9%91%93%83%7C%3F(Quy6%CA%F1%DE%DE%CF%1F(%DC%06p%7C%AE%2C%059%1E%94X%F5Tp%9C%BE%17%BF%B2%E7%ED%3F%C8%3C%5BM%0E%1C%018%FD%A8%F7%95%25%DD%0D%DCB%DF%D5%FD%3F%C2%D7%B6%D1%2B%BF%9F%A9%F0%B1%F2%D9%8F%3F%5C%EB%F1%3D%87%B7%98%BB%AB%C6%1D%FB%87e%20%00g%AF%DER%F6x%B6%ED%9F%25x%E3%A0%BB%80%F1%9AL%C2%A6%90%DF%A3%F8TMtr%0C%EE%D9%D5%D5(%C8%F4Q%F2%94q-%BBS%E9T%DD%0FE%86%5E%DC%CC%C0%1A%FCn%3F%F3n%DB%B6%B6Q%F8%9C%2B%26%B4%C2%B7%02i%F3X%B66e%FA%F4(%B8%1E%F6%0C_%5D1z%EF%E8%E5%1F%A7o%1D%82%FB%DD%90%B0%DE%D44%7D%FF%92W%D2%D3%F3%2F%5EsE%C4%7F%F7%C4c%A1%20%CF%90%B7%CC%7C%C1%23IY%BB4%E2%8AH%AD%EB%DB%E7u%8E%A9%FD%3F%0B%86%3CBO%A7%EB%9E5%D1%EF%0Ef%0Aw%7B%3E%F5%DAW%B8'%B0%22'u%D8%EA%2Fv%0FTG%A4%0Fz%9D%AD%07%5E%AA%04A%D6%FF%03%F6%F8OZ%8FTG%24%1E%2Cyd%EB%F7%1Ag%0E%23%BF%0F%B0%D57%F5%E9%EA%88%9D%7B%BC%B2%1D%3F%BC3%87%3FR~7%8Ad)%F2%07%BE%90bUM%26%E7o%F7%CA%96%B9%FB%3C%F98r%D2%A7e%F4%1C%A8%FE%0F%FE%9E%CB%B9%C3%C3%A3%DE%F7%E73K%25%DC%7B%E6%8E%FA%2Ci%DF2%00%9F%F5%BF%87%8C%8D%B4%3B%2F%EE%E4u%C5%F34jw%1F%1E%D1%A9%8Ft%FB%2C%D1%1E*%C3%A4%7F%EFJl%DA%B0%DBNM%CD%96%DA%3C%2Fh%E6%BD%03%B8%84'%F2%99%81%C7%DE%F4J%FF%CB%10(%83%BE%90%D4%F9%7CK%D6%0AM%AC%81%96%8F%96js%FD%DD8z%F5%C6%C2%A99%DC%86K%9E%3F%13%82%FB%5E%CD%02%8E%FD%B5)%E52hlYl%A0%26%97%94%E1%CEQuu%B6%A2%AB%CBc%C7XuU%7CK%CB%EC%D9%15%D2k%CC9ml%E7%8FQ%AF%04Y%C1%FE%07o%F8A%AA-%A1%E6%92%00%00%00%19fcTl%00%00%00%00%00%00%00%C8%00%00%00%C8%00%00%00%00%00%00%00%00%00%01%00%0A%02%94'%03%1A%00%00%00%07tIME%07%D7%03%10%13'06*4%98%00%00%09%FAfdAt%00%00%00%01x%9C%ED%9C%7Fl%13%E7%19%C7%1F%9C%B3%7D%B1%CF%17%CARu%A0%8C%98%B6%ACe%A2%FC%A82Z%AD%40L%E3B%60%2Cf%1B%9DhG%87)%EA4%8D%AC%09P%B6I%9D%C6%A5%FCJiJ%A2%89J%FC%01%E5%A0%D34ihN%A7%89U%FBc9%13%83%C2f%E2%AC%B4%1A%D3%D8r%10RX%D7.8%09%E4%97%C3%ED%CE%B1%E3_w%E7%E7%3D%E7%22M%CAW%89%7D%EF%FB%3E%EF%FBy%7D%AF%EF%7D%DF%7B%EE%7D%0D%90%AD%92%B4%E3c%DF%98x%BF%93cU%A0%D2!%11%CF%D4%40%A4l%0D%A4%25V%B6j%18%91I%B7%02%F6%A8P%E0G%40%A8%ED%80%F9%10%FA%0B%94%F9%90%22i%1A%3E%09%84%DB%A7%01%02%25S%04%D1-%262%25%90%E3pB%AF%9C%C8T0%98%AD%F0y%99NzwcW%E1%10%9B%00%F0%7D%9Dtky%7D%E1%10J%FE%3FSx1%F9!Sr%DE%F5d%15%00~o6%C4%E1%01%F1%05%B3!%EC%0A(%F7%18%CE%ED%E4pv%BD%C0%1Bf%C0%AE%8D8%BB%D3%B0%C90%83)%BB%82%BA%8Al%3E%F0%90%94%BBWH%0B%D0%FE%3F%7C%17%93%E9%17%DB%89%20%3D%AF%FF%2C-dm%FD%D7fD%26%26V%01s%09%20%EF%C0%C7i!%5B%0B%7B%0F%91%C9%E2%8FA%F0%25%3Cd%23%F4%81%7D%B2%11%1D%9E%E2%18%22S%E0%9A%1B%18%DFW%D1%90%AD%D0%E0Z%DE%9A%0C%B9%86%1A8D%A6%CD%F2%C5H%A2_v%0C%BD%BFr2D%D5%BD%85%C94L%FBI%18%ECni%C5%BCT%F0%D0)%01%91%89%19%A39%12%88%F5%AEw%83%98%0Az%16%F0%18%C88!d%3C%3D%E4%7Ci%C8%8F%81%CC%26%83%B4I%E9%97%89%ED%CDE%CB%10%99XA%86%84%3B%B1%0C%F6%81%AB%E5%2F%0A%93A%CB%07%1Bq%F3p%BA%16%A4(%B6%F7%A2c%F0%EFo%0E%FC(%19%2C%E9%A8%C1%5C%26%00%C5%12%AC%04d_%0A%16%5E~%E9hI%06%23%1D%CB%86q%19C0%EB%D2j%24%24%94%19%8Ct%DC%F1%22s%02%F5%A0%88%B4%EC%00%F8GS%1A%24%3C%BE%0B%0By%1F%3D%A0%5C%80%DF%F5%AFH%05%BB%85q%176k)%87%B5%B4%EEY%2F%A4%9D%B2%A2%9A%0A%CD1%EB2%9B%9E%D4%0E%B7%D1%10%F6%D0%DA%DF%1EH%8F%E8%19%D5%B0%B4K%2F%B7%1ClN~E%3E%1E%06%AAU%C3RE%CC%B6%91%8Cp%1D%AFn%D7%7Cr%E9%9E%16%CA%3F%11p%F4%0B%D0'%E2!%CA%A5%92%AEnN%D5%8A%1D%81%CA%01%B0%26f%B8%255%00%BF%22%60%00%9Dy%8D%2FW%3F%0B%CC%7Df%CE%80hM%D4%80%1E%03%D0%9B%D4%E7%C86%3B%3D%E4%A8%10%D4!%E3%F6%03K%F9%60%B2M%DEq%00%D1%B4%3D%E8I%0FY%02%EA%1066%EB%E6Zi%40L%86%03%24%08%B0%0FnI%2F%B6M%EBF%EC%3Bo%B47%8DLv%D1%AE%2F%12A%EA%3C%19%C1%DDZ7%04%BD%92T%3D%3Ay%DD%DA%DC%FA%F7%8C%99r%0C%8B%19a%AF%16%E4%92%24I%D1%D3%C96%99U%0D~%3C%C4%16%F5fT%E9%91%C8QU%BBbiu%80%0B%7C%3A%92%A8%92ss%AEoF%AD%FF%D6%F2%CCDU!%F4%F0%CD%7C%0E%9C%92%DC(%0DWT8%D4%A7%1A%EF%1C%96%CB%60%80%D1%99%8E%E3!%EA%B6%B2%E6i%C4O)D3%DETHA%0D%3F%A8%01%A1%08%3Cw3%9A%D1%8Cf4%A3%2C9%1B%09%26%C8%86!%DER%D1%7C%0A%04%B9i%80%D8%3D%D3%00%A1%DD%26%03%AE%5DZ%07%1F%1AwM%A2%C4%94zO%09%DB%04s!%96z%B0%BC%FA%A0%B9%0C%F9%D6%19l%D5%F3a%0A%9Ei%E8H%BE%E9%B0%97%B7%C2%9A%96%FC%A6%C6UR%0F%1F%0E%C9S-%A4%E3%C4%98%1C%83%87%97%0B%00%C3%CBE3)%17%7C%FDr%83%BC%10!%FF%16%B3%AF-F%DB%B6y%FD%F2%AD%B7%7D%24%AFa%B6%ECo%7F%0Bm%DB%F07%B9%FC%EB%FF%5Dpm3Y%E3%3B%7F%0D%01%1Ek%FC44%D7%82%7DYd%CD%A0%88'%1C%F0z%2Bc%40qHs%D7%7D%F9%AE%AF%C2%5B%E6(%F7%E3%190%B6M%AA%1D%03%3B%16R%2C%B7%F8%ED%A5%D1!%F8%8C%E4%82%F4%F5%BF%0D%83%C2u%01i%5E4%D1%12%01%A2%06q%CE%A9%07%B8W%8Ey%0C%11W%F7Dm%AC8_iB%96%A62%0E%C6%F0%F6%FB%26%DE%98%BB%24%90%12%08%B8a%1D%DE%FE%91%C4%7B%A5H%00)%E2%B7%FB%A1%01m%CE%0C%25%0E%EAH%A6%2C%CC%C2G%1F%96%AA%FCXs%F6d%E2%A0%99%23%80%C0%8D%C0%CE%F6W%7D%D5%24Y%14%B5%11A%E0e%A8%13%5CaRH%84%0C%F25%03%9D%1D)%84%99%7FZ0%1DB%BD%B5%CA%00C%07%C2%AE%C9%7DRq*%C4%1B%81%04j%B5R%EC%AD%B6%9C%B8%3A%A9T0%00i%93%BE%A4%91R%222%9Ff%C7%FD%FD%DD%E3%22%BE%EC%12%15G%0D%97i%12%01%B8%19%3F%A0Tl%F5%1C%3B)H%F2%80I%C5e%B9%A2%FA%00%0E%02%B3%CC%5C%7F%17%C5%7DR%E6%AC%AC7%17%C2H%2B%FE%D9%5C%ABS%D8T%40%AC%D1%CA%E8%CF%F5%0A%CB%0F%C9%DF%F0E%AB%98%CB%F1%03%C3%0D%8FP7%99%F7%DD%98%827%F13E%C3%0AA%F3%D7M%87%5C%01W%83%A9w%16%8A%A6aQ%A1%3C%C9%22%98%FB%18S%F8%CF%C30%CA%9B%CB%E8%ADx6%BA%F2%CENS%19%EC3%E0%DA10%FB%03S!%B4%3C%1B%BF%E1%F3%FF%D4D%82%DCc%08%F2%DBa%C1%DC%8BQY%E3I%BB%8B%3D%E6Bx%00%DB%9Dv%D1%5C%88%3C%F1%09%C5%B0%2B%1E%8CB%22%5B%F6%CF%8F%95%A2V%8F%19%87%B0%8DG%1Cf%3F%DCQ%C6%3C%B2u%3B3%90%19%C8%0C%E4%FF%19%12%EE4%1F%D2%5BQu%1C%01%B9%25%7D%AF%00%C83%00%BB%10%90%03p%B1%00%882%C6%23%20e%86g%80%891%9EB%40%EE%80%DDm%0C%02%133T%0A1%0F%5E%02N%E3%BB%95(%1E7%15%FE%B1Hy%8CC%9E%C0m%18%E9~%BC%CEo%1C%D2%BCe%FF%00%02%E2%1C%8C%A2%9D%9E%99%A2G%80%EAl%3C%829%5DLl%7C%9B%B1%1D%1F%3B%7B'%1A%1E%03%B9%EBo%23r%C7%26%E5%E4%E8%16%14%84%95%FF%A2B%C4%D0%F9%B2%8A%EC%12%14%C4%3A(%C0%20%B4U%E6%B3S%13%05%CC%7C%14%84%FAM%A9%18%83%BA%90%DB%00%C4%D6U%C4%E1%3E%89%3F%B8%18%D8r%C6%88S%92%AD%BC%87kx%C7l%E6a%B0%DF%83%ED%06%20%E0%9C%8F%83%B01%E8%E1%02%1CDx%03%90%9EE%13%90%1F46%EAC%E6x%AB%1E%1A%05(J.SD-%BDJ%E8%F4%93%22%0A%B2%3B%AB%C8%5C%0B%1D7%D2%B1%E7%9B%02%F5%F9O%17%B3%A0Nt%C6%1D%FD%BC%96%89%0E%24%D4.Uq%E1%CE%7C%90%E0W%0C9%D5%12%BA%02%9F%DC%DE%5BQu%2C%0Fd%EB%99B%20%96.%D7%C21%80%7Dy%20%7Cw%F6RO%92%86w%3E%06%ED%CA%18%9F%EF%C1%8A%E5%B5%7C%0D%AF%A7%F5%9B(%0E1%C6%170%BC%CB%3AW%AB%ACg%CE%3B%C6%BB%0A%F2%22Y%8E%2B%B3%C7%FC%E3%C9%DAB%20t5%8D%1A%E3%23%85%ACKp%C5h%1Ff%8CO.w7%24%FB%E3%F4Q%CC%18%DFS%88%CB%A2%3D%84k%937%0A%60%B8V%1D%C2A6%14%00%B1%09%1B%14%88%25o%B3%E6%AD%85%8E%FA%3AG%2Fr%08w%7FA%FAH%EE%22%FCfC%9C%7C%FC)%87%B9%10%BAe%1A%20v%C1l%08s%19%A8.%B3!%E7.%F2%160%19%C2.%81U%17%14H%B8%93%14%E2%02%EC%F2%01G%3Dt%FCP~%BF%5BQu%8A%10%02%F0%A4%80%B3%B3%B5%02%25w%7B%EC%D8%E4J%0D%02%B5i%3D%E0%CD%92%DCa%FDU%98%D8%15%D4%87%ACWRA%90%90%BD%B2%B5%15%94%B3E)%0D%CF%91A%AA%E0d~%A3%B8%1C%9B%18%B7%C2R%20%84%CF%B3%F4Wg%08%E9%81o%FB%94%601%2FC%08%97%C7%FED%2F%91u%A7%87%98%F3%5E%EF%BA%A6%F0*%80%F3C%22%11%E4%BC%5Eb%D6%AE%60*%FE%1A%D9%B2%FF%FEG%24%7B%AB%95%8C%F2%2C%FD%EA%9B%EA5%B3q%19%C1%A2%F8%2B%DBxD%AE%DBJ%15sM%B1%F0e%F1%D6c%07%DD9%09%7F%94%FF-BV%85R%3AA%02%01%B85%F7)Qeo%DB%F5.%B8%DD%2CjB%08%C5(%BFG%F1DN%B4%8D%87W%F6d%EE%EB-%00%12%3C%AB%EC2%CEe%BB%197%9B%B9)r%96Q%84%0B%94%E7l%A9%3D%EF)m(%E6%E0%B9%8C%18%C3%3D%BC%1D%DC%F2%ABE%E5%12%0E%5E%E5%20c%B3%A7%F1%D3e%89%DF%3B%AA%CD%8F%1DO%FBao%26D0%08%09%C6_%9FWKzo%E4%2F%F32%22%A8%3F%1DW%DF%2B%97O%E7%94%17%D7%88%DA%DA%2Ffi4%D3%2BF%2F%A8%3E%A4VFG%E3%BB%FA%90%C3%F1%E2%E2%8E%D8%5C%D5d%06%5D%E1%1D%AA%BB%5E%AB%C3%AF%A8fO*%24%C1z%B5%7C%13z%3D%3B%C2%D1%ACV%9A%07.%EBzg%2B%3E%83%FD%DA%83%D6%E1%EC%08%EB%3E%B5%A9v%8D%DAu%96%26%E5%F7%01%D6k%A6%BE%97%1D%B1%7D%BF%9A%D9%F9%13%DB%95%01%86%D6%BAQT%5C%91%DA%8F%D6%23bf%D86%F2%A2%9A%99kG%BF%F2v%E6%82%A0%5E%8C%D4%0A%AC%F6%C6%DF%BE%AC%11%B0%8Es%AB%DA%F5D%BB%945%9Ag%3D%EA%C5%3C%E5%83g%FD%9A%10K%BD3%BDr%17%CA%18%D5b%D8%CAj%5E%3E%5B%8FVj%B8h%1BD%08%89%9A%10%EB%EA%15%BBR%A9%F4%40W%B1j%85z%1Ejr%CB%B7%93%82%CBw%F4s%B5%F4%1B~%60%B4%17%9D%D3%FDBQ%AAWk%5B%0CE%0BU%BE%5D%FFy%E0%EC%DCE%E1%8BCr%1BFU%7F%26D%FE%EE%E9%2C%9BbFa%16%1F%3F%F2i%2C%B1BJ%FErd%D5.%D5%A3%B3%E5%FCi1~%94%EFQ%08%F1%0A%93%F4accb!W%81%BF%0E%F7%3FB%09%85%E9%1Cj%D9V%00%00%00%19fcTl%00%00%00%02%00%00%00%C8%00%00%00%C8%00%00%00%00%00%00%00%00%00%01%00%0A%02%BAw%CA%9A%00%00%0A%13fdAt%00%00%00%03x%9C%ED%9Cml%14%C7%19%C7%1F%EE%D6%F7%BA%BBg%A5%14%C2K%B0!%B4%B4%89%83%1D%C5%16%B4%25p%0EN!%C1%C1(%15%C1m%1A%7C%A5m%40%0D%89%1D%88H%3E%B4b%C1%07v%89%5B%13%8A%E0K%80%B3jW%FD%80bS%C0%FD%12%D5k%03%09%A9%AE%9C%23%DA%A6%A9%D2%B0%60%14%91%C8*%18%1B%02%B6%F1v%F6%DE%7C%B7w%B3%FB%EC%9E%D7%AD*%FF%A5%BB%9D%9Byv%7F%BB%3B%3B%2F%CF%EC%CC%01%A8%E5K%86%5CB%22t%23%C3*G%A5%40%02%13%05%91%D5%1AL%26y%FDT%23c%D2%E2sc9%5E%00J%0FM%06%248%19%90%CB%22%17%7C%DAj%88%7Bqg%F8%98%D5%10x%F2%19%B8.Y%0D%E9%0B%8A%1B%ACf%00%F0%8B%16%5B%0F%81Z%D1z%06%7B%D3z%06%7CX%3BQG%E2%7F%22%D0RJ%7D%94%14%C3r%15%8FPR%F2%96G%26%0A%D2%FD%FE%5DJJm%E5)%AD%1D%CF%8Bx%C8%1F%A1%86b%7D%B0%E0%EB%1A%FBy%1E%5D%8B%874%C2%95u%94%24%F6%9B%1A%FB%F9%FA%9F3%02q%E6S%92%F8%7B%AA%88%FE%0BG%92%E1%AB%60%13%D1%90Np%15R%92%3C%25%AA%88%0D%DB%9B%85D%F8lJ%03%AD%AB%1E%F1%C4~J%12%A3N%A8%04G%B2%C1%BF%08N%DAm%CE%D4N%99z%E7%BB%25UD%1B%B0I%88%EDxw%08%CBp%0C%88%D4%B4%D5%19%C6K%EB%13g%CF5L_%85e%40%F3p%1D-%C9%3D%AA%8A%60W%0C%7C_%F2T%C6x%E5%F8%9B%C5%CD%CC%F7%D3%D2%9C%EA%8Bl%3F%B0)%E4)%0ED%C3%D3n%0Bh%88%7B%8B%9F%5E%A6%3EN%87%B0%A3%D7%8F%2F%5Cp4%F6%23%B2%10%0FaN%D5%ED%C3%DA%BA%96w%F5%F6'%B8%ED%15%06%20g%EB%DE%C3%DA%B2%C5%0B%C6%7Flz%CD%00%A4%CD%3FM%C2Sf%25%C3%8F%06%03h%88%AB%2C%3F%2F%84%B6~*%19%E2%E5%06%3Fz7%A8%1A%C9%A8%3C%E8%AAL%86X%B9%9AV%E3)%A9K%1B%D2%BA%20%9F%17%ACy%00%0D!%0Fb%7F%2C%E4%1E%A8T%D7%9E)%3A%D3%0Bei%11%C7B%7B%D1%90J%F8%2C%EE%090O.%1E%A6%DB%FD%0E%60wZ%84k%EEU4d%87%EB%AB%BB%E2%90g%EE%D0%CF%ED%DC%80%04%DB%D3%A3%9E%08%A1!%EE%07%3F%8D7%96%CE%B1M%7F%A1Z%C9%F3E%A7%AAJ%DA6%D4%8B%858%03%8Ex%06%F2G%18%EA%ED%3A%F6m%9B%3C%24%A6%C7%ED93%17%0B%E1%FD%5D%1D%890'%0B%D9%8D%B8%19%A0%BE%0E%C5%D9%D9%84%85%C0%E1%94%EA%FDG%94%A7%D2%B1%18%BCC%EA%C8%0Dp%85rN%99%B2%0D%04%92%E1%AE%17)6%A4%ED(8%9E%1E%C7%CF%06%8FF%B9J%97%E7%FE_%25%F7%7B%EC%20%05%12%20%F5%8F%9C%9E%CF%EEy%00%F8%E2X%94%0C1sfRN%E4fQ%D5%80%AA%AB%DE-%00%FC%0C%0D%19%2F%1C%5D%7B2r7%AE6%F9%8D%DA4%EF%9D%ED%1C%94%94%BE%17V%E3%BD%E3%9A.%3F%CD%E8%87'%E4gS%7F%17%CB%1B%C1%08%C4%96%7C%84%CB%BBB4%23%AF%BC%7BSG%CAo%B9I%F9%DE%FB%5BjoB%A5%BC%ADR%3C4%BDV%A2%19%D9n%AE%9A%99%DA%CD%A8%8A%9E%CE%EE%E7%91%0Cp%25%8A%20%2F%D3%FBR%5C%D5%CC%3B)%05%3Cc%B4%E5N%96%7Dh%233%19%25..Fo%00'%9BoE%1B%8A%A2%F9a%BA%FE%D9%14D%2B%FE%BF%93%F1S%9A%D2%94%A64%A5)%E5%AA%9E%8Awr%D9%9Do%C2X5%3F1(%E6%00%E9%3B%89%F1%D8%FA%E1%04%BE%7B%9F%A9%8D%9C%88%B2%F3%DEV%BE%3D!3%0C%B2%D7K8%CB*%E5%CBv%DB%0C%24O%84%3D8%CBf%91%7C%F9%0AD%13%10F%C4%BDj%F3%1E%8D%08dc%0B%FAM%40%1C%FBa3%C2%8C%DD%5E%DE%A3%F4%F8%99%26%9A%0F%A5%A1%FE%F3%0Fx%E7!%ECZ%BF%F8%F8%2B~P%DE%FAj%8D%D1g%D7%DF%0Bd%0D_%22EkH%C6%2B%10%B6%B0E2%C8p%DD%16%23%EB%2F%60%2C_!%19%AF%40%A0%E8r%C8%20%E4-%11J%BBQ%96%D7D%A8%89%BAu%87%9C%85%06!_%03%CF(%D3%A1oG%BC%B0%C7V%16oU%02%7D%DCp%D8%18%E4%1B%60%F7%BBq%A3%D1l%B8%BFf%E6%F1p%B8%FD%E5bT%26%8E%AB6t)%C4j%0C%E5%A5%C9%FB%CE%01%D2%D9%9F~h%FA%CB%86%18%E0%1Ai%97%E0~%AC%B1%00%5C%98%DC*%03%2Fyb%FA%D7%1E%F5%88%A0%06%24~_%0D%3F%5Ep0%0C%97E%24%C4%1F%DB%BA%D1%E3F%09%D9%E5%3A%2F%EA%F1%22%F5u%DC%3F%E4%D1%83y%09%B1%B4%81%BC%2C%A6%89%D9%17o%18%85%40%15%F2%3AHQIT%8D%7F5%0C%89%88h%D3%C4%10%A9%DD0%E4z%00m%9Axv%1D%A2QH%3B~%9E%CB%B1x%8F%C3m%18%B2%9E%F6%9E%3AS%97%84%D8%96%0D%19dp%23%F8%F9%14v%7F%1C%22%18%840%25%BFA%DB%26*y%EEM%D1%18%E4-%F1%92%84%B5u%C5K%23%2B%DF4Fi%BEyr%8B%80%B4%F5e%19%A8%A1%ED%CBd%B1%D5%1A%D8%19%87d%89C%0EEqB%F6%F8%09%85%E8%C6%FFoB%3E%C9%09%82%CBxvh%E3%2F~y%D6l%C6%23E%1A%C1%D2%83%E2%04%1D%8C%A6%C3%00%AB%B5%A6%82L%88%D6%00_%80%1D%DE7%A8q%9F%B0%12v%15i%18%E6%A2E%C9P%B0%FCK%C9%22%C8%C5%C7%13!%FB%BB%E8w%93%86%F5j(%1C%F3%0F%AA-C%90%E2q_%E9Je%C2%8C%13%FFv%DD%B8%F8%EF%00%EC%00C%3D%13%E3Rz%B1W%08%60%A9%85%8C%E8%3C(%D2'%7F%BF%D0J%88%2F%06%A9Aw%16MAB%A4G%16%80z%AB%0Ab%0CB%0AJ%E4.T%A3%A7%BA%98%82D%AA%EB%07%E7%FFi%EE%DF%2C%85%F0%8D%FB%98%0F%A6%E7%7F%D7R%08(%035%C1%86%5C%86%C5%90%10h%11%AD%87x%F0%5Dk%B3%10%1F%1C%0BM%02%A4%FC%05%EB!V%BF%3A%F4%01%A2W5%05%89%8A%25%99!N%C2%950b%F8%82%F5%90%D3%A5%2B%AD%5D%99%C0%EF%07f%0E%C0N%84)%5B%F1s%93%903%3F%00%86%B4%F1%D7E%7DS%DB%DB%A7i%D3%83u%B4%CC!2%02%C9xA%DF%D4%0Ep%D4%14%C3%13%80%E5y%0A%04q%8E%8C2%B5%D8%8CH%07%A2RYV%A5t%26%F4d3%FB%A4%BB%05X%ECz%24u%CA%92%C6%09%05%E0%B2)%08%B7%CE%1DpUU%D7cjGn%A8%A1L%DF*%9B%DA%07E%D7%AF%1B%F7a%EE%03%FB%D4%AEW%CDu%FB%D9%92%E8R7%14%24%FF%E4%B5%80)%88c%1D%0E%C2%92%CF%EC%22%97%89w0D%BE%19%BD(%88o%19%40M%C8%85%9F%F7%98%AA%C8%BE%19%9D%18%88%A3%ED%15%E8%07%FB%7B%82%19%C8%89u_%EC%F5%23%20%5C%E19%11%A0%95%C3%BE%1FHS%F0%E1%5E%16%03%81%87%A0%09%F8G%E053%90%86%ABC%2BQ%90Vpu8%04%E8%0B%99%804%C2'%1F%A0%20%B6%8A%8A%BB%07%C9S%96%98a%9D1%F8%92m%EAU%12%02%A8%DB%E5%5D%A17%F5J%E3%10-%15GQ%90%96.%3D%0B%8DCpKO%B1~D%1B%AF_%F1h%1987%B3e%886%BE)'%08lfG%10m%7C%C6%95%18%C9x%D2%00%2B%AB%87t%DB%F8%CE%9C%E6%DC9%C6%98%1B%B1%D1%60M3%BBd%EC%B0%E9%3A%EC%CF%BB%91e5%92Z%1E%FC%12%9BLyWu%B8oD%DD9%1Dm%C9%012%ED%7Be%9F%DE%C3%0C%DE8rXc%1B%CDO%E2%C7%EBB%E0u%F3%10Ec%C4%8F%D7%87%20g%7D%D0%84%CA%130%B0%3C%D0%3C%24%C7%B5%EE8H%8E%FA%3F%81%FC%3B%0A%B1Y7%22%AC%E8%CD(%C4b%9F%F1%5B%93%00%E1G'%01%E2%19%B3%1A%D2%2FA%5E%80%40%AC%F4%E3%F9%D5%0D%81K%E4%B1%BAe%A5%1F%EF%0Ap%A3%7B%09%0B%D3%C6%9B%16%23%40%E7%9C%D8%9Ba%8C%1Fo%1A%D2UH67p~%BC9%11'%BE%8A%1C%5Ci%E31~%BCI%AD%DF%A3%BC%A2t%87H%2B%2CZ%06ak%95%01g%FEqe%0D%B6u%90%19%D1M%A4%BA%1E3%7B%CF%A4%5C%3B%25e%C37%D6%5B%F4%0ESQ%DE%B9x~s%86g%19%E1e%FFga%3Ct%40%B2%0C%E2%E3%17%86b!%C6%EC%FDbu%E7%F1%9D%81%CF%0Bb%5D~S%F7%8B%0F%AE%BE%D0%B2b%96%8E%D5ir%26%8D%B1l9%60%02%C2%AC%09W%2F%E3%C7%FF%8B%20%BBRV%D7%B1%26%20%1F%91%82%BC%1F%D8y%E75%AD~j%E2%C8%E3%F2%06%08%84%E4%E5%8Fgk%9Au%97Vl%A5%24%B1%CF5J%DA%0CNY3%A9L%82%FB%87%A8m%F8%FB%BD2%C5%82%11%CF%0A%DA%FB%06%E5%00%F9V%5D%05%1F%7DJ%C3%AA%0E%D6%12%CA%B3%CB%80%23%A4%C9%E0f%0D%2F!%9B%F5%E9%B1%D1%09%A0%7D%AF%2B%CBo%9Db%D2t%99%3F%FB1%CE%C2%87%92%5B%0B%E2%DEV%12%E9%CD%F8%9F%23%5E%A9%04%9F%87V!%15%D2%F6g%8A%2F%D8%DA%F84%D4j%BD%0Dv%15%EFW%C6y%D5S%7DOJJ%EFG%19%E4%88%24%EE%D9g%82C%C8~%0C%F6V%80%1F.%D4%80xeI%81%A8%C7z%1Dk%A3%5D%AC%7C%F0%26%96%DD%B2E%F4%D6jt%98-%D1r%13%F9%5B%B0M%CA%D2a%7BV%84%22%F0%D6As%3C%B3%D9r%11.R%8E%C1%8D%95%E7%F5%EE%3ABIU%0CdY%99%A9%3FM%1D%EF%98%05%AD%E2%D5%DE%EEe%F1%DF-%95%00%B4%D2%EA%2Ci%DE%E1%91_%5C%24%D2%20%EC%BDp%0F%D90%19%15%E4%1F%1E%F6%CA%95m%C9%3F%AE%F9%92%7C%0EQjQ%7B%5D%E4%CE%EE3%FE%8F%EE%7B%A9%2F%FB%A3%E1%C9%07%3B%C9Zf0%23%E5%F4%92%F9%F2-)%F1k%C1%0B%00%ED%94%D1%8E%EB%1D%EE%81%8D%CE%DBp%AD%802%5DZc%DA%14%BB%B61%BEO%15e%8A%15R%D0%23%A8%A8%E3%8F%80%3BY%C0u%9CYR%2B%BF%ABm%A1%96%05%7FA%F7%1F%B0%1AU%A1%96%23%FD%A5%00%00%00%19fcTl%00%00%00%04%00%00%00%C8%00%00%00%C8%00%00%00%00%00%00%00%00%00%01%00%0A%02%C8%86%90%1A%00%00%09%E3fdAt%00%00%00%05x%9C%ED%9C%7Fp%14g%19%C7%1F%92%FB%B1w%D9%DDcFPD0A%98%14%0A6%94FE%25%E4%0C%A9M-m%C8%B4NQ%DBr%AD%ADSmf%8E%AA0%C5q%9A%85%80%0D%90%9A%40%DB%992%83f%83%0C%A3%D3%D6%04A%FD%07%CDB%00%83%9E%5CZ%CB%F4%C7%3F%D9%90d%AC%8ECBr%F9E%92%AE%EF%DEBH%B2%EF%BE%EF%BB%BB%B7%94*%DF%3F.w%CF%FB%EC~v%EF%7D%EF%FD%F1%BC%CF%06%60%A6%22%26%0B%40%1F%C6%E6J%5E%40%B4%99%1A%60q%B2'%E2%05%F0%AA%CB%3B%20%EBo%06%E4%01O!%87%14%9Dq%E0%88%A7%10~%A9%0A%F0%2F%E8%F4%14%02%3D%CB%01%9E%C7%B6%B4Lj%DF%A3%B0%19z%3D%86%88%8FK%2Ba%8B%C7%10%10v.%7Da-%40B%C9%E09%FFn6%BD%D0%A6%FF%926d%8E!%2C%92M%B6Jt%1F%89%F6%CC1%20%10%BEb%B2%AD%CF%E0%F9%D3j%83%0Au%A6-%E3%7Do-t4%7B%0E%89B%B6d%1B%F2j%BD%5D%88%CF%04%B9%DF%C2%F7%F8%DDj%FAo%F6%D2%9F%D8%83%3C%02%B3%E4%99%B6%EF%AB9%B9cfW~%E4%9C%E1%FA%0A%F0%F6%20%07%60%9F%3A%D3%D6%94%DAu%E2%5BfWn3%ACL%BFy%14%7C%8A-%C8%C5%C4Z%93M%DC%B1%B8%CCl%05%BF%A4%D7%16j%26%B3%81%BF%C3%16%A4c%9Bj6%0AjR1%5B%031~6%F8c%3A%04~c%87!%AE%C2%9A%F9%5C%0C%84%1F%3D%13%E3%EFlN%F7%08mv%20%D9)%AC%F9%E4*L%AF%C2%17h%85%05E%E8%CD%5B%AAp%AF%1DH%D2%DC%A9%E8%FA%D2K%18c%BCp%F9Ce*z%F3%AE%A6%D9%AA%93%96%09%AC9%B5%C0l%E3%06%3A6%A7%EF%8F%5Bt%E0E%C2)%DB%24%D3%D5%E5a%1D%1B%9E7%DB%92k%9B%FE%3C%9C~S%2C%13%18%C1%2F%1FS%A6%5B%04-%86s%14o%C3%18%2B%D4%E2pz%BA%16%2F%97%08%90cjx%7C%06v%D5%40-%A6%8A%83%2B1G%8F%08%83%81%5C%FDMi%01i%3C%FB%01%C0%BA%E9%96%CE%C3%B5%F1!%D5%E4%D8%A4%98%0F%E6%C7%C3%23Y%F1p%19%C0%3DC%B3%09%90%EF%A0%C3%A7%5B%1A%03%92xx%B3%C9q%10s0%9F%0A%8E%F7%B6%C4Q%93%9F7%3A%8E)%BF%E6%B6%15%B5%A6i%16%F1%D3!3%01).c%8C%C7%DF%9E8%96%1C%FD%24%FA%DE%C6pUfH%D8tY%991%D7%09%E6%F1%B8o%1F8%EC%A5%FA%FA%B6%C5%13%A8w%1E%99%D7h%099%B9%E8%AF%A9%D2%85%D3L%DD%0A%AC%C0%FA%FE%09g%8CD%97h%DFD%D5%91%FF%DD%2C%D9%82%11%BE%7F5%2C%DEmjJ%C5)%C5%F2%B2f(%FB%5E%AD%E1%D9%18%C0%8E%8E%D7%F3%2C%5C%B6%C0%044%9A%9Bk%D7%FC%7BX!~%ED%CA%FBz%EF%DCu%E4C%EC%9D%A2%1B%99%40%FD%B4%CF%5C%03%E2%5DY%AC%10%40s%B1%1D%FA%DF%EE%01%05%EF%C0%8F%F1Q%FF%DCy%E6%82%AE%0Af%08%92q%DB%F1%CFZ%14%EF%E2%FA%5ENV%99%2FA%9Cc%83!%8E%A4%BF%F0%CEQ%2B%07n%7Ca%D3%19%D3%F7%F5%FE%93%C36%209Z%FA%C7%CE%8DX%3A%F4%7F%BB%BC%F6S%D3m%C2%8F%B4%C5%F8%CE%1E%2F%D1%98%EB%8B%96%10AK%A5*Z%94i6~%E8%0D.j%03rU3%FB%D9)%DA%9FH%A5%F4y%C0T%0Da%A6%5Dte%11%EE%9E%D3L%D3%CB9%D0%A8%DA%87%B4%60%3B%23CUkL%A6K%90o%9F%01%E5%8AeQ%8F%86%2B%1B%F8%ADmF%CE%90uY%1Dv%89v%16%17S%A1%400%13%E5kzWKM%E9%BBL%D1%16%5C%B3%B4%8A%CC%E0gkh4%A0%05p%EC%84%A2%AC%82%09%11%C81-%A9%3C%80P%F4%B1%85%7C4%15%7FK%B7tK%B7%F4%7F%A8s%AA%F7%8CP%05%26%BE%90i%1D1V%15%9E%8A%DF%00h%7D%94%C9X2F%BEv%04%09%10%96%DE%99P%2F%40R%AD%8B%91%5C%3E%A89%E8%12%D2%0AP%1D%26L%2C%D1r%23W%D3nw%07yS%11%E7%9F%8C%91%3C84%ED%2C%8F%BAa%B4U%CF)YM%B8%91%D3%A52%87f%3E%C1%81%7Fc69%18%F5%D6mm%C35%BB%15k%87%BAr)%BDpj%CCu%DE6%0E%A9%BE%3C%A2CEv%94%BF%2C%A3%D5%DEA%E7%AD%FC%1FkZ%C8%D1%FBD0%1A%EA'%B6%0B%BA%C4%1DZ%E1s%C4k%E4%A2%FEh%95%EC%8E%02%9F%AB%A9!BB%7D%BD%F5%1Dy%EE%18%02-%18%C0%F75%AAn%3B%04%1E%1F%5E%9Er%15%E3%B7%93%16%E6l%10%EA%F1%051%06'%0A%84%BAy%A4%EF%20%B8%84%88%CBX%AE%E4Cw%10%A8%AA%A4%FB%E4%90%22%BD%2Cj%AD%5BN%2C%0F%CD%F9%FA%DE%60%CC%25d%3B%1C*%22%95%A3a%F3%D9N%C5%25%A4%04%B8%85%A4%F2%9Dh%3D9%D7%25%03%86DB%BC%C5%80%C4%DD%26%5E%84%C6%BB%C8%BF%F9%93%EDP%F0%15%97%90%8E%BC'%88%91%88w%8A%E7%AC%1B.%C6%07%BA%99U~%8E%1Cd%7CB%DE4%A8%84%0B%247%0Ca%D0O%EC%BC%04%A3%F4%9F%98%5D%14v%05%26%F8%87I%E5%5C%9E%F1%F7%D4c.%20%9D1r%F9%AC%AB%15%26%7C%D1%05%A4%E1%11F%C7%8B%E4%40%15Q%174%89%CD1%DC%84%09%D4X%1D%EB%C3%F8%92%02%3B%93%FA%D8%C6%BB%FE%97!7%A2%E2o%0Aq7%02%E2u%F6%DAG%06%B9%E49Dh%B7%97%EF%C1%AC%E4%F9%EB%EF9%05%CEx%C1%E8)%5Cw%7D5%E5W%E0%B4%07%0C%F1%AB%00%5B'%3F%F9%00%FE%E2%01%84%DB%80%86%1Ce%0A%E4%D7%1E%40%F4%3C(N%BA%F6)R%DF%BE%D7s%C8%D9%E3%17%AC%F6%98%5DAd4)%B9%06%E17%408%CF%0B%C8%E7Q%23%9E%84H%10%C8x%F6%9F%0E%A9%DBX%3D%2CA87%3D%DF%90%C0%EDz%19%ABY%97j%F6%04d%98U%12%D5%3F%EDM%94%CB%1E%40%F4NE%AF%FC%60%1A%12(dX%BE9%87%08%E9%85%9FO%F5%821%09%81%9F%E9%9F%9E%F6%80%C0%1B%3BmiHNiY%E2%1869%C8%BD%26%EF%04%20%BB%86%94%A8%96!%88%CF%23%C44%88'%23%09%AA%93W%EA%A7%400%19%A5%99P%0F%E4%E9%10c%00%0Ea2J3%A1%B3%B0%FE*%24%BC%2CQ%ADx%03%D9%0D%D1%08%24%CE%23%08%3F%AFF%F6%86%01%AF%89%B1%08%1A%E3%1B%20%9D%FC%EA%91%82K%D4%08%1A%E3%AB%D0o2F%F6%14k%14%A7%10q%25D%D0%18%DFK%3F%01%F7%F4V%A7%14%1F%82%A0c%23%12%DDS%81%03%0E!%1D%F9%06%84%9E%84%EEk%87%1C%D9%19%E4%A5%C2%C7%22%E8P%1DDQ%B0%DEqZ%FE%C6%3D_%AB%D2%C7x%BA'%3F%1FDB~%0EIe%3D%1F%14%E7n%ACfH%AC%10%3FQ%AE-R%1CA*sb%11%B1f%0F%CB%0Ae%BB%CA%17%13%12%B3%08%3A%03%F7%5D%EF%BB%C8%EA%AD%FF%5D%2B%26G%91A%5C%F3%A9%24%0B%C4_%09%FEeW%7C%DB%1D%ED%C4%08%D5%CF%C4Y%20%D9w%CA%FC%A2%E6%AC%EE%A8%13%08%08%F9%0D%2C%90%C0%0A%7D%93%AF%95%B7%93%908E%EB%8BY%20%FCx%97%0C%F0%1C%7C%CF%11C%98%60%82%C0%12%F1%1B%00k%E1MG%95%C2%3D%D9%C4%04I*%AD2W%AF%3F%DF%E1%40%5D%FB%D9%9A%F0)MK%FD*%DDk%1B2%05_%2CSA%91v.%60%82%04si%A9W%A4S%94%DF%C1%049%9A%D4%1F%2B!y%10O%F1%60%D2%18%E3%C9%3A%E1(%A8vU%1C%BA%F5%DF%1Bc%3CQ%097%10%24%DFg%D0%18O%3B%05%E7(%E7n%0A%84e%8C%0Ft%D3*%9E%2C%7D%8AJ%1D%E3%05%9A%03%0B%84%3A%C6%B7%A9%EE%202%CB%18%2F%B0%06%ED-%20lc%FCEw%90%3A%A61%DE%EF%0Er%9Ei%8C%B7%F9P%DDL%88%02%90%E5utY%87%D8%7C%2C%EF%26%85%F8%9Bo%00D%0F%A8%DD%82%DC%7C%90%EC%1B%01%F1%7C%DF%81%93%18%C6x%E7%12%AA%EFF%E3%08%B7%85a%8Cw%AE%80%22%A2%A1%F7%F11%861%DE%B9%DE%01x%00%B8%2F%B0%AD%E3%B1z%88%FE%3C%7F%1B%C0%1A8%FA%B6%C4%B4%8E%C7)%24%BF%A7%D2%7CN%83%D0%C7%AF%F0KL%EBx%9C%DE%03%FC%B3%86S%E5%3B%D1%FA%DA%83JH%06%98%A58%82%1C%04a%98%B6%96%10_%EE%CF%FD9%88E%E0t%F3%A7%16%BA%86%E6%AA%14%A7%D0%FE%D7%91%CB%A6%8D%D5%0Ew3.%D4%14o%E8%A6%85%FB%BArJ%91%D6%0F%EFq%C6%00~%C7.%19%96R%9C%5EM%BF%3Ay2%ED%AA%3A%B2%148E%F11%9E%EE%B2%C8i%22%2FG%0C%EDB%FDQ6%D9%C5%D8%02%D0S%8E0%E2w2%3C%FA%BD%3C%0B-%C2%C8.%7CT%7F%15%F1)%DA%CF%C0%1F%A8%8C%40%9E%8F%BA%07nTF(%8A%2B%CB%891%B4%EB%A4%84%08%94%87L%0D%88%88%FD9%05%258L%85%FCP%15%A8%A3*%A9Y%05W%C2%7DTH%99%FE%E2%8B%91!%ABw%96ZuZ%E2S%BB%C8%07%EB%3A%91%86%FC%94%E8%C3k%DA%80%E5%B3%C1%E26*%C3P6m%AF8%D1%B0%C4%F2%0AX%9F%0B%E8%A4%FCP%D0%BDZ%E6%13_d%7D%E6%F2%B0%8F%D2%11%8Bu%96%5D%E3S%97%FF%A30A%1E%E6%C8YW%7C%FC%C7%92E%91pe%A8%CA%AAl%9A%C4%B10%D9%EF%D4%2FN%AA%16E%81%85%2B%06%A3%2C%90%F0l%9E8%D0%87%17%88%96%99%FD%BD%95Ec%A9_2%40%FC%92H%CC%B1m%92%02%96%17%D1%90%18.%E9%EFW%A8%0C%E1%A8%AA%FF%5B%06k%DD%05%B8%7FYb%A8%84%EF%DFW%DA%B4%94J%E1%D0Z%B3%89%10W%E1%B5m%DB-w%2FG%A1%BF%A8w%F8P%FE%1F-%1C%98%D2%A6%CA-R%AC%18e%3E%A1%93%7F%DCV%0FoP%3C2%00%A1%E8%BF%9A%1Ah%826%3A%E2E%00%00%00%19fcTl%00%00%00%06%00%00%00%C8%00%00%00%C8%00%00%00%00%00%00%00%00%00%01%00%0A%02%E6%D6Y%9A%00%00%09%DFfdAt%00%00%00%07x%9C%ED%9C%7Dl%DC%E4%1D%C7%7FI%EE%FD%7C%BE%B6%8CV%5B%D2%5EV%3AVJ%A3%EB%D2j%82B%93k%12(%DB%BA%BE%20%D8%8AV%20%84%F4EZ%D7%04%08b%7F%C0%E2%D0v%0D%A5U%C2%84%A6j%AA%88%E9%0A%AA%26%B6t%1B%AD%F8%03-N%D2%D0%97%99%CB1%C8%A6I%95p%08%D9K%D5%A9%B9%BC%BF%E2%3D%BE%5C%12_%F3%7Bl%C7gWj%95%AF%14%9F%FD%FC~~%3E%8E%FD%D8%BF%E7%F9%DDs%06%B8Q%C1Y%25%00%3DHYZ%B2%03%22%DF%A8%3E%23NsS%9A%878%AFy%CD%EB%D6U%E0%C3%9B%00%E9%DA~%C6~%C8%8B%AE%5C%DB%19%81%A50f%3B%C4U%09%3F%B6%AE%B6%7F%1EE%8B%B3%CE%C0Ac%15%B0%1F%EB%BA%F8%96%1C%8Ea%E5%24%26%1EN)%B8F%AB%AB%B9%98%D7%83%B4%C4%BC%5Bp%08%BBzj%7D%3F%F9%F3%F7n%AC%C4kX%19%C8%99%5C9N%85%AD%02%B8%1F%2B%CFz%EA%CB%C8%D4%FA%B3%12%40%26%CF%E6%A0%150%3D%D0%24)%2B%EE%1D%CFR%18%CC%04%E0%E7%3E%10%EA%97%A6%D6%1D%05%00g%01%BE%8F%D7%B0%00%82%82%B2r%5D%F2%F0%14%C8W%00%EFc%86%BF%F5%CF%AC%B3k%01j%01~%88%D6%C0%8E'!m%C0PN%E8%FB%A3%E4%B6%C3%0C%8F%C5U%1B%CD%95p%F0%BD%B3%B9x%15%2FHu%E2!r%00%1F%01l%40%1D%98x%9F%C4~%1D%3B%BE%BC%01N%E56%20%D6%C9K%24%1C%E2T%3A%3A%A5%00%9D%12lF%1D%9A%07%E4%FB%0E%60%7C%DF%CE%F1e%AA%CDVy%E02%8E%00%B6lT%14%05%B2%E2.%20%97%07%D3%D6%B1%C1%F0%20v%84%AE%A3%3D%E5%EAmf%A2%8D%02q%AE%CFM%AEm%CF%170%07%7F%7F%0F%E5%01%E5xo%C2%A9%BE%7F%1C%5C%06%8F%7B%FE%AA%BB4%F1%D9%16%96%0BQ%87%AC%EC%9E%FB%F0%5D%83%E2(%3C%AF%AA%F6O%92o%F0%2F%A8%E7%EA%8AI%B7%D03%83%ED%A8%C3%E7%2F%F7%3CD%81D%07%81)%E2%A6%B7%F7%00%9C%0B%C9%C8%85e%BE%2B%0B%C0%9C%E7!Z%B1%E5U%B4%AA%06%B1%A7%86%02%E1%2Bb%C0%CE%3C%D5%EEM%2C%C5%D9%8E%9E%FE%0A%F0%87%E2%DB%EF%3E%24%FFo%10%AD%AA%8C%E9i%12p%08%D7%C9%A9%B7%C7%F1cQ%D4%CC%96%93%3A.%84%E2%CE%09%D4%FE03%91%85%DF%A5%0E%8E%E1S%20Lm%3D%05%F2Y%8B%2C%0F%82%7F%14%9Ax%D4%FE%3Dv%2CP%40%D9%D7%F7%23A%B55P%5E%F2%0D%8Ac%C6%B0X7%0E%9D%BC%9F%E2%B0%13%96P%F6%24w%CA%87%DBT%5BUb%80v%C6%5C%C2%BFe%1E~W%BE%91%DA%F1(%A3B2%EB%7F%A3%DA%BAZ%B8%22B%F3d%C2J%B3%A8%C0%23%81%A2%F6%C5%7F%A0X%3E%17R%EEq%A6%B0%94%E2%C8V'%CESw%9C%A7A%9C%FD%A1%1F%E0%96%C6X%A6z%D35%B2%9CR%85g%40J%7C%B6QG%AC%EC%DA%AB%85%02j)%02%87%DAP%C1_%C7%FD%C8%5D%F2%A4%F2%11%A8%C9%A5A%E0%93%CA%2C%B4m%92%26%99%12%E8%06%A1%5D%A2T%D12%A0%2C%DF%90y%8A%9D%9C%EB%EC%0A%F4%08%9B%D7%80%B7T%B5%FD%F4O%FB17El%94%2CZ%97%8FR%19%E4%DC%A3Ff!y%22%E5%AA%0A%DC!%8D%9B%9E%FC%E3%C3u%BC%86%B9b)V%FA%C7%9CD%3FdF%1Dq%CD%FEw%D3%09%FC%C1%95%DCY%C6%8E%B0%A3W%00%F0%AA%2C%07%E5%FDZ%0Ch%AC%8A%D0%8D%7F%97%EFG%3A%90%AC%FC%14Y%FA%0B%A7%BBw%9F%C9%B4%87JRY%F2%1A%AA%CD%DF%BB%08%2B%F6N%FE%EF%CC%91%A9%82%AB%FD%826%04%DE%A1%B6%0Bp%8C%0F%A97ge%5B%86%A7%2C%1F%08t%A7%A4h%14%87%5E%02g.%A9(%CC7Y.%0A%14%9B%95%10m%DD%B2%10%FA%85%D7rJ%F7%C2%CFk%5E%F3%9A%D7%BCni%097%81%D1%BD%F3%26%40%5Eg%F4s%87i%2B%17N%DB%CE%60%22J%9E%EC6%81%AC%B7%1D%02K%7D%F4~%B8U%F2%2F%2FF%93%CEV%8A%C9%DF%F8%1606c%DE%E6VpP-%D8%CA%F0%8D%07%C6%22%0C%7D%DCb%89%1C%95%DE-y%ED%B4%04%91E%F2%AEr%D4W%24%D3%15%F6%E9%7C8vM%40%CA%19%D1%CA%C6%D0%84~%A1%E1%0F%CB%B4%04%9D%19%05_%C3J%BD%2Fo%97%2C%8488%B4%98%5Dl!%03%7C%0F%A2%C5%1E%3C%23jV%CF%95%94%F0%B3K3%22%96B%A0e%EF%B6%D9%85A%04%9C%96%EA%90%ACx%B0%94%2C%FEZk%5D%3Bv%20%17%D99%22%8A%1F%ED*%D6%CCm%CDIMH%3A%8D-%96%E5%BE%1Cx%DC*%06%13B%AE%09%88%A2%18%3B)%18%FC%B2T_%5DX%26%C0%2B%CB%7B%05O%8Ee%90%E7%B0%7C%9Fg%F8pX%96%87%AD%820h%82%D3%3B%0A%CC%E9%DA%A3%BB%ADa%B0-r%1F%F6%2C%8C%26%8Cw%BEe%09%C45%7Ci%2352%3AW%DE%15%BB%5C%B5U%96%C3H%A2%86%A3%EC%E4%40%7C%B5%12%3Bo%C4%1A%8B%BE%F6%08ih%D7%11%A3E%F9.%DF%10%9C%1A%A1%3AX%04%E9%FC%098%EA%ED%86%FC%FA%08%B4%0BvC~%DEz%ED%EE%A4%83%7D%17~%8FSF%7B%00%96%AAY%B8b%3B%03%7C%3A%89%F9%14%05%CCR%1A%E7%D0%B7%EC%14LB%98%BB%8C%FBV%99d%00%7CZj%D4%93I%A3%7Bs%C2%98%9B%18up%E6!%C6%D4%BD%AE%F8Q%C9f%06%FB%00%C0.%9B%19%E0!%9D%84%2F%04%9B!%CAW%AA%1E%EEv%80d%F1%24%C2%DA%0D%09n%00h%B7%15%E2!O%F1%F6%1D%07%86l%85%10%05%D9%DA%23%B6_%13%25%E6%D9%0B%F1%3D%92%80%A4%CC%0C%B0%5C%AD%DD%9C%FD%90'%FD%B93%90%B6%90%95%23%F3i%05J%A1%40%F5%9F4Kv%40%FC%1ClQA%D0%AC%40%DA%F2%D4%B3kT%90%23%9A%CE%A6!B%8B0%0D%F1m%3Eg%0B%C4%BF%EE%C1%E9%26%EC_%98%93%A9%E7oN%1D0s%9FD%7F%EB.%9D*g%AC%84%3C%A1%40H%8CW%20%E0%BE%E7%A5d%AF%80%DC%A3%16%8A%8C-%82%24%C6%BF%99%80%C0%9F%E5E%11%E5%93%E9%B0%92%C1%F4%F2%10%241%BEZJ%16%B0%D9%CA%E2%F9e%1A%FB%CC%1D2%20%AF%A8%231~f%1ASK%8C%5C%A1%C3%7B%11%DF%0F%F0%C9%D5%06%20%3D%FB%12%B3k%83%DCT%89%2F%07%E0%DC%FAO%10%DFM%87L%0E%12%D8%89%7F%9DI%40f%1EZm%FB%A1%5C%C0%86%3C%118o%0E%02%C5%F0%D2u%1E%92s%85'u%AEv%01t%22%AE%9B%C1o%F2%F9%E9%FA%D6%CE%A7%95%18%9F2%ED!%07%B0%16%FCn%CC%8B%CF%24%D6Wk%5E%90%C4%F8%D4%89%15%0F%1F%C0%92B%9D%B9%19q%C1%1C%24%F0%95%12%E3S%AF%C1%15q%0F%92%8F%F3%C9%BD%BB%F1%A9%C4%BAr%E5(%80%1B%2F4%BBk%D3%AC%06%EB%A8l%F9Xk%1E%9B%86%DE%DD%87A%C8pb%D6%B7~%8E%D7%B3!%DF%1Cd%F3%02%1C2%5B%EEo%0A%EC%1D%E6~h%B2Q0%0A%09%1C%03%FFf%ACE%E8%2B%9Cg%14%02J%B7%F9%B8%19%86%D2M%15%0CC~%09%0E%C9%0Ce2%60%E9C%D8%E3%B5%92%2F%02%BER%3B!5%FD%F2%03%BB%24%60%A7%12%3F%86%A6%5E%CD%11%E2%0A%E9M%BD%D2%AE%C2%10%E4%02%96%FD%9B%13D%8C%EAB.%9B%9A%0E%A7%82%9C%5DW%DC%A0W%85%3B%5D%08%09%EB%D5zU%B8L%CD%B9SARb%3C%0D%F2%A5%DE%85%D7V%E2%C2s%3ANf%83b%0AD%B7%8EH%9A%10%3E5%C6%E3%DA%97%26%24%8F%C4x%5D%AF%B3iB%EAn%8C%F1%A8W%9A%90%E8%8D1%DE%06%88%F3%8C%91%07%A4%D9%8E%5DRJ%A2%40%1F%E2%BA%19%904GE%C6%20i%EA%F6%82d%D0%BF%B4%B2%0Ebo%02%C7%12%08%23%D9%0AI4lf%C71%03%90%A9q%FC%DC%E5%E0%C8%E2%1F%06%1C%3D%2FN%8F%E3%E7%0E%89%90%05%0F%20i%F8%9C%FA%85%02%193%10%E3)%F2(%BF%08%E1%20%C0%D1%5D%02%E3%FF!%0FG%B7%91%18OSu%BD%124%5D%F5%F4%A8%E6%8E%C0%D2%C9%F3%AA%1B%E3ib%F2O%88%BB%C5%E6%18%F8WS%3CH%E0%1DOBL%F7%13%7C%8F%95%D4%C8%2B%E1%BFa%DA%C8%85%B4%A9q%7F%EDV%02%C9%10%CCB%88%DA%2F%1C%BD%B82J%B3%BA%24%FFP8~lC%9A!%E9%10%9C~M%A2Z%3D%D1%EAM%85%3F%032%8EO'%2B%84On%98%96%FB%3B%D9%DEW%C8%F8%A66%AD%04%A73W%CB%CA%16%AD%93%1A%84t%EAO(%A89%22%EE%DA%BF%D8%3D%97%AFn)%D2%EE%B3%BD%7Duh%91%A0%5D%C1IZ%EB7%0Cy%B5%26%CEi%EF%CF%E4%B5%EAOz%D2n%FE%17%17%E2%BFf%9E%91%83%F7%A1%BF%C9K%91%A7T%CB%AA%D3%F6%20q%B7%EE%D0%85%B0%9A%F3%7C%95%F7%03h%CA%F3L%BD%91%E9%C8_%AC%D5%98%84%C3%8C%5C%AA*%114%F6n%18.%AA%BDG%1F%C2%EC%2B%A3%D7%C2%86%E3%B2%9CG%DF9%10Z%E5)1%92%16z%82%7D%85n%BC%22%B0%974f%B39z%2F%1A%20%10uj%7F%F1%C2%9E%D4%804%0Ci%FDNS%A5L%A0%FC%20xR-%7D%F4%17S1%0BG%B4%7F%2C%3A%25%F6%F1%80Vn%D2s%AF%8B%9E%25%CBz4%3F%1E1%02%E9*pr%1A%E6%0A%A1%93%A7%1Ak%DA%E5%B0%91%17p%B1k%A5%17%24%BA%D99%02eT33%DEpg%99%11HWA%AB%D6%DC%95%EB%DB4n%FA%AC%CA%86S%A7%0C%A4%1C%C9%3FR%F4%7B%0D%7B%BB%E4%1A%93(%B6%C0Z%A9%23%EBS%CAk%3ER%0Ef%19%BC%19%FE6%DD%5E%F7%D0%3Br.%ED%00I%CF%20%D8x%07%ED%18f'p%B0%A1%C7V%CA%14%2B%83%9A%A9%88I%BE%CC%C1%F4%8B%DB%18%FD%EE%FA%B4lx%3B%DC%FF%01%1C0w%1Fb%1D%1A%C7%00%00%00%19fcTl%00%00%00%08%00%00%00%C8%00%00%00%C8%00%00%00%00%00%00%00%00%00%01%00%0A%02-d%25%1A%00%00%0A%15fdAt%00%00%00%09x%9C%ED%9C%7Fl%13%E7%19%C7%1F%92%B3%7D%B6_%DF%01%0Bj%A1%94%98.%ABh%96%90%90Fm%B7%011!PJ%D3%26%AB%D8%94%AD%A9%F04%D6Ri(i%AB%22Vm%8A%93%00u%A1%5B%22%D6%7FZ!b%B6%96v%D2Z%D2%C1~I%D3r!)M%A9%89%1D%986mc%E2%E8%C8%CAVJ~%92%90%C4%F4v%E7%1F%18%DB%F7%BE%F7%CBg%A9%15_%25%8E%EF%9E%E7%F5%E7%F2%DE%DD%FB%BC%3F%9E3%40%BA%D8%8C%3D%00%A32%FB%0C%C9%0C%88%90%AE%095N%DAd%F0%10o%E9%96n%C9%88%BA%0A%7C%A63%98e%D0h%3A%04%D5%C3%99%80%D9%10%BB%0F%ACYo%BB%D3%E5l%06%BB%E9%10%E4%06z%BE%E9%90k%40y%09v%A6%E2Q%E3%10j%EC%D0%F7x%92%3D%B8%CB0%83i%89%D4%11%0F%F5%2C%7CK%F1CPe1%D1%EE%10%14%CE%FA%AF%E0BX%09Bu%DA%F7%90%ECyJ%90%1F%82%CDGtp%9D%86%100%23%3C%C1%A5g%82%00%F9%DF%3AA%98%05%9A%0C%E9%12jC%1C%88%3Fx5M%E2!%D6%05%2F%9C%14%E6%C0J%AE%AE%B6O%EB%B6%DE%16%EE%22%B9%14%CC%E2!!%1F%B4T%1D%A8y%9C%C8%80%1E%AFs%81%20%2C%25x0%D3%91%CF%B0%C6.%0EM%173A%9E%0Cq%DC%03%5D%EB%0F%DA%97%E0%3D%D0%B5H%04kl%0D%E7o%AA'%13b%AA%B6xC%CB%F1%95%8Af%E6%DE%C6%1A%AF%00%7B%98S%03%99b%EE%5D%FE%B1%17%0F%89%3C%40*%1D%0A%A9a%A0%19%B80%83%AEc%ED%CEH%3F%11%D2%A7%0A%12%81%D0S%CD%B7c%ED%B6%08%1B%20AzUBj%00%B6D%DF%0FJ%DB%7C%AA%9D%1A%A5H%A7vdP%15d%0E%DD%09%D0%11%7D%BF%5D%AC%9D%86%CET%BB%BD%9E%22%05%13%CA%93%BA%ED%E8%96u%AB%A8%10%F7%C7%EE%F9%5E%1E%FA%F8%D7%D2%ECaz%8Ex%8C%A9%DBC%F2%D7%E9%C7%D2(%E6%CCX%00%80%B7%D6C)%9CIw%A0%A7%09%10%A8%E6b%7F%99%D8%9F71n%7DbS%1F%BDk72%C5%C8%939%3Cs%8C%93%20%7D%0Bc%15%24%05%CF_l%E0Kp~%1D%F1%98t%C2%DB%FB%AA%072%AEX%24p%24%CA%B6%CA%A8%19%DD%0D%AE%D2%B3%AB%3D87%B4*V%91%CC%BDoW%AF%86%1FeB%7C%24%88%B5!v%F4%FF%F6%DA%7C%CC8%B6%E9pE%EF%92%2B%00%97%16%3E%2B%7CX%9E%01%99%C8%D8%95%A2%BBjcn3%14%97y%847D%B9%A5%D7%3E%B1n%3F%D9%7B%F5%25%3E%DDLO%E3%DB%03%F1%B3%9B%26%3D%B1wu'%A4(%89S%07'%BD%B2%B3b%85%B5vf%9A%A9R%7C3%0C%A8n%AC%3A%5EE%F9_z-%88%BF%A5VD_%AD%85%9B%FC%5B%E5.%8E%D0%11%C2%DD%D84%DE%968%04%A6U%A8%E1p~%CEhP%3Aw*RX%F4%5D9%7Bu%C8%8Be%5C%9C%3C%B7*%F9%C1%EF%E1%0F%C6%EA%11cl%8D%20%8C%97%C9FH%E7%ECr%1E%5B%B6enher%EB%05%3C%84-%05%B8vbbb%A3%FFe935y%0D_%B6%AA%3Bt0y%08w%E2%1Dm%C2%83p%3F%BB%ECo%98%3E%DEy%A1%91%97%B7%88*%EC%EE%17J%13%1Bb%CF%1C%AF%93%1B%E0%18%3D%C6%05%E5%ADH%10nn%EB3f%5B%26%B9%84%C9Q%8FuJ%08s%9DRJ%138%C9%B6.%D9%C7%C3u%A2%E4%A6%ADH%FBe%1C%2C%B9%80P%B9%81%F46g%07%92q.%93%178%E5%7F%DA%83qJ%5C%24%18%88%E2%89O%8A%5Eb%F5%91%ECY%91%EB%ABC%BC%9Er%9Fj%F2%EE%DD%A4%87%01%03%80%E4%FB8%B2%B2.%D3%09%E9%D0%00%C9%23%04%1E%82N%C2%8C%06%EF%03%BA%C6%DA%FF%DD%E3%D3pph%D6%AF%07%D2%C8%2C%D12%E1Q%F6%BA%0E%06*%87gU%0D%A4%E2%BA%DC%AE8%A0%97%81%F8%A0G%A6g%81U%3F%B9%EF%84%814C%0F%A7%DE%DD9%A6%C19%A9%95%F0%8C%06%EF!%D2(%1A%AF%F6%CE%BB5x%7FS%C7%19%11uQ%20u%1E%D3%D5%D1%AC%0Bb)%F2i%F1%D67%BF%97%FF'%5D%C5%B4I1%2CfC%F9%B9%80%10%E7%09%3EW%90Wr%01%D9%FD%85%81%B4%E5%02B%9C%9C%CC%96%88%D3%AC%D9%12%AB%25d%E9%95%C5%9B%03%08%5D%9B%03%08Z%94%03%08%94i%E8%3F%EAV%97%3B%07%90%0B%FAz%B7%DAd-%C8%01%84%DE%AA%AF%07%A2%0D%D2%96%833oi%0F%98%0F9%7F%D8%7C%06l%CBAlD%91%15%E6C%F2%1Asp%9Ft%FC%D5m%3A%03M%E5%F9L%87%D0%93%BD%BC%E9%10W%95%B4%18%A1%20Vf%A2%C6%87%F1%A5d%7CI%13%3BI%88%CC%3E%8DSQ%83J%1D%7B%E7%88q%88%E2%E8!t%3E%07%90%07%B3P%5DJ%10%C7%B2%1C%9C%F8%BC%00%D9%9E%15%E9%99M%D1*W.%FA%00%B1E%24%D34%B0%1F%E0%9F%7C%97%A9%D1%99.Z%B7%96%5EPD%CEF1%AA%EF%F3%F0%83%F6%CB%05%3C%D1%09q%E2KP%D5%12%B4l%F1%EB%E2%20%7F%25s%8C%EC5%D4%FE8%0CW%AE%D7%3B%FE%B0%94%8B%BF%CD%A0%B0%18%FF%01%F3%EE%95o%00%EC%04Fv%8DII%AC'%BA%92q%9C%EC5%08%B6%81z%80%8F%06%5Bu%0DAXN%FC%AD%87%CDd%AFn%B0%9E%10%1D%E9U%FA%869%F9%9D%AE%D3l%C1%1E%859G%1F%7C%24%1D%0D%BDZ%17%03hA%B8%C6%BE%FA%12%A0%17I%B7%BC%FFT%89%94%60%A1g-%C2%B6C%84%AC%0D%EE%B2x%60%A0L%F0%12%3C%877p%EC%9Ah2%90f%CD%BB%0AR%12%DEvW%A10%F94%B9%D3%EF%036%D4%D0%3E%AD%03%C2%0A%1C%E4%7B%E1%0E%B8%8CY4%BC!T%0F%2C%E3%DF%A7%90%99%25%AB%D0%B1%A5%D0%C2%11%F2in%C8%D2%1D%8Dyz%20%87Q%A1%B0%14%1Cne%CF%11%BF%BFC'%E4T%B4%9E(%15%25%7B%FE%FC%87%8Ep%F4%1F%D2%A9wye%9F%B6%95%D1%EA%A28%9D%0C%BB%9A%C5%9B%DD%CF%F1%86%20%A1Y5%10%EBm%1DF%20%CE%87T8%1D%80%DDu%BC%01%88*%85%C2%C6%CE%89*%E5%ED%7B%C7%7C%08%AA%7D%CB%7C%08%D8%B6%B3b%8C7%19%E2%9Ae%C5%18%FF%8A%B9%10(a%C5%18%DF%12%87%0C%9B%03%A3%23%AC%14%E3%E3%CD%0A%E5%C3%7B%FEe%A3%EE%B6%A7o%B5%14~%13%1FN%1AJ%9F%0C%FEX'%03%15%97G!%F1%8E%17K8%D8%F7%E1%22%AF%0Fbm%EB%96b%FC%3C.%B69%8F%E0J%01M%C8%DF!B%26b1%3E%BEIJ%FE%CC%0B3%3AG!.%E1%11)%C6%17%C67%CFpxW%E7%8A%3Dj%9A%5C%19IC%C4A%FF%BE%C4%B0%D3%E6!%F8%B6%D6%D4%E9%BE%BE%A4%BB%3D%0EA%FF%22%A4%25%C3%8A%7F%3C%A7%F3%A4%A4%40%9A%7C%A1%80%BC%13z%02%1CS%8B)%E5%F4%7CE%88u%91%CF%85%E9%3B%D3w%05%D0f~%5E%BF%DE%FA%8AB%A2%03u%CB%B0%07%8E%CA%3B%D9%1F%F9%9A%F8%3Ar%D9%AD%13b%0D%DC%A8.%BA%1C%EA%02%B2N.%F7%B0%17%C4q%08!%9D%8E(%A9%CF%15%87%B8f%3F%F8%BA%5B%DE%AB%16%9E%04h%80a%E3%10x%0F%9B%1F%FBK%7F%FBZT%0E4g%1C%22%EA%0DY'W%93%20%8C%EF%E6%81%F1%C6w%10R%AFT%40%F2%C2%7F%7F'%D3%E9%C2%3A%A5%D4%2B%F24R%1A%C4%B1%7F%E2%CB%7C%86%D3OY%A5%F1%81%12%24%982%F9W%F1%98%B0%26%C3%A9VC%3A%9C%2C%E4%F9%CA%F57%2F%89%FE%0EP%DD%CF%D2%9D%1E2%0A%99%13c%FCM%DBbs%FF%F2%1B%814%A7%BD%1Ar%EE%E4d%13c%FC%08%97%DC%CEo%0C%EE%80%F4%A9%83%DFh%C8%B9%93%13%E5%13%FFW_r%9B)%1B%CF%9C%05!%3E%C9%A3B%D2%9Ak%CA%E2%EE%1F%E5%9C8c%10%BB'6%7DqC6%3E%D3I%EF%9D%9E%10*M%C6%F8%98d%D2t%1C%3E%83%90%C2%86%F6%D4%13y%89%CFt2%0Ay4%19%E3cb~%92%E9%E45%08%F1%A8%C8%E3%91%9CL%87%D8s%01q%1AL%60P%051%AA%2F%0E%84%99%9F%8B%2C%B1%D1%5B%10uB%9D%9FH%90%A0%E2%02%9F%01%D9v.%3B*F%B9%AB%A91%3E%CB%F2%C3%E6m%D7%81I%8B%F1Y%D6J8%F0%157%D0%A3%A91%3E%CB%1A%85%D0%FD%5E%A0Fc%A3%3A%93%20%F3a%A4%2F%00%16%11%92g%5E%02%D7%13%D0%1F%E2%C1%1EH%8E%E3M%D0%EF%3F%5C%BCSlV%D6d%25%9B%12%9D%96%DFo%AFzs-%A0%A08%8E%C7%A6%F4%23%15%0BD%C7k%BE%C3%81%FD%01%5C%1Ec%EFF%1E%A4%3B%05%FF%10a%EFo%953%8C%DF%0A%06%9F%3F4%14%B6q%F2fi%C4%FC%A4%EBH%D9%1D%B8%F2L1%FCZ%11%22%E9%F8%16%C8%0F%C8%9B%A4%C7%05H%D3%03%60m%C6%3D%C8%99v0%5B%A6%E1%3C'o%13%AB%11%11%9F%B0%10%87%DF%F9%98%B2)%EA%5D%D4~%F0%DB%18%5B%9B%D8~y%F1E%1D%82%C0%C1Q%5E%05%A4%86G%15%B8y%84%AE0%B4r%F8%A2%3D%3F%AF%9Cz%91%F8%F8jB%0F%03%9C%C1%1D%CC%F9%A2%1A%B9o%FAI%E8%BE%91%E0.%BF%AA%89%8EZ%B1K%EE%C5%D8%9Ce%C2%C4%0ElI%D7gmHes%F3%14%9C%0Bb%9F%D1A%83%CE%AD%D8%92%8E%F2%7B%D4%F6%B3%87%AA%85%F1%FFx%F1v%16%7B%89%A2%E9%EBG%3C%EA%20%AE%C7%BA%F7%C2~%BC%BD%8B%C7%9A%8E.%D8%E2V%07%01t%1F%F6qbQ%8E)%BC%AD%A5R%E9%BB%23%92%0A%11%D6%7F%5DM%84%19%BFP%F8%AC%DA%F9S%87%10%C0%DA%DE%2F%9B%24%B4%1A%3D%CEB%B5%0B%CF%CFT%60M6%E1vR%CB%D4%BEu%FA%90%3A%C6%C5%12%FCs%EDU%F8%9BDR%97%E0%E5U1%06V8%B0%F5j%237%19L%D5bU%08%60%84n%8B%1Bgd%97%12%9Bq%EBB%8F%3A%084%95%B0%9Bq%1Fe%11%88%F3%E2%97%CA%04%FCZ%BE%AA%B4%A9%3AL%8A%95Je~%E0%E7%F5%DB%E1%FE%0F%95l%83%C1J%7D%EDy%00%00%00%19fcTl%00%00%00%0A%00%00%00%C8%00%00%00%C8%00%00%00%00%00%00%00%00%00%01%00%0A%02%034%EC%9A%00%00%0A7fdAt%00%00%00%0Bx%9C%ED%9C%7Fl%14%C7%15%C7%9F%CF%EB%FB%B9%3BWJBi%A1%B6%95%D0%D4!%04%9B%E0%22%D2%108%FF%08%18J1%B4Ph%EB%D6GK%5BTQl%14%A8%92%06%85%0BN%E8%85%10%1FHP%A1%A8%09G%09%89%2B%91%18%08%10%A9%AD%F0%DA%1C%95)%17%9F%A1%FC%D1%FF%BC5%01%14)%8A%8Dm%82%81%C3%DB%5Dl%EC%BB%DB%9D%D9%99%DD%3D%AB%7F%F0%FD%8B%9B%F7f%3E%DE_%F3%DE%BC%9D%05%20S~M%0B%40%AFN%9B%25e%03%22g%AA%9F%C6%89M%16%FF%C4%07z%20%AD%D0%DF%A4%ECCr%3F%08f%1Fr%18%AE%8AY%87%FC%0C%7C%81%ACC%02%80%EE%8E%03%04%92%E3%00%11%86%B2%0E%99%0F%CE%FAl3%CEN%8A%FF%3A%DB%8C%D8%ED%1F%F4%1D%CD2%83%7F%F8%8B%89b%96%19%D0%15%F2%16%05%B2%0D%D9%07y%5B-%DF%C0%E8%DC%9BD%FB1%A9%E7%F4%A0U%08%F7%C2%2C%91d%CF%09%B5t%0EXCt%40%0CN%14%92%3C%5C%F9%9B%C0%1A%C4%F3T(%0C%9DSI.%C2%E4Jx%C4%12%C4%BDu%F6%3A%80%A5D%9F%C8%20%D4Z%82x%F3%AF%16%BC%CC%93%A7%D8%DCAh%16%AD%40%84A%A8%93%AF%93%9Fg%3E%09%DD%92n%E7w()eR%F9%D2O%0C%7C%92%20%E8%B6%0Bk%1B%E9%20%17B%EBf%18%F9%AC%C6%19%F8%B2%DDT%10%3E%D0pL2%F09%8E%EF%5D%1E%05%EFsF%FD%15%B5%E4-7%F0%D8%16%C4%18%C2%E1%ED%7D%1F%1EF%BF3%86%24%3A%E6%18x%CC%F9%8D%A4o%D8%5C!%CB%D7gB%5B%A7!%24'%DA%1A%24%3A%A0%5B%9F%3E%81%B3%F1'%E5%00%E4%8A%86%10~%DE%17%E4C%F1%25%85Y%18%93g%81%5C5G%DAn%7C%24%D0%3A%EF3%89dw%DD%5C%80%BB%01%23%8F%9D%06O1qV%1A%11%3FA%24%9A%D7%F6%2F%C1%FD%11%1FQ%0C%3F%A2%B6%7C%E5%9C%E0%0E%D9%5B%2C%87%B0%3D%2F%04%A9!%E8%97%1F%0A%A5_J%FAF%B7%5C%87%9Fu%F8%8A%CA%CA%DFR%5C%11U%DE%C1%83%C1%E3%B8%F3~%A0%40%24t%AD%ED%2B%1F%20%D9ST%B1%11%60OH%DF%96%2BK%84%9E%C2%F6%9Akw%A8%18%CE%89A%C5%7D%91rH%3A%87%8EH%0Bk%14%3F_%0A%DDT%90%BA%88%A4%CC%11MAp%88Z%23%AFW%0F%B8o%2B%96%E5%97%F9WhrX%E7%D4%E7%15%FF%2F%0B%DF%97%F4%8A%18%17%F0gC8%F4%AD%5D%E7_%95%9F%A6%60%40%AB%A8%B8u%D7%F4%FA%E7%FB%25%AD5%81%9F%CE%5D%FD%12W%F4%0F%91%86%01U%C2%CDF8%10O%E6%DC%F2%EBth%C5'%5D%BE%02%D1%19%A5B%00%9Ap%B2%EAMx%0Bns%93%F5%20hs%CA8%9Aj%CB%A0%CEq%E2*3jbU%94%BB%8E%0B%01%C4%DF%8E%8F%C5n%CE%A8%80%C3R%8AR%7DWr%09w%09%1C%9FV%F0pcZ%3BQ%AC%90wOq%1F%DC%E5%07%F9%94%E0q5a7%E4%E2b~%E6%EA%BCza%E6X%F3%5E%DB%8F%C4%99%0F%3B.%5E%12%E1%BD%B1%E6%A2%CC1%B4%17%5Eg0%D2%85W9%8B%D7*%AB%9EQo!ix%E1%D3%84%0C%EC%23%3A%BBV%84%9E%D1_%7C%D2%1D%A2%EB7%AC%5CJ%3FW%10%F5%8DAz%DDF%E9R%9A.R%FA%A1%D9%E5%CBF%7F%F8J%DC%01%16%C8%3EZG%3E%3E%F6%EF%83%CFpL%90%9F%B08%DF%E7M%85c%94%A7%0B%DD%0BDO%9A%80%B8%EB%A18D%ED%AA%E8%2B%26%20%B9%22%2F%8Bt%AE%BC%92%F0%B8%16%06L%40z%80%A7%AEi%BF%06%F0%07SU%9E%84%12.i%7Ds%A3B%907SSHHn%EA%82%1D%3F%D5s%14%D6%9B%80tu%14%D4%FB%DE%A0tnk%3F%0Aa%13%10%FF%B4A%E8%AE%0E%D19%F3O%04%0D%96%EA%98~%93D%08S%3F%8E%B1%D2%E7i%5DS%25%F4%02%9AO%0DA%2B%E2%C6NZyK%94%87%8C~b1%0Cp%BARfG%87H%0F%89%99%82(%E3w%01%17%CA%3A%E4%10%03%E4%3Dc%17%1D%B9za%9B%94K%0D1%F3%94(%D7%24%E9%91%03~%BA%CA%86i%88%20%CB%A5w%13%22%AD%FB%EB%A6%20pb%89%3By%E04%ADw%8D9%88z%C6%16%5C%17)%7D%CDL*%C3%90%3B%95%95%B4%90%C7i%1D5%10%86%10%B1ev4%FB%90%2B%DE%87(%97%F4%19r2%BC%F6v%89%D7%98R%C1Q9%18%BA%F1%F5%9E%A0)H%22%CA%E0%5C%12%11MA%CA%24%06%E7%A1%9B%A6%18.%A6%D7%0D%83%E6%DE%13F%E638%7B%E7%9A%DB%1CQ%BB%CC%D8gT%5CS%A1)%C8eB%5DE%A3%1Eg%C0%14%04%F63%3C%5E%EF%0A%8B%CDAXd%26%7Fd%16%B6xl%A3%F8%9B%D28P6%8B%E3%00y%A0%FF%13%F9u%0A5!%8C%2F%A7%E3%9BR%D8!%40t%DAH%A5(%96%F6%07%10%93%90%F1%B8%F0%A8%D0%C8%C3%0E%8D%0B%04%9Ff%C7%16%9AK(u%B4%15g%10f%C4%96%D8%05%D9%8538wC%7B%D6!%0E%80%7Ff%1D%C2%014%01%C4%3B%EC%80%04%08%90%EF%C3%95%D2%0A%EA%85-A%D8%F4%CF)y%EB%D13%00%BF%B7%CE8%23%071%16a%FD%8B%A0%D6%AE%BBE%AB%0C4%1D%A6%E3lNe%C6P%00l%95x%DD%81%EAa%15%D6V%03%EA%EB%2Bw%A1UH%8E%04%7F%C4%D9%B8O%C1%1Fe%5B%11%EA%2B%06%C27%B1%10O%D0%FF%AC%E2b%19%D2%16%BD%1C%C5B%D0B%7FbM%C3%90E%88%F0%0By%E0%DBXk%1E%5C%AEC%E1%9D%5E%E3%97%3BDm%BA%F1%97%1A%11ku%8B%D0%DCi%F9%EE%12n%88%11%C2l%EE%8B%DE%0B%AC%16!%7C%12%91%CA%EC(h%0B%A4%E0%3B%C4%F5%AE-%10%B8%24%CB%B7%09%E6%B2N%3B%20%D0u%E4%9C%88%B7%FEk%99-%90f%D8%F35%BC%F5%AF%A7l%81l%87%E9-%22%D6z%D6a%0B%A4%C1%5B%D8%83%1F%23%C6%25%EC%80D%1C%A2%03%3F%C6%89%E6.%3B%20%CD%DB%E3%1C%BE%22%F6%CA%14%BF%12%E3-C%12%B2%BC%A8%E8%E78k%B5%E4Wb%FC~%0A%88C%26d%02%8E%A9%F1%AFb%E3%2F%14%CF%EDQb%FC%26%0AH%D7'%84%CA%B5'%08%11%FC%AB%99%BBM%5Dj%8C%A7%81H%DE%20%DE%CA%D7%DE%C2%DA%DC%C31%9E%A3%808D%7C%FE%06%A8%F61bZ%C5%A9%10%8A%C4%CB%BD%1B%FE%835%5E6(%1Fr%D1a%90%91%84%99%E0%C2%1AW%18%0C%C0%3D%A9%DC%81%14%10%D8%01%9B%24%8C%897%AA%83r%915%0D%FD4%90%FFn%C0nU%13%FA%0C%F6%D9r%1D%E1%9D4%A7%0B%9A%DB%1E%C5%BE%9D%3EF%0A'0r%E1i%20%15%B3%3F7%BD%E3%9D%0A%12%DB%08P%B0%91%2F%97%B2%099%A0dUo%81wG(%9B%90%EE%B0%BA%FCp5bSQ%3B%20%DE%FC3Q%E5%A1%EF%FCS6!h2Z%25%C1%C7%90crENwwE%C2%0D%F3%F8gMG%B7%7B%90%F5%E1%94%D7%9Czs%F6%B6%87*%9F%3B%2B%01*%19%F9M%B5%F5%8A%04%B9%02%9A%AD%ED%BE%09F%5B%AF%C8e%24uoa%FA%E9%CA%EB%8461%DD%E9%C5%1E%A3%8BA%86%B8C%F1%8ET%08*~%A4%A9%E3%7B%19N%01SE%B5%14%C8%96%D2%8A%BD)%10%E7w%0F%CArf%FE%BC%D4*%E4%8ErYS%20%FF%96%CEj%9D%E6%99%DAs7%26%97%1A%E3S%F64%EF%87%CCs%A5h%88m%CF%9DF%5C(%3D%C6%FF%98%D7n%9C%12%AC.%5C%F3B%E91%BE%ED%E3%90%C6%C7%F2%07%86%EAC%9Cvw%ED%0Dj%7D%ACVx%DC%991%9E%0Fh%7C%A8%82%1A%11R%9D%11%E3u%20z%BB%AD%D9%20%8D%191%DE%A5M%CF%F5%B6%0F%B3AB%19%A7Cg%83%8A%FD%10%9D%11%3D%16%19%F7%20%8E%D4%E9%AF%D5%EA%88%99B%C3%90%B4I%23%06%ED%B6~%1A%89%B6)SD0%03%D2%EE%7Ba%9E%9D%90%3Cu%F3Go%E6%91%D4%D8W%2CV%D5%7C%BEP%0B%B9%B2U8%2C%D9%08Y%09w%B5%90%F6%F8%BE%9F%06%ECc%F8%A6%C0%12-d%17%F8N2%7C~c%A4%F7%E3%2F%855%10%F4%B8rYx%DB%18J~sH%85%C4%3BR!%DE%86%AA%F0%AF%EE%FF%B8V%19%B2%08%F1%84%20%B1%01%E0Fi%C5%81%94VGGSxt%05%FA%3A%B2%FAY%B4%F2%18%EE)%01%A4%C6%F8%94%D6%B4%07%BE%10%A2%AC%A3J%99%10T%10%05%B7rMz%C4%B1%D6%D7R%3C%94H%CCx%24he%C6%1EV~%EE%ABOI%12%A7%5E%F8%14Cj%DD%C1%13%60%DDv%E6%12%FF%5E%98%DE%D2%5E%7D%14%B6mQ!)%E15%F5%F3L%F7r%60%9Ca%9C%DA%B75%AB%00%CA%AFG%15%88%FE%8C%886m%F42n%0Bj%07M%B2%F34%C0%E2b%25%C6%B7%E9o%D08x%BD%AF%9A1%85%E0%A4%CB%19%3D%04e5%9B%8C%D4%ADi%18%BA%F4u%9D%0E%CE%81)%1B%18w%E5%FA%D6%CA%99%23%F1C%CA%C19%1E%1D%DC%A9%1C%8B%F6%DC%A3%B2%E3G%02%8C%8C%89%0Bn%C5%CF%95%A7%A5%AC%7C%2Fx%96%F3%C3%DF%13%FDY%DB%23%D9%AA%93%B8%90%84~tbF%7B8%FC%86%98%06%B9%0D%8E%85%95QL%97%9C%E0%5E%9E-%3D%FD(%3EI%D2%B6%D6%AD.%18(%C7%7D3%E0%ED%5C%CD%06%F1%E4%EB~%2F%C6%C9KQ%1D%FE%99%5E%C4%F8_S%08%B8%0AK%CB%14%7C%A7%95%40%F3%D5%E8%98%94%F5%85n%91%D0I%AAB%AD%90%AA%98%20-%2F%A1%B9%3A%CD%A8v%23%A1S%F5%FC%BDL%90%1Fv%9E%09%EA4s%FD%F8%E2%A5%F2%C4Wy%99%20%B1~%DDE%9DC%96%09%89%9C%03%FB%12TW%A8%60%81%A8%DB%1Eo%D2m%1F%96%8Fe%CF%A0Z2UWm%CC%AA%95X%BC%9D%CB%0D%3F~%D7SK%89%B1%CF%98P%19%DB%1D%3F%A2%3A%B6i%C5%115%C1%10d%A6%CD%C5%A7%BEa%82%01y%D3B%D4%BE%9FU%16%17%89f%20%CD%84%0Fd3%D5%10%3Eb%06%01%C2D%C2%1B%B7L%99%FB%F6%40%097%03%B3%24%9CMS%C0%E9%D3q%AA%C6l%B1%A2%94v%40%D3%FFq%DB%E7q%91%C6%CD%1A%04%AF%FF%01%D5%B3%93%8A%C0%85b%9C%00%00%00%19fcTl%00%00%00%0C%00%00%00%C8%00%00%00%C8%00%00%00%00%00%00%00%00%00%01%00%0A%02q%C5%B6%1A%00%00%09%E7fdAt%00%00%00%0Dx%9C%ED%9C%7Dp%14g%1D%C7%7F%09%7B%97%BB%BDg%F7(P%0A%92r%87Ti5%85T%228%25%90%0B9%C2%8B%91%0B%82%8AH%CB)%B5vF%A7%094Ef%7C%C9%A6I%3A%5BL%09%20%FA%8F%CCd%A1%C5Qg4%99%3A%3A8%83%C3%E6%A5j%86%2Bw%D2%81%EA%1F%CAB%A0%14eJ%5E%20%40%DE%D6%BD%23o%DE%EE%3E%CF%DE%ED%3E%FF%F1%9D!%EC%3E%BF%DF%3E%9F%BD%7Dn%9F%DF%F3%FC%F6%D9%03H%97_W%02%D0kPfK4%20j%BA%06%AC8e%26%9B%A7%F8P%0Fe%A8_%2B%F4%19%AE%C5%AB%E9Cj%94%13%D4%19h!%DCj%A3%0Dq%0B%E0%17hCr%12p%86%3AD%EBk%ABd%FA%10v%906%03r%5E%DA%B5%86%3A%C4%D7%B7A%A1%0Eq%A9%B2%ED%3A%D0%D7%08%0E%AD%25!%DB%90%AE%96(%DE%E1%89%B2%11%BB%0C%3E%3Fo%18%EB%80%86%D6%DF%25W%13K%E0%ACl5%FC%0C%7B8%3B%9A%7F%9B%C8x%A7v3%CE%CC%080%03%7B%BC%A7w%24Lbpk%7C%F7%B1%90j8O%82%EC%C5%99%B7%85%C3%1B~%DE%06%DBpux%E7w%3FJ%82%9C%C1%98%AF%865%95%C8%F0%22%AE%8E%8F%02%FD%12%16%E2%EE%1D%CE%C1%3Ah%B7%EB%3C%E9%3A%EE%DB%E3%9B%AB%3E%8F%AF!%B7%F0%9E%9B%00%D9%F3%7Cm%FF!%8C%BD%B5ix%B6%82%AD!%5Ey%8F%C0%B8%B6J%C0%DA%D1%10%3B%F3%FD%7C%AC%CB-a%03%9E%C1%2F%FF%8F%8Cu%98%11%F2%84%F8H5%CE%C5%A7%AC%C7C%DCk%3CxH%5Cv%87%80%7BQ%C1%3A%D5%E0!%DF%94%7DQ%ACC%030!%7C%15%DA%E5x%06k%F6%0E%01%7C%01%EB%B1%11%18%FCYh%E2%F0%0D%EF%2F%8EA%FB%CB8%8F%02%60%04%12%04%F5c%CD%1D%DA%CD%18y%06%D3%3Fr%020%07c%0A%1E%E2U%25%9CY%E4bGg%FF%0B%DB%09%03%A3%AA%95x%08%B3%18%E7%F0%CF%80%AA%CE%95%F15%00%BF%F7%2C%09R%8E%99l%EEU%D5%DB%3F%24%204%A1Y%841h%EE%1B%18%C8%E1%3E%85%8C%D0t)J%B0%9F%C6%40%F8y%96%18%D0%12%C2%DB%5Bob%20y%85%D6%20%CB%04%BC%BD%8C%C3%40%E2%B2%25%06%22%8CA%D1%7D0%1F%AD%F0%16%C6%18I%F5%10%12%15%AEQ%0C%C4%15%B2%06%A9%0A%E2%ED%ED!d%0E9%A2Xbx%07%87%B0v%14%90%D1%E0%9B%C66%97Z%60%89%01n%B5D%C0%D9%3D%EALxaQjS%97m%E9%1F%D4%F7%26f%99%19%93%B1%1B%EA%22%25p%FC%DB%F5ef-l%94%B6%D2%22%E2%B2f%13%7F%EC%81%99A%E2%C5%C6%E5NBNF%DA%A8C%7Ck%3EX%18O%2B%D35%A6Q%C8%CC%A4%E1g%24%E03%CD%B43w%5D%00%AF%8A%E0%0A%A8%D8%E1%92%7DH%D7%06%F0%EEZH%91%01%ED%1A%E4%A9%E4%EDN%13%92%D3%06%BF%1F%FD%5E%AB%C5n%23Ky%16%F2%25Qu%40%A1%0A%81%B5e%C57UuI%02hr%BC%0DA%A4%FEy%CF%3D4%9B%22%04%3C%23H%95P%A4%14%3B%02%CDX%C9Y%06%F7%DE%E4%AE%16%11%03%02%B0M%8E2%E0%C4%0B2%EC%9D%9A%C42AP%05g%09%9A%1A%7CCl%A5K%99%D8u%8DADr%1CR%07%9DoK%DCdj%8B%1D%86-%0A%C6%3D%1B%89b%95X%AF%B6%C1%8A%89%02~N7%3E%E9%92%85%3EY%AA%F6%AD%DF%25%C3%2B%CADI%7B%9F%E00%03%15A%AE%94%ECL%B6%2Cp%B8%E6I%B1M%97c%2F%BB%0B%C1%5D%C9%8E%1E%7F%8E%12%E4%CC%B7n%C3%3BgG%81%AFU%0Fq%BB%BEA%07%B2%D6%A7J%AE%E0%F8%40%11%95%D0%E9%7B%0F%5C%F9%C1%8A%7F%E7%EF%A4R%F7%94%EA%94%1B%25%23%F8%C9%A5mq%16%E7K%E6%F2%AE%93I.n%DB%A1%BC%FD%AF%F8q%BB%A6%CB%82%5D%C8%B7%A1%93%E4rX%B1%0By%0A%18%C2%24%9A%7F%D2.%E3%E4%20%5CQ%F0.h%CC%26%E3%84%FA)%11%9F)%82d%1E%C7%96.%A8%F9%3DspI%C8%94%08i3%82P%60K%1BO%FC%20p%C1%16%A4%FD%EEQm%12MH%CA%DA%14%17%906i_%9E%ADT%3B%8C%9E%BB%A9%89%BE%87%EA%90%B69%0A%A98%FD%AEL%11R%A6%E0%9F%068%A2%8F%B5n)%0A%A8T%A0%CCA%8B%CB%23%FB%B1OP%9C%10%5B%13%9E3%8B6%04%92%F9%13%E2%3Do_%F1%3F%3EN%9D%E1Y%C0%CF%A5%8C%60%1Bg'%A0%96.%C3%B7l%40%B2%9C%8F%CCV%F1%3B%C9%FA%E3ET!%17%D4d%A3_'%3C%CD%C9N~%83D%8D%60%E2%CBd%96%D1%9B%061(%CB%2C%A9f%5E%FE%10%92%25%C4%B4%E1%B9%7Dr%9Ao%D6%0Do%AE%8E%EE%AFg%7F%B0U%15%C3e%85%3A%A4%10%FC2uH%25%DC%A2%3C%A5%D2%14%02q%09u%C8%EB%DDK%DF%A7%BE%BC%0D%95%CA%B0G%8A%9D%A3K%D9%BD%5Dl%E8%2F*%A3%1B%F6%CB%F7%8BM%AB%00%F6Q%85%F4n%06O%25%C0%15%99%22%83%EB%EDTr5%80G%A0%08AAv%B3%9F6%C4%13%82%8B%CDRj%E5!%3DqZ%CC%F7k7J%9C%26%04%5E%87%9A%DA%F8%F6%FA%01%99%26d%C6%EC%0A%95%17%0F0N%40L%EB%F05%B6%95h%FF9%02Y%A0%7D%91%D6)F%16%24D%9C%82%BC%06%F0%D6)%C3%BE%C3%2B-s%0Ar%09%F8B%8F%E1s%7F%97%1C%00%0B%C3%04%2B%F2%CB%5E%09%89%DA%C6o%D3-%B9)%80%23%10%CF%1Aw%5B%F2!%DB%F5%D1tK%D7%03%88%13%8F%0E%F9rw%B5V_W%9F.%D9%F5%7D%E7%3E%09%5C%DD8%06%3B%D0bIg%88%0C%3B%07%81%23%03%8D%CF%D5%C8%06%86s%0EB%F8_%95%19%3C%FA%07%A45%86%EC%18%24921%16%23%C7%CE%D1%87%FC%A1%A8%AC%C5%C2%F1%FC%B6%1F%D9%80h%7D%8E%95%091Z%DDM%5EQo%0A%D1b%FC-%D9%02D%00%F2%F2%ED%A0%19D%00K%0B%F25%C8O%88N%DA%B4G1*w%25!%16%06%5E%1AD%B4%00a%EF%18%95'%07%11V%C6%F6%A8%12%0E%10%9Df%C2%E1%B7%0D!Ok1%9E%CC%004%88%C8%E9%CB%0Ao%FE%2F%0D!%91%ED%F5%96z%C7%06v%808%CF%D8%D4q%EEiC%C8A%F1%80%A5%9Bq_%5E%5D%94%E4%F3%EAc%8D%15%8A%11D%B0%D8%AD%CC%FB*%1B%24%F9%1C%17%9B%D7~)%5BH%DEA%40%7D%02%22%E6%2Fo%C0%C9%EEg%B3%850%B3%DA%B87%C1%BB%5B!%F8%F1G%03%FDF%FD%825H%C1%7C%ED%AF%FB7%84%B5%98%7C%5D%60%83a%DF%83B%16%20%ECh%8F%94%5C%EFS%8Cw%EB(h6%FE%02Z%82%C0%A7%F9%15Z%E4%83%0E%BCW%F3%B9Y%92%0DH%EB%E9%CE(_%40%1A%A0%9D%0F%F9%BE%98%3D%84%AFU%D5%BE.%01Pt%BC%C0d%E9%95%D99X%82tn%25-%BD%C2Wa%09R%E0%17%81Up%1E%24%089%C6%7B*%B3J%AAM%83%7C%9E%1C%E3%2F%CBv!%C3%E4%18_%A3%AB%C3%A4%E1%CD%E4%09%12c%BCo%24%3D%A3G8)%9D%98%DE%07IA%8C%CB%E5h%A6%95%A6%CB%95%84%E0c%7C%C4vR%CC%DBK%9Ai%DD%B0%B8%DA%18%23~%94%F0%20%02El%BE%9B%E5I%B6%22i%1E%DFe3SuQ%FB7%E6%D0%3C%DEL%D7%9F%94R%A3%3E%AA%90R1D%1D%C2%0E%AC%1C%A3%0E%B9%00%C7G%A8C~%01%F1%FB%D4!Q%C8y%F0Ir)%E6%B9C%C0%14%A6%20%86%FD4r%06%B2%19%98%C4%CD%84%19%24Wq%04%B2%1F%AEA%CB%981%E4F%B8Tr%04r%FEt%05l%196%84%A0E%C7%DE38%22%0B%A1%E5%87%E0%B1y%BDF1%3E%D7%89%B5%AE%1F%85%92%7F%8F%01w%7F%FD%1D%A3%18%FFw%E0m%7D%E38%B1%09%D0%13rr%B3B%8B%AC%AF%18%C6%F8.%E8%98%995%A1%23%BC%E4%A7%A7%EB%C2eRjo%04%5Cc%CD%BDF1%BE%91%2B%26%0C%AE1%EA9%BB%F7%1E%C4%BE2%5E%E9%10%5C%9A%99%84%E8%E7%F1%A7%18%A1br%E7%1F%A2%EE%24%B0%3A1'%BCN%EBF%C6%F7%EE%C2%F2%A5)%88.%2Cum%82I%88o~%F7%FCL%18%EE%C1M%E09vvb%F9%ECn%EF%C8%5B%BB%24%80%1C%DD%99%E6V%C3%E4%E5%D2%AC%F87u%D3%D4%12%FD%10%E0%DD%F0%EF%C6w%E3j5zdu%EA%1D%804%5D%92%A7%9E%DCvj%1FU%B1%CE%E0%E7%023%DD%9D%8B%01%B4Wm%AF%D7%AFJ%D4%C6%D7%C1%F1%CDS%DFI.R%B6.v%A1%EF%CB%E9%97%1F%E5%8B%5BuoJ%A0B%C8%1D%9F%F5%FB6%D6%2B%3E%E2%C2%C6i%F2%3C%BB%D3%A5%BB%C7Z%7F%FCY%DD%3B%B2%1D%09%B8%FA%A7%07%9B%3D%81Y%EA%A3r%06%10vk%DB5%7D%E1%23%C1%FF%7B%C5%CA%1B%DE1-%7F%EC%09%ECpe%82HJ%DC%A1%2F%BBX%C9L%BB%5E%1F%AC%8C%B5%DC%9E%AC%96%2F%A9%02W%A6%BF%81%E15%1C%E2sS%D7%EB%C3%BB%C5%E0%9D%A3L%EC%CE(%F6'%BC%A1%0C!%CCk%B2Q%F1%91%C9%AD%FA%C4K%00%E5%93I%A7%3A%D9%25p%83%8A%D11%18%88%F1%CF'L%85%DA%8F%A1g%E7_%F2'2c%FC%7C%E0%3E%01%7F%2B%FAn%2C%13%08%BF%92xV%7C%C3zy%E2W%05%7CA%ED%5E%94%015%86%0D%CF%CDD%17-E%89%FFN%B4%11%5B%14%5Eg%F2F%9E%B9%D0R%2B%5E%DC%B2%C9%3B%B6'%0A%26%E9%12s%E5%60%7F%18aB%ECT%8A%8F%2F%86%BCLg%0E%E8s%B2%05%2F%DF%B4%1BC%04%97%94!%24%E3%11%1BZ%85%1C%7F_C%A7%E6%A6*%BAKf5u%E6%9F%A1%BD%8C%1F%3C%03%09%FAk3%17%1D%82E%B4%AF%16%F3%B8%06%A2%F5v%C8%84%F2%EE%C9f%26K%CB%A6%22%26K%AC%2CJ_a%F6%3F%DC%86%14Kn%F6%20%A6%FA%1Fc%CAy%EBp%20Wn%00%00%00%19fcTl%00%00%00%0E%00%00%00%C8%00%00%00%C8%00%00%00%00%00%00%00%00%00%01%00%0A%02_%95%7F%9A%00%00%09%C3fdAt%00%00%00%0Fx%9C%ED%9C%7Fp%14%E5%19%C7%9F%E46%B9%CBfw%2FB%D4%A0%81%DC%20%12u%A2%80%0D%15%DB(Grc%22Pr%D5%B4%8D%9DTO%E9%20T%2C%88%80Lma%01%81%83A%2F%F2c%FAcl%B3%A0V%FFp%9A%03%87%D6N3%C3%9B%842%09%04.%22%C5a%C6iVB%D0q%18%F3%13BB%F0%BAw%094%3Fv%F7y%F7%EE%DE%FC%95%EFL2%B7%FB%3E%EF%FB%D9%BDw%F7%7D%DE%F7%D9g%0F%60%B4%9Cc%F6%00t%E8%EC%8BK%2C%20%E1%D1%EA%A61%B2%A68%0FqB%13%D2%95%D04%0E%90C%AF%FA%983%C4%3C!%9F9%24U%81%0B%845%24I%05Nf%0D%D1%C6%C1%0B%CA8%406%AB%AC!%B6%CA%C6%EB%AC%19%20%84%BB%14%E6%108%B8%C2%1Bg%0B%F6%E2f%C4B%C8%DB%FD%20EC%A2%C9%B8%F0%8F%E3w%23%B59o%C5%06%9C!%BD%E0)0%2C%DC%0D%87%90S9%A0%96%7C%AA%A2%90%14%1Fl1%2C%F4BJ%A5im%E9%01X%C8%C9(%A4E%853%C4%A8p%258%CC%5Bp%B8!%9B%9F%86BB%1A%C7%10%B2%13%83p%B9%CD%03%F0%04%82%F8%E6%B5UD%9AkT*%3DUS%174%AD%2F%AC%E9%EE%23!%F3~K%CF%E9%CE%EFY%F0%B8Q%B1%AD3%E7*r%94p%BE%DB%B3M6%B5%A8~%13%0A%9E%DF%A9%1A%15o%BE%86!4%0D%808%DB%D4%E0NHw%B5%FE%02x%FD%FBI%BC%D2C%05%01%F3%AFk%00%EC%5EiU8%EC%D2-M%C9%D2%9Bk%8E%96%F1%5D6%A4%B2fN%06%C1%EF%D7%3F%94%967J)%20%8B1%83%DAl%0Db%A8%EA%B3%ABT%1C%B2%103%10%7Fn%06y%81%0B%10%94!mWP%1B%BB%0F%F6%19%B5%E4q%3Cm%3E%A8D%F5%FE%0FP%13!%03%16%0C%18%94%15%0By%DF%C7!%A9%3F%C6%DC%01%C0%FDP2%DD%A0%A8D%BA~%06o%40%CA%F1%A16%B5%A7oT%11%FD%A2b1%E7%D7h%7D%80%C0w%A8%09%7F%5Be%BB%A2_%F4K%08u%1B%F0%87k%0F%DE)%B0'%98%EA%D3%2F%F9%04%F8I%A8%03o%3A%99%B5%D7%DCB*%26%20L%E3%5D%86%06%B5n%84%E1%88%AC%18%CD%3B.%AD%A7'%08OJ%C63%A7j%0C%12~)g%83%1F9%8E%8E%FA%AB%A4%04f%19%0D%E8b%8E%82%40%02%FF%C9F%2C%80%EF%80%BD%E1%3E(%DCiP%9E%8A%0E%C3%97J%B1%C3%00%A1%1F%E0%8B%D3%C6%E5!%A3%FB%F4%96%CE%F7c%16%00%2F%99%17o%F2%E9%EF'%B7%3EQ%DC%89%98rd%DD%DD%9F_Qo~%0C%D3%DC%AE%A6%12%C2%F7%A9z%BB%A7TU%F8%FD%A7%A2%9F%DF%EE%7C%2B%5E%CA%81%B0Og%AF%C3g%0F%CF%98%1F%8E%F2%C5%B5%AB%A3%FB%C6D%5B%F4%A6%07F%91%19%BD%CB%2B9X7%C0a%01%1C%2B%A1(%3D%DB%10%993%D0%BE%DA%A0B%A2%20%01xo%00%F5%99%F1B%3C%10r%CFB%18qC%0A%FD%B7%9D%1C%DD%0B%09%EF%F8%BAp%BF%BD%8By%E4.%E9%AA%CD5g%99%87A%CB%C3%C4%3D%B7%E9%C3%AE.t.%1E'd%FB%15%5BI%23%3Ax%C6'%FBl%C2%C9%17%EEQU%96%10%C7%0D%E0*_%A9%7D%9A%E9%B9%F0%7D%90%DCtM%C8%A1%98_%C6.%E9v%A8%E7%A6%01%CD%9C%3F%0EU%D7dW)%D0%C0%16%C2%E7%FCm%12%5BBT%A9%14%BE%3Dn%B5%F4%8E%03%A4a%962%0E%94%CB%F8%A2bB%13%9A%D0%84%10%7D%BDs%1C%86%92%E5%7F%7D%8C%3D%C4%05%3B%983%04%2F%1Cf%0A%90%F6y%3C%85r%24R%CDP%17%BB%96o%99%EF%86v%EB5%8F%D1_%2C%DA%9A'%A9fY%D3%3C%EB%10%E1Qj%D3%7Cm%A5B%C4%22%C5%3A%04%DA%D0p%EBM%95f%A9%1C%81%A31%DD'%076R%1A%D6%9D%CB%D6%20%C9%EEX%20%D2%E6JH%CF%FF)~%80%9CRn'%C0%DF%88%05%02%E2R%92%A2%A6%60%0F%AE%B4)c%EE%03%0E%19%A4%FBc%82%80%B8n%03%C0Z%CCJz%B7%9B%F0%3E%0AC%1D%C0%09%FF%0E%8FG%5B%95%9D%C5%2C%AB%BA3%40p%01%D4Z%87%B4%F4x%FC%BB%9B.%95o%C1%BE%AEK%FDv%1F%08%DFi3%60%EB%90Z%15%C4%FD%C5%CA%BFk%B0%8E%AF%F2~I%00b%7B%C6%FB%D5%5Dp%F4Z%7D%86%F4g%CC%D0%EE%5D%AF%FD%A7y%2C%A4%A3s%99%9D%CB%BFG%C0%F1%5B%CC0-%F2%94%EF%C9%D8%20p%99T%BD%E8y%86%B4%E5!v%D1p%CD%7Fc%84%88%87%0B%40%DA%D3%F9%0C%96%16R%1Cc%FB%11%09%83%09R%0D%9E%DF!%86%99%A7%2C%B7%ED%D4%09%D4%C8%06%B6%9C%8E%ADQ%60g%24Dg%DF%60(J*%AB%A0%B05%DBO%01q%B8%8F%9F%C6m%E3%84%D8%09%DFJXC4%9F%C1%25%0Ab%D8%F1%BCW%AD%1E9%C6%C4%DC%F1%C6%92%F2'%DF%15%7BmZq%25%25%1F5%19%A73%24F!R%5B%E2%0F0%86%2C%04!%1B%EF%D48%D5%01%D2%7C%95%3D%C4%11%C8c%0D%99%0A%B5%ED%5B%8E%9A%3C%80J%84%B6C%81%F3b~%11%D3%E0%22%D8%5E%ACt%FE%10%60%3DS%88%D6%BC3%03X%E7%EA%B5%92%E4%20%60y7%F1JpEFH%C6%10%E8%E0%14m%12%C7%18%92%C1%3D%A8%8D.l!%82%CC%05%CA%B7%F6%B2%85%B4%AAI%DF%FAw%A5*L!%EFG%87%C7Q%EE1%C1J%CF%1B%07%88%E3%DE%B7%C6%E1L%06%9F%B4%B1%85%00%8C%C3%D75%01%89%05%C2%DA%01'%1E%22%AAz%90%A6%D3%09%85%24%13%1DH%5B~Q%15Me%CF%E8%B5%8C%AE%048%A8%EA%404%1F%BFI%BB'u%F8%23%24f%1F%C6LR%9AAj%5C%F2%23%9D%12%A7%17%A0%1D%AB%1E9D7%92%C9%19m%A6%FE%BD.%97%1ED%038e%0A%88%0B%5EGLR%7CP%20U%E9%A5lD!%14%13%2F%E1%06%1CGL%C4%01%DE%07N%BD%A0%8AS%19%04%A1%EA%85c%98%C9V%BB%0C%87%F4%0A%9C%8F%01%5D%FC%B7%AB%7C%26fb%DB%26knP%0F%12*%DFJ%95X%D1%11%E8T%11%13if%D6%0E%DD%243%A7%E4%DFEu3%CE%16%9ER0%9B%BA%C2.%A2%0B%01%8AaE%D0%FE%96%AC%FF%1AM%11%17f%B9u%F7SA%9C%DA%1DV%B8%DAA%F1(%5B%3F%E7%88%0E2'%A8%9D%8D%BD%0Ce%08r%9A%5E%EC%99%0A%C2-%BAC%FBo%C3%E7g%82%7C%E6%F9%87%C7ZQA%F8%81%CF%9E%8DDa%97%E0%90%DF%B7%7F46fM%E7OfHKU%F8%15%1CS1%88wqu%E5%D8%D4%13%3AH%B5g%C1C%92%0B%1C%3E%0C%E2%EE%98%2B%C7%0A%09%F4x%8A%8E%13%90%A6%0Em%1B%A5%5EI%19%FD%BB*b%84%EC%5B%8A%A5%5E%DDl%22%AF'-olB1%15%E4%11%EAx%D7%F6%5C%A1ol%86%1A%8D%8F%17%5D%D4%90%B6%EB%D0U%40F%14%B5i%A7~%04%F7%F1%8EJ%2B%91%BBM3F%A66%17%11%E0%EE%D6v%23-%D8%C8h%88Q%C7G%D4%A2%8C0%15%F3%B2%81%A3%F0%F1u%A3%23z%A6%D6%81%91%BE%D1%E1%CD%8FNQ1%1Fo)%E2-M%1A%05%91%2F%90(%C4%DC%C7%8B%96%9Em%F1%B7w%8Fx%1D%A7~%A3%5D%89%AC%E3%11%1F%2FdX%81D%9E%3B%0C%DB%10%17%1FnP%A2%EBx%F3JB%3C%2FU%A7%06%F9%19%24%B2%8EG%7C%FCAw%1C%10%ED%BA%EC%04%EE4%E6%E3%C57%E3%60D%20W%A3WWr%5C%D1esq%CD%E9S%A3%10%96%2B-%E1%F5%CD%F5%3E%D6%10%98S%B1%A5%3C%25%C8%16%22%E5%C1%94C%91%80%1AKH%9A%2F%FDF%A8%811%C4.%DB%BD%CC!%C92%A7%84%D6%B2%84%88%05%DA%90%95%04-%9Dr%C4_0%82%D4%3E%0B%CEw%EA6%DA6%C8%EC%82%05%7C%96%B6%C6%0B%87s%B5%E1%3E%C1%EB%F8!%A5%97%AD%84%B7%23c~%D3%A9%10q%AC%A3%5C%C7%5B%94%ED%9DU%EB%86%DE%18%E4%DC%8E%EB%B8%8F%8FE%C7%E0_%7DC%1F%C5~%3B%E5%3A%DE%AA%1A%00nen%BDrQ%A6%5B%C7%5B%D5%B9%C8%802%A4%2F%D7%C9t%EBxk%92%D6%96%D6%7C%EC%BE%B9%95%D6%AB%00%24%91DCZk%E6%05z%D5%5B%9B%D3%B3%01%8F%02XV%7DhD%8E%C4%C7%9A%8F%C7_%7C%B6%AA%B6Q%EF%C4%8A%BD%BB%12%CE%00a%F2%7D%EA%FEa%DB%0Ew%E2%19%90*%9F%9F%5C4l%3B%92%08%93pi%97%D2%DC%23%C3%B6%DF%60%C0%D0%86%5C%BB%3C%EC%0D%3D%09%7D%AD%EF%96%3E%FC%8B%05%C8%D1%AB%C3%5E%2COs%D3V%3C%FB%9B%AD%D4%10%7B%FE%9D%9C%EF%FF%9B%12%5Db%DD%17%8D%FE%02%90%5E%A6%A6%FC)Xk%F9%B7%20%0E%86%F3%3D%DA%CAy%1F%7D%0D%E9Q%97E%86-%8B%80%D0%ADJ%DB%E8%AB%A4eZ%5C%0B%08%99eA%E0%97e.%A0%BFH%40%FC%E3Jk%90%B3%1D%E2OT%D1u%B2G%B5R%0B%0B%BE%8E%14%9F%1B%84%D4J%98%07%F5S%ACP%92%E9.%A9%C1%F7%BF%85%7B%9B%E1%AB%E9%04%AA%09%FC%FD%8A%7F%115%24-%C7%E4%A7%1C%A4%9B%E9_%8E%0Fd%ED%FF%F9%87%15%E0%EF%20%DA%B5%AF%B9%D3o%CA%F4B%F11h%CDkC%0D%7D%CE%3F%A4u%E0L%02%D2%1A%12%D9nLL%FB%11%09%8F%C3g%97%A3.%E7%89%A2%C9%04Z%23K%0Bw%E2%9A%1F%D4%FE%20%A4%AF8%E1%D3%FA%7Ba%F3%1F%16E%BD%E6%A7%8F%246%2F%5Dz%F7%08%01%FB%CF%88%02P%A7B%DBs%25%1FH%DAW%F6%89%92H%06%3F%FF%E54%1F%EC%FDv%FE%8A%A6%13%DA%FC%2F%7D%F7%AB%5Bu%93%8C%A9%D2%A6J%0DR%AC(5%B6%C1%18~%B8%ED%9F%96%FB%80%C1%AF%C3%FD%0F%BA%CCn%86%20%12%A6%14%00%00%00%19fcTl%00%00%00%10%00%00%00%C8%00%00%00%C8%00%00%00%00%00%00%00%00%00%01%00%0A%02%3D%D0I%5B%00%00%09%92fdAt%00%00%00%11x%9C%ED%9Cml%14%C7%19%C7%1F%DBk%DF%FA%3C%B7G%12J%A1q%8C%8B%5CJh%08%A6qy)5%BE%D8n%E2%26%10(%B4*%8D%D2r%A9S%02%91%8D%5DAS%A9%85zi%EC%E8HL%0C%09Q%F8%105g%E2H%E9%07%DE%83%C4%87H%EC%81%A1%94%5C%7D%84%B4%A1j*y%C1%18%DAH%15%B1%8D%DF%C0t%3B%7BN%EB%BB%DDY%E6%B9%97%B9%AA%92%FF%92-%EF%B3%CF%CCo%BD3%BB3%F3%CC%CC%02X%E5%B5Y%00%3Ec%D8R%92%08%88a%D5%00%C6)1%A5x%89%93%9A%D4%FFR%E4e%F1%0C%CF%B7%9B_%11%0E%91T%F2%BAp%C8I%80N%E1%10JxG8%84%FE'%1B%85C%AEk%CA2%E1%10y%C6%E9C%A9%E5%B0%B7%95%EF%D3q35Fhk%B3%CEu%CA%1A%C3dE%02%3B%1C%B2%9A%0BW%FD%DC%E4%FBn%60%20%BB%8F%3F%EBPt%B4Q~%80%9B%7CZ%13%82A%C6%40%BB%9F%7D%AA%14%609%2F%B9%FB%7B%BF%D1%10%90b%80_%40%98u%AA%0E%94%FBx%C9s_%EB%08%22%20%3EP%1E%F70olg%B0%B3%91%97%DC%1B9%AB%F2!%CA7%C2G%FD%DB%99%F5%F0%9D%01%87%FB%18%A3%88%F7%03%04%04%FEa%7C%F5%D5%C1%F3%8C%13%05%83%A3%3A7%F5%D1%EE0%06B%3B%5DC%1A%CB~%E9'%B7%F8%89%9B%23%1A%06B*%C3%3A%F3D%DB%89%1A%14%84%9D%DA%02%A9v%F0%9A%F56%02%D2%11%D1%10%0C%20%8F%06%D9%F6%A1%E6G%F8%A9%3F%F1%A2%20%EE%E5%B4%12%97%3Dn%87%8C%AC%ADF%24%97P%2Fa%D97%17r%FC%1Dv%C8%CD%9Ag0%C9%FD8H%FB%F9Z%D8c%B3%2Bc5%DB%11%C9%F3%FF%85%81%B8%7C%D2%C2%22%B0%DF%19%F7%ED%EA%08%229%19%C5%40%24%9F%D2T%B5%D5%EE*%7F%D6%F01%06%C2%1A%EF0%20%40%60%BB%FDm%EF)%3DQ%8AH%AE%18%AC%B7%85U%B2%8F%FE%CA%F63%CE%14%0C%23%92%83%B1%0Bs)f%1D%CCc%16%9F%C1%AE%9ED%8B%3D%9A%E9%C7%5C%8A)%F7T%CDnTJ%D8%CDI%E8%EEX%E7%95%C5X%08TM%B1%DBr%8B%BE%CF%F4%ED%24%F3%26%0E%8E%0C%E1%87%CE%E5%0C%DBA%F5gL%DF%10%F4%B4%19%F5%E3%7F_%EDSQ%DD%15S%1E%D6%E5%AC%FBt%88%E9%9C%7D%DE%BB%89%7CW%8F%FE%5D%F1%0A%A0!%B4%1E%DB5%18awc%E4%5D%17%00r%A2%95%CAE%2B%E0%1C%2C%24%12%B4%DB%C8%F0%5D%1A%D3%D9c%D0%AC%AF%AB%D1t%AB%00%D6%60!%5E%BF%DD%D6k%14%B2%9D%E5%E1%16%80%86%E8%05%AC%D6i%D1a!%11F%07%AB%CD%08%B2%9D%B3%DAv%D7%9D%194!%C4%7C%5COt!!.F%9F%C85%B0%C2%E1%8A%5C%85%15%FD%FB%17%D4t%81%AB%9F%A2%0E%0E%DBc3%23%8CdN%91%19v%3F7%A27%F0%028%89%84%A2X%BE%F4v%05%B9mn%EA%10%D7%83l%7BZ!%B00%13%90H%83%C5%20%A0%E0A%EE%CF%40%E4%CE%3D2%DF%18%14%92s%8C%B2%7D%E4%CB%AAhHd%E7%CAz%D1%0Cxk%DD%AF%853%A0m~P%3Cd%7BhD%17%CDP%CA%3CM%F7%0Af%5C%9C%FF%18x%FE(%96q%ED%C6o%C5%02LET%F1%0C%90%B4%0C%40H0%03%90I%FD%9F%2B%3F%13%90Kj%06%20%F9%B73%00%81E%99%80%5C%C0%8C%8DSU%BE%F8%20%3B%D5%FAL%40rUb%0C%EB%82!%CA7%AF%E8!Lh%23%25%F5%EC%85%7F%CE%15%CCP%5E%2B%018%23%18rx(r%00N%8Be%F4%0E%9F%CF%5DP-%B6o%A3%3C%AD%81%BB%9E9%13%90%3E%C9%F7%01bVa%5C%24%DC%05%7F%A9%0E%26%01%F1%D3_%9Bq%8C%0A%A3o%C3%E8%19F%20%89%0B1%A7-z%FC%18%D7%AC_%85O%1AAH%A2%B6%13%F3V%91i%18W%3Atl8%B1%0B0ab%AB%9E6'%F8z%1C%A2%0Eq%8A%C0%955%DE%D9%CD%A8%0B%B2%884o%A3E%BF%C3j%DEo%F7%ECV%16gK%CF%F4oJ%02%02J%05%23%10*%AD%D7l%B6%DC5%8D%D7%25%BF%3D%9C%8FR%FE%B0%3D%C3'YW3%B3%FF%A1%AB%C5%1F%EAIA%3Cw%0F%04-%26%E20U%D64u%2C%CF%9F%0C%83%AC%2B%FF%B3%19K%8A%95%EB%3C%C8v%CFs%81Yw%8D%12T%E8%DF%22e%DDt%1D%3A-Ql%09%E0%3D%9Bg%A7a%DC%A8%AB%02%FE%5C%9D%5D%3D%D1%E8_%DBSZ%AC1%B7%F5%AC%3D(%B8Z%23%23%87B%DAO%93%804%2C%D1%C1%7Ce%F8c%8D%9E%E6G%EC%9D%98%FC%EA%B01%E6%5E%F6%09%3Eo%2F%23P%A3%FE%F7%AC%F2%86%1E%E3%2B%25%16%D8%89%810l%13%A1%A8%93%FD%B1%CF%8ES%5C%2B%B5x%97%7B%FA%D82%8Eo%EA%90%C3%A7%1B%03%A2!J%A1W%ED%D6%D2%01%B9C%C1%BB%7C%11M~p%C27%E9%82%BF%E3%05h%11%0Dj%F5T%B2%E0%8B%40%8E%1A%3E%3BG%13K%01%D7%2Cc%ECcV%2C4%9D%92%0E%C1%0F%E1%92%26%18%A2%C11%D8%22%96%019%1At%13%D1%A3%C9n%08%87%BE%AE%0A%86%AC%EF-%AB%EC%D7%C52%0A%C6%96%02%24%D3n%24%A2%D0%BB%AB%00.kB%19%9E%2F%98q9Y%15%0A%F9h%95x%88%E7%1E%C8%09%02%E4%09%85%90!%F0%96%8B%8E%97%CA%F4-%1EY%FB%C2%B0P%08%95W%09%BC%24%B8%E0%C7%DB%BC%8C%40%84%87%97'!%93%90I%08%06%12%EE%C2AR%88%2Fy%7B%CB%AA%F6%60%20%D2%E6%E4W%3C%7Bi%1B%DF%A4%23%1C%03%04%19%C6bAV%99%8B%BF%11%8E%2B%A0%25y%08%05xU%BE%9F%FB%09%DAEK%09%82X%7B%E6%FD%25d%25%0F%09%8E%83x%CA%3E%A2%E7%24%0F1%DBx%C4%B2%07%E9%DC%D2S%C9Ch%1B%8FYX!i%9DCj%D2%10%DA%C6s%87%9D%60%AE%F1%3A%D6P%944%04%10c%5B%13%D22%9A%B7P(D%DA%04%EE%BE%A0%DC%AC%09%85%D4j%9EV%90w%AEBdx1YH%DEV3D%9C%B3%EB%25%8E%9FF%7F%DA%ACFE%C3A%DC%B7%3F%0A%02%7C%A8K%FA%1D%DD%3C%E6%B0%F0%05%AB%B5%97%3E%20%1A%A6%E0%D7%2B%1B%CD%1D4D%E5%B8%D1%1F%DBz%CD%9A%23%D1%06%8B%0F%E9~%FF%B4J%7C%00%9CHqH%07%5B%EC%9D%14I%3A%0Er%D80F%3Ai%0E%7F%FD%FC%D8a%E9%95%D4x%AD%DA%BA%14%93%F8%24%0D%05%F9%FB%02%DE%D2%AB%F1%2C%3C%B77%9E%B3Af%B8p%90%A3%D7y%1E%9Fg%D1%EC%07k%5C%FC%F0%A9%D7)%24%DC%C5%85%1C%C7%06%D5%A4F%08X%CE%DCO%EE%D1%A4ceUo%F1%B2h%C5B%DCcn%CB.%032%05%1At%E9%5E%DA%C6%F3%B2%A8%B3B%1C%0A%1E%94%F9%86e%91%16%AD%93%DD%20a%DA%F8%15%12%AF%E0%FF%A3%02%EB%A6%22R%0A%9D%E3%CF%89%CA%81%14s%CE%C7%C86%0FVD%1F%CF(%84%D7%C6'%B0%17%D9%E6z%A4r%05HA~%1Bo%3E%EBX%15%2BK%E2%0D%9E%E7h%A5%9BgNa%A5%0DB%7C%B2uq~%2B%85%B4%F1%DB%F8%04F%C7%C4w%A9%5D%B7C%BA%F8m%FC%E5%20%1A%02%BE%E7O%2C%8D%B7%BC%0C%90%7B%88%FFZy%03%CF%80y%03%AB%2B%B48K%60%FCV%60%3A%12XM-%CC-%B3%40%C8%8F%D2%0D%D9%A2%C9%7Dz%9C%A5%E5rm%BA!%B4%EC%FB%AA%B7%C5%1Ew%2C%89%BC%9B~%C8%D4%0D%3Bc%8F%23%A5%DE%40%DA!%92%1A%7F%DC%7D(%C7%84d%A58w%11%2F%B3%A1%8F%95%17%24%13%92%DE%D1%EFW%2C%90%9C%A0%B46%DD%90%7Cc%5E%BCAY%2C%97%A4%1B%02ak%BF%A9%E7%C0j%15%3B%8EOZd%8A%FCs%E48%3E%05%DD%92o!%DA%F8%145%C7%85%1D%C7%A7%A0QI%C5%8D%E3S%90r3%0A%C1%EC!K%5E%9E%99%15%14%92%A5%09%CA%9ED%F7%DCx%16%EC%2C%17%F8%11%82Ef%9FUi%A8%07%3A%8EOz%E8%CC%11)%26O%D0%FE%DE%97((%C0%1B%09%26%0F%F1%C1%EF%00%5E%15%BB%FC%92B%CE%C2%9F~%2C%94%01%EER8~%8C%BF%E3%3E5%B5%F7W%97%B0%16%F88%09%F1%C5%04%9B%3A%8D%C4%D6%A9%9E%1A%D0%13f%90i%0B%12%2B%F2%A1%83%C1%84!%A1%F5%AC%3D%93%F1%F2%3E%FC%B7%89%03-%CB%9F(CY%B4%5B'%25%9C%FF%E5b%5E_L%E5%93%8B%80T%F4%D5%25%00%E990%0A%ED%BFw%0C%F9%EC%8D%E2%CF%16%DC%9E%1Dc%9C%0D%A7%1F%08%EF%F3%E3!%8F%C9%C5%05%83%C7%7D%0Eg%DD%3F%88n%BD%0C%9F%DC%3D%3F%E6%9F%0DU%CE%7D%16%94D%A6%A2%0B%0A%B7%04%E68A%24%B8b.%2C%7B%FF%3B%9E%EC%98%05fJ%D8%9C%87%CEnyNGS%F6l%82%19N%90%2B%E3%BB%5Cw%14%83%7Bz%DC%AE%7C%DA%DFp%7F%8B%7C%1ADS%40y%CA%09rA%8B%8Ev%DF%A6%99%BD%19%B7%073%5B%83%BC%F2%84%86%C2y%FB%9D%20%EE%2F%BEh~%85%E1y%DDz%A2%19%E0%D2%E6z%25%81%C5%A4%11%E7%2B%3AS%D9OK%7C%83%D5%EC)%04x%B1%B1%BD%D61%9D%5D%1Dw%18%9CK5%B4z%2F%B6Zs%1AA)%DAg%18%DC%2FsL%E8Ix%C8%F1%8B%24%EDG%DE%5B%EE%B1%EDS%AE%8D.%D4%0D%7FP%A2%A3!%2B%07%3B%B69%9C%DA7%40%BE%D6%5Bi%7DV%F3%87%5BA%DA%10h%85k%85%8C%00%0Ek%E8%B1%D2a%89%15R%F6%0C%13%FCp%5B%C1%0E%F39%FFC%82%0D%88%80%AF%C3%FD%1B_%F5Z%E6%C3%146%83%00%00%00%19fcTl%00%00%00%12%00%00%00%C8%00%00%00%C8%00%00%00%00%00%00%00%00%00%01%00%0A%02%13%80%80%DB%00%00%09~fdAt%00%00%00%13x%9C%ED%9C%7Fl%13%E7%19%C7%9F%24%17%FBl%BF%3E%93%852%AA%04%C8%986h%C5fh%23F%5BJ%9C%C4PF%19A%5B%B61%86%16WC%A8%D3h%13%A4l%AB%04%5D%5C%02%AD%C9%10%89(%7F%A0%0E%81%5BZ%A9R%D7%25%AD%26TU%A3%9C%13%08t%F3r%01%FA%C7%26*%E5%08%23%AB%26%A4%C4%24)-%24%BB%BD%8E%A1%F1%FD%F2%3Dw%E7%8B%D4-_%C9I%FC%DC%F3%DE%E7%EE%DE%F7%DE%E7%7D%9F%7B%2F%00J%05T%16%80%11%0D%9B-9%01%91%94%1A%C58%99%93%CDC%9C%D5%AC%FE%0F%F4%F7%B8%F3%0C%AE%ECG%CEC%BC%9B%0B%9D%87%B0q%AF%F3%10%17%3F%03%90b%DEe%A78%89%89%08%2F%96%B7U'%FE%AAr%84%97%E7%F9%D7%EC%40%5C%3B%ABE%C4%A1%94%AE%B6%03%E9%85%C2.%84%5B%7D%C4%0Ed%2B0Q%84%DB%FC%10~%977%FA%95%96r%60%3A%8C%CB%91%F0r4%C3%5D%BFLa%E1%26%A1%40%05V%CB%D3%8C%1F%86%5C%86%17D%B9%85%8C%C0%EB%88%82%C5G%F0%90W%C0%BDYa*%23%98%26%5C%94%C0C%0E%A6%8F%5C%A6%E1%96%D18%A2%60%40%A8%40%22Hr'x%2B%FCI1%CB%D6%3E%86%A8%11%0A%09lDB%F6%EE%BF%05%EF%CE%AD%92%F8%2C%5B%B0%16U40%80%84pk%12%3F%D82Wn%F3I%02%EEL%84%9D8%88%E7%F8%A3%DCQ%C5%3D%E1%92%8A%E2(%C8%E0A%1C%C4%5B%DB%A4%B2%15J%8C%B2%B9iC%DC%BF%C0A%B8R%B5m8%F8%C9%1CL%D9b%EFz%1C%04%5E%7D%5Ee%12v%1D%9CD%95umEB%12%C1G%94%A63m%0B%CAPeY%F5%A5%D6V7%E1%95%A6%F6%BE%D5%CF%A1%CA%BAPW5%ED%B8'%A9%82%F0uaTY%E6%0E%12%02%8D%D2(%2F%B7%9C%E0%13%25%EA%9A%D2P%D1%A7X%C8%8D7R%13r%8B%C0%93%FB%EBxMg*%DFt%DF%19x%18%0B%A1%01e%5C%FE%DDO%DB%DC7u%BD%D9%87%C4%2F%20%9Dx%88%FFkq%A5)q%5B%D7%DB%B5%23r%EFO%A1%0A%0F%19%DA%BA%40%89-%7DU%C7%B7%7D%F4pr%9E%94%E9%87%FCu%F7%A3%19%E7J%F8%7D%0A%D3%D5%09%BD~x%99%B7%AE%FFaq%9B%98%FE%5B%90D%2C%83%95%9E%81%A2%A8%DC%D6%D0%A6w%B9%26%A0%FB%81%DB%F0n%FATH%C9%09%2C%03Z%9E%A1%FE%F2h%EB%19m%D4%1B%87L%C0%BE%A1%C5%C0%A6%0F%EA%E2m%01%CB%F0N%1D%B3%7C%DC%C0%A4R%A2.%E4%25%B2%82w%A5%CF%E4%CCr4%84%99%3A%09!v%3C%CBF%82%BA%8D%EB%BBd%15W%D9%D1%B9%9B%1E%84%2F*%7C%0F%09%F1%06%D3%B1%83%0D%1F%CA6%5E%D4%EB%94%C8%CD%A0%24%95%3CQvj%EE%01%9E~%3B%A4%CE%CD%7C%A6QJ%2F33%A6%0D%F1%18%26p%CC%A4%A2%B4%7C%E9i%97T%F5o%D3)%917%08%FBt%5DnD%3E%20%9Ep%8B%F3%10%08(%EF%3F'*%5E%F8h%062w%3Fwd%A">
+<!-- FIXME: alt=" " is a workaround for bug 1505657 -->
+<img id="i" alt=" " src="data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%C8%00%00%00%C8%04%03%00%00%00_v%B3%AD%00%00%000PLTE%9D%0B%08%1F%20%1E231%3F%40%3EOQNefdnpm%7F%81~%97%99%96%9F%A1%9E%AE%B0%AD%CC%CE%CB%DE%E0%DD%FE%FF%FC%00%01%00%0F%11%0Di%C4%2B%A9%00%00%00%01tRNS%00%40%E6%D8%0f%00%00%00%01bKGD%00%88%05%1DH%00%00%00%10acTl%00%00%00%0B%00%00%00%00_v%B3%ADi%C4%2B%A9%0D%7Biv%00%00%09RIDATx%9C%ED%9C%7Dl%1Bg%1D%C7%7F%8E%ED8%CE%F9r%99x%1B*k3%95n%7Ft%0D%A1%A1%A4UI%14Q%10%8C%0D%16%A6%F1%07bJ%B32%40%1A%D2%9A%B5%EB%3A%A8%D6%1A1i%7FtL%E9%10%FFP%91%1A%A11%ED%0F2%B7i%95i%DE%1C%0B%26U%02%AD%98l%EAx%99%8A%9Bvi%DAd%97g%0C%8DVE9%9E%B7%7B%B3%EF.%CFs%F6y%DA%C8%CF9%FB%9E%97%BB%CF%3Do%DF%E7wO%7C%06%A8%B6%0E%C7%FEO%BF%C0%3E%2B5%B9%EA4'%A4%D8%D3%18%88%5Em%B3%8E%C4%EE%9CO%269%0B%BC%80%D6%A5%7C%9DE%10%B0%89%BD%D1CR%FF%8AG%0Fi%D1%9BP%12(%9Ch%02%04%3A%1A%04%09%3CM%B1!%90'%E0p%D0y%8A%8D%60(w%C0%9B%D7%03%D2%CF%EC%2F%D5%0FI%E2b%7C%2B%20%3D%B1%3CR%3F%24%8E%B7%23%F5%9FfeHC%EA%3D%C8%12%B8%BA~%135%24%DD%03%E5%AFF%0DQ7%C0rO%E8%A3%DBG%C5%F2%BD%0Ec%A1%19%B0%7B%BBX%BEc0%18%9A%A1%5C%FF%7DI%24_r%00%A4j%EB~%A7%3C%A4%86~%FB5%91%83~%B2S%0A2%F3%C0%0F%1D%A1D%EE%D5%1D%02%07)%0B%EB%E1%AA%04%E4qx%C5%11Jf%D5%B7%04%0E%8A%0D-%C0%F4%9D%E2%90%EDp%0EZ%07%CDP%BA%A7mA%E0%A0%F1%3Fu%822%F0ia%C8%1Dp(%F3%99%9C%19%CA%CC%1D%12%E9%C3%3B%D2r%83%E4%E7Ss%CFo%B4B%F1%E1%1F%8B%1Ct)5%24%C3P%EF%D37%5C%B3%83%FB%9E%12%99%D2%94%2B)%C11%CB%2Cq%B1w%5B%D9%0E%F6%AC%13%19%C8%CA%A2%24d%D1%19j%BFsN%A4%1E%14%24%07%99%D0%9D%C3%24%F9%E8%8D%5D%02%07%A9y%0C)%BC%2C%CAP%8D%D3%CB%B7%DB%CD%10%7Bv%7BE%E8%B8%D4w%40_%1A%14%84%A4%16%E0%AFw%CD%DEk%06%3B%A6%FAE%86%09%40%9B%0E%1BAPK!F%DAy*k%06%8BS%5D%97%C4%0E%9C%04%ED%85M%82%90Iw%B08U%E9%15%3C%12%E2%FF.%AF%9C%89%DA%14%C0%1F%0F8%20%85%C5%DD%A2%90%E7%07Es%9E%84_%9F%DF%60%07%CF%E4%173%A2%87%BE%2B%DC%8B%13%BB%B6%E6%1DU%D6%D2%BF%BE%E4%97%F5%25%D5%99t%02%DE%10%86%A8%FB%B6%FCj%AF3b%E6%B2O%CEV%FD%9B%D9%87%0Ffy%E8%95K%10%CF%89B%C4%ED%E0%93kwe%E3%5C%0F%D2%E7%F3pN%B4%DD%25l%1E%BAg!1%C2%02%1D%FD%00%BFh%3C%03%DEV%DE%99-'x%3B%A4%AE%00%049%F5am%B1u%EF%DA%B1%E9%2C%0F%3D%9E%86%91%08%20%0B%DAk%5B%F4Y%AB%1D%C6%23%40%00%7C%F9%A1%13%07%E6%BB%CCP%E6%3F%91%40%5E%D7%F5%BE%CB%D6%B8Mv%06%DF3%86%B4%17t%5D_%3A%96%E5!%AD%0F%A4fyA%D37%8D%8F%8E%FFm%9E7J%FB%8E%DA%B5%99J%FD%90K%AFI%2C%E0%84%86t%E0%B9%1D%94R%24'7%EDZ%C7%CAy%EA%B7%F7%05%12E%C3C%BC%09%0D%BFj%AB%B6j%0D4%03Id%C6y5y%84%06%12%0C%24%93%B9%E9%10%8DT%17%02%03%0C%03%13I%5D%E0%18%12%89%0C%92%8Ew4%BE%917D3%19%B2%10zq%F8%94%1A%D28%84%9D%1C%0C%8D7%80%C1_%F4ZH6%E9%E2%D8%10%00%C4%20%C8%8C%E7%10D%03l%8Ff%0C%09%D1%B4*%08%AE%3B%D6%00%B8%9A%0C%C3%A0%9B%05%09Y%5D%1A%3D%BD%0D%D1%CC%92%D8E%05%1B%02%B2e%E1%10%DC%9E%B4U%C85%1A%24%D6%B0!%3C%CE%0D%91%C2%F0%1AF%B4%86p%BB%02%EF%5Df%9B%D0%9Ee%D0%8D%D4%1D%85%90%FD0%7DY%F6%98%10%C3%1E%B4p%83L%C0J%F6%AElw%11%B7f%FC%1B%EB%FD5%EFF%8D%AC%D5%82%20!%D4%25Z%88F%86%BA%C1%86%B2%C6D_%A3C%90%C9%B2)%F9d%18%D2%D1jP9%23%8A%AF%89O%A9%9A%25!H%B3%F4%98%08%3BW%19%A6%F1Ts%90%C6%B5%07%D84%20U%12%AE%E5%F4hS%CB5%06A%A6%B6%819%178%B4KfJ5%5C%10*%FAD%D8%11BL%E5%5D%10%83H%3F%92%87%A0*%88y%F1%A4%FAL%95w%96%C2%9A%D0%24%20%06%B2%9B%00%98%E8%5B%CD%C0%E7%5C%ABMX%B3%85%80h%5C%CF%11%BFLD%3D%056%BF%D0%1D%C4.%C5%EC%5Df_%94r%D8%C2%88%B6%B4E'%C0%B6E7%93%ACZc%8Du%5B%AA%87d%DC%D0%DE%1B%19%04%8F%15%EE%86%D7%D7%3FL%99%A7%E2M%AFY%A3%0A%C5%05%07%19a%9C%DF*%E3%9Aj%EB%06%D1s%AEW4%1E5%10%E2%D6r%13B%D5%98%EExs%F4%0Bb%14%03%F9%40%0C%26%C7%B8%26%03%D4Pt%BDK%F3%830q%C4%82%D8%18%88%E6~%01%9FGp%83%B0%3B%3D%FF%DE%25%061e%DE%D9%BB%D8%9D%22%A2%FD%8BBxl%1D%25%E1%C5%09%25%FA%A2%0D_%17D%CE%9A%02%F9%F0Xuu!%9F%FDp%0A%A3yA%D0%07%15%C2%E4%9Dm%40%BD-%B2P%C3g*%EEq%D9%DE%BF%E1%9C%14%C4%98%1Au%0F%C1!%F4%60.%D4P%7F%D1%99%60y%9An%87R%0C%E2%12G%C7B%0D_%C1%B1%12%98%B3_%E5%E0%87%80%B0%5B%1E%06%A1%F3%A3%E5%CB%23%B6%8Ac%03%88%C7%1A%16%82%1C%25%01%2B%91O%C6U%A5%90%818d%9EM%81%F6%8D%17XUop%1F%DF%D9%1E%C2%10%C3p%F6.v%1C%5D%A8%01%E6N%B0%DE%85%98%F7o%B8z%97puy%94%ACA%99%02L%C8%8B%AB%13%22%D6%F3%FF%7F'%05%E9%95%D1P%90%95%D3%EB%BF%17k%0A%C4%1C%8B%88%DF%C2k%C4%8F%A7%1B%5B%BC1%EF%B1%EB2%8D%2B%3DX%8B%CE%86%F5%0Av%1E%E5%20%96%04%3A%97s%EC%AD%B1%10%B3%BA%22%858%A7%26'%A4~%B3%17%CA%18%C4p%BD%04%20g%F5%AF%0B%40%2C%97%9D%2F%D6%BBz%17h%2B%F5%AE%BDpJ%A40Uf%FF'C%C8%AEC%98%C7J%24!%15h%ED%8C%1Cr%13%B4W%E4!%92%F6%BDr%BC'r%C8%99O%0C%0FE%0Ei%BF%B0%24%F2%DD%EB%FALYX%FC%C6H%E4%90%8BC%13b_%5D%0Dk*%FE%5B%CA%17%A3%AD%AF%C4%85%3C%5C%80%89%EEH%FF%A9%14%FF%E5%BB%E5%05%18%9E%0C1%1C%C5-14%BD%06%D4ee%3EJH%1A)7%40%EB%5B%B03J%88%BA%003%A3%E3%A3P%1C%8B%12%F2N%EF%E6%F7.%03%B4t%F1%88(%BEzu%9F%CCC%93am%DDp%B9%3DGv%A2%AC%AEO6%E3%EBpG%9A%019S%FD%80Y%14%0D%1F%FBn%13%1A%3E%CC%F4.m%99%2BM%80%C0%96f%40%8A%A5%26%40%E2%D1%3B%11%003%A2%0Fi%D4c%0F5%81%01%DB%9A%01%F9%F0%7Fcd%D5%3E%80%F6%CC%A9%B1%18%D0_%7B%88n%DESo%82%DBN%12H%E1eYH%06r%829%D3%230%F5m%FCyq%FD%E6%A7%24!%007%0B%8E%CEd%0E%E2X%F6T%3C%1F%3D(%0D%99%F8%AFX%3E%7C%5B%FEg%7C%3D%A9%0A%C09I%D5%98%06%5DP%95%139%20%B5%15%C7%90%8EQ9%C8fxR0gzP!%EEA%82%40%B2r%90%BE%C0TW%B5%7Cq%80%04%DB%B0%E7%D9%91%93%83%7C%3F(Quy6%CA%F1%DE%DE%CF%1F(%DC%06p%7C%AE%2C%059%1E%94X%F5Tp%9C%BE%17%BF%B2%E7%ED%3F%C8%3C%5BM%0E%1C%018%FD%A8%F7%95%25%DD%0D%DCB%DF%D5%FD%3F%C2%D7%B6%D1%2B%BF%9F%A9%F0%B1%F2%D9%8F%3F%5C%EB%F1%3D%87%B7%98%BB%AB%C6%1D%FB%87e%20%00g%AF%DER%F6x%B6%ED%9F%25x%E3%A0%BB%80%F1%9AL%C2%A6%90%DF%A3%F8TMtr%0C%EE%D9%D5%D5(%C8%F4Q%F2%94q-%BBS%E9T%DD%0FE%86%5E%DC%CC%C0%1A%FCn%3F%F3n%DB%B6%B6Q%F8%9C%2B%26%B4%C2%B7%02i%F3X%B66e%FA%F4(%B8%1E%F6%0C_%5D1z%EF%E8%E5%1F%A7o%1D%82%FB%DD%90%B0%DE%D44%7D%FF%92W%D2%D3%F3%2F%5EsE%C4%7F%F7%C4c%A1%20%CF%90%B7%CC%7C%C1%23IY%BB4%E2%8AH%AD%EB%DB%E7u%8E%A9%FD%3F%0B%86%3CBO%A7%EB%9E5%D1%EF%0Ef%0Aw%7B%3E%F5%DAW%B8'%B0%22'u%D8%EA%2Fv%0FTG%A4%0Fz%9D%AD%07%5E%AA%04A%D6%FF%03%F6%F8OZ%8FTG%24%1E%2Cyd%EB%F7%1Ag%0E%23%BF%0F%B0%D57%F5%E9%EA%88%9D%7B%BC%B2%1D%3F%BC3%87%3FR~7%8Ad)%F2%07%BE%90bUM%26%E7o%F7%CA%96%B9%FB%3C%F98r%D2%A7e%F4%1C%A8%FE%0F%FE%9E%CB%B9%C3%C3%A3%DE%F7%E73K%25%DC%7B%E6%8E%FA%2Ci%DF2%00%9F%F5%BF%87%8C%8D%B4%3B%2F%EE%E4u%C5%F34jw%1F%1E%D1%A9%8Ft%FB%2C%D1%1E*%C3%A4%7F%EFJl%DA%B0%DBNM%CD%96%DA%3C%2Fh%E6%BD%03%B8%84'%F2%99%81%C7%DE%F4J%FF%CB%10(%83%BE%90%D4%F9%7CK%D6%0AM%AC%81%96%8F%96js%FD%DD8z%F5%C6%C2%A99%DC%86K%9E%3F%13%82%FB%5E%CD%02%8E%FD%B5)%E52hlYl%A0%26%97%94%E1%CEQuu%B6%A2%AB%CBc%C7XuU%7CK%CB%EC%D9%15%D2k%CC9ml%E7%8FQ%AF%04Y%C1%FE%07o%F8A%AA-%A1%E6%92%00%00%00%19fcTl%00%00%00%00%00%00%00%C8%00%00%00%C8%00%00%00%00%00%00%00%00%00%01%00%0A%02%94'%03%1A%00%00%00%07tIME%07%D7%03%10%13'06*4%98%00%00%09%FAfdAt%00%00%00%01x%9C%ED%9C%7Fl%13%E7%19%C7%1F%9C%B3%7D%B1%CF%17%CARu%A0%8C%98%B6%ACe%A2%FC%A82Z%AD%40L%E3B%60%2Cf%1B%9DhG%87)%EA4%8D%AC%09P%B6I%9D%C6%A5%FCJiJ%A2%89J%FC%01%E5%A0%D34ihN%A7%89U%FBc9%13%83%C2f%E2%AC%B4%1A%D3%D8r%10RX%D7.8%09%E4%97%C3%ED%CE%B1%E3_w%E7%E7%3D%E7%22M%CAW%89%7D%EF%FB%3E%EF%FBy%7D%AF%EF%7D%DF%7B%EE%7D%0D%90%AD%92%B4%E3c%DF%98x%BF%93cU%A0%D2!%11%CF%D4%40%A4l%0D%A4%25V%B6j%18%91I%B7%02%F6%A8P%E0G%40%A8%ED%80%F9%10%FA%0B%94%F9%90%22i%1A%3E%09%84%DB%A7%01%02%25S%04%D1-%262%25%90%E3pB%AF%9C%C8T0%98%AD%F0y%99NzwcW%E1%10%9B%00%F0%7D%9Dtky%7D%E1%10J%FE%3FSx1%F9!Sr%DE%F5d%15%00~o6%C4%E1%01%F1%05%B3!%EC%0A(%F7%18%CE%ED%E4pv%BD%C0%1Bf%C0%AE%8D8%BB%D3%B0%C90%83)%BB%82%BA%8Al%3E%F0%90%94%BBWH%0B%D0%FE%3F%7C%17%93%E9%17%DB%89%20%3D%AF%FF%2C-dm%FD%D7fD%26%26V%01s%09%20%EF%C0%C7i!%5B%0B%7B%0F%91%C9%E2%8FA%F0%25%3Cd%23%F4%81%7D%B2%11%1D%9E%E2%18%22S%E0%9A%1B%18%DFW%D1%90%AD%D0%E0Z%DE%9A%0C%B9%86%1A8D%A6%CD%F2%C5H%A2_v%0C%BD%BFr2D%D5%BD%85%C94L%FBI%18%ECni%C5%BCT%F0%D0)%01%91%89%19%A39%12%88%F5%AEw%83%98%0Az%16%F0%18%C88!d%3C%3D%E4%7Ci%C8%8F%81%CC%26%83%B4I%E9%97%89%ED%CDE%CB%10%99XA%86%84%3B%B1%0C%F6%81%AB%E5%2F%0A%93A%CB%07%1Bq%F3p%BA%16%A4(%B6%F7%A2c%F0%EFo%0E%FC(%19%2C%E9%A8%C1%5C%26%00%C5%12%AC%04d_%0A%16%5E~%E9hI%06%23%1D%CB%86q%19C0%EB%D2j%24%24%94%19%8Ct%DC%F1%22s%02%F5%A0%88%B4%EC%00%F8GS%1A%24%3C%BE%0B%0By%1F%3D%A0%5C%80%DF%F5%AFH%05%BB%85q%176k)%87%B5%B4%EEY%2F%A4%9D%B2%A2%9A%0A%CD1%EB2%9B%9E%D4%0E%B7%D1%10%F6%D0%DA%DF%1EH%8F%E8%19%D5%B0%B4K%2F%B7%1ClN~E%3E%1E%06%AAU%C3RE%CC%B6%91%8Cp%1D%AFn%D7%7Cr%E9%9E%16%CA%3F%11p%F4%0B%D0'%E2!%CA%A5%92%AEnN%D5%8A%1D%81%CA%01%B0%26f%B8%255%00%BF%22%60%00%9Dy%8D%2FW%3F%0B%CC%7Df%CE%80hM%D4%80%1E%03%D0%9B%D4%E7%C86%3B%3D%E4%A8%10%D4!%E3%F6%03K%F9%60%B2M%DEq%00%D1%B4%3D%E8I%0FY%02%EA%1066%EB%E6Zi%40L%86%03%24%08%B0%0FnI%2F%B6M%EBF%EC%3Bo%B47%8DLv%D1%AE%2F%12A%EA%3C%19%C1%DDZ7%04%BD%92T%3D%3Ay%DD%DA%DC%FA%F7%8C%99r%0C%8B%19a%AF%16%E4%92%24I%D1%D3%C96%99U%0D~%3C%C4%16%F5fT%E9%91%C8QU%BBbiu%80%0B%7C%3A%92%A8%92ss%AEoF%AD%FF%D6%F2%CCDU!%F4%F0%CD%7C%0E%9C%92%DC(%0DWT8%D4%A7%1A%EF%1C%96%CB%60%80%D1%99%8E%E3!%EA%B6%B2%E6i%C4O)D3%DETHA%0D%3F%A8%01%A1%08%3Cw3%9A%D1%8Cf4%A3%2C9%1B%09%26%C8%86!%DER%D1%7C%0A%04%B9i%80%D8%3D%D3%00%A1%DD%26%03%AE%5DZ%07%1F%1AwM%A2%C4%94zO%09%DB%04s!%96z%B0%BC%FA%A0%B9%0C%F9%D6%19l%D5%F3a%0A%9Ei%E8H%BE%E9%B0%97%B7%C2%9A%96%FC%A6%C6UR%0F%1F%0E%C9S-%A4%E3%C4%98%1C%83%87%97%0B%00%C3%CBE3)%17%7C%FDr%83%BC%10!%FF%16%B3%AF-F%DB%B6y%FD%F2%AD%B7%7D%24%AFa%B6%ECo%7F%0Bm%DB%F07%B9%FC%EB%FF%5Dpm3Y%E3%3B%7F%0D%01%1Ek%FC44%D7%82%7DYd%CD%A0%88'%1C%F0z%2Bc%40qHs%D7%7D%F9%AE%AF%C2%5B%E6(%F7%E3%190%B6M%AA%1D%03%3B%16R%2C%B7%F8%ED%A5%D1!%F8%8C%E4%82%F4%F5%BF%0D%83%C2u%01i%5E4%D1%12%01%A2%06q%CE%A9%07%B8W%8Ey%0C%11W%F7Dm%AC8_iB%96%A62%0E%C6%F0%F6%FB%26%DE%98%BB%24%90%12%08%B8a%1D%DE%FE%91%C4%7B%A5H%00)%E2%B7%FB%A1%01m%CE%0C%25%0E%EAH%A6%2C%CC%C2G%1F%96%AA%FCXs%F6d%E2%A0%99%23%80%C0%8D%C0%CE%F6W%7D%D5%24Y%14%B5%11A%E0e%A8%13%5CaRH%84%0C%F25%03%9D%1D)%84%99%7FZ0%1DB%BD%B5%CA%00C%07%C2%AE%C9%7DRq*%C4%1B%81%04j%B5R%EC%AD%B6%9C%B8%3A%A9T0%00i%93%BE%A4%91R%222%9Ff%C7%FD%FD%DD%E3%22%BE%EC%12%15G%0D%97i%12%01%B8%19%3F%A0Tl%F5%1C%3B)H%F2%80I%C5e%B9%A2%FA%00%0E%02%B3%CC%5C%7F%17%C5%7DR%E6%AC%AC7%17%C2H%2B%FE%D9%5C%ABS%D8T%40%AC%D1%CA%E8%CF%F5%0A%CB%0F%C9%DF%F0E%AB%98%CB%F1%03%C3%0D%8FP7%99%F7%DD%98%827%F13E%C3%0AA%F3%D7M%87%5C%01W%83%A9w%16%8A%A6aQ%A1%3C%C9%22%98%FB%18S%F8%CF%C30%CA%9B%CB%E8%ADx6%BA%F2%CENS%19%EC3%E0%DA10%FB%03S!%B4%3C%1B%BF%E1%F3%FF%D4D%82%DCc%08%F2%DBa%C1%DC%8BQY%E3I%BB%8B%3D%E6Bx%00%DB%9Dv%D1%5C%88%3C%F1%09%C5%B0%2B%1E%8CB%22%5B%F6%CF%8F%95%A2V%8F%19%87%B0%8DG%1Cf%3F%DCQ%C6%3C%B2u%3B3%90%19%C8%0C%E4%FF%19%12%EE4%1F%D2%5BQu%1C%01%B9%25%7D%AF%00%C83%00%BB%10%90%03p%B1%00%882%C6%23%20e%86g%80%891%9EB%40%EE%80%DDm%0C%02%133T%0A1%0F%5E%02N%E3%BB%95(%1E7%15%FE%B1Hy%8CC%9E%C0m%18%E9~%BC%CEo%1C%D2%BCe%FF%00%02%E2%1C%8C%A2%9D%9E%99%A2G%80%EAl%3C%829%5DLl%7C%9B%B1%1D%1F%3B%7B'%1A%1E%03%B9%EBo%23r%C7%26%E5%E4%E8%16%14%84%95%FF%A2B%C4%D0%F9%B2%8A%EC%12%14%C4%3A(%C0%20%B4U%E6%B3S%13%05%CC%7C%14%84%FAM%A9%18%83%BA%90%DB%00%C4%D6U%C4%E1%3E%89%3F%B8%18%D8r%C6%88S%92%AD%BC%87kx%C7l%E6a%B0%DF%83%ED%06%20%E0%9C%8F%83%B01%E8%E1%02%1CDx%03%90%9EE%13%90%1F46%EAC%E6x%AB%1E%1A%05(J.SD-%BDJ%E8%F4%93%22%0A%B2%3B%AB%C8%5C%0B%1D7%D2%B1%E7%9B%02%F5%F9O%17%B3%A0Nt%C6%1D%FD%BC%96%89%0E%24%D4.Uq%E1%CE%7C%90%E0W%0C9%D5%12%BA%02%9F%DC%DE%5BQu%2C%0Fd%EB%99B%20%96.%D7%C21%80%7Dy%20%7Cw%F6RO%92%86w%3E%06%ED%CA%18%9F%EF%C1%8A%E5%B5%7C%0D%AF%A7%F5%9B(%0E1%C6%170%BC%CB%3AW%AB%ACg%CE%3B%C6%BB%0A%F2%22Y%8E%2B%B3%C7%FC%E3%C9%DAB%20t5%8D%1A%E3%23%85%ACKp%C5h%1Ff%8CO.w7%24%FB%E3%F4Q%CC%18%DFS%88%CB%A2%3D%84k%937%0A%60%B8V%1D%C2A6%14%00%B1%09%1B%14%88%25o%B3%E6%AD%85%8E%FA%3AG%2Fr%08w%7FA%FAH%EE%22%FCfC%9C%7C%FC)%87%B9%10%BAe%1A%20v%C1l%08s%19%A8.%B3!%E7.%F2%160%19%C2.%81U%17%14H%B8%93%14%E2%02%EC%F2%01G%3Dt%FCP~%BF%5BQu%8A%10%02%F0%A4%80%B3%B3%B5%02%25w%7B%EC%D8%E4J%0D%02%B5i%3D%E0%CD%92%DCa%FDU%98%D8%15%D4%87%ACWRA%90%90%BD%B2%B5%15%94%B3E)%0D%CF%91A%AA%E0d~%A3%B8%1C%9B%18%B7%C2R%20%84%CF%B3%F4Wg%08%E9%81o%FB%94%601%2FC%08%97%C7%FED%2F%91u%A7%87%98%F3%5E%EF%BA%A6%F0*%80%F3C%22%11%E4%BC%5Eb%D6%AE%60*%FE%1A%D9%B2%FF%FEG%24%7B%AB%95%8C%F2%2C%FD%EA%9B%EA5%B3q%19%C1%A2%F8%2B%DBxD%AE%DBJ%15sM%B1%F0e%F1%D6c%07%DD9%09%7F%94%FF-BV%85R%3AA%02%01%B85%F7)Qeo%DB%F5.%B8%DD%2CjB%08%C5(%BFG%F1DN%B4%8D%87W%F6d%EE%EB-%00%12%3C%AB%EC2%CEe%BB%197%9B%B9)r%96Q%84%0B%94%E7l%A9%3D%EF)m(%E6%E0%B9%8C%18%C3%3D%BC%1D%DC%F2%ABE%E5%12%0E%5E%E5%20c%B3%A7%F1%D3e%89%DF%3B%AA%CD%8F%1DO%FBao%26D0%08%09%C6_%9FWKzo%E4%2F%F32%22%A8%3F%1DW%DF%2B%97O%E7%94%17%D7%88%DA%DA%2Ffi4%D3%2BF%2F%A8%3E%A4VFG%E3%BB%FA%90%C3%F1%E2%E2%8E%D8%5C%D5d%06%5D%E1%1D%AA%BB%5E%AB%C3%AF%A8fO*%24%C1z%B5%7C%13z%3D%3B%C2%D1%ACV%9A%07.%EBzg%2B%3E%83%FD%DA%83%D6%E1%EC%08%EB%3E%B5%A9v%8D%DAu%96%26%E5%F7%01%D6k%A6%BE%97%1D%B1%7D%BF%9A%D9%F9%13%DB%95%01%86%D6%BAQT%5C%91%DA%8F%D6%23bf%D86%F2%A2%9A%99kG%BF%F2v%E6%82%A0%5E%8C%D4%0A%AC%F6%C6%DF%BE%AC%11%B0%8Es%AB%DA%F5D%BB%945%9Ag%3D%EA%C5%3C%E5%83g%FD%9A%10K%BD3%BDr%17%CA%18%D5b%D8%CAj%5E%3E%5B%8FVj%B8h%1BD%08%89%9A%10%EB%EA%15%BBR%A9%F4%40W%B1j%85z%1Ejr%CB%B7%93%82%CBw%F4s%B5%F4%1B~%60%B4%17%9D%D3%FDBQ%AAWk%5B%0CE%0BU%BE%5D%FFy%E0%EC%DCE%E1%8BCr%1BFU%7F%26D%FE%EE%E9%2C%9BbFa%16%1F%3F%F2i%2C%B1BJ%FErd%D5.%D5%A3%B3%E5%FCi1~%94%EFQ%08%F1%0A%93%F4accb!W%81%BF%0E%F7%3FB%09%85%E9%1Cj%D9V%00%00%00%19fcTl%00%00%00%02%00%00%00%C8%00%00%00%C8%00%00%00%00%00%00%00%00%00%01%00%0A%02%BAw%CA%9A%00%00%0A%13fdAt%00%00%00%03x%9C%ED%9Cml%14%C7%19%C7%1F%EE%D6%F7%BA%BBg%A5%14%C2K%B0!%B4%B4%89%83%1D%C5%16%B4%25p%0EN!%C1%C1(%15%C1m%1A%7C%A5m%40%0D%89%1D%88H%3E%B4b%C1%07v%89%5B%13%8A%E0K%80%B3jW%FD%80bS%C0%FD%12%D5k%03%09%A9%AE%9C%23%DA%A6%A9%D2%B0%60%14%91%C8*%18%1B%02%B6%F1v%F6%DE%7C%B7w%B3%FB%EC%9E%D7%AD*%FF%A5%BB%9D%9Byv%7F%BB%3B%3B%2F%CF%EC%CC%01%A8%E5K%86%5CB%22t%23%C3*G%A5%40%02%13%05%91%D5%1AL%26y%FDT%23c%D2%E2sc9%5E%00J%0FM%06%248%19%90%CB%22%17%7C%DAj%88%7Bqg%F8%98%D5%10x%F2%19%B8.Y%0D%E9%0B%8A%1B%ACf%00%F0%8B%16%5B%0F%81Z%D1z%06%7B%D3z%06%7CX%3BQG%E2%7F%22%D0RJ%7D%94%14%C3r%15%8FPR%F2%96G%26%0A%D2%FD%FE%5DJJm%E5)%AD%1D%CF%8Bx%C8%1F%A1%86b%7D%B0%E0%EB%1A%FBy%1E%5D%8B%874%C2%95u%94%24%F6%9B%1A%FB%F9%FA%9F3%02q%E6S%92%F8%7B%AA%88%FE%0BG%92%E1%AB%60%13%D1%90Np%15R%92%3C%25%AA%88%0D%DB%9B%85D%F8lJ%03%AD%AB%1E%F1%C4~J%12%A3N%A8%04G%B2%C1%BF%08N%DAm%CE%D4N%99z%E7%BB%25UD%1B%B0I%88%EDxw%08%CBp%0C%88%D4%B4%D5%19%C6K%EB%13g%CF5L_%85e%40%F3p%1D-%C9%3D%AA%8A%60W%0C%7C_%F2T%C6x%E5%F8%9B%C5%CD%CC%F7%D3%D2%9C%EA%8Bl%3F%B0)%E4)%0ED%C3%D3n%0Bh%88%7B%8B%9F%5E%A6%3EN%87%B0%A3%D7%8F%2F%5Cp4%F6%23%B2%10%0FaN%D5%ED%C3%DA%BA%96w%F5%F6'%B8%ED%15%06%20g%EB%DE%C3%DA%B2%C5%0B%C6%7Flz%CD%00%A4%CD%3FM%C2Sf%25%C3%8F%06%03h%88%AB%2C%3F%2F%84%B6~*%19%E2%E5%06%3Fz7%A8%1A%C9%A8%3C%E8%AAL%86X%B9%9AV%E3)%A9K%1B%D2%BA%20%9F%17%ACy%00%0D!%0Fb%7F%2C%E4%1E%A8T%D7%9E)%3A%D3%0Bei%11%C7B%7B%D1%90J%F8%2C%EE%090O.%1E%A6%DB%FD%0E%60wZ%84k%EEU4d%87%EB%AB%BB%E2%90g%EE%D0%CF%ED%DC%80%04%DB%D3%A3%9E%08%A1!%EE%07%3F%8D7%96%CE%B1M%7F%A1Z%C9%F3E%A7%AAJ%DA6%D4%8B%858%03%8Ex%06%F2G%18%EA%ED%3A%F6m%9B%3C%24%A6%C7%ED93%17%0B%E1%FD%5D%1D%890'%0B%D9%8D%B8%19%A0%BE%0E%C5%D9%D9%84%85%C0%E1%94%EA%FDG%94%A7%D2%B1%18%BCC%EA%C8%0Dp%85rN%99%B2%0D%04%92%E1%AE%17)6%A4%ED(8%9E%1E%C7%CF%06%8FF%B9J%97%E7%FE_%25%F7%7B%EC%20%05%12%20%F5%8F%9C%9E%CF%EEy%00%F8%E2X%94%0C1sfRN%E4fQ%D5%80%AA%AB%DE-%00%FC%0C%0D%19%2F%1C%5D%7B2r7%AE6%F9%8D%DA4%EF%9D%ED%1C%94%94%BE%17V%E3%BD%E3%9A.%3F%CD%E8%87'%E4gS%7F%17%CB%1B%C1%08%C4%96%7C%84%CB%BBB4%23%AF%BC%7BSG%CAo%B9I%F9%DE%FB%5BjoB%A5%BC%ADR%3C4%BDV%A2%19%D9n%AE%9A%99%DA%CD%A8%8A%9E%CE%EE%E7%91%0Cp%25%8A%20%2F%D3%FBR%5C%D5%CC%3B)%05%3Cc%B4%E5N%96%7Dh%233%19%25..Fo%00'%9BoE%1B%8A%A2%F9a%BA%FE%D9%14D%2B%FE%BF%93%F1S%9A%D2%94%A64%A5)%E5%AA%9E%8Awr%D9%9Do%C2X5%3F1(%E6%00%E9%3B%89%F1%D8%FA%E1%04%BE%7B%9F%A9%8D%9C%88%B2%F3%DEV%BE%3D!3%0C%B2%D7K8%CB*%E5%CBv%DB%0C%24O%84%3D8%CBf%91%7C%F9%0AD%13%10F%C4%BDj%F3%1E%8D%08dc%0B%FAM%40%1C%FBa3%C2%8C%DD%5E%DE%A3%F4%F8%99%26%9A%0F%A5%A1%FE%F3%0Fx%E7!%ECZ%BF%F8%F8%2B~P%DE%FAj%8D%D1g%D7%DF%0Bd%0D_%22EkH%C6%2B%10%B6%B0E2%C8p%DD%16%23%EB%2F%60%2C_!%19%AF%40%A0%E8r%C8%20%E4-%11J%BBQ%96%D7D%A8%89%BAu%87%9C%85%06!_%03%CF(%D3%A1oG%BC%B0%C7V%16oU%02%7D%DCp%D8%18%E4%1B%60%F7%BBq%A3%D1l%B8%BFf%E6%F1p%B8%FD%E5bT%26%8E%AB6t)%C4j%0C%E5%A5%C9%FB%CE%01%D2%D9%9F~h%FA%CB%86%18%E0%1Ai%97%E0~%AC%B1%00%5C%98%DC*%03%2Fyb%FA%D7%1E%F5%88%A0%06%24~_%0D%3F%5Ep0%0C%97E%24%C4%1F%DB%BA%D1%E3F%09%D9%E5%3A%2F%EA%F1%22%F5u%DC%3F%E4%D1%83y%09%B1%B4%81%BC%2C%A6%89%D9%17o%18%85%40%15%F2%3AHQIT%8D%7F5%0C%89%88h%D3%C4%10%A9%DD0%E4z%00m%9Axv%1D%A2QH%3B~%9E%CB%B1x%8F%C3m%18%B2%9E%F6%9E%3AS%97%84%D8%96%0D%19dp%23%F8%F9%14v%7F%1C%22%18%840%25%BFA%DB%26*y%EEM%D1%18%E4-%F1%92%84%B5u%C5K%23%2B%DF4Fi%BEyr%8B%80%B4%F5e%19%A8%A1%ED%CBd%B1%D5%1A%D8%19%87d%89C%0EEqB%F6%F8%09%85%E8%C6%FFoB%3E%C9%09%82%CBxvh%E3%2F~y%D6l%C6%23E%1A%C1%D2%83%E2%04%1D%8C%A6%C3%00%AB%B5%A6%82L%88%D6%00_%80%1D%DE7%A8q%9F%B0%12v%15i%18%E6%A2E%C9P%B0%FCK%C9%22%C8%C5%C7%13!%FB%BB%E8w%93%86%F5j(%1C%F3%0F%AA-C%90%E2q_%E9Je%C2%8C%13%FFv%DD%B8%F8%EF%00%EC%00C%3D%13%E3Rz%B1W%08%60%A9%85%8C%E8%3C(%D2'%7F%BF%D0J%88%2F%06%A9Aw%16MAB%A4G%16%80z%AB%0Ab%0CB%0AJ%E4.T%A3%A7%BA%98%82D%AA%EB%07%E7%FFi%EE%DF%2C%85%F0%8D%FB%98%0F%A6%E7%7F%D7R%08(%035%C1%86%5C%86%C5%90%10h%11%AD%87x%F0%5Dk%B3%10%1F%1C%0BM%02%A4%FC%05%EB!V%BF%3A%F4%01%A2W5%05%89%8A%25%99!N%C2%950b%F8%82%F5%90%D3%A5%2B%AD%5D%99%C0%EF%07f%0E%C0N%84)%5B%F1s%93%903%3F%00%86%B4%F1%D7E%7DS%DB%DB%A7i%D3%83u%B4%CC!2%02%C9xA%DF%D4%0Ep%D4%14%C3%13%80%E5y%0A%04q%8E%8C2%B5%D8%8CH%07%A2RYV%A5t%26%F4d3%FB%A4%BB%05X%ECz%24u%CA%92%C6%09%05%E0%B2)%08%B7%CE%1DpUU%D7cjGn%A8%A1L%DF*%9B%DA%07E%D7%AF%1B%F7a%EE%03%FB%D4%AEW%CDu%FB%D9%92%E8R7%14%24%FF%E4%B5%80)%88c%1D%0E%C2%92%CF%EC%22%97%89w0D%BE%19%BD(%88o%19%40M%C8%85%9F%F7%98%AA%C8%BE%19%9D%18%88%A3%ED%15%E8%07%FB%7B%82%19%C8%89u_%EC%F5%23%20%5C%E19%11%A0%95%C3%BE%1FHS%F0%E1%5E%16%03%81%87%A0%09%F8G%E053%90%86%ABC%2BQ%90Vpu8%04%E8%0B%99%804%C2'%1F%A0%20%B6%8A%8A%BB%07%C9S%96%98a%9D1%F8%92m%EAU%12%02%A8%DB%E5%5D%A17%F5J%E3%10-%15GQ%90%96.%3D%0B%8DCpKO%B1~D%1B%AF_%F1h%1987%B3e%886%BE)'%08lfG%10m%7C%C6%95%18%C9x%D2%00%2B%AB%87t%DB%F8%CE%9C%E6%DC9%C6%98%1B%B1%D1%60M3%BBd%EC%B0%E9%3A%EC%CF%BB%91e5%92Z%1E%FC%12%9BLyWu%B8oD%DD9%1Dm%C9%012%ED%7Be%9F%DE%C3%0C%DE8rXc%1B%CDO%E2%C7%EBB%E0u%F3%10Ec%C4%8F%D7%87%20g%7D%D0%84%CA%130%B0%3C%D0%3C%24%C7%B5%EE8H%8E%FA%3F%81%FC%3B%0A%B1Y7%22%AC%E8%CD(%C4b%9F%F1%5B%93%00%E1G'%01%E2%19%B3%1A%D2%2FA%5E%80%40%AC%F4%E3%F9%D5%0D%81K%E4%B1%BAe%A5%1F%EF%0Ap%A3%7B%09%0B%D3%C6%9B%16%23%40%E7%9C%D8%9Ba%8C%1Fo%1A%D2UH67p~%BC9%11'%BE%8A%1C%5Ci%E31~%BCI%AD%DF%A3%BC%A2t%87H%2B%2CZ%06ak%95%01g%FEqe%0D%B6u%90%19%D1M%A4%BA%1E3%7B%CF%A4%5C%3B%25e%C37%D6%5B%F4%0ESQ%DE%B9x~s%86g%19%E1e%FFga%3Ct%40%B2%0C%E2%E3%17%86b!%C6%EC%FDbu%E7%F1%9D%81%CF%0Bb%5D~S%F7%8B%0F%AE%BE%D0%B2b%96%8E%D5ir%26%8D%B1l9%60%02%C2%AC%09W%2F%E3%C7%FF%8B%20%BBRV%D7%B1%26%20%1F%91%82%BC%1F%D8y%E75%AD~j%E2%C8%E3%F2%06%08%84%E4%E5%8Fgk%9Au%97Vl%A5%24%B1%CF5J%DA%0CNY3%A9L%82%FB%87%A8m%F8%FB%BD2%C5%82%11%CF%0A%DA%FB%06%E5%00%F9V%5D%05%1F%7DJ%C3%AA%0E%D6%12%CA%B3%CB%80%23%A4%C9%E0f%0D%2F!%9B%F5%E9%B1%D1%09%A0%7D%AF%2B%CBo%9Db%D2t%99%3F%FB1%CE%C2%87%92%5B%0B%E2%DEV%12%E9%CD%F8%9F%23%5E%A9%04%9F%87V!%15%D2%F6g%8A%2F%D8%DA%F84%D4j%BD%0Dv%15%EFW%C6y%D5S%7DOJJ%EFG%19%E4%88%24%EE%D9g%82C%C8~%0C%F6V%80%1F.%D4%80xeI%81%A8%C7z%1Dk%A3%5D%AC%7C%F0%26%96%DD%B2E%F4%D6jt%98-%D1r%13%F9%5B%B0M%CA%D2a%7BV%84%22%F0%D6As%3C%B3%D9r%11.R%8E%C1%8D%95%E7%F5%EE%3ABIU%0CdY%99%A9%3FM%1D%EF%98%05%AD%E2%D5%DE%EEe%F1%DF-%95%00%B4%D2%EA%2Ci%DE%E1%91_%5C%24%D2%20%EC%BDp%0F%D90%19%15%E4%1F%1E%F6%CA%95m%C9%3F%AE%F9%92%7C%0EQjQ%7B%5D%E4%CE%EE3%FE%8F%EE%7B%A9%2F%FB%A3%E1%C9%07%3B%C9Zf0%23%E5%F4%92%F9%F2-)%F1k%C1%0B%00%ED%94%D1%8E%EB%1D%EE%81%8D%CE%DBp%AD%802%5DZc%DA%14%BB%B61%BEO%15e%8A%15R%D0%23%A8%A8%E3%8F%80%3BY%C0u%9CYR%2B%BF%ABm%A1%96%05%7FA%F7%1F%B0%1AU%A1%96%23%FD%A5%00%00%00%19fcTl%00%00%00%04%00%00%00%C8%00%00%00%C8%00%00%00%00%00%00%00%00%00%01%00%0A%02%C8%86%90%1A%00%00%09%E3fdAt%00%00%00%05x%9C%ED%9C%7Fp%14g%19%C7%1F%92%FB%B1w%D9%DDcFPD0A%98%14%0A6%94FE%25%E4%0C%A9M-m%C8%B4NQ%DBr%AD%ADSmf%8E%AA0%C5q%9A%85%80%0D%90%9A%40%DB%992%83f%83%0C%A3%D3%D6%04A%FD%07%CDB%00%83%9E%5CZ%CB%F4%C7%3F%D9%90d%AC%8ECBr%F9E%92%AE%EF%DEBH%B2%EF%BE%EF%BB%BB%B7%94*%DF%3F.w%CF%FB%EC~v%EF%7D%EF%FD%F1%BC%CF%06%60%A6%22%26%0B%40%1F%C6%E6J%5E%40%B4%99%1A%60q%B2'%E2%05%F0%AA%CB%3B%20%EBo%06%E4%01O!%87%14%9Dq%E0%88%A7%10~%A9%0A%F0%2F%E8%F4%14%02%3D%CB%01%9E%C7%B6%B4Lj%DF%A3%B0%19z%3D%86%88%8FK%2Ba%8B%C7%10%10v.%7Da-%40B%C9%E09%FFn6%BD%D0%A6%FF%926d%8E!%2C%92M%B6Jt%1F%89%F6%CC1%20%10%BEb%B2%AD%CF%E0%F9%D3j%83%0Au%A6-%E3%7Do-t4%7B%0E%89B%B6d%1B%F2j%BD%5D%88%CF%04%B9%DF%C2%F7%F8%DDj%FAo%F6%D2%9F%D8%83%3C%02%B3%E4%99%B6%EF%AB9%B9cfW~%E4%9C%E1%FA%0A%F0%F6%20%07%60%9F%3A%D3%D6%94%DAu%E2%5BfWn3%ACL%BFy%14%7C%8A-%C8%C5%C4Z%93M%DC%B1%B8%CCl%05%BF%A4%D7%16j%26%B3%81%BF%C3%16%A4c%9Bj6%0AjR1%5B%031~6%F8c%3A%04~c%87!%AE%C2%9A%F9%5C%0C%84%1F%3D%13%E3%EFlN%F7%08mv%20%D9)%AC%F9%E4*L%AF%C2%17h%85%05E%E8%CD%5B%AAp%AF%1DH%D2%DC%A9%E8%FA%D2K%18c%BCp%F9Ce*z%F3%AE%A6%D9%AA%93%96%09%AC9%B5%C0l%E3%06%3A6%A7%EF%8F%5Bt%E0E%C2)%DB%24%D3%D5%E5a%1D%1B%9E7%DB%92k%9B%FE%3C%9C~S%2C%13%18%C1%2F%1FS%A6%5B%04-%86s%14o%C3%18%2B%D4%E2pz%BA%16%2F%97%08%90cjx%7C%06v%D5%40-%A6%8A%83%2B1G%8F%08%83%81%5C%FDMi%01i%3C%FB%01%C0%BA%E9%96%CE%C3%B5%F1!%D5%E4%D8%A4%98%0F%E6%C7%C3%23Y%F1p%19%C0%3DC%B3%09%90%EF%A0%C3%A7%5B%1A%03%92xx%B3%C9q%10s0%9F%0A%8E%F7%B6%C4Q%93%9F7%3A%8E)%BF%E6%B6%15%B5%A6i%16%F1%D3!3%01).c%8C%C7%DF%9E8%96%1C%FD%24%FA%DE%C6pUfH%D8tY%991%D7%09%E6%F1%B8o%1F8%EC%A5%FA%FA%B6%C5%13%A8w%1E%99%D7h%099%B9%E8%AF%A9%D2%85%D3L%DD%0A%AC%C0%FA%FE%09g%8CD%97h%DFD%D5%91%FF%DD%2C%D9%82%11%BE%7F5%2C%DEmjJ%C5)%C5%F2%B2f(%FB%5E%AD%E1%D9%18%C0%8E%8E%D7%F3%2C%5C%B6%C0%044%9A%9Bk%D7%FC%7BX!~%ED%CA%FBz%EF%DCu%E4C%EC%9D%A2%1B%99%40%FD%B4%CF%5C%03%E2%5DY%AC%10%40s%B1%1D%FA%DF%EE%01%05%EF%C0%8F%F1Q%FF%DCy%E6%82%AE%0Af%08%92q%DB%F1%CFZ%14%EF%E2%FA%5ENV%99%2FA%9Cc%83!%8E%A4%BF%F0%CEQ%2B%07n%7Ca%D3%19%D3%F7%F5%FE%93%C36%209Z%FA%C7%CE%8DX%3A%F4%7F%BB%BC%F6S%D3m%C2%8F%B4%C5%F8%CE%1E%2F%D1%98%EB%8B%96%10AK%A5*Z%94i6~%E8%0D.j%03rU3%FB%D9)%DA%9FH%A5%F4y%C0T%0Da%A6%5Dte%11%EE%9E%D3L%D3%CB9%D0%A8%DA%87%B4%60%3B%23CUkL%A6K%90o%9F%01%E5%8AeQ%8F%86%2B%1B%F8%ADmF%CE%90uY%1Dv%89v%16%17S%A1%400%13%E5kzWKM%E9%BBL%D1%16%5C%B3%B4%8A%CC%E0gkh4%A0%05p%EC%84%A2%AC%82%09%11%C81-%A9%3C%80P%F4%B1%85%7C4%15%7FK%B7tK%B7%F4%7F%A8s%AA%F7%8CP%05%26%BE%90i%1D1V%15%9E%8A%DF%00h%7D%94%C9X2F%BEv%04%09%10%96%DE%99P%2F%40R%AD%8B%91%5C%3E%A89%E8%12%D2%0AP%1D%26L%2C%D1r%23W%D3nw%07yS%11%E7%9F%8C%91%3C84%ED%2C%8F%BAa%B4U%CF)YM%B8%91%D3%A52%87f%3E%C1%81%7Fc69%18%F5%D6mm%C35%BB%15k%87%BAr)%BDpj%CCu%DE6%0E%A9%BE%3C%A2CEv%94%BF%2C%A3%D5%DEA%E7%AD%FC%1FkZ%C8%D1%FBD0%1A%EA'%B6%0B%BA%C4%1DZ%E1s%C4k%E4%A2%FEh%95%EC%8E%02%9F%AB%A9!BB%7D%BD%F5%1Dy%EE%18%02-%18%C0%F75%AAn%3B%04%1E%1F%5E%9Er%15%E3%B7%93%16%E6l%10%EA%F1%051%06'%0A%84%BAy%A4%EF%20%B8%84%88%CBX%AE%E4Cw%10%A8%AA%A4%FB%E4%90%22%BD%2Cj%AD%5BN%2C%0F%CD%F9%FA%DE%60%CC%25d%3B%1C*%22%95%A3a%F3%D9N%C5%25%A4%04%B8%85%A4%F2%9Dh%3D9%D7%25%03%86DB%BC%C5%80%C4%DD%26%5E%84%C6%BB%C8%BF%F9%93%EDP%F0%15%97%90%8E%BC'%88%91%88w%8A%E7%AC%1B.%C6%07%BA%99U~%8E%1Cd%7CB%DE4%A8%84%0B%247%0Ca%D0O%EC%BC%04%A3%F4%9F%98%5D%14v%05%26%F8%87I%E5%5C%9E%F1%F7%D4c.%20%9D1r%F9%AC%AB%15%26%7C%D1%05%A4%E1%11F%C7%8B%E4%40%15Q%174%89%CD1%DC%84%09%D4X%1D%EB%C3%F8%92%02%3B%93%FA%D8%C6%BB%FE%97!7%A2%E2o%0Aq7%02%E2u%F6%DAG%06%B9%E49Dh%B7%97%EF%C1%AC%E4%F9%EB%EF9%05%CEx%C1%E8)%5Cw%7D5%E5W%E0%B4%07%0C%F1%AB%00%5B'%3F%F9%00%FE%E2%01%84%DB%80%86%1Ce%0A%E4%D7%1E%40%F4%3C(N%BA%F6)R%DF%BE%D7s%C8%D9%E3%17%AC%F6%98%5DAd4)%B9%06%E17%408%CF%0B%C8%E7Q%23%9E%84H%10%C8x%F6%9F%0E%A9%DBX%3D%2CA87%3D%DF%90%C0%EDz%19%ABY%97j%F6%04d%98U%12%D5%3F%EDM%94%CB%1E%40%F4NE%AF%FC%60%1A%12(dX%BE9%87%08%E9%85%9FO%F5%821%09%81%9F%E9%9F%9E%F6%80%C0%1B%3BmiHNiY%E2%1869%C8%BD%26%EF%04%20%BB%86%94%A8%96!%88%CF%23%C44%88'%23%09%AA%93W%EA%A7%400%19%A5%99P%0F%E4%E9%10c%00%0Ea2J3%A1%B3%B0%FE*%24%BC%2CQ%ADx%03%D9%0D%D1%08%24%CE%23%08%3F%AFF%F6%86%01%AF%89%B1%08%1A%E3%1B%20%9D%FC%EA%91%82K%D4%08%1A%E3%AB%D0o2F%F6%14k%14%A7%10q%25D%D0%18%DFK%3F%01%F7%F4V%A7%14%1F%82%A0c%23%12%DDS%81%03%0E!%1D%F9%06%84%9E%84%EEk%87%1C%D9%19%E4%A5%C2%C7%22%E8P%1DDQ%B0%DEqZ%FE%C6%3D_%AB%D2%C7x%BA'%3F%1FDB~%0EIe%3D%1F%14%E7n%ACfH%AC%10%3FQ%AE-R%1CA*sb%11%B1f%0F%CB%0Ae%BB%CA%17%13%12%B3%08%3A%03%F7%5D%EF%BB%C8%EA%AD%FF%5D%2B%26G%91A%5C%F3%A9%24%0B%C4_%09%FEeW%7C%DB%1D%ED%C4%08%D5%CF%C4Y%20%D9w%CA%FC%A2%E6%AC%EE%A8%13%08%08%F9%0D%2C%90%C0%0A%7D%93%AF%95%B7%93%908E%EB%8BY%20%FCx%97%0C%F0%1C%7C%CF%11C%98%60%82%C0%12%F1%1B%00k%E1MG%95%C2%3D%D9%C4%04I*%AD2W%AF%3F%DF%E1%40%5D%FB%D9%9A%F0)MK%FD*%DDk%1B2%05_%2CSA%91v.%60%82%04si%A9W%A4S%94%DF%C1%049%9A%D4%1F%2B!y%10O%F1%60%D2%18%E3%C9%3A%E1(%A8vU%1C%BA%F5%DF%1Bc%3CQ%097%10%24%DFg%D0%18O%3B%05%E7(%E7n%0A%84e%8C%0Ft%D3*%9E%2C%7D%8AJ%1D%E3%05%9A%03%0B%84%3A%C6%B7%A9%EE%202%CB%18%2F%B0%06%ED-%20lc%FCEw%90%3A%A61%DE%EF%0Er%9Ei%8C%B7%F9P%DDL%88%02%90%E5utY%87%D8%7C%2C%EF%26%85%F8%9Bo%00D%0F%A8%DD%82%DC%7C%90%EC%1B%01%F1%7C%DF%81%93%18%C6x%E7%12%AA%EFF%E3%08%B7%85a%8Cw%AE%80%22%A2%A1%F7%F11%861%DE%B9%DE%01x%00%B8%2F%B0%AD%E3%B1z%88%FE%3C%7F%1B%C0%1A8%FA%B6%C4%B4%8E%C7)%24%BF%A7%D2%7CN%83%D0%C7%AF%F0KL%EBx%9C%DE%03%FC%B3%86S%E5%3B%D1%FA%DA%83JH%06%98%A58%82%1C%04a%98%B6%96%10_%EE%CF%FD9%88E%E0t%F3%A7%16%BA%86%E6%AA%14%A7%D0%FE%D7%91%CB%A6%8D%D5%0Ew3.%D4%14o%E8%A6%85%FB%BArJ%91%D6%0F%EFq%C6%00~%C7.%19%96R%9C%5EM%BF%3Ay2%ED%AA%3A%B2%148E%F11%9E%EE%B2%C8i%22%2FG%0C%EDB%FDQ6%D9%C5%D8%02%D0S%8E0%E2w2%3C%FA%BD%3C%0B-%C2%C8.%7CT%7F%15%F1)%DA%CF%C0%1F%A8%8C%40%9E%8F%BA%07nTF(%8A%2B%CB%891%B4%EB%A4%84%08%94%87L%0D%88%88%FD9%05%258L%85%FCP%15%A8%A3*%A9Y%05W%C2%7DTH%99%FE%E2%8B%91!%ABw%96ZuZ%E2S%BB%C8%07%EB%3A%91%86%FC%94%E8%C3k%DA%80%E5%B3%C1%E26*%C3P6m%AF8%D1%B0%C4%F2%0AX%9F%0B%E8%A4%FCP%D0%BDZ%E6%13_d%7D%E6%F2%B0%8F%D2%11%8Bu%96%5D%E3S%97%FF%A30A%1E%E6%C8YW%7C%FC%C7%92E%91pe%A8%CA%AAl%9A%C4%B10%D9%EF%D4%2FN%AA%16E%81%85%2B%06%A3%2C%90%F0l%9E8%D0%87%17%88%96%99%FD%BD%95Ec%A9_2%40%FC%92H%CC%B1m%92%02%96%17%D1%90%18.%E9%EFW%A8%0C%E1%A8%AA%FF%5B%06k%DD%05%B8%7FYb%A8%84%EF%DFW%DA%B4%94J%E1%D0Z%B3%89%10W%E1%B5m%DB-w%2FG%A1%BF%A8w%F8P%FE%1F-%1C%98%D2%A6%CA-R%AC%18e%3E%A1%93%7F%DCV%0FoP%3C2%00%A1%E8%BF%9A%1Ah%826%3A%E2E%00%00%00%19fcTl%00%00%00%06%00%00%00%C8%00%00%00%C8%00%00%00%00%00%00%00%00%00%01%00%0A%02%E6%D6Y%9A%00%00%09%DFfdAt%00%00%00%07x%9C%ED%9C%7Dl%DC%E4%1D%C7%7FI%EE%FD%7C%BE%B6%8CV%5B%D2%5EV%3AVJ%A3%EB%D2j%82B%93k%12(%DB%BA%BE%20%D8%8AV%20%84%F4EZ%D7%04%08b%7F%C0%E2%D0v%0D%A5U%C2%84%A6j%AA%88%E9%0A%AA%26%B6t%1B%AD%F8%03-N%D2%D0%97%99%CB1%C8%A6I%95p%08%D9K%D5%A9%B9%BC%BF%E2%3D%BE%5C%12_%F3%7Bl%C7gWj%95%AF%14%9F%FD%FC~~%3E%8E%FD%D8%BF%E7%F9%DDs%06%B8Q%C1Y%25%00%3DHYZ%B2%03%22%DF%A8%3E%23NsS%9A%878%AFy%CD%EB%D6U%E0%C3%9B%00%E9%DA~%C6~%C8%8B%AE%5C%DB%19%81%A50f%3B%C4U%09%3F%B6%AE%B6%7F%1EE%8B%B3%CE%C0Ac%15%B0%1F%EB%BA%F8%96%1C%8Ea%E5%24%26%1EN)%B8F%AB%AB%B9%98%D7%83%B4%C4%BC%5Bp%08%BBzj%7D%3F%F9%F3%F7n%AC%C4kX%19%C8%99%5C9N%85%AD%02%B8%1F%2B%CFz%EA%CB%C8%D4%FA%B3%12%40%26%CF%E6%A0%150%3D%D0%24)%2B%EE%1D%CFR%18%CC%04%E0%E7%3E%10%EA%97%A6%D6%1D%05%00g%01%BE%8F%D7%B0%00%82%82%B2r%5D%F2%F0%14%C8W%00%EFc%86%BF%F5%CF%AC%B3k%01j%01~%88%D6%C0%8E'!m%C0PN%E8%FB%A3%E4%B6%C3%0C%8F%C5U%1B%CD%95p%F0%BD%B3%B9x%15%2FHu%E2!r%00%1F%01l%40%1D%98x%9F%C4~%1D%3B%BE%BC%01N%E56%20%D6%C9K%24%1C%E2T%3A%3A%A5%00%9D%12lF%1D%9A%07%E4%FB%0E%60%7C%DF%CE%F1e%AA%CDVy%E02%8E%00%B6lT%14%05%B2%E2.%20%97%07%D3%D6%B1%C1%F0%20v%84%AE%A3%3D%E5%EAmf%A2%8D%02q%AE%CFM%AEm%CF%170%07%7F%7F%0F%E5%01%E5xo%C2%A9%BE%7F%1C%5C%06%8F%7B%FE%AA%BB4%F1%D9%16%96%0BQ%87%AC%EC%9E%FB%F0%5D%83%E2(%3C%AF%AA%F6O%92o%F0%2F%A8%E7%EA%8AI%B7%D03%83%ED%A8%C3%E7%2F%F7%3CD%81D%07%81)%E2%A6%B7%F7%00%9C%0B%C9%C8%85e%BE%2B%0B%C0%9C%E7!Z%B1%E5U%B4%AA%06%B1%A7%86%02%E1%2Bb%C0%CE%3C%D5%EEM%2C%C5%D9%8E%9E%FE%0A%F0%87%E2%DB%EF%3E%24%FFo%10%AD%AA%8C%E9i%12p%08%D7%C9%A9%B7%C7%F1cQ%D4%CC%96%93%3A.%84%E2%CE%09%D4%FE03%91%85%DF%A5%0E%8E%E1S%20Lm%3D%05%F2Y%8B%2C%0F%82%7F%14%9Ax%D4%FE%3Dv%2CP%40%D9%D7%F7%23A%B55P%5E%F2%0D%8Ac%C6%B0X7%0E%9D%BC%9F%E2%B0%13%96P%F6%24w%CA%87%DBT%5BUb%80v%C6%5C%C2%BFe%1E~W%BE%91%DA%F1(%A3B2%EB%7F%A3%DA%BAZ%B8%22B%F3d%C2J%B3%A8%C0%23%81%A2%F6%C5%7F%A0X%3E%17R%EEq%A6%B0%94%E2%C8V'%CESw%9C%A7A%9C%FD%A1%1F%E0%96%C6X%A6z%D35%B2%9CR%85g%40J%7C%B6QG%AC%EC%DA%AB%85%02j)%02%87%DAP%C1_%C7%FD%C8%5D%F2%A4%F2%11%A8%C9%A5A%E0%93%CA%2C%B4m%92%26%99%12%E8%06%A1%5D%A2T%D12%A0%2C%DF%90y%8A%9D%9C%EB%EC%0A%F4%08%9B%D7%80%B7T%B5%FD%F4O%FB17El%94%2CZ%97%8FR%19%E4%DC%A3Ff!y%22%E5%AA%0A%DC!%8D%9B%9E%FC%E3%C3u%BC%86%B9b)V%FA%C7%9CD%3FdF%1Dq%CD%FEw%D3%09%FC%C1%95%DCY%C6%8E%B0%A3W%00%F0%AA%2C%07%E5%FDZ%0Ch%AC%8A%D0%8D%7F%97%EFG%3A%90%AC%FC%14Y%FA%0B%A7%BBw%9F%C9%B4%87JRY%F2%1A%AA%CD%DF%BB%08%2B%F6N%FE%EF%CC%91%A9%82%AB%FD%826%04%DE%A1%B6%0Bp%8C%0F%A97ge%5B%86%A7%2C%1F%08t%A7%A4h%14%87%5E%02g.%A9(%CC7Y.%0A%14%9B%95%10m%DD%B2%10%FA%85%D7rJ%F7%C2%CFk%5E%F3%9A%D7%BCni%097%81%D1%BD%F3%26%40%5Eg%F4s%87i%2B%17N%DB%CE%60%22J%9E%EC6%81%AC%B7%1D%02K%7D%F4~%B8U%F2%2F%2FF%93%CEV%8A%C9%DF%F8%1606c%DE%E6VpP-%D8%CA%F0%8D%07%C6%22%0C%7D%DCb%89%1C%95%DE-y%ED%B4%04%91E%F2%AEr%D4W%24%D3%15%F6%E9%7C8vM%40%CA%19%D1%CA%C6%D0%84~%A1%E1%0F%CB%B4%04%9D%19%05_%C3J%BD%2Fo%97%2C%8488%B4%98%5Dl!%03%7C%0F%A2%C5%1E%3C%23jV%CF%95%94%F0%B3K3%22%96B%A0e%EF%B6%D9%85A%04%9C%96%EA%90%ACx%B0%94%2C%FEZk%5D%3Bv%20%17%D99%22%8A%1F%ED*%D6%CCm%CDIMH%3A%8D-%96%E5%BE%1Cx%DC*%06%13B%AE%09%88%A2%18%3B)%18%FC%B2T_%5DX%26%C0%2B%CB%7B%05O%8Ee%90%E7%B0%7C%9Fg%F8pX%96%87%AD%820h%82%D3%3B%0A%CC%E9%DA%A3%BB%ADa%B0-r%1F%F6%2C%8C%26%8Cw%BEe%09%C45%7Ci%2352%3AW%DE%15%BB%5C%B5U%96%C3H%A2%86%A3%EC%E4%40%7C%B5%12%3Bo%C4%1A%8B%BE%F6%08ih%D7%11%A3E%F9.%DF%10%9C%1A%A1%3AX%04%E9%FC%098%EA%ED%86%FC%FA%08%B4%0BvC~%DEz%ED%EE%A4%83%7D%17~%8FSF%7B%00%96%AAY%B8b%3B%03%7C%3A%89%F9%14%05%CCR%1A%E7%D0%B7%EC%14LB%98%BB%8C%FBV%99d%00%7CZj%D4%93I%A3%7Bs%C2%98%9B%18up%E6!%C6%D4%BD%AE%F8Q%C9f%06%FB%00%C0.%9B%19%E0!%9D%84%2F%04%9B!%CAW%AA%1E%EEv%80d%F1%24%C2%DA%0D%09n%00h%B7%15%E2!O%F1%F6%1D%07%86l%85%10%05%D9%DA%23%B6_%13%25%E6%D9%0B%F1%3D%92%80%A4%CC%0C%B0%5C%AD%DD%9C%FD%90'%FD%B93%90%B6%90%95%23%F3i%05J%A1%40%F5%9F4Kv%40%FC%1ClQA%D0%AC%40%DA%F2%D4%B3kT%90%23%9A%CE%A6!B%8B0%0D%F1m%3Eg%0B%C4%BF%EE%C1%E9%26%EC_%98%93%A9%E7oN%1D0s%9FD%7F%EB.%9D*g%AC%84%3C%A1%40H%8CW%20%E0%BE%E7%A5d%AF%80%DC%A3%16%8A%8C-%82%24%C6%BF%99%80%C0%9F%E5E%11%E5%93%E9%B0%92%C1%F4%F2%10%241%BEZJ%16%B0%D9%CA%E2%F9e%1A%FB%CC%1D2%20%AF%A8%231~f%1ASK%8C%5C%A1%C3%7B%11%DF%0F%F0%C9%D5%06%20%3D%FB%12%B3k%83%DCT%89%2F%07%E0%DC%FAO%10%DFM%87L%0E%12%D8%89%7F%9DI%40f%1EZm%FB%A1%5C%C0%86%3C%118o%0E%02%C5%F0%D2u%1E%92s%85'u%AEv%01t%22%AE%9B%C1o%F2%F9%E9%FA%D6%CE%A7%95%18%9F2%ED!%07%B0%16%FCn%CC%8B%CF%24%D6Wk%5E%90%C4%F8%D4%89%15%0F%1F%C0%92B%9D%B9%19q%C1%1C%24%F0%95%12%E3S%AF%C1%15q%0F%92%8F%F3%C9%BD%BB%F1%A9%C4%BAr%E5(%80%1B%2F4%BBk%D3%AC%06%EB%A8l%F9Xk%1E%9B%86%DE%DD%87A%C8pb%D6%B7~%8E%D7%B3!%DF%1Cd%F3%02%1C2%5B%EEo%0A%EC%1D%E6~h%B2Q0%0A%09%1C%03%FFf%ACE%E8%2B%9Cg%14%02J%B7%F9%B8%19%86%D2M%15%0CC~%09%0E%C9%0Ce2%60%E9C%D8%E3%B5%92%2F%02%BER%3B!5%FD%F2%03%BB%24%60%A7%12%3F%86%A6%5E%CD%11%E2%0A%E9M%BD%D2%AE%C2%10%E4%02%96%FD%9B%13D%8C%EAB.%9B%9A%0E%A7%82%9C%5DW%DC%A0W%85%3B%5D%08%09%EB%D5zU%B8L%CD%B9SARb%3C%0D%F2%A5%DE%85%D7V%E2%C2s%3ANf%83b%0AD%B7%8EH%9A%10%3E5%C6%E3%DA%97%26%24%8F%C4x%5D%AF%B3iB%EAn%8C%F1%A8W%9A%90%E8%8D1%DE%06%88%F3%8C%91%07%A4%D9%8E%5DRJ%A2%40%1F%E2%BA%19%904GE%C6%20i%EA%F6%82d%D0%BF%B4%B2%0Ebo%02%C7%12%08%23%D9%0AI4lf%C71%03%90%A9q%FC%DC%E5%E0%C8%E2%1F%06%1C%3D%2FN%8F%E3%E7%0E%89%90%05%0F%20i%F8%9C%FA%85%02%193%10%E3)%F2(%BF%08%E1%20%C0%D1%5D%02%E3%FF!%0FG%B7%91%18OSu%BD%124%5D%F5%F4%A8%E6%8E%C0%D2%C9%F3%AA%1B%E3ib%F2O%88%BB%C5%E6%18%F8WS%3CH%E0%1DOBL%F7%13%7C%8F%95%D4%C8%2B%E1%BFa%DA%C8%85%B4%A9q%7F%EDV%02%C9%10%CCB%88%DA%2F%1C%BD%B82J%B3%BA%24%FFP8~lC%9A!%E9%10%9C~M%A2Z%3D%D1%EAM%85%3F%032%8EO'%2B%84On%98%96%FB%3B%D9%DEW%C8%F8%A66%AD%04%A73W%CB%CA%16%AD%93%1A%84t%EAO(%A89%22%EE%DA%BF%D8%3D%97%AFn)%D2%EE%B3%BD%7Duh%91%A0%5D%C1IZ%EB7%0Cy%B5%26%CEi%EF%CF%E4%B5%EAOz%D2n%FE%17%17%E2%BFf%9E%91%83%F7%A1%BF%C9K%91%A7T%CB%AA%D3%F6%20q%B7%EE%D0%85%B0%9A%F3%7C%95%F7%03h%CA%F3L%BD%91%E9%C8_%AC%D5%98%84%C3%8C%5C%AA*%114%F6n%18.%AA%BDG%1F%C2%EC%2B%A3%D7%C2%86%E3%B2%9CG%DF9%10Z%E5)1%92%16z%82%7D%85n%BC%22%B0%974f%B39z%2F%1A%20%10uj%7F%F1%C2%9E%D4%804%0Ci%FDNS%A5L%A0%FC%20xR-%7D%F4%17S1%0BG%B4%7F%2C%3A%25%F6%F1%80Vn%D2s%AF%8B%9E%25%CBz4%3F%1E1%02%E9*pr%1A%E6%0A%A1%93%A7%1Ak%DA%E5%B0%91%17p%B1k%A5%17%24%BA%D99%02eT33%DEpg%99%11HWA%AB%D6%DC%95%EB%DB4n%FA%AC%CA%86S%A7%0C%A4%1C%C9%3FR%F4%7B%0D%7B%BB%E4%1A%93(%B6%C0Z%A9%23%EBS%CAk%3ER%0Ef%19%BC%19%FE6%DD%5E%F7%D0%3Br.%ED%00I%CF%20%D8x%07%ED%18f'p%B0%A1%C7V%CA%14%2B%83%9A%A9%88I%BE%CC%C1%F4%8B%DB%18%FD%EE%FA%B4lx%3B%DC%FF%01%1C0w%1Fb%1D%1A%C7%00%00%00%19fcTl%00%00%00%08%00%00%00%C8%00%00%00%C8%00%00%00%00%00%00%00%00%00%01%00%0A%02-d%25%1A%00%00%0A%15fdAt%00%00%00%09x%9C%ED%9C%7Fl%13%E7%19%C7%1F%92%B3%7D%B6_%DF%01%0Bj%A1%94%98.%ABh%96%90%90Fm%B7%011!PJ%D3%26%AB%D8%94%AD%A9%F04%D6Ri(i%AB%22Vm%8A%93%00u%A1%5B%22%D6%7FZ!b%B6%96v%D2Z%D2%C1~I%D3r!)M%A9%89%1D%986mc%E2%E8%C8%CAVJ~%92%90%C4%F4v%E7%1F%18%DB%F7%BE%F7%CBg%A9%15_%25%8E%EF%9E%E7%F5%E7%F2%DE%DD%FB%BC%3F%9E3%40%BA%D8%8C%3D%00%A32%FB%0C%C9%0C%88%90%AE%095N%DAd%F0%10o%E9%96n%C9%88%BA%0A%7C%A63%98e%D0h%3A%04%D5%C3%99%80%D9%10%BB%0F%ACYo%BB%D3%E5l%06%BB%E9%10%E4%06z%BE%E9%90k%40y%09v%A6%E2Q%E3%10j%EC%D0%F7x%92%3D%B8%CB0%83i%89%D4%11%0F%F5%2C%7CK%F1CPe1%D1%EE%10%14%CE%FA%AF%E0BX%09Bu%DA%F7%90%ECyJ%90%1F%82%CDGtp%9D%86%100%23%3C%C1%A5g%82%00%F9%DF%3AA%98%05%9A%0C%E9%12jC%1C%88%3Fx5M%E2!%D6%05%2F%9C%14%E6%C0J%AE%AE%B6O%EB%B6%DE%16%EE%22%B9%14%CC%E2!!%1F%B4T%1D%A8y%9C%C8%80%1E%AFs%81%20%2C%25x0%D3%91%CF%B0%C6.%0EM%173A%9E%0Cq%DC%03%5D%EB%0F%DA%97%E0%3D%D0%B5H%04kl%0D%E7o%AA'%13b%AA%B6xC%CB%F1%95%8Af%E6%DE%C6%1A%AF%00%7B%98S%03%99b%EE%5D%FE%B1%17%0F%89%3C%40*%1D%0A%A9a%A0%19%B80%83%AEc%ED%CEH%3F%11%D2%A7%0A%12%81%D0S%CD%B7c%ED%B6%08%1B%20AzUBj%00%B6D%DF%0FJ%DB%7C%AA%9D%1A%A5H%A7vdP%15d%0E%DD%09%D0%11%7D%BF%5D%AC%9D%86%CET%BB%BD%9E%22%05%13%CA%93%BA%ED%E8%96u%AB%A8%10%F7%C7%EE%F9%5E%1E%FA%F8%D7%D2%ECaz%8Ex%8C%A9%DBC%F2%D7%E9%C7%D2(%E6%CCX%00%80%B7%D6C)%9CIw%A0%A7%09%10%A8%E6b%7F%99%D8%9F71n%7DbS%1F%BDk72%C5%C8%939%3Cs%8C%93%20%7D%0Bc%15%24%05%CF_l%E0Kp~%1D%F1%98t%C2%DB%FB%AA%072%AEX%24p%24%CA%B6%CA%A8%19%DD%0D%AE%D2%B3%AB%3D87%B4*V%91%CC%BDoW%AF%86%1FeB%7C%24%88%B5!v%F4%FF%F6%DA%7C%CC8%B6%E9pE%EF%92%2B%00%97%16%3E%2B%7CX%9E%01%99%C8%D8%95%A2%BBjcn3%14%97y%847D%B9%A5%D7%3E%B1n%3F%D9%7B%F5%25%3E%DDLO%E3%DB%03%F1%B3%9B%26%3D%B1wu'%A4(%89S%07'%BD%B2%B3b%85%B5vf%9A%A9R%7C3%0C%A8n%AC%3A%5EE%F9_z-%88%BF%A5VD_%AD%85%9B%FC%5B%E5.%8E%D0%11%C2%DD%D84%DE%968%04%A6U%A8%E1p~%CEhP%3Aw*RX%F4%5D9%7Bu%C8%8Be%5C%9C%3C%B7*%F9%C1%EF%E1%0F%C6%EA%11cl%8D%20%8C%97%C9FH%E7%ECr%1E%5B%B6enher%EB%05%3C%84-%05%B8vbbb%A3%FFe935y%0D_%B6%AA%3Bt0y%08w%E2%1Dm%C2%83p%3F%BB%ECo%98%3E%DEy%A1%91%97%B7%88*%EC%EE%17J%13%1Bb%CF%1C%AF%93%1B%E0%18%3D%C6%05%E5%ADH%10nn%EB3f%5B%26%B9%84%C9Q%8FuJ%08s%9DRJ%138%C9%B6.%D9%C7%C3u%A2%E4%A6%ADH%FBe%1C%2C%B9%80P%B9%81%F46g%07%92q.%93%178%E5%7F%DA%83qJ%5C%24%18%88%E2%89O%8A%5Eb%F5%91%ECY%91%EB%ABC%BC%9Er%9Fj%F2%EE%DD%A4%87%01%03%80%E4%FB8%B2%B2.%D3%09%E9%D0%00%C9%23%04%1E%82N%C2%8C%06%EF%03%BA%C6%DA%FF%DD%E3%D3pph%D6%AF%07%D2%C8%2C%D12%E1Q%F6%BA%0E%06*%87gU%0D%A4%E2%BA%DC%AE8%A0%97%81%F8%A0G%A6g%81U%3F%B9%EF%84%814C%0F%A7%DE%DD9%A6%C19%A9%95%F0%8C%06%EF!%D2(%1A%AF%F6%CE%BB5x%7FS%C7%19%11uQ%20u%1E%D3%D5%D1%AC%0Bb)%F2i%F1%D67%BF%97%FF'%5D%C5%B4I1%2CfC%F9%B9%80%10%E7%09%3EW%90Wr%01%D9%FD%85%81%B4%E5%02B%9C%9C%CC%96%88%D3%AC%D9%12%AB%25d%E9%95%C5%9B%03%08%5D%9B%03%08Z%94%03%08%94i%E8%3F%EAV%97%3B%07%90%0B%FAz%B7%DAd-%C8%01%84%DE%AA%AF%07%A2%0D%D2%96%833oi%0F%98%0F9%7F%D8%7C%06l%CBAlD%91%15%E6C%F2%1Asp%9Ft%FC%D5m%3A%03M%E5%F9L%87%D0%93%BD%BC%E9%10W%95%B4%18%A1%20Vf%A2%C6%87%F1%A5d%7CI%13%3BI%88%CC%3E%8DSQ%83J%1D%7B%E7%88q%88%E2%E8!t%3E%07%90%07%B3P%5DJ%10%C7%B2%1C%9C%F8%BC%00%D9%9E%15%E9%99M%D1*W.%FA%00%B1E%24%D34%B0%1F%E0%9F%7C%97%A9%D1%99.Z%B7%96%5EPD%CEF1%AA%EF%F3%F0%83%F6%CB%05%3C%D1%09q%E2KP%D5%12%B4l%F1%EB%E2%20%7F%25s%8C%EC5%D4%FE8%0CW%AE%D7%3B%FE%B0%94%8B%BF%CD%A0%B0%18%FF%01%F3%EE%95o%00%EC%04Fv%8DII%AC'%BA%92q%9C%EC5%08%B6%81z%80%8F%06%5Bu%0DAXN%FC%AD%87%CDd%AFn%B0%9E%10%1D%E9U%FA%869%F9%9D%AE%D3l%C1%1E%859G%1F%7C%24%1D%0D%BDZ%17%03hA%B8%C6%BE%FA%12%A0%17I%B7%BC%FFT%89%94%60%A1g-%C2%B6C%84%AC%0D%EE%B2x%60%A0L%F0%12%3C%877p%EC%9Ah2%90f%CD%BB%0AR%12%DEvW%A10%F94%B9%D3%EF%036%D4%D0%3E%AD%03%C2%0A%1C%E4%7B%E1%0E%B8%8CY4%BC!T%0F%2C%E3%DF%A7%90%99%25%AB%D0%B1%A5%D0%C2%11%F2in%C8%D2%1D%8Dyz%20%87Q%A1%B0%14%1Cne%CF%11%BF%BFC'%E4T%B4%9E(%15%25%7B%FE%FC%87%8Ep%F4%1F%D2%A9wye%9F%B6%95%D1%EA%A28%9D%0C%BB%9A%C5%9B%DD%CF%F1%86%20%A1Y5%10%EBm%1DF%20%CE%87T8%1D%80%DDu%BC%01%88*%85%C2%C6%CE%89*%E5%ED%7B%C7%7C%08%AA%7D%CB%7C%08%D8%B6%B3b%8C7%19%E2%9Ae%C5%18%FF%8A%B9%10(a%C5%18%DF%12%87%0C%9B%03%A3%23%AC%14%E3%E3%CD%0A%E5%C3%7B%FEe%A3%EE%B6%A7o%B5%14~%13%1FN%1AJ%9F%0C%FEX'%03%15%97G!%F1%8E%17K8%D8%F7%E1%22%AF%0Fbm%EB%96b%FC%3C.%B69%8F%E0J%01M%C8%DF!B%26b1%3E%BEIJ%FE%CC%0B3%3AG!.%E1%11)%C6%17%C67%CFpxW%E7%8A%3Dj%9A%5C%19IC%C4A%FF%BE%C4%B0%D3%E6!%F8%B6%D6%D4%E9%BE%BE%A4%BB%3D%0EA%FF%22%A4%25%C3%8A%7F%3C%A7%F3%A4%A4%40%9A%7C%A1%80%BC%13z%02%1CS%8B)%E5%F4%7CE%88u%91%CF%85%E9%3B%D3w%05%D0f~%5E%BF%DE%FA%8AB%A2%03u%CB%B0%07%8E%CA%3B%D9%1F%F9%9A%F8%3Ar%D9%AD%13b%0D%DC%A8.%BA%1C%EA%02%B2N.%F7%B0%17%C4q%08!%9D%8E(%A9%CF%15%87%B8f%3F%F8%BA%5B%DE%AB%16%9E%04h%80a%E3%10x%0F%9B%1F%FBK%7F%FBZT%0E4g%1C%22%EA%0DY'W%93%20%8C%EF%E6%81%F1%C6w%10R%AFT%40%F2%C2%7F%7F'%D3%E9%C2%3A%A5%D4%2B%F24R%1A%C4%B1%7F%E2%CB%7C%86%D3OY%A5%F1%81%12%24%982%F9W%F1%98%B0%26%C3%A9VC%3A%9C%2C%E4%F9%CA%F57%2F%89%FE%0EP%DD%CF%D2%9D%1E2%0A%99%13c%FCM%DBbs%FF%F2%1B%814%A7%BD%1Ar%EE%E4d%13c%FC%08%97%DC%CEo%0C%EE%80%F4%A9%83%DFh%C8%B9%93%13%E5%13%FFW_r%9B)%1B%CF%9C%05!%3E%C9%A3B%D2%9Ak%CA%E2%EE%1F%E5%9C8c%10%BB'6%7DqC6%3E%D3I%EF%9D%9E%10*M%C6%F8%98d%D2t%1C%3E%83%90%C2%86%F6%D4%13y%89%CFt2%0Ay4%19%E3cb~%92%E9%E45%08%F1%A8%C8%E3%91%9CL%87%D8s%01q%1AL%60P%051%AA%2F%0E%84%99%9F%8B%2C%B1%D1%5B%10uB%9D%9FH%90%A0%E2%02%9F%01%D9v.%3B*F%B9%AB%A91%3E%CB%F2%C3%E6m%D7%81I%8B%F1Y%D6J8%F0%157%D0%A3%A91%3E%CB%1A%85%D0%FD%5E%A0Fc%A3%3A%93%20%F3a%A4%2F%00%16%11%92g%5E%02%D7%13%D0%1F%E2%C1%1EH%8E%E3M%D0%EF%3F%5C%BCSlV%D6d%25%9B%12%9D%96%DFo%AFzs-%A0%A08%8E%C7%A6%F4%23%15%0BD%C7k%BE%C3%81%FD%01%5C%1Ec%EFF%1E%A4%3B%05%FF%10a%EFo%953%8C%DF%0A%06%9F%3F4%14%B6q%F2fi%C4%FC%A4%EBH%D9%1D%B8%F2L1%FCZ%11%22%E9%F8%16%C8%0F%C8%9B%A4%C7%05H%D3%03%60m%C6%3D%C8%99v0%5B%A6%E1%3C'o%13%AB%11%11%9F%B0%10%87%DF%F9%98%B2)%EA%5D%D4~%F0%DB%18%5B%9B%D8~y%F1E%1D%82%C0%C1Q%5E%05%A4%86G%15%B8y%84%AE0%B4r%F8%A2%3D%3F%AF%9Cz%91%F8%F8jB%0F%03%9C%C1%1D%CC%F9%A2%1A%B9o%FAI%E8%BE%91%E0.%BF%AA%89%8EZ%B1K%EE%C5%D8%9Ce%C2%C4%0ElI%D7gmHes%F3%14%9C%0Bb%9F%D1A%83%CE%AD%D8%92%8E%F2%7B%D4%F6%B3%87%AA%85%F1%FFx%F1v%16%7B%89%A2%E9%EBG%3C%EA%20%AE%C7%BA%F7%C2~%BC%BD%8B%C7%9A%8E.%D8%E2V%07%01t%1F%F6qbQ%8E)%BC%AD%A5R%E9%BB%23%92%0A%11%D6%7F%5DM%84%19%BFP%F8%AC%DA%F9S%87%10%C0%DA%DE%2F%9B%24%B4%1A%3D%CEB%B5%0B%CF%CFT%60M6%E1vR%CB%D4%BEu%FA%90%3A%C6%C5%12%FCs%EDU%F8%9BDR%97%E0%E5U1%06V8%B0%F5j%237%19L%D5bU%08%60%84n%8B%1Bgd%97%12%9Bq%EBB%8F%3A%084%95%B0%9Bq%1Fe%11%88%F3%E2%97%CA%04%FCZ%BE%AA%B4%A9%3AL%8A%95Je~%E0%E7%F5%DB%E1%FE%0F%95l%83%C1J%7D%EDy%00%00%00%19fcTl%00%00%00%0A%00%00%00%C8%00%00%00%C8%00%00%00%00%00%00%00%00%00%01%00%0A%02%034%EC%9A%00%00%0A7fdAt%00%00%00%0Bx%9C%ED%9C%7Fl%14%C7%15%C7%9F%CF%EB%FB%B9%3BWJBi%A1%B6%95%D0%D4!%04%9B%E0%22%D2%108%FF%08%18J1%B4Ph%EB%D6GK%5BTQl%14%A8%92%06%85%0BN%E8%85%10%1FHP%A1%A8%09G%09%89%2B%91%18%08%10%A9%AD%F0%DA%1C%95)%17%9F%A1%FC%D1%FF%BC5%01%14)%8A%8Dm%82%81%C3%DB%5Dl%EC%BB%DB%9D%D9%99%DD%3D%AB%7F%F0%FD%8B%9B%F7f%3E%DE_%F3%DE%BC%9D%05%20S~M%0B%40%AFN%9B%25e%03%22g%AA%9F%C6%89M%16%FF%C4%07z%20%AD%D0%DF%A4%ECCr%3F%08f%1Fr%18%AE%8AY%87%FC%0C%7C%81%ACC%02%80%EE%8E%03%04%92%E3%00%11%86%B2%0E%99%0F%CE%FAl3%CEN%8A%FF%3A%DB%8C%D8%ED%1F%F4%1D%CD2%83%7F%F8%8B%89b%96%19%D0%15%F2%16%05%B2%0D%D9%07y%5B-%DF%C0%E8%DC%9BD%FB1%A9%E7%F4%A0U%08%F7%C2%2C%91d%CF%09%B5t%0EXCt%40%0CN%14%92%3C%5C%F9%9B%C0%1A%C4%F3T(%0C%9DSI.%C2%E4Jx%C4%12%C4%BDu%F6%3A%80%A5D%9F%C8%20%D4Z%82x%F3%AF%16%BC%CC%93%A7%D8%DCAh%16%AD%40%84A%A8%93%AF%93%9Fg%3E%09%DD%92n%E7w()eR%F9%D2O%0C%7C%92%20%E8%B6%0Bk%1B%E9%20%17B%EBf%18%F9%AC%C6%19%F8%B2%DDT%10%3E%D0pL2%F09%8E%EF%5D%1E%05%EFsF%FD%15%B5%E4-7%F0%D8%16%C4%18%C2%E1%ED%7D%1F%1EF%BF3%86%24%3A%E6%18x%CC%F9%8D%A4o%D8%5C!%CB%D7gB%5B%A7!%24'%DA%1A%24%3A%A0%5B%9F%3E%81%B3%F1'%E5%00%E4%8A%86%10~%DE%17%E4C%F1%25%85Y%18%93g%81%5C5G%DAn%7C%24%D0%3A%EF3%89dw%DD%5C%80%BB%01%23%8F%9D%06O1qV%1A%11%3FA%24%9A%D7%F6%2F%C1%FD%11%1FQ%0C%3F%A2%B6%7C%E5%9C%E0%0E%D9%5B%2C%87%B0%3D%2F%04%A9!%E8%97%1F%0A%A5_J%FAF%B7%5C%87%9Fu%F8%8A%CA%CA%DFR%5C%11U%DE%C1%83%C1%E3%B8%F3~%A0%40%24t%AD%ED%2B%1F%20%D9ST%B1%11%60OH%DF%96%2BK%84%9E%C2%F6%9Akw%A8%18%CE%89A%C5%7D%91rH%3A%87%8EH%0Bk%14%3F_%0A%DDT%90%BA%88%A4%CC%11MAp%88Z%23%AFW%0F%B8o%2B%96%E5%97%F9WhrX%E7%D4%E7%15%FF%2F%0B%DF%97%F4%8A%18%17%F0gC8%F4%AD%5D%E7_%95%9F%A6%60%40%AB%A8%B8u%D7%F4%FA%E7%FB%25%AD5%81%9F%CE%5D%FD%12W%F4%0F%91%86%01U%C2%CDF8%10O%E6%DC%F2%EBth%C5'%5D%BE%02%D1%19%A5B%00%9Ap%B2%EAMx%0Bns%93%F5%20hs%CA8%9Aj%CB%A0%CEq%E2*3jbU%94%BB%8E%0B%01%C4%DF%8E%8F%C5n%CE%A8%80%C3R%8AR%7DWr%09w%09%1C%9FV%F0pcZ%3BQ%AC%90wOq%1F%DC%E5%07%F9%94%E0q5a7%E4%E2b~%E6%EA%BCza%E6X%F3%5E%DB%8F%C4%99%0F%3B.%5E%12%E1%BD%B1%E6%A2%CC1%B4%17%5Eg0%D2%85W9%8B%D7*%AB%9EQo!ix%E1%D3%84%0C%EC%23%3A%BBV%84%9E%D1_%7C%D2%1D%A2%EB7%AC%5CJ%3FW%10%F5%8DAz%DDF%E9R%9A.R%FA%A1%D9%E5%CBF%7F%F8J%DC%01%16%C8%3EZG%3E%3E%F6%EF%83%CFpL%90%9F%B08%DF%E7M%85c%94%A7%0B%DD%0BDO%9A%80%B8%EB%A18D%ED%AA%E8%2B%26%20%B9%22%2F%8Bt%AE%BC%92%F0%B8%16%06L%40z%80%A7%AEi%BF%06%F0%07SU%9E%84%12.i%7Ds%A3B%907SSHHn%EA%82%1D%3F%D5s%14%D6%9B%80tu%14%D4%FB%DE%A0tnk%3F%0Aa%13%10%FF%B4A%E8%AE%0E%D19%F3O%04%0D%96%EA%98~%93D%08S%3F%8E%B1%D2%E7i%5DS%25%F4%02%9AO%0DA%2B%E2%C6NZyK%94%87%8C~b1%0Cp%BARfG%87H%0F%89%99%82(%E3w%01%17%CA%3A%E4%10%03%E4%3Dc%17%1D%B9za%9B%94K%0D1%F3%94(%D7%24%E9%91%03~%BA%CA%86i%88%20%CB%A5w%13%22%AD%FB%EB%A6%20pb%89%3By%E04%ADw%8D9%88z%C6%16%5C%17)%7D%CDL*%C3%90%3B%95%95%B4%90%C7i%1D5%10%86%10%B1ev4%FB%90%2B%DE%87(%97%F4%19r2%BC%F6v%89%D7%98R%C1Q9%18%BA%F1%F5%9E%A0)H%22%CA%E0%5C%12%11MA%CA%24%06%E7%A1%9B%A6%18.%A6%D7%0D%83%E6%DE%13F%E638%7B%E7%9A%DB%1CQ%BB%CC%D8gT%5CS%A1)%C8eB%5DE%A3%1Eg%C0%14%04%F63%3C%5E%EF%0A%8B%CDAXd%26%7Fd%16%B6xl%A3%F8%9B%D28P6%8B%E3%00y%A0%FF%13%F9u%0A5!%8C%2F%A7%E3%9BR%D8!%40t%DAH%A5(%96%F6%07%10%93%90%F1%B8%F0%A8%D0%C8%C3%0E%8D%0B%04%9Ff%C7%16%9AK(u%B4%15g%10f%C4%96%D8%05%D9%8538wC%7B%D6!%0E%80%7Ff%1D%C2%014%01%C4%3B%EC%80%04%08%90%EF%C3%95%D2%0A%EA%85-A%D8%F4%CF)y%EB%D13%00%BF%B7%CE8%23%071%16a%FD%8B%A0%D6%AE%BBE%AB%0C4%1D%A6%E3lNe%C6P%00l%95x%DD%81%EAa%15%D6V%03%EA%EB%2Bw%A1UH%8E%04%7F%C4%D9%B8O%C1%1Fe%5B%11%EA%2B%06%C27%B1%10O%D0%FF%AC%E2b%19%D2%16%BD%1C%C5B%D0B%7FbM%C3%90E%88%F0%0By%E0%DBXk%1E%5C%AEC%E1%9D%5E%E3%97%3BDm%BA%F1%97%1A%11ku%8B%D0%DCi%F9%EE%12n%88%11%C2l%EE%8B%DE%0B%AC%16!%7C%12%91%CA%EC(h%0B%A4%E0%3B%C4%F5%AE-%10%B8%24%CB%B7%09%E6%B2N%3B%20%D0u%E4%9C%88%B7%FEk%99-%90f%D8%F35%BC%F5%AF%A7l%81l%87%E9-%22%D6z%D6a%0B%A4%C1%5B%D8%83%1F%23%C6%25%EC%80D%1C%A2%03%3F%C6%89%E6.%3B%20%CD%DB%E3%1C%BE%22%F6%CA%14%BF%12%E3-C%12%B2%BC%A8%E8%E78k%B5%E4Wb%FC~%0A%88C%26d%02%8E%A9%F1%AFb%E3%2F%14%CF%EDQb%FC%26%0AH%D7'%84%CA%B5'%08%11%FC%AB%99%BBM%5Dj%8C%A7%81H%DE%20%DE%CA%D7%DE%C2%DA%DC%C31%9E%A3%808D%7C%FE%06%A8%F61bZ%C5%A9%10%8A%C4%CB%BD%1B%FE%835%5E6(%1Fr%D1a%90%91%84%99%E0%C2%1AW%18%0C%C0%3D%A9%DC%81%14%10%D8%01%9B%24%8C%897%AA%83r%915%0D%FD4%90%FFn%C0nU%13%FA%0C%F6%D9r%1D%E1%9D4%A7%0B%9A%DB%1E%C5%BE%9D%3EF%0A'0r%E1i%20%15%B3%3F7%BD%E3%9D%0A%12%DB%08P%B0%91%2F%97%B2%099%A0dUo%81wG(%9B%90%EE%B0%BA%FCp5bSQ%3B%20%DE%FC3Q%E5%A1%EF%FCS6!h2Z%25%C1%C7%90crENwwE%C2%0D%F3%F8gMG%B7%7B%90%F5%E1%94%D7%9Czs%F6%B6%87*%9F%3B%2B%01*%19%F9M%B5%F5%8A%04%B9%02%9A%AD%ED%BE%09F%5B%AF%C8e%24uoa%FA%E9%CA%EB%8461%DD%E9%C5%1E%A3%8BA%86%B8C%F1%8ET%08*~%A4%A9%E3%7B%19N%01SE%B5%14%C8%96%D2%8A%BD)%10%E7w%0F%CArf%FE%BC%D4*%E4%8ErYS%20%FF%96%CEj%9D%E6%99%DAs7%26%97%1A%E3S%F64%EF%87%CCs%A5h%88m%CF%9DF%5C(%3D%C6%FF%98%D7n%9C%12%AC.%5C%F3B%E91%BE%ED%E3%90%C6%C7%F2%07%86%EAC%9Cvw%ED%0Dj%7D%ACVx%DC%991%9E%0Fh%7C%A8%82%1A%11R%9D%11%E3u%20z%BB%AD%D9%20%8D%191%DE%A5M%CF%F5%B6%0F%B3AB%19%A7Cg%83%8A%FD%10%9D%11%3D%16%19%F7%20%8E%D4%E9%AF%D5%EA%88%99B%C3%90%B4I%23%06%ED%B6~%1A%89%B6)SD0%03%D2%EE%7Ba%9E%9D%90%3Cu%F3Go%E6%91%D4%D8W%2CV%D5%7C%BEP%0B%B9%B2U8%2C%D9%08Y%09w%B5%90%F6%F8%BE%9F%06%ECc%F8%A6%C0%12-d%17%F8N2%7C~c%A4%F7%E3%2F%855%10%F4%B8rYx%DB%18J~sH%85%C4%3BR!%DE%86%AA%F0%AF%EE%FF%B8V%19%B2%08%F1%84%20%B1%01%E0Fi%C5%81%94VGGSxt%05%FA%3A%B2%FAY%B4%F2%18%EE)%01%A4%C6%F8%94%D6%B4%07%BE%10%A2%AC%A3J%99%10T%10%05%B7rMz%C4%B1%D6%D7R%3C%94H%CCx%24he%C6%1EV~%EE%ABOI%12%A7%5E%F8%14Cj%DD%C1%13%60%DDv%E6%12%FF%5E%98%DE%D2%5E%7D%14%B6mQ!)%E15%F5%F3L%F7r%60%9Ca%9C%DA%B75%AB%00%CA%AFG%15%88%FE%8C%886m%F42n%0Bj%07M%B2%F34%C0%E2b%25%C6%B7%E9o%D08x%BD%AF%9A1%85%E0%A4%CB%19%3D%04e5%9B%8C%D4%ADi%18%BA%F4u%9D%0E%CE%81)%1B%18w%E5%FA%D6%CA%99%23%F1C%CA%C19%1E%1D%DC%A9%1C%8B%F6%DC%A3%B2%E3G%02%8C%8C%89%0Bn%C5%CF%95%A7%A5%AC%7C%2Fx%96%F3%C3%DF%13%FDY%DB%23%D9%AA%93%B8%90%84~tbF%7B8%FC%86%98%06%B9%0D%8E%85%95QL%97%9C%E0%5E%9E-%3D%FD(%3EI%D2%B6%D6%AD.%18(%C7%7D3%E0%ED%5C%CD%06%F1%E4%EB~%2F%C6%C9KQ%1D%FE%99%5E%C4%F8_S%08%B8%0AK%CB%14%7C%A7%95%40%F3%D5%E8%98%94%F5%85n%91%D0I%AAB%AD%90%AA%98%20-%2F%A1%B9%3A%CD%A8v%23%A1S%F5%FC%BDL%90%1Fv%9E%09%EA4s%FD%F8%E2%A5%F2%C4Wy%99%20%B1~%DDE%9DC%96%09%89%9C%03%FB%12TW%A8%60%81%A8%DB%1Eo%D2m%1F%96%8Fe%CF%A0Z2UWm%CC%AA%95X%BC%9D%CB%0D%3F~%D7SK%89%B1%CF%98P%19%DB%1D%3F%A2%3A%B6i%C5%115%C1%10d%A6%CD%C5%A7%BEa%82%01y%D3B%D4%BE%9FU%16%17%89f%20%CD%84%0Fd3%D5%10%3Eb%06%01%C2D%C2%1B%B7L%99%FB%F6%40%097%03%B3%24%9CMS%C0%E9%D3q%AA%C6l%B1%A2%94v%40%D3%FFq%DB%E7q%91%C6%CD%1A%04%AF%FF%01%D5%B3%93%8A%C0%85b%9C%00%00%00%19fcTl%00%00%00%0C%00%00%00%C8%00%00%00%C8%00%00%00%00%00%00%00%00%00%01%00%0A%02q%C5%B6%1A%00%00%09%E7fdAt%00%00%00%0Dx%9C%ED%9C%7Dp%14g%1D%C7%7F%09%7B%97%BB%BDg%F7(P%0A%92r%87Ti5%85T%228%25%90%0B9%C2%8B%91%0B%82%8AH%CB)%B5vF%A7%094Ef%7C%C9%A6I%3A%5BL%09%20%FA%8F%CCd%A1%C5Qg4%99%3A%3A8%83%C3%E6%A5j%86%2Bw%D2%81%EA%1F%CAB%A0%14eJ%5E%20%40%DE%D6%BD%23o%DE%EE%3E%CF%DE%ED%3E%FF%F1%9D!%EC%3E%BF%DF%3E%9F%BD%7Dn%9F%DF%F3%FC%F6%D9%03H%97_W%02%D0kPfK4%20j%BA%06%AC8e%26%9B%A7%F8P%0Fe%A8_%2B%F4%19%AE%C5%AB%E9Cj%94%13%D4%19h!%DCj%A3%0Dq%0B%E0%17hCr%12p%86%3AD%EBk%ABd%FA%10v%906%03r%5E%DA%B5%86%3A%C4%D7%B7A%A1%0Eq%A9%B2%ED%3A%D0%D7%08%0E%AD%25!%DB%90%AE%96(%DE%E1%89%B2%11%BB%0C%3E%3Fo%18%EB%80%86%D6%DF%25W%13K%E0%ACl5%FC%0C%7B8%3B%9A%7F%9B%C8x%A7v3%CE%CC%080%03%7B%BC%A7w%24Lbpk%7C%F7%B1%90j8O%82%EC%C5%99%B7%85%C3%1B~%DE%06%DBpux%E7w%3FJ%82%9C%C1%98%AF%865%95%C8%F0%22%AE%8E%8F%02%FD%12%16%E2%EE%1D%CE%C1%3Ah%B7%EB%3C%E9%3A%EE%DB%E3%9B%AB%3E%8F%AF!%B7%F0%9E%9B%00%D9%F3%7Cm%FF!%8C%BD%B5ix%B6%82%AD!%5Ey%8F%C0%B8%B6J%C0%DA%D1%10%3B%F3%FD%7C%AC%CB-a%03%9E%C1%2F%FF%8F%8Cu%98%11%F2%84%F8H5%CE%C5%A7%AC%C7C%DCk%3CxH%5Cv%87%80%7BQ%C1%3A%D5%E0!%DF%94%7DQ%ACC%030!%7C%15%DA%E5x%06k%F6%0E%01%7C%01%EB%B1%11%18%FCYh%E2%F0%0D%EF%2F%8EA%FB%CB8%8F%02%60%04%12%04%F5c%CD%1D%DA%CD%18y%06%D3%3Fr%020%07c%0A%1E%E2U%25%9CY%E4bGg%FF%0B%DB%09%03%A3%AA%95x%08%B3%18%E7%F0%CF%80%AA%CE%95%F15%00%BF%F7%2C%09R%8E%99l%EEU%D5%DB%3F%24%204%A1Y%841h%EE%1B%18%C8%E1%3E%85%8C%D0t)J%B0%9F%C6%40%F8y%96%18%D0%12%C2%DB%5Bob%20y%85%D6%20%CB%04%BC%BD%8C%C3%40%E2%B2%25%06%22%8CA%D1%7D0%1F%AD%F0%16%C6%18I%F5%10%12%15%AEQ%0C%C4%15%B2%06%A9%0A%E2%ED%ED!d%0E9%A2Xbx%07%87%B0v%14%90%D1%E0%9B%C66%97Z%60%89%01n%B5D%C0%D9%3D%EALxaQjS%97m%E9%1F%D4%F7%26f%99%19%93%B1%1B%EA%22%25p%FC%DB%F5ef-l%94%B6%D2%22%E2%B2f%13%7F%EC%81%99A%E2%C5%C6%E5NBNF%DA%A8C%7Ck%3EX%18O%2B%D35%A6Q%C8%CC%A4%E1g%24%E03%CD%B43w%5D%00%AF%8A%E0%0A%A8%D8%E1%92%7DH%D7%06%F0%EEZH%91%01%ED%1A%E4%A9%E4%EDN%13%92%D3%06%BF%1F%FD%5E%AB%C5n%23Ky%16%F2%25Qu%40%A1%0A%81%B5e%C57UuI%02hr%BC%0DA%A4%FEy%CF%3D4%9B%22%04%3C%23H%95P%A4%14%3B%02%CDX%C9Y%06%F7%DE%E4%AE%16%11%03%02%B0M%8E2%E0%C4%0B2%EC%9D%9A%C42AP%05g%09%9A%1A%7CCl%A5K%99%D8u%8DADr%1CR%07%9DoK%DCdj%8B%1D%86-%0A%C6%3D%1B%89b%95X%AF%B6%C1%8A%89%02~N7%3E%E9%92%85%3EY%AA%F6%AD%DF%25%C3%2B%CADI%7B%9F%E00%03%15A%AE%94%ECL%B6%2Cp%B8%E6I%B1M%97c%2F%BB%0B%C1%5D%C9%8E%1E%7F%8E%12%E4%CC%B7n%C3%3BgG%81%AFU%0Fq%BB%BEA%07%B2%D6%A7J%AE%E0%F8%40%11%95%D0%E9%7B%0F%5C%F9%C1%8A%7F%E7%EF%A4R%F7%94%EA%94%1B%25%23%F8%C9%A5mq%16%E7K%E6%F2%AE%93I.n%DB%A1%BC%FD%AF%F8q%BB%A6%CB%82%5D%C8%B7%A1%93%E4rX%B1%0By%0A%18%C2%24%9A%7F%D2.%E3%E4%20%5CQ%F0.h%CC%26%E3%84%FA)%11%9F)%82d%1E%C7%96.%A8%F9%3DspI%C8%94%08i3%82P%60K%1BO%FC%20p%C1%16%A4%FD%EEQm%12MH%CA%DA%14%17%906i_%9E%ADT%3B%8C%9E%BB%A9%89%BE%87%EA%90%B69%0A%A98%FD%AEL%11R%A6%E0%9F%068%A2%8F%B5n)%0A%A8T%A0%CCA%8B%CB%23%FB%B1OP%9C%10%5B%13%9E3%8B6%04%92%F9%13%E2%3Do_%F1%3F%3EN%9D%E1Y%C0%CF%A5%8C%60%1Bg'%A0%96.%C3%B7l%40%B2%9C%8F%CCV%F1%3B%C9%FA%E3ET!%17%D4d%A3_'%3C%CD%C9N~%83D%8D%60%E2%CBd%96%D1%9B%061(%CB%2C%A9f%5E%FE%10%92%25%C4%B4%E1%B9%7Dr%9Ao%D6%0Do%AE%8E%EE%AFg%7F%B0U%15%C3e%85%3A%A4%10%FC2uH%25%DC%A2%3C%A5%D2%14%02q%09u%C8%EB%DDK%DF%A7%BE%BC%0D%95%CA%B0G%8A%9D%A3K%D9%BD%5Dl%E8%2F*%A3%1B%F6%CB%F7%8BM%AB%00%F6Q%85%F4n%06O%25%C0%15%99%22%83%EB%EDTr5%80G%A0%08AAv%B3%9F6%C4%13%82%8B%CDRj%E5!%3DqZ%CC%F7k7J%9C%26%04%5E%87%9A%DA%F8%F6%FA%01%99%26d%C6%EC%0A%95%17%0F0N%40L%EB%F05%B6%95h%FF9%02Y%A0%7D%91%D6)F%16%24D%9C%82%BC%06%F0%D6)%C3%BE%C3%2B-s%0Ar%09%F8B%8F%E1s%7F%97%1C%00%0B%C3%04%2B%F2%CB%5E%09%89%DA%C6o%D3-%B9)%80%23%10%CF%1Aw%5B%F2!%DB%F5%D1tK%D7%03%88%13%8F%0E%F9rw%B5V_W%9F.%D9%F5%7D%E7%3E%09%5C%DD8%06%3B%D0bIg%88%0C%3B%07%81%23%03%8D%CF%D5%C8%06%86s%0EB%F8_%95%19%3C%FA%07%A45%86%EC%18%24921%16%23%C7%CE%D1%87%FC%A1%A8%AC%C5%C2%F1%FC%B6%1F%D9%80h%7D%8E%95%091Z%DDM%5EQo%0A%D1b%FC-%D9%02D%00%F2%F2%ED%A0%19D%00K%0B%F25%C8O%88N%DA%B4G1*w%25!%16%06%5E%1AD%B4%00a%EF%18%95'%07%11V%C6%F6%A8%12%0E%10%9Df%C2%E1%B7%0D!Ok1%9E%CC%004%88%C8%E9%CB%0Ao%FE%2F%0D!%91%ED%F5%96z%C7%06v%808%CF%D8%D4q%EEiC%C8A%F1%80%A5%9Bq_%5E%5D%94%E4%F3%EAc%8D%15%8A%11D%B0%D8%AD%CC%FB*%1B%24%F9%1C%17%9B%D7~)%5BH%DEA%40%7D%02%22%E6%2Fo%C0%C9%EEg%B3%850%B3%DA%B87%C1%BB%5B!%F8%F1G%03%FDF%FD%825H%C1%7C%ED%AF%FB7%84%B5%98%7C%5D%60%83a%DF%83B%16%20%ECh%8F%94%5C%EFS%8Cw%EB(h6%FE%02Z%82%C0%A7%F9%15Z%E4%83%0E%BCW%F3%B9Y%92%0DH%EB%E9%CE(_%40%1A%A0%9D%0F%F9%BE%98%3D%84%AFU%D5%BE.%01Pt%BC%C0d%E9%95%D99X%82tn%25-%BD%C2Wa%09R%E0%17%81Up%1E%24%089%C6%7B*%B3J%AAM%83%7C%9E%1C%E3%2F%CBv!%C3%E4%18_%A3%AB%C3%A4%E1%CD%E4%09%12c%BCo%24%3D%A3G8)%9D%98%DE%07IA%8C%CB%E5h%A6%95%A6%CB%95%84%E0c%7C%C4vR%CC%DBK%9Ai%DD%B0%B8%DA%18%23~%94%F0%20%02El%BE%9B%E5I%B6%22i%1E%DFe3SuQ%FB7%E6%D0%3C%DEL%D7%9F%94R%A3%3E%AA%90R1D%1D%C2%0E%AC%1C%A3%0E%B9%00%C7G%A8C~%01%F1%FB%D4!Q%C8y%F0Ir)%E6%B9C%C0%14%A6%20%86%FD4r%06%B2%19%98%C4%CD%84%19%24Wq%04%B2%1F%AEA%CB%981%E4F%B8Tr%04r%FEt%05l%196%84%A0E%C7%DE38%22%0B%A1%E5%87%E0%B1y%BDF1%3E%D7%89%B5%AE%1F%85%92%7F%8F%01w%7F%FD%1D%A3%18%FFw%E0m%7D%E38%B1%09%D0%13rr%B3B%8B%AC%AF%18%C6%F8.%E8%98%995%A1%23%BC%E4%A7%A7%EB%C2eRjo%04%5Cc%CD%BDF1%BE%91%2B%26%0C%AE1%EA9%BB%F7%1E%C4%BE2%5E%E9%10%5C%9A%99%84%E8%E7%F1%A7%18%A1br%E7%1F%A2%EE%24%B0%3A1'%BCN%EBF%C6%F7%EE%C2%F2%A5)%88.%2Cum%82I%88o~%F7%FCL%18%EE%C1M%E09vvb%F9%ECn%EF%C8%5B%BB%24%80%1C%DD%99%E6V%C3%E4%E5%D2%AC%F87u%D3%D4%12%FD%10%E0%DD%F0%EF%C6w%E3j5zdu%EA%1D%804%5D%92%A7%9E%DCvj%1FU%B1%CE%E0%E7%023%DD%9D%8B%01%B4Wm%AF%D7%AFJ%D4%C6%D7%C1%F1%CDS%DFI.R%B6.v%A1%EF%CB%E9%97%1F%E5%8B%5BuoJ%A0B%C8%1D%9F%F5%FB6%D6%2B%3E%E2%C2%C6i%F2%3C%BB%D3%A5%BB%C7Z%7F%FCY%DD%3B%B2%1D%09%B8%FA%A7%07%9B%3D%81Y%EA%A3r%06%10vk%DB5%7D%E1%23%C1%FF%7B%C5%CA%1B%DE1-%7F%EC%09%ECpe%82HJ%DC%A1%2F%BBX%C9L%BB%5E%1F%AC%8C%B5%DC%9E%AC%96%2F%A9%02W%A6%BF%81%E15%1C%E2sS%D7%EB%C3%BB%C5%E0%9D%A3L%EC%CE(%F6'%BC%A1%0C!%CCk%B2Q%F1%91%C9%AD%FA%C4K%00%E5%93I%A7%3A%D9%25p%83%8A%D11%18%88%F1%CF'L%85%DA%8F%A1g%E7_%F2'2c%FC%7C%E0%3E%01%7F%2B%FAn%2C%13%08%BF%92xV%7C%C3zy%E2W%05%7CA%ED%5E%94%015%86%0D%CF%CDD%17-E%89%FFN%B4%11%5B%14%5Eg%F2F%9E%B9%D0R%2B%5E%DC%B2%C9%3B%B6'%0A%26%E9%12s%E5%60%7F%18aB%ECT%8A%8F%2F%86%BCLg%0E%E8s%B2%05%2F%DF%B4%1BC%04%97%94!%24%E3%11%1BZ%85%1C%7F_C%A7%E6%A6*%BAKf5u%E6%9F%A1%BD%8C%1F%3C%03%09%FAk3%17%1D%82E%B4%AF%16%F3%B8%06%A2%F5v%C8%84%F2%EE%C9f%26K%CB%A6%22%26K%AC%2CJ_a%F6%3F%DC%86%14Kn%F6%20%A6%FA%1Fc%CAy%EBp%20Wn%00%00%00%19fcTl%00%00%00%0E%00%00%00%C8%00%00%00%C8%00%00%00%00%00%00%00%00%00%01%00%0A%02_%95%7F%9A%00%00%09%C3fdAt%00%00%00%0Fx%9C%ED%9C%7Fp%14%E5%19%C7%9F%E46%B9%CBfw%2FB%D4%A0%81%DC%20%12u%A2%80%0D%15%DB(Grc%22Pr%D5%B4%8D%9DTO%E9%20T%2C%88%80Lma%01%81%83A%2F%F2c%FAcl%B3%A0V%FFp%9A%03%87%D6N3%C3%9B%842%09%04.%22%C5a%C6iVB%D0q%18%F3%13BB%F0%BAw%094%3Fv%F7y%F7%EE%DE%FC%95%EFL2%B7%FB%3E%EF%FB%D9%BDw%F7%7D%DE%F7%D9g%0F%60%B4%9Cc%F6%00t%E8%EC%8BK%2C%20%E1%D1%EA%A61%B2%A68%0FqB%13%D2%95%D04%0E%90C%AF%FA%983%C4%3C!%9F9%24U%81%0B%845%24I%05Nf%0D%D1%C6%C1%0B%CA8%406%AB%AC!%B6%CA%C6%EB%AC%19%20%84%BB%14%E6%108%B8%C2%1Bg%0B%F6%E2f%C4B%C8%DB%FD%20EC%A2%C9%B8%F0%8F%E3w%23%B59o%C5%06%9C!%BD%E0)0%2C%DC%0D%87%90S9%A0%96%7C%AA%A2%90%14%1Fl1%2C%F4BJ%A5im%E9%01X%C8%C9(%A4E%853%C4%A8p%258%CC%5Bp%B8!%9B%9F%86BB%1A%C7%10%B2%13%83p%B9%CD%03%F0%04%82%F8%E6%B5UD%9AkT*%3DUS%174%AD%2F%AC%E9%EE%23!%F3~K%CF%E9%CE%EFY%F0%B8Q%B1%AD3%E7*r%94p%BE%DB%B3M6%B5%A8~%13%0A%9E%DF%A9%1A%15o%BE%86!4%0D%808%DB%D4%E0NHw%B5%FE%02x%FD%FBI%BC%D2C%05%01%F3%AFk%00%EC%5EiU8%EC%D2-M%C9%D2%9Bk%8E%96%F1%5D6%A4%B2fN%06%C1%EF%D7%3F%94%967J)%20%8B1%83%DAl%0Db%A8%EA%B3%ABT%1C%B2%103%10%7Fn%06y%81%0B%10%94!mWP%1B%BB%0F%F6%19%B5%E4q%3Cm%3E%A8D%F5%FE%0FP%13!%03%16%0C%18%94%15%0By%DF%C7!%A9%3F%C6%DC%01%C0%FDP2%DD%A0%A8D%BA~%06o%40%CA%F1%A16%B5%A7oT%11%FD%A2b1%E7%D7h%7D%80%C0w%A8%09%7F%5Be%BB%A2_%F4K%08u%1B%F0%87k%0F%DE)%B0'%98%EA%D3%2F%F9%04%F8I%A8%03o%3A%99%B5%D7%DCB*%26%20L%E3%5D%86%06%B5n%84%E1%88%AC%18%CD%3B.%AD%A7'%08OJ%C63%A7j%0C%12~)g%83%1F9%8E%8E%FA%AB%A4%04f%19%0D%E8b%8E%82%40%02%FF%C9F%2C%80%EF%80%BD%E1%3E(%DCiP%9E%8A%0E%C3%97J%B1%C3%00%A1%1F%E0%8B%D3%C6%E5!%A3%FB%F4%96%CE%F7c%16%00%2F%99%17o%F2%E9%EF'%B7%3EQ%DC%89%98rd%DD%DD%9F_Qo~%0C%D3%DC%AE%A6%12%C2%F7%A9z%BB%A7TU%F8%FD%A7%A2%9F%DF%EE%7C%2B%5E%CA%81%B0Og%AF%C3g%0F%CF%98%1F%8E%F2%C5%B5%AB%A3%FB%C6D%5B%F4%A6%07F%91%19%BD%CB%2B9X7%C0a%01%1C%2B%A1(%3D%DB%10%993%D0%BE%DA%A0B%A2%20%01xo%00%F5%99%F1B%3C%10r%CFB%18qC%0A%FD%B7%9D%1C%DD%0B%09%EF%F8%BAp%BF%BD%8By%E4.%E9%AA%CD5g%99%87A%CB%C3%C4%3D%B7%E9%C3%AE.t.%1E'd%FB%15%5BI%23%3Ax%C6'%FBl%C2%C9%17%EEQU%96%10%C7%0D%E0*_%A9%7D%9A%E9%B9%F0%7D%90%DCtM%C8%A1%98_%C6.%E9v%A8%E7%A6%01%CD%9C%3F%0EU%D7dW)%D0%C0%16%C2%E7%FCm%12%5BBT%A9%14%BE%3Dn%B5%F4%8E%03%A4a%962%0E%94%CB%F8%A2bB%13%9A%D0%84%10%7D%BDs%1C%86%92%E5%7F%7D%8C%3D%C4%05%3B%983%04%2F%1Cf%0A%90%F6y%3C%85r%24R%CDP%17%BB%96o%99%EF%86v%EB5%8F%D1_%2C%DA%9A'%A9fY%D3%3C%EB%10%E1Qj%D3%7Cm%A5B%C4%22%C5%3A%04%DA%D0p%EBM%95f%A9%1C%81%A31%DD'%076R%1A%D6%9D%CB%D6%20%C9%EEX%20%D2%E6JH%CF%FF)~%80%9CRn'%C0%DF%88%05%02%E2R%92%A2%A6%60%0F%AE%B4)c%EE%03%0E%19%A4%FBc%82%80%B8n%03%C0Z%CCJz%B7%9B%F0%3E%0AC%1D%C0%09%FF%0E%8FG%5B%95%9D%C5%2C%AB%BA3%40p%01%D4Z%87%B4%F4x%FC%BB%9B.%95o%C1%BE%AEK%FDv%1F%08%DFi3%60%EB%90Z%15%C4%FD%C5%CA%BFk%B0%8E%AF%F2~I%00b%7B%C6%FB%D5%5Dp%F4Z%7D%86%F4g%CC%D0%EE%5D%AF%FD%A7y%2C%A4%A3s%99%9D%CB%BFG%C0%F1%5B%CC0-%F2%94%EF%C9%D8%20p%99T%BD%E8y%86%B4%E5!v%D1p%CD%7Fc%84%88%87%0B%40%DA%D3%F9%0C%96%16R%1Cc%FB%11%09%83%09R%0D%9E%DF!%86%99%A7%2C%B7%ED%D4%09%D4%C8%06%B6%9C%8E%ADQ%60g%24Dg%DF%60(J*%AB%A0%B05%DBO%01q%B8%8F%9F%C6m%E3%84%D8%09%DFJXC4%9F%C1%25%0Ab%D8%F1%BCW%AD%1E9%C6%C4%DC%F1%C6%92%F2'%DF%15%7BmZq%25%25%1F5%19%A73%24F!R%5B%E2%0F0%86%2C%04!%1B%EF%D48%D5%01%D2%7C%95%3D%C4%11%C8c%0D%99%0A%B5%ED%5B%8E%9A%3C%80J%84%B6C%81%F3b~%11%D3%E0%22%D8%5E%ACt%FE%10%60%3DS%88%D6%BC3%03X%E7%EA%B5%92%E4%20%60y7%F1JpEFH%C6%10%E8%E0%14m%12%C7%18%92%C1%3D%A8%8D.l!%82%CC%05%CA%B7%F6%B2%85%B4%AAI%DF%FAw%A5*L!%EFG%87%C7Q%EE1%C1J%CF%1B%07%88%E3%DE%B7%C6%E1L%06%9F%B4%B1%85%00%8C%C3%D75%01%89%05%C2%DA%01'%1E%22%AAz%90%A6%D3%09%85%24%13%1DH%5B~Q%15Me%CF%E8%B5%8C%AE%048%A8%EA%404%1F%BFI%BB'u%F8%23%24f%1F%C6LR%9AAj%5C%F2%23%9D%12%A7%17%A0%1D%AB%1E9D7%92%C9%19m%A6%FE%BD.%97%1ED%038e%0A%88%0B%5EGLR%7CP%20U%E9%A5lD!%14%13%2F%E1%06%1CGL%C4%01%DE%07N%BD%A0%8AS%19%04%A1%EA%85c%98%C9V%BB%0C%87%F4%0A%9C%8F%01%5D%FC%B7%AB%7C%26fb%DB%26knP%0F%12*%DFJ%95X%D1%11%E8T%11%13if%D6%0E%DD%243%A7%E4%DFEu3%CE%16%9ER0%9B%BA%C2.%A2%0B%01%8AaE%D0%FE%96%AC%FF%1AM%11%17f%B9u%F7SA%9C%DA%1DV%B8%DAA%F1(%5B%3F%E7%88%0E2'%A8%9D%8D%BD%0Ce%08r%9A%5E%EC%99%0A%C2-%BAC%FBo%C3%E7g%82%7C%E6%F9%87%C7ZQA%F8%81%CF%9E%8DDa%97%E0%90%DF%B7%7F46fM%E7OfHKU%F8%15%1CS1%88wqu%E5%D8%D4%13%3AH%B5g%C1C%92%0B%1C%3E%0C%E2%EE%98%2B%C7%0A%09%F4x%8A%8E%13%90%A6%0Em%1B%A5%5EI%19%FD%BB*b%84%EC%5B%8A%A5%5E%DDl%22%AF'-olB1%15%E4%11%EAx%D7%F6%5C%A1ol%86%1A%8D%8F%17%5D%D4%90%B6%EB%D0U%40F%14%B5i%A7~%04%F7%F1%8EJ%2B%91%BBM3F%A66%17%11%E0%EE%D6v%23-%D8%C8h%88Q%C7G%D4%A2%8C0%15%F3%B2%81%A3%F0%F1u%A3%23z%A6%D6%81%91%BE%D1%E1%CD%8FNQ1%1Fo)%E2-M%1A%05%91%2F%90(%C4%DC%C7%8B%96%9Em%F1%B7w%8Fx%1D%A7~%A3%5D%89%AC%E3%11%1F%2FdX%81D%9E%3B%0C%DB%10%17%1FnP%A2%EBx%F3JB%3C%2FU%A7%06%F9%19%24%B2%8EG%7C%FCAw%1C%10%ED%BA%EC%04%EE4%E6%E3%C57%E3%60D%20W%A3WWr%5C%D1esq%CD%E9S%A3%10%96%2B-%E1%F5%CD%F5%3E%D6%10%98S%B1%A5%3C%25%C8%16%22%E5%C1%94C%91%80%1AKH%9A%2F%FDF%A8%811%C4.%DB%BD%CC!%C92%A7%84%D6%B2%84%88%05%DA%90%95%04-%9Dr%C4_0%82%D4%3E%0B%CEw%EA6%DA6%C8%EC%82%05%7C%96%B6%C6%0B%87s%B5%E1%3E%C1%EB%F8!%A5%97%AD%84%B7%23c~%D3%A9%10q%AC%A3%5C%C7%5B%94%ED%9DU%EB%86%DE%18%E4%DC%8E%EB%B8%8F%8FE%C7%E0_%7DC%1F%C5~%3B%E5%3A%DE%AA%1A%00nen%BDrQ%A6%5B%C7%5B%D5%B9%C8%802%A4%2F%D7%C9t%EBxk%92%D6%96%D6%7C%EC%BE%B9%95%D6%AB%00%24%91DCZk%E6%05z%D5%5B%9B%D3%B3%01%8F%02XV%7DhD%8E%C4%C7%9A%8F%C7_%7C%B6%AA%B6Q%EF%C4%8A%BD%BB%12%CE%00a%F2%7D%EA%FEa%DB%0Ew%E2%19%90*%9F%9F%5C4l%3B%92%08%93pi%97%D2%DC%23%C3%B6%DF%60%C0%D0%86%5C%BB%3C%EC%0D%3D%09%7D%AD%EF%96%3E%FC%8B%05%C8%D1%AB%C3%5E%2COs%D3V%3C%FB%9B%AD%D4%10%7B%FE%9D%9C%EF%FF%9B%12%5Db%DD%17%8D%FE%02%90%5E%A6%A6%FC)Xk%F9%B7%20%0E%86%F3%3D%DA%CAy%1F%7D%0D%E9Q%97E%86-%8B%80%D0%ADJ%DB%E8%AB%A4eZ%5C%0B%08%99eA%E0%97e.%A0%BFH%40%FC%E3Jk%90%B3%1D%E2OT%D1u%B2G%B5R%0B%0B%BE%8E%14%9F%1B%84%D4J%98%07%F5S%ACP%92%E9.%A9%C1%F7%BF%85%7B%9B%E1%AB%E9%04%AA%09%FC%FD%8A%7F%115%24-%C7%E4%A7%1C%A4%9B%E9_%8E%0Fd%ED%FF%F9%87%15%E0%EF%20%DA%B5%AF%B9%D3o%CA%F4B%F11h%CDkC%0D%7D%CE%3F%A4u%E0L%02%D2%1A%12%D9nLL%FB%11%09%8F%C3g%97%A3.%E7%89%A2%C9%04Z%23K%0Bw%E2%9A%1F%D4%FE%20%A4%AF8%E1%D3%FA%7Ba%F3%1F%16E%BD%E6%A7%8F%246%2F%5Dz%F7%08%01%FB%CF%88%02P%A7B%DBs%25%1FH%DAW%F6%89%92H%06%3F%FF%E54%1F%EC%FDv%FE%8A%A6%13%DA%FC%2F%7D%F7%AB%5Bu%93%8C%A9%D2%A6J%0DR%AC(5%B6%C1%18~%B8%ED%9F%96%FB%80%C1%AF%C3%FD%0F%BA%CCn%86%20%12%A6%14%00%00%00%19fcTl%00%00%00%10%00%00%00%C8%00%00%00%C8%00%00%00%00%00%00%00%00%00%01%00%0A%02%3D%D0I%5B%00%00%09%92fdAt%00%00%00%11x%9C%ED%9Cml%14%C7%19%C7%1F%DBk%DF%FA%3C%B7G%12J%A1q%8C%8B%5CJh%08%A6qy)5%BE%D8n%E2%26%10(%B4*%8D%D2r%A9S%02%91%8D%5DAS%A9%85zi%EC%E8HL%0C%09Q%F8%105g%E2H%E9%07%DE%83%C4%87H%EC%81%A1%94%5C%7D%84%B4%A1j*y%C1%18%DAH%15%B1%8D%DF%C0t%3B%7BN%EB%BB%DDY%E6%B9%97%B9%AA%92%FF%92-%EF%B3%CF%CCo%BD3%BB3%F3%CC%CC%02X%E5%B5Y%00%3Ec%D8R%92%08%88a%D5%00%C6)1%A5x%89%93%9A%D4%FFR%E4e%F1%0C%CF%B7%9B_%11%0E%91T%F2%BAp%C8I%80N%E1%10JxG8%84%FE'%1B%85C%AEk%CA2%E1%10y%C6%E9C%A9%E5%B0%B7%95%EF%D3q35Fhk%B3%CEu%CA%1A%C3dE%02%3B%1C%B2%9A%0BW%FD%DC%E4%FBn%60%20%BB%8F%3F%EBPt%B4Q~%80%9B%7CZ%13%82A%C6%40%BB%9F%7D%AA%14%609%2F%B9%FB%7B%BF%D1%10%90b%80_%40%98u%AA%0E%94%FBx%C9s_%EB%08%22%20%3EP%1E%F70olg%B0%B3%91%97%DC%1B9%AB%F2!%CA7%C2G%FD%DB%99%F5%F0%9D%01%87%FB%18%A3%88%F7%03%04%04%FEa%7C%F5%D5%C1%F3%8C%13%05%83%A3%3A7%F5%D1%EE0%06B%3B%5DC%1A%CB~%E9'%B7%F8%89%9B%23%1A%06B*%C3%3A%F3D%DB%89%1A%14%84%9D%DA%02%A9v%F0%9A%F56%02%D2%11%D1%10%0C%20%8F%06%D9%F6%A1%E6G%F8%A9%3F%F1%A2%20%EE%E5%B4%12%97%3Dn%87%8C%AC%ADF%24%97P%2Fa%D97%17r%FC%1Dv%C8%CD%9Ag0%C9%FD8H%FB%F9Z%D8c%B3%2Bc5%DB%11%C9%F3%FF%85%81%B8%7C%D2%C2%22%B0%DF%19%F7%ED%EA%08%229%19%C5%40%24%9F%D2T%B5%D5%EE*%7F%D6%F01%06%C2%1A%EF0%20%40%60%BB%FDm%EF)%3DQ%8AH%AE%18%AC%B7%85U%B2%8F%FE%CA%F63%CE%14%0C%23%92%83%B1%0Bs)f%1D%CCc%16%9F%C1%AE%9ED%8B%3D%9A%E9%C7%5C%8A)%F7T%CDnTJ%D8%CDI%E8%EEX%E7%95%C5X%08TM%B1%DBr%8B%BE%CF%F4%ED%24%F3%26%0E%8E%0C%E1%87%CE%E5%0C%DBA%F5gL%DF%10%F4%B4%19%F5%E3%7F_%EDSQ%DD%15S%1E%D6%E5%AC%FBt%88%E9%9C%7D%DE%BB%89%7CW%8F%FE%5D%F1%0A%A0!%B4%1E%DB5%18awc%E4%5D%17%00r%A2%95%CAE%2B%E0%1C%2C%24%12%B4%DB%C8%F0%5D%1A%D3%D9c%D0%AC%AF%AB%D1t%AB%00%D6%60!%5E%BF%DD%D6k%14%B2%9D%E5%E1%16%80%86%E8%05%AC%D6i%D1a!%11F%07%AB%CD%08%B2%9D%B3%DAv%D7%9D%194!%C4%7C%5COt!!.F%9F%C85%B0%C2%E1%8A%5C%85%15%FD%FB%17%D4t%81%AB%9F%A2%0E%0E%DBc3%23%8CdN%91%19v%3F7%A27%F0%028%89%84%A2X%BE%F4v%05%B9mn%EA%10%D7%83l%7BZ!%B00%13%90H%83%C5%20%A0%E0A%EE%CF%40%E4%CE%3D2%DF%18%14%92s%8C%B2%7D%E4%CB%AAhHd%E7%CAz%D1%0Cxk%DD%AF%853%A0m~P%3Cd%7BhD%17%CDP%CA%3CM%F7%0Af%5C%9C%FF%18x%FE(%96q%ED%C6o%C5%02LET%F1%0C%90%B4%0C%40H0%03%90I%FD%9F%2B%3F%13%90Kj%06%20%F9%B73%00%81E%99%80%5C%C0%8C%8DSU%BE%F8%20%3B%D5%FAL%40rUb%0C%EB%82!%CA7%AF%E8!Lh%23%25%F5%EC%85%7F%CE%15%CCP%5E%2B%018%23%18rx(r%00N%8Be%F4%0E%9F%CF%5DP-%B6o%A3%3C%AD%81%BB%9E9%13%90%3E%C9%F7%01bVa%5C%24%DC%05%7F%A9%0E%26%01%F1%D3_%9Bq%8C%0A%A3o%C3%E8%19F%20%89%0B1%A7-z%FC%18%D7%AC_%85O%1AAH%A2%B6%13%F3V%91i%18W%3Atl8%B1%0B0ab%AB%9E6'%F8z%1C%A2%0Eq%8A%C0%955%DE%D9%CD%A8%0B%B2%884o%A3E%BF%C3j%DEo%F7%ECV%16gK%CF%F4oJ%02%02J%05%23%10*%AD%D7l%B6%DC5%8D%D7%25%BF%3D%9C%8FR%FE%B0%3D%C3'YW3%B3%FF%A1%AB%C5%1F%EAIA%3Cw%0F%04-%26%E20U%D64u%2C%CF%9F%0C%83%AC%2B%FF%B3%19K%8A%95%EB%3C%C8v%CFs%81Yw%8D%12T%E8%DF%22e%DDt%1D%3A-Ql%09%E0%3D%9Bg%A7a%DC%A8%AB%02%FE%5C%9D%5D%3D%D1%E8_%DBSZ%AC1%B7%F5%AC%3D(%B8Z%23%23%87B%DAO%93%804%2C%D1%C1%7Ce%F8c%8D%9E%E6G%EC%9D%98%FC%EA%B01%E6%5E%F6%09%3Eo%2F%23P%A3%FE%F7%AC%F2%86%1E%E3%2B%25%16%D8%89%810l%13%A1%A8%93%FD%B1%CF%8ES%5C%2B%B5x%97%7B%FA%D82%8Eo%EA%90%C3%A7%1B%03%A2!J%A1W%ED%D6%D2%01%B9C%C1%BB%7C%11M~p%C27%E9%82%BF%E3%05h%11%0Dj%F5T%B2%E0%8B%40%8E%1A%3E%3BG%13K%01%D7%2Cc%ECcV%2C4%9D%92%0E%C1%0F%E1%92%26%18%A2%C11%D8%22%96%019%1At%13%D1%A3%C9n%08%87%BE%AE%0A%86%AC%EF-%AB%EC%D7%C52%0A%C6%96%02%24%D3n%24%A2%D0%BB%AB%00.kB%19%9E%2F%98q9Y%15%0A%F9h%95x%88%E7%1E%C8%09%02%E4%09%85%90!%F0%96%8B%8E%97%CA%F4-%1EY%FB%C2%B0P%08%95W%09%BC%24%B8%E0%C7%DB%BC%8C%40%84%87%97'!%93%90I%08%06%12%EE%C2AR%88%2Fy%7B%CB%AA%F6%60%20%D2%E6%E4W%3C%7Bi%1B%DF%A4%23%1C%03%04%19%C6bAV%99%8B%BF%11%8E%2B%A0%25y%08%05xU%BE%9F%FB%09%DAEK%09%82X%7B%E6%FD%25d%25%0F%09%8E%83x%CA%3E%A2%E7%24%0F1%DBx%C4%B2%07%E9%DC%D2S%C9Ch%1B%8FYX!i%9DCj%D2%10%DA%C6s%87%9D%60%AE%F1%3A%D6P%944%04%10c%5B%13%D22%9A%B7P(D%DA%04%EE%BE%A0%DC%AC%09%85%D4j%9EV%90w%AEBdx1YH%DEV3D%9C%B3%EB%25%8E%9FF%7F%DA%ACFE%C3A%DC%B7%3F%0A%02%7C%A8K%FA%1D%DD%3C%E6%B0%F0%05%AB%B5%97%3E%20%1A%A6%E0%D7%2B%1B%CD%1D4D%E5%B8%D1%1F%DBz%CD%9A%23%D1%06%8B%0F%E9~%FF%B4J%7C%00%9CHqH%07%5B%EC%9D%14I%3A%0Er%D80F%3Ai%0E%7F%FD%FC%D8a%E9%95%D4x%AD%DA%BA%14%93%F8%24%0D%05%F9%FB%02%DE%D2%AB%F1%2C%3C%B77%9E%B3Af%B8p%90%A3%D7y%1E%9Fg%D1%EC%07k%5C%FC%F0%A9%D7)%24%DC%C5%85%1C%C7%06%D5%A4F%08X%CE%DCO%EE%D1%A4ceUo%F1%B2h%C5B%DCcn%CB.%032%05%1At%E9%5E%DA%C6%F3%B2%A8%B3B%1C%0A%1E%94%F9%86e%91%16%AD%93%DD%20a%DA%F8%15%12%AF%E0%FF%A3%02%EB%A6%22R%0A%9D%E3%CF%89%CA%81%14s%CE%C7%C86%0FVD%1F%CF(%84%D7%C6'%B0%17%D9%E6z%A4r%05HA~%1Bo%3E%EBX%15%2BK%E2%0D%9E%E7h%A5%9BgNa%A5%0DB%7C%B2uq~%2B%85%B4%F1%DB%F8%04F%C7%C4w%A9%5D%B7C%BA%F8m%FC%E5%20%1A%02%BE%E7O%2C%8D%B7%BC%0C%90%7B%88%FFZy%03%CF%80y%03%AB%2B%B48K%60%FCV%60%3A%12XM-%CC-%B3%40%C8%8F%D2%0D%D9%A2%C9%7Dz%9C%A5%E5rm%BA!%B4%EC%FB%AA%B7%C5%1Ew%2C%89%BC%9B~%C8%D4%0D%3Bc%8F%23%A5%DE%40%DA!%92%1A%7F%DC%7D(%C7%84d%A58w%11%2F%B3%A1%8F%95%17%24%13%92%DE%D1%EFW%2C%90%9C%A0%B46%DD%90%7Cc%5E%BCAY%2C%97%A4%1B%02ak%BF%A9%E7%C0j%15%3B%8EOZd%8A%FCs%E48%3E%05%DD%92o!%DA%F8%145%C7%85%1D%C7%A7%A0QI%C5%8D%E3S%90r3%0A%C1%EC!K%5E%9E%99%15%14%92%A5%09%CA%9ED%F7%DCx%16%EC%2C%17%F8%11%82Ef%9FUi%A8%07%3A%8EOz%E8%CC%11)%26O%D0%FE%DE%97((%C0%1B%09%26%0F%F1%C1%EF%00%5E%15%BB%FC%92B%CE%C2%9F~%2C%94%01%EER8~%8C%BF%E3%3E5%B5%F7W%97%B0%16%F88%09%F1%C5%04%9B%3A%8D%C4%D6%A9%9E%1A%D0%13f%90i%0B%12%2B%F2%A1%83%C1%84!%A1%F5%AC%3D%93%F1%F2%3E%FC%B7%89%03-%CB%9F(CY%B4%5B'%25%9C%FF%E5b%5E_L%E5%93%8B%80T%F4%D5%25%00%E990%0A%ED%BFw%0C%F9%EC%8D%E2%CF%16%DC%9E%1Dc%9C%0D%A7%1F%08%EF%F3%E3!%8F%C9%C5%05%83%C7%7D%0Eg%DD%3F%88n%BD%0C%9F%DC%3D%3F%E6%9F%0DU%CE%7D%16%94D%A6%A2%0B%0A%B7%04%E68A%24%B8b.%2C%7B%FF%3B%9E%EC%98%05fJ%D8%9C%87%CEnyNGS%F6l%82%19N%90%2B%E3%BB%5Cw%14%83%7Bz%DC%AE%7C%DA%DFp%7F%8B%7C%1ADS%40y%CA%09rA%8B%8Ev%DF%A6%99%BD%19%B7%073%5B%83%BC%F2%84%86%C2y%FB%9D%20%EE%2F%BEh~%85%E1y%DDz%A2%19%E0%D2%E6z%25%81%C5%A4%11%E7%2B%3AS%D9OK%7C%83%D5%EC)%04x%B1%B1%BD%D61%9D%5D%1Dw%18%9CK5%B4z%2F%B6Zs%1AA)%DAg%18%DC%2FsL%E8Ix%C8%F1%8B%24%EDG%DE%5B%EE%B1%EDS%AE%8D.%D4%0D%7FP%A2%A3!%2B%07%3B%B69%9C%DA7%40%BE%D6%5Bi%7DV%F3%87%5BA%DA%10h%85k%85%8C%00%0Ek%E8%B1%D2a%89%15R%F6%0C%13%FCp%5B%C1%0E%F39%FFC%82%0D%88%80%AF%C3%FD%1B_%F5Z%E6%C3%146%83%00%00%00%19fcTl%00%00%00%12%00%00%00%C8%00%00%00%C8%00%00%00%00%00%00%00%00%00%01%00%0A%02%13%80%80%DB%00%00%09~fdAt%00%00%00%13x%9C%ED%9C%7Fl%13%E7%19%C7%9F%24%17%FBl%BF%3E%93%852%AA%04%C8%986h%C5fh%23F%5BJ%9C%C4PF%19A%5B%B61%86%16WC%A8%D3h%13%A4l%AB%04%5D%5C%02%AD%C9%10%89(%7F%A0%0E%81%5BZ%A9R%D7%25%AD%26TU%A3%9C%13%08t%F3r%01%FA%C7%26*%E5%08%23%AB%26%A4%C4%24)-%24%BB%BD%8E%A1%F1%FD%F2%3Dw%E7%8B%D4-_%C9I%FC%DC%F3%DE%E7%EE%DE%F7%DE%E7%7D%9F%7B%2F%00J%05T%16%80%11%0D%9B-9%01%91%94%1A%C58%99%93%CDC%9C%D5%AC%FE%0F%F4%F7%B8%F3%0C%AE%ECG%CEC%BC%9B%0B%9D%87%B0q%AF%F3%10%17%3F%03%90b%DEe%A78%89%89%08%2F%96%B7U'%FE%AAr%84%97%E7%F9%D7%EC%40%5C%3B%ABE%C4%A1%94%AE%B6%03%E9%85%C2.%84%5B%7D%C4%0Ed%2B0Q%84%DB%FC%10~%977%FA%95%96r%60%3A%8C%CB%91%F0r4%C3%5D%BFLa%E1%26%A1%40%05V%CB%D3%8C%1F%86%5C%86%17D%B9%85%8C%C0%EB%88%82%C5G%F0%90W%C0%BDYa*%23%98%26%5C%94%C0C%0E%A6%8F%5C%A6%E1%96%D18%A2%60%40%A8%40%22Hr'x%2B%FCI1%CB%D6%3E%86%A8%11%0A%09lDB%F6%EE%BF%05%EF%CE%AD%92%F8%2C%5B%B0%16U40%80%84pk%12%3F%D82Wn%F3I%02%EEL%84%9D8%88%E7%F8%A3%DCQ%C5%3D%E1%92%8A%E2(%C8%E0A%1C%C4%5B%DB%A4%B2%15J%8C%B2%B9iC%DC%BF%C0A%B8R%B5m8%F8%C9%1CL%D9b%EFz%1C%04%5E%7D%5Ee%12v%1D%9CD%95umEB%12%C1G%94%A63m%0B%CAPeY%F5%A5%D6V7%E1%95%A6%F6%BE%D5%CF%A1%CA%BAPW5%ED%B8'%A9%82%F0uaTY%E6%0E%12%02%8D%D2(%2F%B7%9C%E0%13%25%EA%9A%D2P%D1%A7X%C8%8D7R%13r%8B%C0%93%FB%EBxMg*%DFt%DF%19x%18%0B%A1%01e%5C%FE%DDO%DB%DC7u%BD%D9%87%C4%2F%20%9Dx%88%FFkq%A5)q%5B%D7%DB%B5%23r%EFO%A1%0A%0F%19%DA%BA%40%89-%7DU%C7%B7%7D%F4pr%9E%94%E9%87%FCu%F7%A3%19%E7J%F8%7D%0A%D3%D5%09%BD~x%99%B7%AE%FFaq%9B%98%FE%5B%90D%2C%83%95%9E%81%A2%A8%DC%D6%D0%A6w%B9%26%A0%FB%81%DB%F0n%FATH%C9%09%2C%03Z%9E%A1%FE%F2h%EB%19m%D4%1B%87L%C0%BE%A1%C5%C0%A6%0F%EA%E2m%01%CB%F0N%1D%B3%7C%DC%C0%A4R%A2.%E4%25%B2%82w%A5%CF%E4%CCr4%84%99%3A%09!v%3C%CBF%82%BA%8D%EB%BBd%15W%D9%D1%B9%9B%1E%84%2F*%7C%0F%09%F1%06%D3%B1%83%0D%1F%CA6%5E%D4%EB%94%C8%CD%A0%24%95%3CQvj%EE%01%9E~%3B%A4%CE%CD%7C%A6QJ%2F33%A6%0D%F1%18%26p%CC%A4%A2%B4%7C%E9i%97T%F5o%D3)%917%08%FBt%5DnD%3E%20%9Ep%8B%F3%10%08(%EF%3F'*%5E%F8h%062w%3Fwd%A">
 </div>
--- a/layout/tables/crashtests/crashtests.list
+++ b/layout/tables/crashtests/crashtests.list
@@ -105,17 +105,17 @@ load 413180-1.html
 load 416845-1.xhtml
 load 416845-2.xhtml
 load 416845-3.html
 load 420242-1.xhtml
 asserts(8) load 420654-1.xhtml # bug 458238, bug 436123, bug 457397
 load 423514-1.xhtml
 load 430374.html
 load 444431-1.html
-load 444702-1.html
+asserts(1) load 444702-1.html # nscoord overflow.
 load 448988-1.xhtml
 load 450311-1.html
 load 451170.html
 load 451355-1.html
 load 456041.html
 load 457115.html
 load 460637-1.xhtml
 load 460637-2.xhtml
--- a/layout/xul/nsXULPopupManager.cpp
+++ b/layout/xul/nsXULPopupManager.cpp
@@ -918,31 +918,31 @@ nsXULPopupManager::ShowPopupCallback(nsI
     }
   }
 
   // use a weak frame as the popup will set an open attribute if it is a menu
   AutoWeakFrame weakFrame(aPopupFrame);
   aPopupFrame->ShowPopup(aIsContextMenu);
   NS_ENSURE_TRUE_VOID(weakFrame.IsAlive());
 
+  item->UpdateFollowAnchor();
+
   // popups normally hide when an outside click occurs. Panels may use
   // the noautohide attribute to disable this behaviour. It is expected
   // that the application will hide these popups manually. The tooltip
   // listener will handle closing the tooltip also.
   nsIContent* oldmenu = nullptr;
   if (mPopups) {
     oldmenu = mPopups->Content();
   }
   item->SetParent(mPopups);
   mPopups = item;
   SetCaptureState(oldmenu);
   NS_ENSURE_TRUE_VOID(weakFrame.IsAlive());
 
-  item->UpdateFollowAnchor();
-
   if (aSelectFirstItem) {
     nsMenuFrame* next = GetNextMenuItem(aPopupFrame, nullptr, true, false);
     aPopupFrame->SetCurrentMenuItem(next);
   }
 
   if (ismenu)
     UpdateMenuItems(aPopup);
 
--- a/mobile/android/chrome/content/aboutAddons.js
+++ b/mobile/android/chrome/content/aboutAddons.js
@@ -516,30 +516,43 @@ var Addons = {
 
     function setDisabled(addon, value) {
       if (value) {
         return addon.disable();
       }
       return addon.enable();
     }
 
+    function updateOtherThemeStateInUI(item) {
+      if (aValue) {
+        // Mark the previously enabled theme as disabled.
+        if (item.addon.isActive) {
+          item.setAttribute("isDisabled", true);
+          return true;
+        }
+      // The current theme is being disabled - enable the default theme.
+      } else if (item.addon.id == "default-theme@mozilla.org") {
+        item.removeAttribute("isDisabled");
+        return true;
+      }
+      return false;
+    }
+
     let opType;
     if (addon.type == "theme") {
-      if (aValue) {
-        // We can have only one theme enabled, so disable the current one if any
-        let list = document.getElementById("addons-list");
-        let item = list.firstElementChild;
-        while (item) {
-          if (item.addon && (item.addon.type == "theme") && (item.addon.isActive)) {
-            item.addon.disable();
-            item.setAttribute("isDisabled", true);
-            break;
-          }
-          item = item.nextSibling;
+      // Themes take care of themselves to make sure only one is active at the
+      // same time, but we need to fix up the state of other themes in the UI.
+      let list = document.getElementById("addons-list");
+      let item = list.firstElementChild;
+      while (item) {
+        if (item.addon && (item.addon.type == "theme") &&
+            updateOtherThemeStateInUI(item)) {
+          break;
         }
+        item = item.nextSibling;
       }
       setDisabled(addon, !aValue);
     } else if (addon.type == "locale") {
       setDisabled(addon, !aValue);
     } else {
       setDisabled(addon, !aValue);
       opType = this._getOpTypeForOperations(addon.pendingOperations);
 
--- a/mobile/android/chrome/geckoview/GeckoViewProgressChild.js
+++ b/mobile/android/chrome/geckoview/GeckoViewProgressChild.js
@@ -8,46 +8,31 @@ ChromeUtils.import("resource://gre/modul
 
 XPCOMUtils.defineLazyModuleGetters(this, {
   Services: "resource://gre/modules/Services.jsm",
 });
 
 class GeckoViewProgressChild extends GeckoViewChildModule {
   onInit() {
     debug `onInit`;
-  }
 
-  onEnable() {
-    debug `onEnable`;
+    ProgressTracker.onInit(this);
 
-    ProgressTracker.onEnable(this);
-
-    let flags = Ci.nsIWebProgress.NOTIFY_PROGRESS |
-                Ci.nsIWebProgress.NOTIFY_STATE_NETWORK |
-                Ci.nsIWebProgress.NOTIFY_LOCATION;
+    const flags = Ci.nsIWebProgress.NOTIFY_PROGRESS |
+                  Ci.nsIWebProgress.NOTIFY_STATE_NETWORK |
+                  Ci.nsIWebProgress.NOTIFY_LOCATION;
     this.progressFilter =
       Cc["@mozilla.org/appshell/component/browser-status-filter;1"]
       .createInstance(Ci.nsIWebProgress);
     this.progressFilter.addProgressListener(this, flags);
-    let webProgress = docShell.QueryInterface(Ci.nsIInterfaceRequestor)
-                      .getInterface(Ci.nsIWebProgress);
+    const webProgress = docShell.QueryInterface(Ci.nsIInterfaceRequestor)
+                        .getInterface(Ci.nsIWebProgress);
     webProgress.addProgressListener(this.progressFilter, flags);
   }
 
-  onDisable() {
-    debug `onDisable`;
-
-    if (this.progressFilter) {
-      this.progressFilter.removeProgressListener(this);
-      let webProgress = docShell.QueryInterface(Ci.nsIInterfaceRequestor)
-                        .getInterface(Ci.nsIWebProgress);
-      webProgress.removeProgressListener(this.progressFilter);
-    }
-  }
-
   onProgressChange(aWebProgress, aRequest, aCurSelf, aMaxSelf, aCurTotal, aMaxTotal) {
     debug `onProgressChange ${aCurSelf}/${aMaxSelf} ${aCurTotal}/${aMaxTotal}`;
 
     ProgressTracker.handleProgress(null, aCurTotal, aMaxTotal);
     ProgressTracker.updateProgress();
   }
 
   onStateChange(aWebProgress, aRequest, aStateFlags, aStatus) {
@@ -83,17 +68,17 @@ class GeckoViewProgressChild extends Gec
       ProgressTracker.stop();
     } else {
       ProgressTracker.changeLocation(aLocationURI.displaySpec);
     }
   }
 }
 
 const ProgressTracker = {
-  onEnable: function(aModule) {
+  onInit: function(aModule) {
     this._module = aModule;
     this.clear();
   },
 
   start: function(aUri) {
     debug `ProgressTracker start ${aUri}`;
 
     if (this._tracking) {
--- a/mobile/android/modules/LightweightThemeConsumer.jsm
+++ b/mobile/android/modules/LightweightThemeConsumer.jsm
@@ -4,49 +4,55 @@
 
 var EXPORTED_SYMBOLS = ["LightweightThemeConsumer"];
 
 ChromeUtils.import("resource://gre/modules/Services.jsm");
 ChromeUtils.import("resource://gre/modules/LightweightThemeManager.jsm");
 
 ChromeUtils.defineModuleGetter(this, "EventDispatcher",
                                "resource://gre/modules/Messaging.jsm");
+ChromeUtils.defineModuleGetter(this, "LightweightThemePersister",
+  "resource://gre/modules/addons/LightweightThemePersister.jsm");
 
 const DEFAULT_THEME_ID = "default-theme@mozilla.org";
 
 function LightweightThemeConsumer(aDocument) {
   this._doc = aDocument;
   Services.obs.addObserver(this, "lightweight-theme-styling-update");
   Services.obs.addObserver(this, "lightweight-theme-apply");
 
-  this._update(LightweightThemeManager.currentThemeForDisplay);
+  this._update(LightweightThemeManager.currentThemeWithFallback);
 }
 
 LightweightThemeConsumer.prototype = {
   observe: function(aSubject, aTopic, aData) {
     if (aTopic == "lightweight-theme-styling-update") {
       let parsedData = JSON.parse(aData);
       if (!parsedData) {
         parsedData = { theme: null };
       }
       this._update(parsedData.theme);
     } else if (aTopic == "lightweight-theme-apply") {
-      this._update(LightweightThemeManager.currentThemeForDisplay);
+      this._update(LightweightThemeManager.currentThemeWithFallback);
     }
   },
 
   destroy: function() {
     Services.obs.removeObserver(this, "lightweight-theme-styling-update");
     Services.obs.removeObserver(this, "lightweight-theme-apply");
     this._doc = null;
   },
 
   _update: function(aData) {
     let active = aData && aData.id !== DEFAULT_THEME_ID;
-    if (!aData) {
-      aData = {};
-    }
+    let msg = active ? { type: "LightweightTheme:Update" } :
+                       { type: "LightweightTheme:Disable" };
 
-    let msg = active ? { type: "LightweightTheme:Update", data: aData } :
-                       { type: "LightweightTheme:Disable" };
-    EventDispatcher.instance.sendRequest(msg);
+    if (active) {
+      LightweightThemePersister.persistImages(aData, () => {
+        msg.data = LightweightThemePersister.getPersistedData(aData);
+        EventDispatcher.instance.sendRequest(msg);
+      });
+    } else {
+      EventDispatcher.instance.sendRequest(msg);
+    }
   },
 };
--- a/mobile/android/tests/browser/chrome/head.js
+++ b/mobile/android/tests/browser/chrome/head.js
@@ -12,17 +12,17 @@ function promiseBrowserEvent(browserOrFr
       if (event.target != (browserOrFrame.contentDocument || browserOrFrame.document) ||
                           event.target.location.href == "about:blank") {
         info("Skipping spurious '" + eventType + "' event" + " for " + event.target.location.href);
         return;
       }
       info("Received event " + eventType + " from browser");
       browserOrFrame.removeEventListener(eventType, handle, true);
       if (options && options.resolveAtNextTick) {
-        setTimeout(() => resolve(event), 0);
+        Services.tm.dispatchToMainThread(() => resolve(event));
       } else {
         resolve(event);
       }
     }
 
     browserOrFrame.addEventListener(eventType, handle, true);
     info("Now waiting for " + eventType + " event from browser");
   });
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..79f13d79fdec8916b6d38a378d4c43e643826011
GIT binary patch
literal 610
zc$^FHW@Zs#U|`^2$le_8dnRAw&_*E7g^_`Q7f9zO=4Ga(7MJK{73b%L_S<qFG7xC{
z{-;aey40%0lUF}bu{u35?skHmmypYpf91uQOTQ`{-Yd_)lmBr{M8U43Gv4|01Xio_
z)x;YX$wZu)z2jTP#N~4YMPGUcyh+hrX28>Ykt@h7sf=UpRlci-&u0skIB#`1vUb~r
zhZA=MM*Y8btl`T-VO8r*e>iNHi>IwTYP!We!{ClydXn&a7eUJ%@~dafIwdXtZ`J~l
zT_Gi}@?II0sPP_*)84MT`Io%(P4NJ@-#k`?`|`5!FKP$!_Ao&FRs!^wXKrG8s$M}}
z`daV3TulKIw&Lw4iq=nS$>?4nt}#iwa;2V-o^EQs0L#TY*TjDCJbLzKg<syj=H31Z
z9rtV5`RBx2*oVvU)GlK-XgREZKx1KyLGP8U?L9ul{`3B}|CDGEz54L-&V3DEohH^E
zx;y*W?g!QRMr$|sRy|1*zI&`#-d538-+RO27}iys(VuR7+Aka6&B$cWfGa*!7$86a
zN~6RM7gU&$L4sk=Q;D;D*;g1hT*^9yOd}hQ86?QY-$4%`WaAg+=e%SB8kcm*>Kll@
Y65M})32Zzo8%PZk5bgugeT*O;083QZD*ylh
--- a/mobile/android/tests/browser/robocop/moz.build
+++ b/mobile/android/tests/browser/robocop/moz.build
@@ -20,16 +20,18 @@ TEST_HARNESS_FILES.testing.mochitest.tes
     '*.html',
     '*.jpg',
     '*.mp4',
     '*.ogg',
     '*.sjs',
     '*.swf',
     '*.webm',
     '*.xml',
+    '/mobile/android/tests/browser/chrome/head.js',
+    'browser_theme_image_file.xpi',
     'reader_mode_pages/**', # The ** preserves directory structure.
     'robocop*.js',
     'test*.js',
 ]
 
 DEFINES['MOZ_ANDROID_SHARED_ID'] = CONFIG['MOZ_ANDROID_SHARED_ID']
 OBJDIR_PP_FILES.mobile.android.tests.browser.robocop += [
     'AndroidManifest.xml.in',
--- a/mobile/android/tests/browser/robocop/robocop.ini
+++ b/mobile/android/tests/browser/robocop/robocop.ini
@@ -108,16 +108,17 @@ disabled=see bug 907274
 skip-if = true
 [src/org/mozilla/gecko/tests/testHistoryService.java]
 [src/org/mozilla/gecko/tests/testOSLocale.java]
 # disabled on 4.3: Bug 1124494
 skip-if = android_version == "18"
 [src/org/mozilla/gecko/tests/testReadingListCache.java]
 [src/org/mozilla/gecko/tests/testRestrictions.java]
 [src/org/mozilla/gecko/tests/testSnackbarAPI.java]
+[src/org/mozilla/gecko/tests/testThemeInstall.java]
 [src/org/mozilla/gecko/tests/testTrackingProtection.java]
 [src/org/mozilla/gecko/tests/testUITelemetry.java]
 [src/org/mozilla/gecko/tests/testBug1217581.java]
 [src/org/mozilla/gecko/tests/testVideoControls.java]
 # disabled on 4.3, bug 1098532
 skip-if = android_version == "18"
 [src/org/mozilla/gecko/tests/testAndroidCastDeviceProvider.java]
 
--- a/mobile/android/tests/browser/robocop/robocop_head.js
+++ b/mobile/android/tests/browser/robocop/robocop_head.js
@@ -148,17 +148,17 @@ function _Timer(func, delay) {
     // Timer undershot, retry with a little overshoot to try to avoid more
     // undershoots.
     var newDelay = this._delay - elapsed;
     do_timeout(newDelay, this._func);
   },
 };
 
 function _do_quit() {
-  _dump("TEST-INFO | (xpcshell/head.js) | exiting test\n");
+  _dump("TEST-INFO | (robocop_head.js) | exiting test\n");
 
   _quit = true;
 }
 
 function _dump_exception_stack(stack) {
   stack.split("\n").forEach(function(frame) {
     if (!frame)
       return;
@@ -208,17 +208,17 @@ function do_execute_soon(callback) {
         callback();
       } catch (e) {
         // do_check failures are already logged and set _quit to true and throw
         // NS_ERROR_ABORT. If both of those are true it is likely this exception
         // has already been logged so there is no need to log it again. It's
         // possible that this will mask an NS_ERROR_ABORT that happens after a
         // do_check failure though.
         if (!_quit || e != Components.results.NS_ERROR_ABORT) {
-          _dump("TEST-UNEXPECTED-FAIL | (xpcshell/head.js) | " + e);
+          _dump("TEST-UNEXPECTED-FAIL | (robocop_head.js) | " + e);
           if (e.stack) {
             dump(" - See following stack:\n");
             _dump_exception_stack(e.stack);
           } else {
             dump("\n");
           }
           _do_quit();
         }
@@ -259,18 +259,19 @@ function do_throw_todo(text, stack) {
 
   _do_quit();
   throw Components.results.NS_ERROR_ABORT;
 }
 
 function do_report_unexpected_exception(ex, text) {
   var caller_stack = Components.stack.caller;
   text = text ? text + " - " : "";
+  var caller_filename = caller_stack ? caller_stack.filename : "unknown file";
 
-  _dump("TEST-UNEXPECTED-FAIL | " + caller_stack.filename + " | " + text +
+  _dump("TEST-UNEXPECTED-FAIL | " + caller_filename + " | " + text +
         "Unexpected exception " + ex + ", see following stack:\n" + ex.stack +
         "\n");
 
   _do_quit();
   throw Components.results.NS_ERROR_ABORT;
 }
 
 function do_note_exception(ex, text) {
@@ -557,22 +558,22 @@ function format_pattern_match_failure(di
     a += format_pattern_match_failure(diagnosis.diagnosis, indent + "  ");
   }
   return indent + a;
 }
 
 function do_test_pending() {
   ++_tests_pending;
 
-  _dump("TEST-INFO | (xpcshell/head.js) | test " + _tests_pending +
+  _dump("TEST-INFO | (robocop_head.js) | test " + _tests_pending +
          " pending\n");
 }
 
 function do_test_finished() {
-  _dump("TEST-INFO | (xpcshell/head.js) | test " + _tests_pending +
+  _dump("TEST-INFO | (robocop_head.js) | test " + _tests_pending +
          " finished\n");
 
   if (--_tests_pending == 0) {
     _do_execute_cleanup();
     _do_quit();
   }
 }
 
--- a/mobile/android/tests/browser/robocop/robocop_testharness.js
+++ b/mobile/android/tests/browser/robocop/robocop_testharness.js
@@ -40,43 +40,53 @@ function _evalURI(uri, sandbox) {
  *
  * `uri` should be a String, relative (to window.document.baseURI) or
  * absolute.
  *
  * The Javascript test harness sends all output to Java via
  * Robocop:Java messages.
  */
 function testOneFile(uri) {
-  let HEAD_JS = "robocop_head.js";
+  let HEAD_JS = [
+    "head.js",
+    "robocop_head.js",
+  ];
 
   // System principal.  This is dangerous, but this is test code that
   // should only run on developer and build farm machines, and the
   // test harness needs access to a lot of the Components API,
   // including Components.stack.  Wrapping Components.stack in
   // SpecialPowers magic obfuscates stack traces wonderfully,
   // defeating much of the point of the test harness.
   let principal = SpecialPowers.Cc["@mozilla.org/systemprincipal;1"]
                                .createInstance(SpecialPowers.Ci.nsIPrincipal);
 
   let testScope =
     SpecialPowers.Cu.Sandbox(principal, { sandboxName: uri,
                                           wantGlobalProperties: ["ChromeUtils"] });
 
   // Populate test environment with test harness prerequisites.
+  testScope.SpecialPowers = SpecialPowers;
   testScope.Components = SpecialPowers.Components;
   testScope._TEST_FILE = uri;
 
-  // Output from head.js is fed, line by line, to this function.  We
-  // send any such output back to the Java Robocop harness.
+  // Output from robocop_head.js is fed, line by line, to this function.
+  // We send any such output back to the Java Robocop harness.
   testScope.dump = function(str) {
     let message = { type: "Robocop:Java",
                     innerType: "progress",
                     message: str,
                   };
     sendMessageToJava(message);
   };
 
   // Populate test environment with test harness.  The symbols defined
   // above must be present before executing the test harness.
-  _evalURI(HEAD_JS, testScope);
+  for (script of HEAD_JS) {
+    _evalURI(script, testScope);
+  }
+
+  // Required to make tests/browser/chrome/head.js not notice that it isn't
+  // running in a real Mochitest environment.
+  testScope.info = testScope.do_print;
 
   return _evalURI(uri, testScope);
 }
new file mode 100644
--- /dev/null
+++ b/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testThemeInstall.java
@@ -0,0 +1,79 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
+ * vim: ts=4 sw=4 expandtab:
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+package org.mozilla.gecko.tests;
+
+import org.mozilla.gecko.EventDispatcher;
+import org.mozilla.gecko.util.BundleEventListener;
+import org.mozilla.gecko.util.EventCallback;
+import org.mozilla.gecko.util.GeckoBundle;
+
+import java.io.File;
+import java.net.URI;
+
+import static org.mozilla.gecko.tests.helpers.AssertionHelper.fFail;
+
+public class testThemeInstall extends JavascriptTest implements BundleEventListener {
+    private EventCallback mFinishCallback;
+    private boolean mFinished;
+
+    public testThemeInstall() {
+        super("testThemeInstall.js");
+    }
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+
+        // Even inside a test environment, accessing mozAddonManager is only possible from this URL.
+        mBaseHostnameUrl = "https://example.com:443/tests";
+
+        EventDispatcher.getInstance().registerUiThreadListener(this, "LightweightTheme:Update");
+        EventDispatcher.getInstance().registerUiThreadListener(this, "Robocop:WaitOnUI");
+    }
+
+    @Override
+    public void handleMessage(String event, GeckoBundle message, EventCallback callback) {
+        if ("Robocop:WaitOnUI".equals(event)) {
+            mFinishCallback = callback;
+            checkTestFinished();
+            return;
+        }
+
+        mAsserter.is(event, "LightweightTheme:Update", "Received LightweightTheme:Update event");
+        try {
+            GeckoBundle themeData = message.getBundle("data");
+            String headerURL = themeData.getString("headerURL");
+            mAsserter.ok(headerURL.contains("/lightweighttheme-header"),
+                    "Theme update has the expected headerURL",null);
+            mAsserter.ok(headerURL.startsWith("file://"),
+                    "headerURL was transformed to file:// URL", null);
+            File themeFile = new File(new URI(headerURL).getPath());
+            mAsserter.ok(themeFile.exists(),
+                    "file pointed to by headerURL was successfully persisted", null);
+            mAsserter.ok(themeFile.length() > 0,
+                    "theme file is not empty", null);
+        } catch (Exception e) {
+            fFail("Event does not contain expected data: " + e.getMessage());
+        }
+
+        mFinished = true;
+        checkTestFinished();
+    }
+
+    private void checkTestFinished() {
+        if (mFinished && mFinishCallback != null) {
+            mFinishCallback.sendSuccess(null);
+        }
+    }
+
+    @Override
+    public void tearDown() throws Exception {
+        super.tearDown();
+
+        EventDispatcher.getInstance().unregisterUiThreadListener(this, "LightweightTheme:Update");
+        EventDispatcher.getInstance().unregisterUiThreadListener(this, "Robocop:WaitOnUI");
+    }
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/tests/browser/robocop/testThemeInstall.js
@@ -0,0 +1,67 @@
+// -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+ChromeUtils.import("resource://gre/modules/Services.jsm");
+ChromeUtils.import("resource://gre/modules/Messaging.jsm");
+ChromeUtils.import("resource://gre/modules/Task.jsm");
+
+// The chrome window and friends.
+let chromeWin = Services.wm.getMostRecentWindow("navigator:browser");
+let BrowserApp = chromeWin.BrowserApp;
+
+const BASE = "https://example.com:443/tests/robocop/";
+const XPI = BASE + "browser_theme_image_file.xpi";
+const PAGE = BASE + "robocop_blank_04.html";
+
+// Track the tabs where the tests are happening.
+let tabTest;
+
+function cleanupTabs() {
+  if (tabTest) {
+    BrowserApp.closeTab(tabTest);
+    tabTest = null;
+  }
+}
+
+add_task(async function testThemeInstall() {
+  await SpecialPowers.pushPrefEnv({
+    set: [["extensions.webapi.testing", true],
+          ["extensions.install.requireBuiltInCerts", false]],
+  });
+
+  tabTest = BrowserApp.addTab(PAGE);
+  let browser = tabTest.browser;
+  let content = browser.contentWindow;
+  await promiseBrowserEvent(browser, "load", { resolveAtNextTick: true });
+
+  let updates = [];
+  function observer(subject, topic, data) {
+    updates.push(data);
+  }
+  Services.obs.addObserver(observer, "lightweight-theme-styling-update");
+
+  let installPromise = promiseNotification("lightweight-theme-styling-update");
+  let install = await content.navigator.mozAddonManager.createInstall({url: XPI});
+  install.install();
+  await installPromise;
+  ok(true, "Theme install completed");
+
+  is(updates.length, 1, "Got a single theme update");
+  let parsed = JSON.parse(updates[0]);
+  ok(parsed.theme.headerURL.endsWith("/testImage.png"),
+     "Theme update has the expected headerURL");
+  ok(parsed.theme.headerURL.startsWith("moz-extension"),
+     "headerURL references resource inside extension file");
+
+  await EventDispatcher.instance.sendRequestForResult({
+    type: "Robocop:WaitOnUI",
+  });
+
+  Services.obs.removeObserver(observer, "lightweight-theme-styling-update");
+  cleanupTabs();
+});
+
+run_next_test();
--- a/parser/html/jArray.h
+++ b/parser/html/jArray.h
@@ -43,19 +43,27 @@ struct staticJArray
   {
     size_t idx;
     bool found = mozilla::BinarySearch(arr, 0, length, elem, &idx);
     return found ? idx : -1;
   }
 };
 
 template<class T, class L>
-struct jArray
+class autoJArray;
+
+template<class T, class L>
+class jArray
 {
+  friend class autoJArray<T, L>;
+
+private:
   T* arr;
+
+public:
   L length;
   static jArray<T, L> newJArray(L const len)
   {
     MOZ_ASSERT(len >= 0, "Negative length.");
     jArray<T, L> newArray = { new T[size_t(len)], len };
     return newArray;
   }
   static jArray<T, L> newFallibleJArray(L const len)
@@ -72,16 +80,33 @@ struct jArray
     MOZ_ASSERT(index < length, "Array index out of bounds.");
     return arr[index];
   }
   void operator=(staticJArray<T, L>& other)
   {
     arr = (T*)other.arr;
     length = other.length;
   }
+  MOZ_IMPLICIT jArray(decltype(nullptr))
+    : arr(nullptr)
+    , length(0)
+  {
+  }
+  jArray()
+    : arr(nullptr)
+    , length(0)
+  {
+  }
+
+private:
+  jArray(T* aArr, L aLength)
+    : arr(aArr)
+    , length(aLength)
+  {
+  }
 };
 
 template<class T, class L>
 class autoJArray
 {
 private:
   T* arr;
 
--- a/parser/html/javasrc/StackNode.java
+++ b/parser/html/javasrc/StackNode.java
@@ -92,17 +92,24 @@ final class StackNode<T> {
     public boolean isOptionalEndTag() {
         return (flags & ElementName.OPTIONAL_END_TAG) != 0;
     }
 
     // ]NOCPP]
 
     StackNode(int idxInTreeBuilder) {
         this.idxInTreeBuilder = idxInTreeBuilder;
+        this.flags = 0;
+        this.name = null;
+        this.popName = null;
+        // CPPONLY: this.ns = 0;
+        this.node = null;
+        this.attributes = null;
         this.refcount = 0;
+        // CPPONLY: this.htmlCreator = null;
     }
 
     // CPPONLY: public @HtmlCreator Object getHtmlCreator() {
     // CPPONLY:     return htmlCreator;
     // CPPONLY: }
 
     /**
      * Setter for copying. This doesn't take another <code>StackNode</code>
--- a/parser/html/javasrc/Tokenizer.java
+++ b/parser/html/javasrc/Tokenizer.java
@@ -522,31 +522,56 @@ public class Tokenizer implements Locato
 
     // [NOCPP[
 
     protected LocatorImpl ampersandLocation;
 
     public Tokenizer(TokenHandler tokenHandler, boolean newAttributesEachTime) {
         this.tokenHandler = tokenHandler;
         this.encodingDeclarationHandler = null;
+        this.lastCR = false;
+        this.stateSave = 0;
+        this.returnStateSave = 0;
+        this.index = 0;
+        this.forceQuirks = false;
+        this.additional = '\u0000';
+        this.entCol = 0;
+        this.firstCharKey = 0;
+        this.lo = 0;
+        this.hi = 0;
+        this.candidate = 0;
+        this.charRefBufMark = 0;
+        this.value = 0;
+        this.seenDigits = false;
+        this.cstart = 0;
+        this.strBufLen = 0;
         this.newAttributesEachTime = newAttributesEachTime;
         // &CounterClockwiseContourIntegral; is the longest valid char ref and
         // the semicolon never gets appended to the buffer.
         this.charRefBuf = new char[32];
+        this.charRefBufLen = 0;
         this.bmpChar = new char[1];
         this.astralChar = new char[2];
+        this.endTagExpectation = null;
+        this.endTagExpectationAsArray = null;
+        this.endTag = false;
         this.containsHyphen = false;
         this.tagName = null;
         this.nonInternedTagName = new ElementName();
         this.attributeName = null;
         // CPPONLY: this.nonInternedAttributeName = new AttributeName();
         this.doctypeName = null;
         this.publicIdentifier = null;
         this.systemIdentifier = null;
         this.attributes = null;
+        this.shouldSuspend = false;
+        this.confident = false;
+        this.line = 0;
+        // CPPONLY: this.attributeLine = 0;
+        this.interner = null;
     }
 
     // ]NOCPP]
 
     /**
      * The constructor.
      *
      * @param tokenHandler
@@ -555,34 +580,59 @@ public class Tokenizer implements Locato
     public Tokenizer(TokenHandler tokenHandler
     // CPPONLY: , boolean viewingXmlSource
     ) {
         this.tokenHandler = tokenHandler;
         this.encodingDeclarationHandler = null;
         // [NOCPP[
         this.newAttributesEachTime = false;
         // ]NOCPP]
+        this.lastCR = false;
+        this.stateSave = 0;
+        this.returnStateSave = 0;
+        this.index = 0;
+        this.forceQuirks = false;
+        this.additional = '\u0000';
+        this.entCol = 0;
+        this.firstCharKey = 0;
+        this.lo = 0;
+        this.hi = 0;
+        this.candidate = 0;
+        this.charRefBufMark = 0;
+        this.value = 0;
+        this.seenDigits = false;
+        this.cstart = 0;
+        this.strBufLen = 0;
         // &CounterClockwiseContourIntegral; is the longest valid char ref and
         // the semicolon never gets appended to the buffer.
         this.charRefBuf = new char[32];
+        this.charRefBufLen = 0;
         this.bmpChar = new char[1];
         this.astralChar = new char[2];
+        this.endTagExpectation = null;
+        this.endTagExpectationAsArray = null;
+        this.endTag = false;
         this.containsHyphen = false;
         this.tagName = null;
         this.nonInternedTagName = new ElementName();
         this.attributeName = null;
         // CPPONLY: this.nonInternedAttributeName = new AttributeName();
         this.doctypeName = null;
         this.publicIdentifier = null;
         this.systemIdentifier = null;
         // [NOCPP[
         this.attributes = null;
         // ]NOCPP]
         // CPPONLY: this.attributes = tokenHandler.HasBuilder() ? new HtmlAttributes(mappingLangToXmlLang) : null;
         // CPPONLY: this.newAttributesEachTime = !tokenHandler.HasBuilder();
+        this.shouldSuspend = false;
+        this.confident = false;
+        this.line = 0;
+        // CPPONLY: this.attributeLine = 0;
+        this.interner = null;
         // CPPONLY: this.viewingXmlSource = viewingXmlSource;
     }
 
     public void setInterner(Interner interner) {
         this.interner = interner;
     }
 
     public void initLocation(String newPublicId, String newSystemId) {
--- a/parser/html/nsHtml5ArrayCopy.h
+++ b/parser/html/nsHtml5ArrayCopy.h
@@ -18,20 +18,17 @@
  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  * DEALINGS IN THE SOFTWARE.
  */
 
 #ifndef nsHtml5ArrayCopy_h
 #define nsHtml5ArrayCopy_h
 
-#include "nsStringFwd.h"
-
 class nsHtml5StackNode;
-class nsHtml5AttributeName;
 
 // Unfortunately, these don't work as template functions because the arguments
 // would need coercion from a template class, which complicates things.
 class nsHtml5ArrayCopy
 {
 public:
   static inline void arraycopy(char16_t* source,
                                int32_t sourceOffset,
@@ -51,30 +48,16 @@ public:
     memcpy(target, source, size_t(length) * sizeof(char16_t));
   }
 
   static inline void arraycopy(int32_t* source, int32_t* target, int32_t length)
   {
     memcpy(target, source, size_t(length) * sizeof(int32_t));
   }
 
-  static inline void arraycopy(nsHtml5String* source,
-                               nsHtml5String* target,
-                               int32_t length)
-  {
-    memcpy(target, source, size_t(length) * sizeof(nsHtml5String));
-  }
-
-  static inline void arraycopy(nsHtml5AttributeName** source,
-                               nsHtml5AttributeName** target,
-                               int32_t length)
-  {
-    memcpy(target, source, size_t(length) * sizeof(nsHtml5AttributeName*));
-  }
-
   static inline void arraycopy(nsHtml5StackNode** source,
                                nsHtml5StackNode** target,
                                int32_t length)
   {
     memcpy(target, source, size_t(length) * sizeof(nsHtml5StackNode*));
   }
 
   static inline void arraycopy(nsHtml5StackNode** arr,
--- a/parser/html/nsHtml5AtomTable.cpp
+++ b/parser/html/nsHtml5AtomTable.cpp
@@ -1,63 +1,36 @@
 /* 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 "nsHtml5AtomTable.h"
 #include "nsThreadUtils.h"
 
-nsHtml5AtomEntry::nsHtml5AtomEntry(KeyTypePointer aStr)
-  : nsStringHashKey(aStr)
-  , mAtom(nsDynamicAtom::Create(*aStr))
-{
-}
-
-nsHtml5AtomEntry::nsHtml5AtomEntry(nsHtml5AtomEntry&& aOther)
-  : nsStringHashKey(std::move(aOther))
-  , mAtom(nullptr)
-{
-  MOZ_ASSERT_UNREACHABLE("nsHtml5AtomTable is broken; tried to copy an entry");
-}
-
-nsHtml5AtomEntry::~nsHtml5AtomEntry()
-{
-  nsDynamicAtom::Destroy(mAtom);
-}
-
 nsHtml5AtomTable::nsHtml5AtomTable()
   : mRecentlyUsedParserAtoms{}
 {
 #ifdef DEBUG
   mPermittedLookupEventTarget = mozilla::GetCurrentThreadSerialEventTarget();
 #endif
 }
 
 nsHtml5AtomTable::~nsHtml5AtomTable() {}
 
 nsAtom*
 nsHtml5AtomTable::GetAtom(const nsAString& aKey)
 {
 #ifdef DEBUG
-  {
-    MOZ_ASSERT(mPermittedLookupEventTarget->IsOnCurrentThread());
-  }
+  MOZ_ASSERT(mPermittedLookupEventTarget->IsOnCurrentThread());
 #endif
 
   uint32_t index = mozilla::HashString(aKey) % RECENTLY_USED_PARSER_ATOMS_SIZE;
-  nsAtom* cachedAtom = mRecentlyUsedParserAtoms[index];
-  if (cachedAtom && cachedAtom->Equals(aKey)) {
-    return cachedAtom;
+  if (nsAtom* atom = mRecentlyUsedParserAtoms[index]) {
+    if (atom->Equals(aKey)) {
+      return atom;
+    }
   }
 
-  nsStaticAtom* atom = NS_GetStaticAtom(aKey);
-  if (atom) {
-    mRecentlyUsedParserAtoms[index] = atom;
-    return atom;
-  }
-  nsHtml5AtomEntry* entry = mTable.PutEntry(aKey);
-  if (!entry) {
-    return nullptr;
-  }
-
-  mRecentlyUsedParserAtoms[index] = entry->GetAtom();
-  return entry->GetAtom();
+  RefPtr<nsAtom> atom = NS_Atomize(aKey);
+  nsAtom* ret = atom.get();
+  mRecentlyUsedParserAtoms[index] = atom.forget();
+  return ret;
 }
--- a/parser/html/nsHtml5AtomTable.h
+++ b/parser/html/nsHtml5AtomTable.h
@@ -7,28 +7,16 @@
 
 #include "nsHashKeys.h"
 #include "nsTHashtable.h"
 #include "nsAtom.h"
 #include "nsISerialEventTarget.h"
 
 #define RECENTLY_USED_PARSER_ATOMS_SIZE 31
 
-class nsHtml5AtomEntry : public nsStringHashKey
-{
-public:
-  explicit nsHtml5AtomEntry(KeyTypePointer aStr);
-  nsHtml5AtomEntry(nsHtml5AtomEntry&& aOther);
-  ~nsHtml5AtomEntry();
-  inline nsAtom* GetAtom() { return mAtom; }
-
-private:
-  nsDynamicAtom* mAtom;
-};
-
 /**
  * nsHtml5AtomTable provides non-locking lookup and creation of atoms for
  * nsHtml5Parser or nsHtml5StreamParser.
  *
  * The hashtable holds dynamically allocated atoms that are private to an
  * instance of nsHtml5Parser or nsHtml5StreamParser. (Static atoms are used on
  * interned nsHtml5ElementNames and interned nsHtml5AttributeNames. Also, when
  * the doctype name is 'html', that identifier needs to be represented as a
@@ -69,40 +57,38 @@ private:
  * nsHtml5Parser or nsHtml5StreamParser is destructed.
  */
 class nsHtml5AtomTable
 {
 public:
   nsHtml5AtomTable();
   ~nsHtml5AtomTable();
 
-  /**
-   * Obtains the atom for the given string in the scope of this atom table.
-   */
+  // NOTE: We rely on mRecentlyUsedParserAtoms keeping alive the returned atom,
+  // but the caller is responsible to take a reference before calling GetAtom
+  // again.
   nsAtom* GetAtom(const nsAString& aKey);
 
   /**
    * Empties the table.
    */
   void Clear()
   {
     for (uint32_t i = 0; i < RECENTLY_USED_PARSER_ATOMS_SIZE; ++i) {
       mRecentlyUsedParserAtoms[i] = nullptr;
     }
-    mTable.Clear();
   }
 
 #ifdef DEBUG
   void SetPermittedLookupEventTarget(nsISerialEventTarget* aEventTarget)
   {
     mPermittedLookupEventTarget = aEventTarget;
   }
 #endif
 
 private:
-  nsTHashtable<nsHtml5AtomEntry> mTable;
-  nsAtom* mRecentlyUsedParserAtoms[RECENTLY_USED_PARSER_ATOMS_SIZE];
+  RefPtr<nsAtom> mRecentlyUsedParserAtoms[RECENTLY_USED_PARSER_ATOMS_SIZE];
 #ifdef DEBUG
   nsCOMPtr<nsISerialEventTarget> mPermittedLookupEventTarget;
 #endif
 };
 
 #endif // nsHtml5AtomTable_h
--- a/parser/html/nsHtml5AttributeEntry.h
+++ b/parser/html/nsHtml5AttributeEntry.h
@@ -66,26 +66,26 @@ public:
     if (aInterner) {
       // Now if we have an interner, we'll need to rewrite non-static atoms.
       // Only the local names may be non-static, in which case all three
       // are the same.
       nsAtom* local = GetLocal(0);
       if (!local->IsStatic()) {
         nsAutoString str;
         local->ToString(str);
-        local = aInterner->GetAtom(str);
+        nsAtom* local = aInterner->GetAtom(str);
         clone.mLocals[0] = local;
         clone.mLocals[1] = local;
         clone.mLocals[2] = local;
       }
     }
     return clone;
   }
 
 private:
-  nsAtom* mLocals[3];
-  nsAtom* mPrefixes[3];
+  RefPtr<nsAtom> mLocals[3];
+  RefPtr<nsAtom> mPrefixes[3];
   int32_t mUris[3];
   int32_t mLine;
   nsHtml5String mValue;
 };
 
 #endif // nsHtml5AttributeEntry_h
--- a/parser/html/nsHtml5AttributeName.cpp
+++ b/parser/html/nsHtml5AttributeName.cpp
@@ -53,63 +53,63 @@
 #include "nsHtml5Portability.h"
 
 #include "nsHtml5AttributeName.h"
 
 int32_t* nsHtml5AttributeName::ALL_NO_NS = 0;
 int32_t* nsHtml5AttributeName::XMLNS_NS = 0;
 int32_t* nsHtml5AttributeName::XML_NS = 0;
 int32_t* nsHtml5AttributeName::XLINK_NS = 0;
-nsAtom** nsHtml5AttributeName::ALL_NO_PREFIX = 0;
-nsAtom** nsHtml5AttributeName::XMLNS_PREFIX = 0;
-nsAtom** nsHtml5AttributeName::XLINK_PREFIX = 0;
-nsAtom** nsHtml5AttributeName::XML_PREFIX = 0;
-nsAtom**
+nsStaticAtom** nsHtml5AttributeName::ALL_NO_PREFIX = 0;
+nsStaticAtom** nsHtml5AttributeName::XMLNS_PREFIX = 0;
+nsStaticAtom** nsHtml5AttributeName::XLINK_PREFIX = 0;
+nsStaticAtom** nsHtml5AttributeName::XML_PREFIX = 0;
+RefPtr<nsAtom>*
 nsHtml5AttributeName::SVG_DIFFERENT(nsAtom* name, nsAtom* camel)
 {
-  nsAtom** arr = new nsAtom*[4];
+  RefPtr<nsAtom>* arr = new RefPtr<nsAtom>[4];
   arr[0] = name;
   arr[1] = name;
   arr[2] = camel;
   return arr;
 }
 
-nsAtom**
+RefPtr<nsAtom>*
 nsHtml5AttributeName::MATH_DIFFERENT(nsAtom* name, nsAtom* camel)
 {
-  nsAtom** arr = new nsAtom*[4];
+  RefPtr<nsAtom>* arr = new RefPtr<nsAtom>[4];
   arr[0] = name;
   arr[1] = camel;
   arr[2] = name;
   return arr;
 }
 
-nsAtom**
+RefPtr<nsAtom>*
 nsHtml5AttributeName::COLONIFIED_LOCAL(nsAtom* name, nsAtom* suffix)
 {
-  nsAtom** arr = new nsAtom*[4];
+  RefPtr<nsAtom>* arr = new RefPtr<nsAtom>[4];
   arr[0] = name;
   arr[1] = suffix;
   arr[2] = suffix;
   return arr;
 }
 
-nsAtom**
+RefPtr<nsAtom>*
 nsHtml5AttributeName::SAME_LOCAL(nsAtom* name)
 {
-  nsAtom** arr = new nsAtom*[4];
+  RefPtr<nsAtom>* arr = new RefPtr<nsAtom>[4];
   arr[0] = name;
   arr[1] = name;
   arr[2] = name;
   return arr;
 }
 
 nsHtml5AttributeName::nsHtml5AttributeName(int32_t* uri,
-                                           nsAtom** local,
-                                           nsAtom** prefix)
+                                           RefPtr<nsAtom>* local,
+                                           nsStaticAtom** prefix)
   : uri(uri)
   , local(local)
   , prefix(prefix)
   , custom(false)
 {
   MOZ_COUNT_CTOR(nsHtml5AttributeName);
 }
 
@@ -143,17 +143,17 @@ nsHtml5AttributeName::getUri(int32_t mod
 }
 
 nsAtom*
 nsHtml5AttributeName::getLocal(int32_t mode)
 {
   return local[mode];
 }
 
-nsAtom*
+nsStaticAtom*
 nsHtml5AttributeName::getPrefix(int32_t mode)
 {
   return prefix[mode];
 }
 
 bool
 nsHtml5AttributeName::equalsAnother(nsHtml5AttributeName* another)
 {
@@ -762,29 +762,29 @@ nsHtml5AttributeName::initializeStatics(
   XML_NS = new int32_t[3];
   XML_NS[0] = kNameSpaceID_None;
   XML_NS[1] = kNameSpaceID_XML;
   XML_NS[2] = kNameSpaceID_XML;
   XLINK_NS = new int32_t[3];
   XLINK_NS[0] = kNameSpaceID_None;
   XLINK_NS[1] = kNameSpaceID_XLink;
   XLINK_NS[2] = kNameSpaceID_XLink;
-  ALL_NO_PREFIX = new nsAtom*[3];
+  ALL_NO_PREFIX = new nsStaticAtom*[3];
   ALL_NO_PREFIX[0] = nullptr;
   ALL_NO_PREFIX[1] = nullptr;
   ALL_NO_PREFIX[2] = nullptr;
-  XMLNS_PREFIX = new nsAtom*[3];
+  XMLNS_PREFIX = new nsStaticAtom*[3];
   XMLNS_PREFIX[0] = nullptr;
   XMLNS_PREFIX[1] = nsGkAtoms::xmlns;
   XMLNS_PREFIX[2] = nsGkAtoms::xmlns;
-  XLINK_PREFIX = new nsAtom*[3];
+  XLINK_PREFIX = new nsStaticAtom*[3];
   XLINK_PREFIX[0] = nullptr;
   XLINK_PREFIX[1] = nsGkAtoms::xlink;
   XLINK_PREFIX[2] = nsGkAtoms::xlink;
-  XML_PREFIX = new nsAtom*[3];
+  XML_PREFIX = new nsStaticAtom*[3];
   XML_PREFIX[0] = nullptr;
   XML_PREFIX[1] = nsGkAtoms::xml;
   XML_PREFIX[2] = nsGkAtoms::xml;
   ATTR_ALT = new nsHtml5AttributeName(
     ALL_NO_NS, SAME_LOCAL(nsGkAtoms::alt), ALL_NO_PREFIX);
   ATTR_DIR = new nsHtml5AttributeName(
     ALL_NO_NS, SAME_LOCAL(nsGkAtoms::dir), ALL_NO_PREFIX);
   ATTR_DUR = new nsHtml5AttributeName(
--- a/parser/html/nsHtml5AttributeName.h
+++ b/parser/html/nsHtml5AttributeName.h
@@ -58,26 +58,28 @@ class nsHtml5AttributeName
 {
 public:
   static int32_t* ALL_NO_NS;
 private:
   static int32_t* XMLNS_NS;
   static int32_t* XML_NS;
   static int32_t* XLINK_NS;
 public:
-  static nsAtom** ALL_NO_PREFIX;
+  static nsStaticAtom** ALL_NO_PREFIX;
+
 private:
-  static nsAtom** XMLNS_PREFIX;
-  static nsAtom** XLINK_PREFIX;
-  static nsAtom** XML_PREFIX;
-  static nsAtom** SVG_DIFFERENT(nsAtom* name, nsAtom* camel);
-  static nsAtom** MATH_DIFFERENT(nsAtom* name, nsAtom* camel);
-  static nsAtom** COLONIFIED_LOCAL(nsAtom* name, nsAtom* suffix);
+  static nsStaticAtom** XMLNS_PREFIX;
+  static nsStaticAtom** XLINK_PREFIX;
+  static nsStaticAtom** XML_PREFIX;
+  static RefPtr<nsAtom>* SVG_DIFFERENT(nsAtom* name, nsAtom* camel);
+  static RefPtr<nsAtom>* MATH_DIFFERENT(nsAtom* name, nsAtom* camel);
+  static RefPtr<nsAtom>* COLONIFIED_LOCAL(nsAtom* name, nsAtom* suffix);
+
 public:
-  static nsAtom** SAME_LOCAL(nsAtom* name);
+  static RefPtr<nsAtom>* SAME_LOCAL(nsAtom* name);
   inline static int32_t levelOrderBinarySearch(jArray<int32_t, int32_t> data,
                                                int32_t key)
   {
     int32_t n = data.length;
     int32_t i = 0;
     while (i < n) {
       int32_t val = data[i];
       if (val < key) {
@@ -149,37 +151,40 @@ public:
   static const int32_t HTML = 0;
 
   static const int32_t MATHML = 1;
 
   static const int32_t SVG = 2;
 
 private:
   int32_t* uri;
-  nsAtom** local;
-  nsAtom** prefix;
+  RefPtr<nsAtom>* local;
+  nsStaticAtom** prefix;
   bool custom;
-  nsHtml5AttributeName(int32_t* uri, nsAtom** local, nsAtom** prefix);
+  nsHtml5AttributeName(int32_t* uri,
+                       RefPtr<nsAtom>* local,
+                       nsStaticAtom** prefix);
+
 public:
   nsHtml5AttributeName();
   inline bool isInterned() { return !custom; }
 
   inline void setNameForNonInterned(nsAtom* name)
   {
     MOZ_ASSERT(custom);
     local[0] = name;
     local[1] = name;
     local[2] = name;
   }
 
   static nsHtml5AttributeName* createAttributeName(nsAtom* name);
   ~nsHtml5AttributeName();
   int32_t getUri(int32_t mode);
   nsAtom* getLocal(int32_t mode);
-  nsAtom* getPrefix(int32_t mode);
+  nsStaticAtom* getPrefix(int32_t mode);
   bool equalsAnother(nsHtml5AttributeName* another);
   static nsHtml5AttributeName* ATTR_ALT;
   static nsHtml5AttributeName* ATTR_DIR;
   static nsHtml5AttributeName* ATTR_DUR;
   static nsHtml5AttributeName* ATTR_END;
   static nsHtml5AttributeName* ATTR_FOR;
   static nsHtml5AttributeName* ATTR_IN2;
   static nsHtml5AttributeName* ATTR_LOW;
--- a/parser/html/nsHtml5ElementName.h
+++ b/parser/html/nsHtml5ElementName.h
@@ -71,18 +71,18 @@ public:
 
   static const int32_t SCOPING_AS_MATHML = (1 << 25);
 
   static const int32_t HTML_INTEGRATION_POINT = (1 << 24);
 
   static const int32_t OPTIONAL_END_TAG = (1 << 23);