merge rev b6dbcbdec116 to SEAMONKEY_2_49_ESR_RELBRANCH. a=frg SEAMONKEY_2_49_ESR_RELBRANCH
authorFrank-Rainer Grahl <frgrahl@gmx.net>
Mon, 14 May 2018 09:01:12 +0200
branchSEAMONKEY_2_49_ESR_RELBRANCH
changeset 28221 186f453358f0eec029a854d4a62698b4c73ba0dc
parent 28189 5c558e38444a13240b480473cf0b58d439b932f1 (current diff)
parent 28219 b6dbcbdec1163a132c30ece7f118ac29e7b73d08 (diff)
child 28257 cbdc217e6466b34e9695d901901291ef55be856b
push id2072
push userfrgrahl@gmx.net
push dateMon, 14 May 2018 07:02:35 +0000
treeherdercomm-esr52@186f453358f0 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersfrg
merge rev b6dbcbdec116 to SEAMONKEY_2_49_ESR_RELBRANCH. a=frg
suite/common/passwordManager.xul
suite/locales/en-US/chrome/common/passwordManager.dtd
--- a/mail/app/blocklist.xml
+++ b/mail/app/blocklist.xml
@@ -1,10 +1,10 @@
 <?xml version='1.0' encoding='UTF-8'?>
-<blocklist lastupdate="1520527480321" xmlns="http://www.mozilla.org/2006/addons-blocklist">
+<blocklist lastupdate="1525377135149" xmlns="http://www.mozilla.org/2006/addons-blocklist">
   <emItems>
     <emItem blockID="i334" id="{0F827075-B026-42F3-885D-98981EE7B1AE}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i1211" id="flvto@hotger.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
@@ -2071,16 +2071,48 @@
     <emItem blockID="f58729ec-f93c-41d9-870d-dd9c9fd811b6" id="/^(addon@fasterweb\.com|\{5f398d3f-25db-47f5-b422-aa2364ff6c0b\}|addon@fasterp\.com|addon@calculator)$/">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="3d55fab0-ec1a-4bca-84c9-3b74f5d01509" id="/^.*extension.*@asdf\.pl$/">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
+    <emItem blockID="547037f2-97ae-435a-863c-efd7532668cd" id="{44685ba6-68b3-4895-879e-4efa29dfb578}">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="3"/>
+    </emItem>
+    <emItem blockID="baf7f735-d6b6-410a-8cc8-25c60f7c57e2" id="adbeaver@adbeaver.org">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="1"/>
+    </emItem>
+    <emItem blockID="36f97298-8bef-4372-a548-eb829413bee9" id="/(__TEMPLATE__APPLICATION__@ruta-mapa\.com)|(application-3@findizer\.fr)|(application2@allo-pages\.fr)|(application2@bilan-imc\.fr)|(application2@lettres\.net)|(application2@search-maps-finder\.com)|(application-imcpeso@imc-peso\.com)|(application-meuimc@meu-imc\.com)|(application-us2@factorlove)|(application-us@misterdirections)|(application-us@yummmi\.es)|(application@amiouze\.fr)|(application@astrolignes\.com)|(application@blotyn\.com)|(application@bmi-result\.com)|(application@bmi-tw\.com)|(application@calcolo-bmi\.com)|(application@cartes-itineraires\.com)|(application@convertisseur\.pro)|(application@de-findizer\.fr)|(application@de-super-rezepte\.com)|(application@dermabeauty\.fr)|(application@dev\.squel\.v2)|(application@eu-my-drivingdirections\.com)|(application@fr-allo-pages\.fr)|(application@fr-catizz\.com)|(application@fr-mr-traduction\.com)|(application@good-recettes\.com)|(application@horaires\.voyage)|(application@imc-calcular\.com)|(application@imc-peso\.com)|(application@it-mio-percorso\.com)|(application@iti-maps\.fr)|(application@itineraire\.info)|(application@lbc-search\.com)|(application@les-pages\.com)|(application@lovincalculator\.com)|(application@lovintest\.com)|(application@masowe\.com)|(application@matchs\.direct)|(application@mein-bmi\.com)|(application@mes-resultats\.com)|(application@mestaf\.com)|(application@meu-imc\.com)|(application@mon-calcul-imc\.fr)|(application@mon-juste-poids\.com)|(application@mon-trajet\.com)|(application@my-drivingdirections\.com)|(application@people-show\.com)|(application@plans-reduc\.fr)|(application@point-meteo\.fr)|(application@poulixo\.com)|(application@quipage\.fr)|(application@quizdeamor\.com)|(application@quizdoamor\.com)|(application@quotient-retraite\.fr)|(application@recettes\.net)|(application@routenplaner-karten\.com)|(application@ruta-mapa\.com)|(application@satellite\.dev\.squel\.v2)|(application@search-bilan-imc\.fr)|(application@search-maps-finder\.com)|(application@slimness\.fr)|(application@start-bmi\.com)|(application@tests-moi\.com)|(application@tousmesjeux\.fr)|(application@toutlannuaire\.fr)|(application@tuto-diy\.com)|(application@ubersetzung-app\.com)|(application@uk-cookyummy\.com)|(application@uk-howlogin\.me)|(application@uk-myloap\.com)|(application@voyagevoyage\.co)|(application@wikimot\.fr)|(application@www\.plans-reduc\.fr)|(application@yummmi\.es)|(application@yummmies\.be)|(application@yummmies\.ch)|(application@yummmies\.fr)|(application@yummmies\.lu)|(application@zikplay\.fr)|(applicationY@search-maps-finder\.com)|(cmesapps@findizer\.fr)|(findizer-shopping@jetpack)|(\{8aaebb36-1488-4022-b7ec-29b790d12c17\})/">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="3"/>
+    </emItem>
+    <emItem blockID="1e5f5cb2-346c-422a-9aaa-29d8760949d2" id="{872f20ea-196e-4d11-8835-1cc4c877b1b8}">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="3"/>
+    </emItem>
+    <emItem blockID="feb2d0d7-1b76-4dba-bf84-42873a92af5f" id="/^({6ecb9f49-90f0-43a1-8f8a-e809ea4f732b})|(@googledashboard)|(@smashdashboard)|(@smash_tv)|(@smash_mov)|(@smashmovs)|(@smashtvs)|(@FirefoxUpdate)|({92b9e511-ac81-4d47-9b8f-f92dc872447e})|({3c841114-da8c-44ea-8303-78264edfe60b})|({116a0754-20eb-4fe5-bd35-575867a0b89e})|({6e6ff0fd-4ae4-49ae-ac0c-e2527e12359b})|({f992ac88-79d3-4960-870e-92c342ed3491})|({6ecb9f49-90f0-43a1-8f8a-e809ea4f732b})|({a512297e-4d3a-468c-bd1a-f77bd093f925})|({08c28c16-9fb6-4b32-9868-db37c1668f94})|({b4ab1a1d-e137-4c59-94d5-4f509358a81d})|({feedf4f8-08c1-451f-a717-f08233a64ec9})$/">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="3"/>
+    </emItem>
+    <emItem blockID="96b137e6-8cb5-44d6-9a34-4a4a76fb5e38" id="/^({b99ae7b1-aabb-4674-ba8f-14ed32d04e76})|({dfa77d38-f67b-4c41-80d5-96470d804d09})$/">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="3"/>
+    </emItem>
+    <emItem blockID="3ab9f100-e253-4080-b3e5-652f842ddb7a" id="/((@extcorp\.[a-z]+)|(@brcorporation\.com)|(@brmodcorp\.com)|(@teset\.com)|(@modext\.tech)|(@ext?mod\.net)|(@browcorporation\.org)|(@omegacorporation\.org)|(@browmodule\.com)|(@corpext\.net)|({6b50ddac-f5e0-4d9e-945b-e4165bfea5d6})|({fab6484f-b8a7-4ba9-a041-0f948518b80c})|({b797035a-7f29-4ff5-bd19-77f1b5e464b1})|({0f612416-5c5a-4ec8-b482-eb546af9cac4}))$/">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="3"/>
+    </emItem>
+    <emItem blockID="3a123214-b4b6-410c-a061-bbaf0d168d31" id="/^(({41c14ab8-9958-44bf-b74e-af54c1f169a6})|({78054cb2-e3e8-4070-a8ad-3fd69c8e4707})|({0089b179-8f3d-44d9-bb18-582843b0757a})|({f44ddcb4-4cc0-4866-92fa-eefda60c6720})|({1893d673-7953-4870-8069-baac49ce3335})|({fb28cac0-c2aa-4e0c-a614-cf3641196237})|({d7dee150-da14-45ba-afca-02c7a79ad805})|(RandomNameTest@RandomNameTest\.com )|(corpsearchengine@mail\.ru)|(support@work\.org))$/">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="3"/>
+    </emItem>
   </emItems>
   <pluginItems>
     <pluginItem blockID="p1054">
       <match exp="np32dsw_[0-9]+\.dll" name="filename"/>
       <infoURL>https://get.adobe.com/shockwave/</infoURL>
       <versionRange maxVersion="12.2.0.162" minVersion="0" severity="0" vulnerabilitystatus="1"/>
     </pluginItem>
     <pluginItem blockID="p1055">
@@ -4343,10 +4375,259 @@
       <serialNumber>WDFms0iypljMkohTzBvf4GmTOu0=</serialNumber>
     </certItem>
     <certItem issuerName="MHExCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNEZXV0c2NoZSBUZWxla29tIEFHMR8wHQYDVQQLExZULVRlbGVTZWMgVHJ1c3QgQ2VudGVyMSMwIQYDVQQDExpEZXV0c2NoZSBUZWxla29tIFJvb3QgQ0EgMg==">
       <serialNumber>IsWDgJMv7uY=</serialNumber>
     </certItem>
     <certItem issuerName="MGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0ZWQgU1NMMSAwHgYDVQQDExd0aGF3dGUgRFYgU1NMIFNIQTI1NiBDQQ==">
       <serialNumber>dqN9ZZM/PfFCXStajJdbtQ==</serialNumber>
     </certItem>
+    <certItem issuerName="MIGuMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4">
+      <serialNumber>Ag==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIGuMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4">
+      <serialNumber>BQ==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKTmV3IEplcnNleTEUMBIGA1UEBxMLSmVyc2V5IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEuMCwGA1UEAxMlVVNFUlRydXN0IFJTQSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ==">
+      <serialNumber>AKbcLtOIMMwDPSOrzrclZL8=</serialNumber>
+    </certItem>
+    <certItem issuerName="MIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKTmV3IEplcnNleTEUMBIGA1UEBxMLSmVyc2V5IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEuMCwGA1UEAxMlVVNFUlRydXN0IFJTQSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ==">
+      <serialNumber>ANjIV8rkvmb5E3Wf3aPV2ys=</serialNumber>
+    </certItem>
+    <certItem issuerName="MIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKTmV3IEplcnNleTEUMBIGA1UEBxMLSmVyc2V5IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEuMCwGA1UEAxMlVVNFUlRydXN0IEVDQyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ==">
+      <serialNumber>APy7Z8kyJRVBcM/oki5xZ2M=</serialNumber>
+    </certItem>
+    <certItem issuerName="MIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKTmV3IEplcnNleTEUMBIGA1UEBxMLSmVyc2V5IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEuMCwGA1UEAxMlVVNFUlRydXN0IEVDQyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ==">
+      <serialNumber>BlOMLY2hk1OPGflbt/pPXQ==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKTmV3IEplcnNleTEUMBIGA1UEBxMLSmVyc2V5IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEuMCwGA1UEAxMlVVNFUlRydXN0IFJTQSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ==">
+      <serialNumber>MpG5djdbcIoI5TIkJ7vENA==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKTmV3IEplcnNleTEUMBIGA1UEBxMLSmVyc2V5IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEuMCwGA1UEAxMlVVNFUlRydXN0IEVDQyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ==">
+      <serialNumber>UJ3tpbZLsyrhh60M9CMQaQ==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>dgkExobSurPQq8GYrxxluA==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>A09gcxt2IBLNzwqUBAhkDg==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>TpyAwu1JmlIKD9gyf+0d4w==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>ZpLTr9toPH+XRF7OITitfw==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>And3HzRA33dI3K772oqBCw==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>T3UrJ2tKvT0lyumu37ic6g==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>PxYWUib8jdriX5MSGW7Ozw==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>H/Vx9uatDIulnLLrZjXEKg==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>ej2u88yEVXEb8BP1K49U6Q==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>BtDaTXIs6tBSClhSLPXdYg==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>cepjeevcJiJnbGEvdJE1jg==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>Qk03giZwJwxf5QpixTKflQ==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>dn2My7LvPi25AtUw3aPEmQ==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>c5EZjjNc7LMOapbOzjEtJA==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>dtULH8kD2mThpR/g1YJEtw==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>G0UY3ZCa+JfTgAVgvFA8qg==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>ajUDfjuO76YmIt3+fyTLXg==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>TrUuR7x7VeU7Qvlwt8Sumw==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>Hl7MT7aU4GbuanaMzc5eAg==</serialNumber>
+    </certItem>
+    <certItem issuerName="MEgxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdTZWN1cmVUcnVzdCBDb3Jwb3JhdGlvbjEXMBUGA1UEAxMOU2VjdXJlVHJ1c3QgQ0E=">
+      <serialNumber>R4b2Vg==</serialNumber>
+    </certItem>
+    <certItem issuerName="MEgxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdTZWN1cmVUcnVzdCBDb3Jwb3JhdGlvbjEXMBUGA1UEAxMOU2VjdXJlVHJ1c3QgQ0E=">
+      <serialNumber>R4af5Q==</serialNumber>
+    </certItem>
+    <certItem issuerName="MFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjg=">
+      <serialNumber>WV2iHxGL6Vg=</serialNumber>
+    </certItem>
+    <certItem issuerName="MFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjg=">
+      <serialNumber>bYuYcMtVvjo=</serialNumber>
+    </certItem>
+    <certItem issuerName="MFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjg=">
+      <serialNumber>UzAV4JqeuGY=</serialNumber>
+    </certItem>
+    <certItem issuerName="ME4xCzAJBgNVBAYTAk5PMR0wGwYDVQQKDBRCdXlwYXNzIEFTLTk4MzE2MzMyNzEgMB4GA1UEAwwXQnV5cGFzcyBDbGFzcyAyIFJvb3QgQ0E=">
+      <serialNumber>KA==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHzMQswCQYDVQQGEwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND">
+      <serialNumber>IL094GkEPSU+HAucglL0Ig==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHzMQswCQYDVQQGEwJFUzE7MDkGA1UECgwyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsMH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsMLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLDCxKZXJhcnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAwwGRUMtQUND">
+      <serialNumber>L5tOVjVGKtFP6V84tGEFPg==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIIBGDELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0wODAxMTc2LUkpMTQwMgYDVQQHEytQYXNzYXRnZSBkZSBsYSBDb25jZXBjaW8gMTEgMDgwMDggQmFyY2Vsb25hMS4wLAYDVQQLEyVTZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvIEVDVi0yMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJDSUMtMiAoYykwMzEfMB0GA1UECxMWVW5pdmVyc2l0YXRzIGkgUmVjZXJjYTEOMAwGA1UEAxMFRUMtVVI=">
+      <serialNumber>JSPC8hAKsUBP6Y3n9JMx8w==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHpMQswCQYDVQQGEwJFUzE7MDkGA1UECgwyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYtSSkxLjAsBgNVBAsMJVNlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8gRUNWLTExNjA0BgNVBAsMLVZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlckNJQy0xICAoYykwMzEhMB8GA1UECwwYR2VuZXJhbGl0YXQgZGUgQ2F0YWx1bnlhMRIwEAYDVQQDDAlFQy1HRU5DQVQ=">
+      <serialNumber>On0bAstcoxZP6WERe150Gw==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHzMQswCQYDVQQGEwJFUzE7MDkGA1UECgwyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsMH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsMLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLDCxKZXJhcnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAwwGRUMtQUND">
+      <serialNumber>IqW4gO46S81PjTpHBA7mUQ==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHzMQswCQYDVQQGEwJFUzE7MDkGA1UECgwyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsMH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsMLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLDCxKZXJhcnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAwwGRUMtQUND">
+      <serialNumber>dfE2CNAy9IxP6VwZ2IU2cA==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHzMQswCQYDVQQGEwJFUzE7MDkGA1UECgwyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsMH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsMLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLDCxKZXJhcnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAwwGRUMtQUND">
+      <serialNumber>W99Z2UuV5pFP6V8AYIwcVQ==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHzMQswCQYDVQQGEwJFUzE7MDkGA1UECgwyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsMH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsMLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLDCxKZXJhcnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAwwGRUMtQUND">
+      <serialNumber>P0qUU7RhznNP6V9iGYbSbA==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHzMQswCQYDVQQGEwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND">
+      <serialNumber>cEBA0P3KPBk/ojwnYepwzg==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHzMQswCQYDVQQGEwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND">
+      <serialNumber>BqVfPLKBlSg/4Enn+TGdbA==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIIBGDELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0wODAxMTc2LUkpMTQwMgYDVQQHEytQYXNzYXRnZSBkZSBsYSBDb25jZXBjaW8gMTEgMDgwMDggQmFyY2Vsb25hMS4wLAYDVQQLEyVTZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvIEVDVi0yMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJDSUMtMiAoYykwMzEfMB0GA1UECxMWVW5pdmVyc2l0YXRzIGkgUmVjZXJjYTEOMAwGA1UEAxMFRUMtVVI=">
+      <serialNumber>Y3QACu2RGYVJ6FAnJWZpHA==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHpMQswCQYDVQQGEwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYtSSkxLjAsBgNVBAsTJVNlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8gRUNWLTExNjA0BgNVBAsTLVZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlckNJQy0xICAoYykwMzEhMB8GA1UECxMYR2VuZXJhbGl0YXQgZGUgQ2F0YWx1bnlhMRIwEAYDVQQDEwlFQy1HRU5DQVQ=">
+      <serialNumber>b+8vFPRPzN8+HCEWmIwVNg==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHzMQswCQYDVQQGEwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND">
+      <serialNumber>PZfTkwQ5Yio+HE2mvtFzDg==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHzMQswCQYDVQQGEwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND">
+      <serialNumber>c+6uFePfrahUGpXs8lhiTw==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHzMQswCQYDVQQGEwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND">
+      <serialNumber>VBy0L8eIKnVUGpY97OXrkw==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHzMQswCQYDVQQGEwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND">
+      <serialNumber>JY5zdgD/mG9A4oB/uzdSwQ==</serialNumber>
+    </certItem>
+    <certItem issuerName="MHwxCzAJBgNVBAYTAk5MMSIwIAYDVQQKExlLUE4gQ29ycG9yYXRlIE1hcmtldCBCLlYuMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMSgwJgYDVQQDEx9LUE4gQ29ycG9yYXRlIE1hcmtldCBDbGFzcyAyIENB">
+      <serialNumber>F6sWArGVJv7AwBSxbnnqaw==</serialNumber>
+    </certItem>
+    <certItem issuerName="MGwxCzAJBgNVBAYTAk5MMRkwFwYDVQQKExBLUE4gVGVsZWNvbSBCLlYuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMSEwHwYDVQQDExhLUE4gVGVsZWNvbSBCLlYuIENBIC0gRzI=">
+      <serialNumber>W4sqXNfJgPC3aLKkcOxq9Q==</serialNumber>
+    </certItem>
+    <certItem issuerName="MGwxCzAJBgNVBAYTAk5MMRkwFwYDVQQKExBLUE4gVGVsZWNvbSBCLlYuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMSEwHwYDVQQDExhLUE4gVGVsZWNvbSBCLlYuIENBIC0gRzI=">
+      <serialNumber>I1kCCASG38Q8TKOJaqQtvQ==</serialNumber>
+    </certItem>
+    <certItem issuerName="MHwxCzAJBgNVBAYTAk5MMS0wKwYDVQQKEyRHZXRyb25pY3MgUGlua1JvY2NhZGUgTmVkZXJsYW5kIEIuVi4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxHTAbBgNVBAMTFEdldHJvbmljcyBDbGFzcyAyIENB">
+      <serialNumber>VhmAg9gQ0IaL5+lKzrKYPQ==</serialNumber>
+    </certItem>
+    <certItem issuerName="MHwxCzAJBgNVBAYTAk5MMS0wKwYDVQQKEyRHZXRyb25pY3MgUGlua1JvY2NhZGUgTmVkZXJsYW5kIEIuVi4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxHTAbBgNVBAMTFEdldHJvbmljcyBDbGFzcyAyIENB">
+      <serialNumber>MfSUS8xHwG64IFRIU5IHpw==</serialNumber>
+    </certItem>
+    <certItem issuerName="MHwxCzAJBgNVBAYTAk5MMSIwIAYDVQQKExlLUE4gQ29ycG9yYXRlIE1hcmtldCBCLlYuMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMSgwJgYDVQQDEx9LUE4gQ29ycG9yYXRlIE1hcmtldCBDbGFzcyAyIENB">
+      <serialNumber>I+zjm9Bi1ZVKLF0R96thFQ==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>cIHLIBl0M9N90NNjZwhwSA==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>XaqJA1pYkpSOSst7Hmcxew==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHBMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yaw==">
+      <serialNumber>HkN+3VDzRBFAw/QQ6XZ2gA==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIGUMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxRTBDBgNVBAMTPFN5bWFudGVjIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHNg==">
+      <serialNumber>VedYmG4aoUcioKT467SDcg==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIGUMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxRTBDBgNVBAMTPFN5bWFudGVjIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHNg==">
+      <serialNumber>U51Qij2xILJB29u2m4ePyw==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>bcIU/gztAKdw8elgpRh2vA==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIGUMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxRTBDBgNVBAMTPFN5bWFudGVjIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHNg==">
+      <serialNumber>Bxt4PMyN1f5tIXW8W62DhA==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIGUMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxRTBDBgNVBAMTPFN5bWFudGVjIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHNg==">
+      <serialNumber>CpSHXk6RnrLSRVVJhVZEWA==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>Baw9WIPUcpFvYe8bilTVVQ==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>PpIe9Q1JUVu5nN/+4HWAoA==</serialNumber>
+    </certItem>
+    <certItem issuerName="MH4xCzAJBgNVBAYTAk1ZMSQwIgYDVQQKExtNU0MgVHJ1c3RnYXRlLmNvbSBTZG4uIEJoZC4xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH01TQyBUcnVzdGdhdGUuY29tIENsYXNzIDIgQ0EtRzM=">
+      <serialNumber>Q0dKwXPiEec83XZPgsQh+g==</serialNumber>
+    </certItem>
+    <certItem issuerName="MHsxCzAJBgNVBAYTAk1ZMR8wHQYDVQQKExZNU0MgVHJ1c3RnYXRlLmNvbSBTZG4uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMSowKAYDVQQDEyFNU0MgVHJ1c3RnYXRlLmNvbSBDbGFzcyAyIENBIC0gRzI=">
+      <serialNumber>L3UnLdK9iz8XVM1rbm3tTw==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>CAEyq5GePgxvZbmFx5WW6A==</serialNumber>
+    </certItem>
+    <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==">
+      <serialNumber>JFcRHv1L89Vu8gagzuR3Pg==</serialNumber>
+    </certItem>
+    <certItem issuerName="MGcxCzAJBgNVBAYTAktSMRMwEQYDVQQKEwpLRUNBLCBJbmMuMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMSIwIAYDVQQDExlDcm9zc0NlcnQgQ2xhc3MgMiBDQSAtIEcz">
+      <serialNumber>fLpClvRi4IMKsokzVKT9Yg==</serialNumber>
+    </certItem>
+    <certItem issuerName="MHwxCzAJBgNVBAYTAk5MMSIwIAYDVQQKExlLUE4gQ29ycG9yYXRlIE1hcmtldCBCLlYuMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMSgwJgYDVQQDEx9LUE4gQ29ycG9yYXRlIE1hcmtldCBDbGFzcyAyIENB">
+      <serialNumber>GARMIB0Iaz3xxucE70O9Qg==</serialNumber>
+    </certItem>
+    <certItem issuerName="MFIxCzAJBgNVBAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIy">
+      <serialNumber>CMUHBBak0idMAAAAAAAAAAE=</serialNumber>
+    </certItem>
+    <certItem issuerName="MFIxCzAJBgNVBAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIx">
+      <serialNumber>B6AKfwrKX6H1AAAAAAAAAAE=</serialNumber>
+    </certItem>
+    <certItem issuerName="MGMxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExIjAgBgNVBAMTGVRydXN0ZWQgUm9vdCBDQSBTSEEyNTYgRzI=">
+      <serialNumber>R8MQVHZjYD/8LqGrob8=</serialNumber>
+    </certItem>
+    <certItem issuerName="MEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24gUm9vdCBDQSAtIFI2MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu">
+      <serialNumber>Ro51e1DpnjbH3LKdghY=</serialNumber>
+    </certItem>
+    <certItem issuerName="MGMxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExIjAgBgNVBAMTGVRydXN0ZWQgUm9vdCBDQSBTSEEyNTYgRzI=">
+      <serialNumber>AeUotGv9K4mpvLzWxw==</serialNumber>
+    </certItem>
+    <certItem issuerName="MGAxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xMTAvBgNVBAMMKFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBJbnRlcm1lZGlhaXIgQ0E=">
+      <serialNumber>a5DOAqSUlLm2s6kL0x8gkQ==</serialNumber>
+    </certItem>
+    <certItem issuerName="MFwxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xLTArBgNVBAMMJFN0YWF0IGRlciBOZWRlcmxhbmRlbiBCdXJnZXIgQ0EgLSBHMg==">
+      <serialNumber>ATE7Ow==</serialNumber>
+    </certItem>
+    <certItem issuerName="MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDM=">
+      <serialNumber>VOQX5SLKeMGyQdoF0X9h38gYrks=</serialNumber>
+    </certItem>
+    <certItem issuerName="MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDM=">
+      <serialNumber>Z6RtH7xmDM0r66IKSlpCZNrlRfY=</serialNumber>
+    </certItem>
+    <certItem issuerName="MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDM=">
+      <serialNumber>bdheRp0SfvS84GGiPaBnyFhE8EY=</serialNumber>
+    </certItem>
+    <certItem issuerName="MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDM=">
+      <serialNumber>JJfQeI7SQbQcPQ8Wc4+X2nlpWho=</serialNumber>
+    </certItem>
+    <certItem issuerName="MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDM=">
+      <serialNumber>KZlCQ0XnAo+GY3mKKJoNoNucjT0=</serialNumber>
+    </certItem>
   </certItems>
 </blocklist>
--- a/mail/base/content/contentAreaClick.js
+++ b/mail/base/content/contentAreaClick.js
@@ -2,16 +2,18 @@
  * 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/. */
 
   /**
    * Extract the href from the link click event.
    * We look for HTMLAnchorElement, HTMLAreaElement, HTMLLinkElement,
    * HTMLInputElement.form.action, and nested anchor tags.
+   * If the clicked element was a HTMLInputElement or HTMLButtonElement
+   * we return the form action.
    *
    * @return href for the url being clicked
    */
 
   Components.utils.import("resource://gre/modules/PlacesUtils.jsm");
   Components.utils.import("resource://gre/modules/Services.jsm");
 
   function hRefForClickEvent(aEvent, aDontCheckInputElement)
@@ -30,17 +32,18 @@
     }
     else if (target instanceof HTMLImageElement &&
              target.hasAttribute("overflowing"))
     {
       // Return if an image is zoomed, otherwise fall through to see if it has
       // a link node.
       return href;
     }
-    else if (!aDontCheckInputElement && target instanceof HTMLInputElement)
+    else if (!aDontCheckInputElement && ((target instanceof HTMLInputElement) ||
+                                         (target instanceof HTMLButtonElement)))
     {
       if (target.form && target.form.action)
         href = target.form.action;
     }
     else
     {
       // We may be nested inside of a link node.
       var linkNode = aEvent.originalTarget;
--- a/mail/base/content/mailWindowOverlay.js
+++ b/mail/base/content/mailWindowOverlay.js
@@ -3018,17 +3018,17 @@ var gMessageNotificationBar =
         buttons);
     }
   },
 
   isShowingJunkNotification: function() {
     return !!this.msgNotificationBar.getNotificationWithValue("junkContent");
   },
 
-  setRemoteContentMsg: function(aMsgHdr, aContentURI)
+  setRemoteContentMsg: function(aMsgHdr, aContentURI, aCanOverride)
   {
     // update the allow remote content for sender string
     let emailAddress = MailServices.headerParser.extractHeaderAddressMailboxes(aMsgHdr.author);
     var desc = document.getElementById("bundle_messenger")
                        .getFormattedString("alwaysLoadRemoteContentForSender2",
                                            [emailAddress ? emailAddress : aMsgHdr.author]);
     let displayName = MailServices.headerParser.extractHeaderAddressName(aMsgHdr.author);
     let brandName = this.brandBundle.getString("brandShortName");
@@ -3046,17 +3046,17 @@ var gMessageNotificationBar =
       popup: "remoteContentOptions",
       callback: function() { }
     }];
 
     if (!this.isShowingRemoteContentNotification()) {
       this.msgNotificationBar.appendNotification(remoteContentMsg, "remoteContent",
         "chrome://messenger/skin/icons/remote-blocked.png",
         this.msgNotificationBar.PRIORITY_WARNING_MEDIUM,
-        buttons);
+        (aCanOverride ? buttons : []));
     }
 
     // The popup value is a space separated list of all the blocked origins.
     let popup = document.getElementById("remoteContentOptions");
     let principal = Services.scriptSecurityManager
       .createCodebasePrincipal(aContentURI, {});
     let origins = popup.value ? popup.value.split(" ") : [];
     if (!origins.includes(principal.origin))
--- a/mail/base/content/msgHdrViewOverlay.js
+++ b/mail/base/content/msgHdrViewOverlay.js
@@ -731,19 +731,19 @@ var messageHeaderSink = {
       OnMsgParsed(url);
     },
 
     onEndMsgHeaders: function(url)
     {
       OnMsgLoaded(url);
     },
 
-    onMsgHasRemoteContent: function(aMsgHdr, aContentURI)
+    onMsgHasRemoteContent: function(aMsgHdr, aContentURI, aCanOverride)
     {
-      gMessageNotificationBar.setRemoteContentMsg(aMsgHdr, aContentURI);
+      gMessageNotificationBar.setRemoteContentMsg(aMsgHdr, aContentURI, aCanOverride);
     },
 
     mSecurityInfo  : null,
     mSaveHdr: null,
     get securityInfo()
     {
       return this.mSecurityInfo;
     },
@@ -1818,16 +1818,29 @@ function AttachmentInfo(contentType, url
     this.partID = match && match.split("part=")[1];
     url = url.replace(match, "");
   }
   else {
     match = GlodaUtils.PART_RE.exec(url);
     this.partID = match && match[1];
   }
 
+  // Make sure to communicate it if it's an external http attachment and not a
+  // local attachment. For feeds attachments (enclosures) are always remote,
+  // so there is nothing to communicate.
+  if (isExternalAttachment && url.startsWith("http") &&
+      !gFolderDisplay.selectedMessageIsFeed) {
+    if (this.name) {
+      this.name = url + " - " + this.name;
+    }
+    else {
+      this.name = url;
+    }
+  }
+
   this.url = url;
 }
 
 AttachmentInfo.prototype = {
   /**
    * Save this attachment to a file.
    */
   save: function AttachmentInfo_save()
--- a/mail/components/compose/content/MsgComposeCommands.js
+++ b/mail/components/compose/content/MsgComposeCommands.js
@@ -4405,21 +4405,29 @@ nsAttachmentOpener.prototype =
 
   onStartURIOpen: function(uri)
   {
     return false;
   },
 
   doContent: function(contentType, isContentPreferred, request, contentHandler)
   {
-    return false;
+    // If we came here to display an attached message, make sure we provide a type.
+    if (/[?&]part=/i.test(request.URI.query))
+      request.URI.query += "&type=message/rfc822";
+    let newHandler = Cc["@mozilla.org/uriloader/content-handler;1?type=application/x-message-display"]
+                       .createInstance(Components.interfaces.nsIContentHandler);
+    newHandler.handleContent("application/x-message-display", this, request);
+    return true;
   },
 
   isPreferred: function(contentType, desiredContentType)
   {
+    if (contentType == "message/rfc822")
+      return true;
     return false;
   },
 
   canHandleContent: function(contentType, isContentPreferred, desiredContentType)
   {
     return false;
   },
 
--- a/mail/extensions/smime/content/msgHdrViewSMIMEOverlay.js
+++ b/mail/extensions/smime/content/msgHdrViewSMIMEOverlay.js
@@ -12,16 +12,27 @@ var gEncryptedURIService = null;
 var gMyLastEncryptedURI = null;
 
 var gSMIMEBundle = null;
 
 // manipulates some globals from msgReadSMIMEOverlay.js
 
 var nsICMSMessageErrors = Components.interfaces.nsICMSMessageErrors;
 
+/// Get the necko URL for the message URI.
+function neckoURLForMessageURI(aMessageURI)
+{
+  let msgSvc = Components.classes["@mozilla.org/messenger;1"]
+    .createInstance(Components.interfaces.nsIMessenger)
+    .messageServiceFromURI(aMessageURI);
+  let neckoURI = {};
+  msgSvc.GetUrlForUri(aMessageURI, neckoURI, null);
+  return neckoURI.value.spec;
+}
+
 var smimeHeaderSink =
 {
   maxWantedNesting: function()
   {
     return 1;
   },
 
   signedStatus: function(aNestingLevel, aSignatureStatus, aSignerCert)
@@ -112,18 +123,21 @@ var smimeHeaderSink =
     else
     {
       gEncryptedUINode.setAttribute("encrypted", "notok");
       gStatusBar.setAttribute("encrypted", "notok");
     }
 
     if (gEncryptedURIService)
     {
+      // Remember the message URI and the corresponding necko URI.
       gMyLastEncryptedURI = gFolderDisplay.selectedMessageUris[0];
       gEncryptedURIService.rememberEncrypted(gMyLastEncryptedURI);
+      gEncryptedURIService.rememberEncrypted(
+        neckoURLForMessageURI(gMyLastEncryptedURI));
     }
 
     switch (aEncryptionStatus)
     {
     case nsICMSMessageErrors.SUCCESS:
     case nsICMSMessageErrors.ENCRYPT_INCOMPLETE:
       break;
     default:
@@ -155,16 +169,18 @@ var smimeHeaderSink =
   }
 };
 
 function forgetEncryptedURI()
 {
   if (gMyLastEncryptedURI && gEncryptedURIService)
   {
     gEncryptedURIService.forgetEncrypted(gMyLastEncryptedURI);
+    gEncryptedURIService.forgetEncrypted(
+      neckoURLForMessageURI(gMyLastEncryptedURI));
     gMyLastEncryptedURI = null;
   }
 }
 
 function onSMIMEStartHeaders()
 {
   gEncryptionStatus = -1;
   gSignatureStatus = -1;
--- a/mailnews/base/src/nsMsgContentPolicy.cpp
+++ b/mailnews/base/src/nsMsgContentPolicy.cpp
@@ -8,16 +8,17 @@
 #include "nsIPrefService.h"
 #include "nsIPrefBranch.h"
 #include "nsIAbManager.h"
 #include "nsIAbDirectory.h"
 #include "nsIAbCard.h"
 #include "nsIMsgWindow.h"
 #include "nsIMimeMiscStatus.h"
 #include "nsIMsgHdr.h"
+#include "nsIEncryptedSMIMEURIsSrvc.h"
 #include "nsNetUtil.h"
 #include "nsIMsgComposeService.h"
 #include "nsMsgCompCID.h"
 #include "nsIDocShellTreeItem.h"
 #include "nsIWebNavigation.h"
 #include "nsContentPolicyUtils.h"
 #include "nsIDOMHTMLImageElement.h"
 #include "nsIFrameLoader.h"
@@ -295,16 +296,50 @@ nsMsgContentPolicy::ShouldLoad(uint32_t 
     return NS_OK;
   }
 
   // never load unexposed protocols except for http, https and file.
   // Protocols like ftp are always blocked.
   if (ShouldBlockUnexposedProtocol(aContentLocation))
     return NS_OK;
 
+
+  // Find out the URI that originally initiated the set of requests for this
+  // context.
+  nsCOMPtr<nsIURI> originatorLocation;
+  if (!aRequestingContext && aRequestPrincipal)
+  {
+    // Can get the URI directly from the principal.
+    rv = aRequestPrincipal->GetURI(getter_AddRefs(originatorLocation));
+  }
+  else
+  {
+    rv = GetOriginatingURIForContext(aRequestingContext,
+                                     getter_AddRefs(originatorLocation));
+  }
+  NS_ENSURE_SUCCESS(rv, NS_OK);
+
+#ifdef DEBUG_MsgContentPolicy
+  fprintf(stderr, "originatorLocation = %s\n", originatorLocation->GetSpecOrDefault().get());
+#endif
+
+  // Don't load remote content for encrypted messages.
+  nsCOMPtr<nsIEncryptedSMIMEURIsService> encryptedURIService =
+    do_GetService("@mozilla.org/messenger-smime/smime-encrypted-uris-service;1", &rv);
+  NS_ENSURE_SUCCESS(rv, rv);
+  bool isEncrypted;
+  rv = encryptedURIService->IsEncrypted(aRequestingLocation->GetSpecOrDefault(), &isEncrypted);
+  NS_ENSURE_SUCCESS(rv, rv);
+  if (isEncrypted)
+  {
+    *aDecision = nsIContentPolicy::REJECT_REQUEST;
+    NotifyContentWasBlocked(originatorLocation, aContentLocation, false);
+    return NS_OK;
+  }
+
   // If we are allowing all remote content...
   if (!mBlockRemoteImages)
   {
     *aDecision = nsIContentPolicy::ACCEPT;
     return NS_OK;
   }
 
   // Extract the windowtype to handle compose windows separately from mail
@@ -316,35 +351,16 @@ nsMsgContentPolicy::ShouldLoad(uint32_t 
     if (msgCompose)
     {
       ComposeShouldLoad(msgCompose, aRequestingContext, aContentLocation,
                         aDecision);
       return NS_OK;
     }
   }
 
-  // Find out the URI that originally initiated the set of requests for this
-  // context.
-  nsCOMPtr<nsIURI> originatorLocation;
-  if (!aRequestingContext && aRequestPrincipal)
-  {
-    // Can get the URI directly from the principal.
-    rv = aRequestPrincipal->GetURI(getter_AddRefs(originatorLocation));
-  }
-  else
-  {
-    rv = GetOriginatingURIForContext(aRequestingContext,
-                                     getter_AddRefs(originatorLocation));
-  }
-  NS_ENSURE_SUCCESS(rv, NS_OK);
-
-#ifdef DEBUG_MsgContentPolicy
-  fprintf(stderr, "originatorLocation = %s\n", originatorLocation->GetSpecOrDefault().get());
-#endif
-
   // Allow content when using a remote page.
   bool isHttp;
   bool isHttps;
   rv = originatorLocation->SchemeIs("http", &isHttp);
   nsresult rv2 = originatorLocation->SchemeIs("https", &isHttps);
   if (NS_SUCCEEDED(rv) && NS_SUCCEEDED(rv2) && (isHttp || isHttps))
   {
     *aDecision = nsIContentPolicy::ACCEPT;
@@ -528,39 +544,94 @@ nsMsgContentPolicy::ShouldAcceptRemoteCo
 
   return result;
 }
 
 class RemoteContentNotifierEvent : public mozilla::Runnable
 {
 public:
   RemoteContentNotifierEvent(nsIMsgWindow *aMsgWindow, nsIMsgDBHdr *aMsgHdr,
-                             nsIURI *aContentURI)
-    : mMsgWindow(aMsgWindow), mMsgHdr(aMsgHdr), mContentURI(aContentURI)
+                             nsIURI *aContentURI, bool aCanOverride = true)
+    : mMsgWindow(aMsgWindow), mMsgHdr(aMsgHdr), mContentURI(aContentURI),
+    mCanOverride(aCanOverride)
   {}
 
   NS_IMETHOD Run()
   {
     if (mMsgWindow)
     {
       nsCOMPtr<nsIMsgHeaderSink> msgHdrSink;
       (void)mMsgWindow->GetMsgHeaderSink(getter_AddRefs(msgHdrSink));
       if (msgHdrSink)
-        msgHdrSink->OnMsgHasRemoteContent(mMsgHdr, mContentURI);
+        msgHdrSink->OnMsgHasRemoteContent(mMsgHdr, mContentURI, mCanOverride);
     }
     return NS_OK;
   }
 
 private:
   nsCOMPtr<nsIMsgWindow> mMsgWindow;
   nsCOMPtr<nsIMsgDBHdr> mMsgHdr;
   nsCOMPtr<nsIURI> mContentURI;
+  bool mCanOverride;
 };
 
 /**
+ * This function is used to show a blocked remote content notification.
+ */
+void
+nsMsgContentPolicy::NotifyContentWasBlocked(nsIURI *aOriginatorLocation,
+                                            nsIURI *aContentLocation,
+                                            bool aCanOverride)
+{
+  // Is it a mailnews url?
+  nsresult rv;
+  nsCOMPtr<nsIMsgMessageUrl> msgUrl(do_QueryInterface(aOriginatorLocation,
+                                                      &rv));
+  if (NS_FAILED(rv))
+  {
+    return;
+  }
+
+  nsCString resourceURI;
+  rv = msgUrl->GetUri(getter_Copies(resourceURI));
+  NS_ENSURE_SUCCESS_VOID(rv);
+
+  nsCOMPtr<nsIMsgMailNewsUrl> mailnewsUrl(do_QueryInterface(aOriginatorLocation, &rv));
+  NS_ENSURE_SUCCESS_VOID(rv);
+
+  nsCOMPtr<nsIMsgDBHdr> msgHdr;
+  rv = GetMsgDBHdrFromURI(resourceURI.get(), getter_AddRefs(msgHdr));
+  if (NS_FAILED(rv))
+  {
+    // Maybe we can get a dummy header.
+    nsCOMPtr<nsIMsgWindow> msgWindow;
+    rv = mailnewsUrl->GetMsgWindow(getter_AddRefs(msgWindow));
+    if (msgWindow)
+    {
+      nsCOMPtr<nsIMsgHeaderSink> msgHdrSink;
+      rv = msgWindow->GetMsgHeaderSink(getter_AddRefs(msgHdrSink));
+      if (msgHdrSink)
+        rv = msgHdrSink->GetDummyMsgHeader(getter_AddRefs(msgHdr));
+    }
+  }
+
+  nsCOMPtr<nsIMsgWindow> msgWindow;
+  (void)mailnewsUrl->GetMsgWindow(getter_AddRefs(msgWindow));
+  if (msgWindow)
+  {
+    nsCOMPtr<nsIRunnable> event =
+      new RemoteContentNotifierEvent(msgWindow, msgHdr, aContentLocation, aCanOverride);
+    // Post this as an event because it can cause dom mutations, and we
+    // get called at a bad time to be causing dom mutations.
+    if (event)
+      NS_DispatchToCurrentThread(event);
+  }
+}
+
+/**
  * This function is used to determine if we allow content for a remote message.
  * If we reject loading remote content, then we'll inform the message window
  * that this message has remote content (and hence we are not loading it).
  *
  * See ShouldAcceptRemoteContentForMsgHdr for the actual decisions that
  * determine if we are going to allow remote content.
  */
 void
--- a/mailnews/base/src/nsMsgContentPolicy.h
+++ b/mailnews/base/src/nsMsgContentPolicy.h
@@ -64,16 +64,19 @@ protected:
   bool IsExposedProtocol(nsIURI *aContentLocation);
   bool IsExposedChromeProtocol(nsIURI *aContentLocation);
   bool ShouldBlockUnexposedProtocol(nsIURI *aContentLocation);
 
   bool ShouldAcceptRemoteContentForSender(nsIMsgDBHdr *aMsgHdr);
   int16_t ShouldAcceptRemoteContentForMsgHdr(nsIMsgDBHdr *aMsgHdr,
                                              nsIURI *aRequestingLocation,
                                              nsIURI *aContentLocation);
+  void NotifyContentWasBlocked(nsIURI *aOriginatorLocation,
+                               nsIURI *aContentLocation,
+                               bool aCanOverride);
   void ShouldAcceptContentForPotentialMsg(nsIURI *aOriginatorLocation,
                                           nsIURI *aContentLocation,
                                           int16_t *aDecision);
   void ComposeShouldLoad(nsIMsgCompose *aMsgCompose,
                          nsISupports *aRequestingContext, 
                          nsIURI *aContentLocation, int16_t *aDecision);
   already_AddRefed<nsIMsgCompose> GetMsgComposeForContext(nsISupports *aRequestingContext);
 
--- a/mailnews/base/util/msgDBCacheManager.js
+++ b/mailnews/base/util/msgDBCacheManager.js
@@ -28,24 +28,29 @@ var DBCACHE_INTERVAL_DEFAULT_MS = 60000;
 var msgDBCacheManager =
 {
   _initialized: false,
 
   _msgDBCacheTimer: null,
 
   _msgDBCacheTimerIntervalMS: DBCACHE_INTERVAL_DEFAULT_MS,
 
+  _dbService: null,
+
   /**
    * This is called on startup
    */
   init: function dbcachemgr_init()
   {
     if (this._initialized)
       return;
 
+    this._dbService = Cc["@mozilla.org/msgDatabase/msgDBService;1"]
+                        .getService(Ci.nsIMsgDBService);
+
     // we listen for "quit-application-granted" instead of
     // "quit-application-requested" because other observers of the
     // latter can cancel the shutdown.
     Services.obs.addObserver(this, "quit-application-granted", false);
 
     this.startPeriodicCheck();
 
     this._initialized = true;
@@ -97,74 +102,74 @@ var msgDBCacheManager =
                                    .createInstance(Ci.nsITimer);
 
       this._dbCacheCheckTimer.initWithCallback(
                                    this._dbCacheCheckTimerCallback,
                                    this._msgDBCacheTimerIntervalMS,
                                    Ci.nsITimer.TYPE_REPEATING_SLACK);
     }
   },
-  checkCachedDBs : function ()
+
+  /**
+   * Checks if any DBs need to be closed due to inactivity or too many of them open.
+   */
+  checkCachedDBs: function()
   {
-    const gDbService = Cc["@mozilla.org/msgDatabase/msgDBService;1"]
-                         .getService(Ci.nsIMsgDBService);
-
     let idleLimit = Services.prefs.getIntPref("mail.db.idle_limit");
     let maxOpenDBs = Services.prefs.getIntPref("mail.db.max_open");
 
     // db.lastUseTime below is in microseconds while Date.now and idleLimit pref
     // is in milliseconds.
     let closeThreshold = (Date.now() - idleLimit) * 1000;
-    let cachedDBs = gDbService.openDBs;
-    log.info("periodic check of cached dbs, count=" + cachedDBs.length);
-    let numOpenDBs = 0;
+    let cachedDBs = this._dbService.openDBs;
+    log.info("Periodic check of cached folder databases (DBs), count=" + cachedDBs.length);
+    // Count databases that are already closed or get closed now due to inactivity.
+    let numClosing = 0;
+    // Count databases whose folder is open in a window.
+    let numOpenInWindow = 0;
+    let dbs = [];
     for (let i = 0; i < cachedDBs.length; i++) {
       let db = cachedDBs.queryElementAt(i, Ci.nsIMsgDatabase);
       if (!db.folder.databaseOpen) {
-        log.debug("skipping cachedDB not open in folder: " + db.folder.name);
+        // The DB isn't really open anymore.
+        log.debug("Skipping, DB not open for folder: " + db.folder.name);
+        numClosing++;
         continue;
       }
 
       if (MailServices.mailSession.IsFolderOpenInWindow(db.folder)) {
-        log.debug("folder open in window, name: " + db.folder.name);
-        numOpenDBs++;
+        // The folder is open in a window so this DB must not be closed.
+        log.debug("Skipping, DB open in window for folder: " + db.folder.name);
+        numOpenInWindow++;
         continue;
       }
+
       if (db.lastUseTime < closeThreshold)
       {
-        log.debug("closing expired msgDatabase for folder: " + db.folder.name);
+        // DB open too log without activity.
+        log.debug("Closing expired DB for folder: " + db.folder.name);
         db.folder.msgDatabase = null;
+        numClosing++;
+        continue;
       }
-      else
-        numOpenDBs++;
+
+      // Database eligible for closing.
+      dbs.push(db);
     }
-    cachedDBs = gDbService.openDBs;
-    log.info("open db count " + numOpenDBs);
-    if (numOpenDBs > maxOpenDBs) {
+    log.info("DBs open in a window: " + numOpenInWindow + ", DBs open: " + dbs.length + ", DBs already closing: " + numClosing);
+    let dbsToClose = Math.max(dbs.length - Math.max(maxOpenDBs - numOpenInWindow, 0), 0);
+    if (dbsToClose > 0) {
       // Close some DBs so that we do not have more than maxOpenDBs.
-      // However, we do not close DB for a folder that is open in a window
+      // However, we skipped DBs for folders that are open in a window
       // so if there are so many windows open, it may be possible for
       // more than maxOpenDBs folders to stay open after this loop.
-      let dbs = [];
-      for (let i = 0; i < cachedDBs.length; i++) {
-        let db = cachedDBs.queryElementAt(i, Ci.nsIMsgDatabase);
-        if (db.folder.databaseOpen)
-          dbs.push(db);
-      }
-      dbs.sort((a, b) => a.lastUseTime > b.lastUseTime);
-      let dbsToClose = dbs.length - maxOpenDBs;
-      if (dbsToClose > 0) {
-        log.info("trying to close " + dbsToClose + " databases");
-        for (let db of dbs) {
-          if (MailServices.mailSession.IsFolderOpenInWindow(db.folder))
-          {
-            log.debug("not closing db open in window, name: " + db.folder.name);
-            continue;
-          }
-          log.debug("closing db for folder: " + db.folder.name);
-          db.folder.msgDatabase = null;
-          if (--dbsToClose == 0)
-            break;
-        }
+      log.info("Need to close " + dbsToClose + " more DBs");
+      // Order databases by lowest lastUseTime (oldest) at the end.
+      dbs.sort((a, b) => b.lastUseTime - a.lastUseTime);
+      while (dbsToClose > 0) {
+        let db = dbs.pop();
+        log.debug("Closing DB for folder: " + db.folder.name);
+        db.folder.msgDatabase = null;
+        dbsToClose--;
       }
     }
   },
 };
--- a/mailnews/extensions/bayesian-spam-filter/src/nsBayesianFilter.cpp
+++ b/mailnews/extensions/bayesian-spam-filter/src/nsBayesianFilter.cpp
@@ -950,17 +950,18 @@ NS_IMETHODIMP TokenStreamListener::OnEnd
 
 NS_IMETHODIMP TokenStreamListener::OnEndMsgDownload(nsIMsgMailNewsUrl *url)
 {
     return NS_OK;
 }
 
 
 NS_IMETHODIMP TokenStreamListener::OnMsgHasRemoteContent(nsIMsgDBHdr *aMsgHdr,
-                                                         nsIURI *aContentURI)
+                                                         nsIURI *aContentURI,
+                                                         bool aCanOverride)
 {
     return NS_OK;
 }
 
 NS_IMETHODIMP TokenStreamListener::OnEndMsgHeaders(nsIMsgMailNewsUrl *url)
 {
     return NS_OK;
 }
--- a/mailnews/extensions/smime/public/nsIEncryptedSMIMEURIsSrvc.idl
+++ b/mailnews/extensions/smime/public/nsIEncryptedSMIMEURIsSrvc.idl
@@ -8,14 +8,17 @@
    that is only accessible from C++.
 */
 
 #include "nsISupports.idl"
 
 [scriptable, uuid(f86e55c9-530b-483f-91a7-10fb5b852488)]
 interface nsIEncryptedSMIMEURIsService : nsISupports 
 {
+  /// Remember that this URI is encrypted.
   void rememberEncrypted(in AUTF8String uri);
   
+  /// Forget that this URI is encrypted.
   void forgetEncrypted(in AUTF8String uri);
   
+  /// Check if this URI is encrypted.
   boolean isEncrypted(in AUTF8String uri);
 };
--- a/mailnews/imap/src/nsImapProtocol.cpp
+++ b/mailnews/imap/src/nsImapProtocol.cpp
@@ -6875,22 +6875,22 @@ bool nsImapProtocol::RenameHierarchyByHa
                                          &serverName);
           PR_FREEIF(currentName);
           currentName = serverName;
         }
 
         // calculate the new name and do the rename
         nsCString newChildName(newParentMailboxName);
         newChildName += (currentName + PL_strlen(oldParentMailboxName));
-        RenameMailboxRespectingSubscriptions(currentName,
-                                             newChildName.get(),
-                                             nonHierarchicalRename);
-        // pass in xNonHierarchicalRename to determine if we should really
-        // reanme, or just move subscriptions
-        renameSucceeded = GetServerStateParser().LastCommandSuccessful();
+        // Pass in 'nonHierarchicalRename' to determine if we should really
+        // reanme, or just move subscriptions.
+        renameSucceeded =
+          RenameMailboxRespectingSubscriptions(currentName,
+                                               newChildName.get(),
+                                               nonHierarchicalRename);
         PR_FREEIF(currentName);
     }
 
     delete m_deletableChildren;
     m_deletableChildren = nullptr;
   }
 
   return renameSucceeded;
--- a/mailnews/mime/jsmime/jsmime.js
+++ b/mailnews/mime/jsmime/jsmime.js
@@ -807,16 +807,23 @@ function parseAddressingHeader(header, d
   /**
    * Add the parsed mailbox object to the address list.
    * If it's in the legacy form above, correct the display-name.
    * Also reset any faked flags.
    * @param {String} displayName   display-name as per RFC 5322
    * @param {String} addrSpec      addr-spec as per RFC 5322
    */
   function addToAddrList(displayName, addrSpec) {
+    // Keep the local-part quoted if it needs to be.
+    let lp = addrSpec.substring(0, addrSpec.lastIndexOf("@"));
+    if (/[ !()<>\[\]:;@\\,"]/.exec(lp) !== null) {
+      addrSpec = '"' + lp.replace(/([\\"])/g, "\\$1") + '"' +
+                 addrSpec.substring(addrSpec.lastIndexOf("@"));
+    }
+
     if (displayName === '' && lastComment !== '') {
       // Take last comment content as the display-name.
       let offset = lastComment[0] === ' ' ? 2 : 1;
       displayName = lastComment.substr(offset, lastComment.length - offset - 1);
     }
     if (displayName !== '' || addrSpec !== '')
       addrlist.push({name: displayName, email: addrSpec});
     // Clear pending flags and variables.
@@ -879,19 +886,16 @@ function parseAddressingHeader(header, d
       // out the display name for the current production.
       if (!inAngle) {
         address = localPart;
         name = '';
         localPart = '';
         // The remainder of this mailbox is part of an addr-spec.
         inAngle = true;
       }
-      // Keep the local-part quoted if it needs to be.
-      if (/[ !()<>\[\]:;@\\,"]/.exec(address) !== null)
-        address = '"' + address.replace(/([\\"])/g, "\\$1") + '"';
       address += '@';
     } else if (token === ',') {
       // A comma ends the current name. If we have something that's kind of a
       // name, add it to the result list. If we don't, then our input looks like
       // To: , , -> don't bother adding an empty entry.
       addToAddrList(name, address);
     } else if (token === ';') {
       // Add pending name to the list
--- a/mailnews/mime/jsmime/test/test_header.js
+++ b/mailnews/mime/jsmime/test/test_header.js
@@ -203,16 +203,24 @@ suite('headerparser', function () {
         [{name: "undisclosed-recipients", group: []}]],
       ["me@[127.0.0.1]", [{name: "", email: "me@[127.0.0.1]"}]],
       ["\"me\"@a.com", [{name: "", email: "me@a.com"}]],
       ["\"!\"@a.com", [{name: "", email: "\"!\"@a.com"}]],
       ["\"\\!\"@a.com", [{name: "", email: "\"!\"@a.com"}]],
       ["\"\\\\!\"@a.com", [{name: "", email: "\"\\\\!\"@a.com"}]],
       ["Coward (not@email) <real@email.com>",
         [{name: "Coward (not@email)", email: "real@email.com"}]],
+      ["\"y@example.com\" <xx@example.com>",
+        [{name: "y@example.com", email: "xx@example.com"}]],
+      ["@@@",
+        [{name: "", email: "\"@@\"@"}]],
+      ["@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+        [{name: "", email: "\"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\"@"}]],
+      ["Nat Ex <{admin@example.com|stocks@example.com|stockmarket@example.com|trades@example.com|money@example.com|broker@example.com|deals@example.com|offers@example.com|news@example.com|binary@example.com|forex@example.com|marketing@example.com|mail@example.com|inboxdeals@example.com|packages@example.com>",
+        [{name: "Nat Ex", email: "\"{admin@example.com|stocks@example.com|stockmarket@example.com|trades@example.com|money@example.com|broker@example.com|deals@example.com|offers@example.com|news@example.com|binary@example.com|forex@example.com|marketing@example.com|mail@example.com|inboxdeals@example.com|packages\"@example.com"}]],
       ["Group: a@b.com, b@c.com;", [{name: "Group", group:
           [{name: "", email: "a@b.com"}, {name: "", email: "b@c.com"}]}]],
       ["a@invalid.invalid, Group: a@b.com;",
         [{name: "", email: "a@invalid.invalid"},
          {name: "Group", group: [{name: "", email: "a@b.com"}]}]],
       ["Group A: a@b.com;, Group B: b@b.com;",
         [{name: "Group A", group: [{name: "", email: "a@b.com"}]},
          {name: "Group B", group: [{name: "", email: "b@b.com"}]}]],
--- a/mailnews/mime/public/nsIMimeMiscStatus.idl
+++ b/mailnews/mime/public/nsIMimeMiscStatus.idl
@@ -55,18 +55,19 @@ interface nsIMsgHeaderSink : nsISupports
 
   attribute nsISupports securityInfo;
 
   /**
    * onMsgHasRemoteContent is called each time content policy encounters remote
    * content that it will block from loading.
    * @param aMsgHdr header of the message the content is located in
    * @param aContentURI location that will be blocked.
+   * @param aCanOverride can the blocking be overridden or not
    */
-  void onMsgHasRemoteContent(in nsIMsgDBHdr aMsgHdr, in nsIURI aContentURI);
+  void onMsgHasRemoteContent(in nsIMsgDBHdr aMsgHdr, in nsIURI aContentURI, in boolean aCanOverride);
 
   readonly attribute nsIMsgDBHdr dummyMsgHeader;
   
   // used as a hook for extension mime content handlers to store data that can later
   // be accessed by other parts of the code, e.g., UI code.
   // TODO - Should replace securityInfo
   readonly attribute nsIWritablePropertyBag2 properties;
   // When streaming a new message, properties should be reset, so that there are
--- a/mailnews/mime/src/mimei.cpp
+++ b/mailnews/mime/src/mimei.cpp
@@ -1694,17 +1694,17 @@ MimeOptions_write(MimeHeaders *hdrs, Mim
 //  PR_ASSERT(opt->state->first_data_written_p);
 
   if (opt->state->separator_queued_p && user_visible_p)
   {
     opt->state->separator_queued_p = false;
     if (opt->state->separator_suppressed_p)
       opt->state->separator_suppressed_p = false;
     else {
-      const char *sep = "<BR><FIELDSET CLASS=\"mimeAttachmentHeader\">";
+      const char *sep = "<!--'\"--><BR><FIELDSET CLASS=\"mimeAttachmentHeader\">";
       int lstatus = opt->output_fn(sep, strlen(sep), closure);
       opt->state->separator_suppressed_p = false;
       if (lstatus < 0) return lstatus;
 
       nsCString name;
       name.Adopt(MimeHeaders_get_name(hdrs, opt));
       MimeHeaders_convert_header_value(opt, name, false);
 
--- a/suite/common/bookmarks/bookmarksManager.css
+++ b/suite/common/bookmarks/bookmarksManager.css
@@ -1,11 +1,11 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #searchFilter {
-  width: 23em;
+  width: 16em;
 }
 
 #detailsDeck-splitter {
   cursor: default;
 }
--- a/suite/common/bookmarks/browser-places.js
+++ b/suite/common/bookmarks/browser-places.js
@@ -177,21 +177,35 @@ var StarUI = {
     this._element("editBookmarkPanelRemoveButton").label = label;
 
     this._itemId = aItemId !== undefined ? aItemId : this._itemId;
     this.beginBatch();
 
     // Consume dismiss clicks, see bug 400924
     this.panel.popupBoxObject
         .setConsumeRollupEvent(PopupBoxObject.ROLLUP_CONSUME);
-    this.panel.openPopup(aAnchorElement, aPosition);
+    
+    let onPanelReady = fn => {
+      let target = this.panel;
+      if (target.parentNode) {
+        // By targeting the panel's parent and using a capturing listener, we
+        // can have our listener called before others waiting for the panel to
+        // be shown (which probably expect the panel to be fully initialized)
+        target = target.parentNode;
+      }
+      target.addEventListener("popupshown", function(event) {
+        fn();
+      }, {"capture": true, "once": true});
+    };
 
     gEditItemOverlay.initPanel(this._itemId,
-                               { hiddenRows: ["description", "location",
+                               { onPanelReady, 
+                                 hiddenRows: ["description", "location",
                                               "keyword"] });
+    this.panel.openPopup(aAnchorElement, aPosition);
   },
 
   panelShown:
   function SU_panelShown(aEvent) {
     if (aEvent.target == this.panel) {
       if (!this._element("editBookmarkPanelContent").hidden) {
         let fieldToFocus = "editBMPanel_" +
           Services.prefs.getCharPref("browser.bookmarks.editDialog.firstEditField");
--- a/suite/common/bookmarks/editBookmarkOverlay.js
+++ b/suite/common/bookmarks/editBookmarkOverlay.js
@@ -14,16 +14,17 @@ var gEditItemOverlay = {
   _itemIds: [],
   _uris: [],
   _tags: [],
   _allTags: [],
   _multiEdit: false,
   _itemType: -1,
   _readOnly: false,
   _hiddenRows: [],
+  _onPanelReady: false,
   _observersAdded: false,
   _staticFoldersListBuilt: false,
   _initialized: false,
   _titleOverride: null,
 
   // the first field which was edited after this panel was initialized for
   // a certain item
   _firstEditedField: "",
@@ -48,16 +49,18 @@ var gEditItemOverlay = {
     if (aInfo && aInfo.hiddenRows)
       this._hiddenRows = aInfo.hiddenRows;
     else
       this._hiddenRows.splice(0, this._hiddenRows.length);
     // force-read-only
     this._readOnly = aInfo && aInfo.forceReadOnly;
     // override title
     this._titleOverride = aInfo && aInfo.titleOverride;
+
+    this._onPanelReady = aInfo && aInfo.onPanelReady;
   },
 
   _showHideRows: function EIO__showHideRows() {
     var isBookmark = this._itemId != -1 &&
                      this._itemType == Components.interfaces.nsINavBookmarksService.TYPE_BOOKMARK;
     var isQuery = false;
     if (this._uri)
       isQuery = this._uri.schemeIs("place");
@@ -206,17 +209,25 @@ var gEditItemOverlay = {
       // Single bookmarks observe any change.  History entries and multiEdit
       // observe only tags changes, through bookmarks.
       if (this._itemId != -1 || this._uri || this._multiEdit)
         PlacesUtils.bookmarks.addObserver(this, false);
       window.addEventListener("unload", this, false);
       this._observersAdded = true;
     }
 
-    this._initialized = true;
+    let focusElement = () => {
+      this._initialized = true;
+    };
+
+    if (this._onPanelReady) {
+      this._onPanelReady(focusElement);
+    } else {
+      focusElement();
+    }
   },
 
   /**
    * Finds tags that are in common among this._tags entries that track tags
    * for each selected uri.
    * The tags arrays should be kept up-to-date for this to work properly.
    *
    * @return array of common tags for the selected uris.
@@ -231,20 +242,17 @@ var gEditItemOverlay = {
 
   _initTextField: function(aTextFieldId, aValue, aReadOnly) {
     var field = this._element(aTextFieldId);
     field.readOnly = aReadOnly !== undefined ? aReadOnly : this._readOnly;
 
     if (field.value != aValue) {
       field.value = aValue;
 
-      // clear the undo stack
-      var editor = field.editor;
-      if (editor)
-        editor.transactionManager.clear();
+      this._editorTransactionManagerClear(field);
     }
   },
 
   /**
    * Appends a menu-item representing a bookmarks folder to a menu-popup.
    * @param aMenupopup
    *        The popup to which the menu-item should be added.
    * @param aFolderId
@@ -335,16 +343,36 @@ var gEditItemOverlay = {
     if (aIID.equals(Components.interfaces.nsIDOMEventListener) ||
         aIID.equals(Components.interfaces.nsINavBookmarkObserver) ||
         aIID.equals(Components.interfaces.nsISupports))
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
   },
 
+  _editorTransactionManagerClear: function EIO__editorTransactionManagerClear(aItem) {
+    // Clear the editor's undo stack
+    let transactionManager;
+    try {
+      transactionManager = aItem.editor.transactionManager;
+    } catch (e) {
+      // When retrieving the transaction manager, editor may be null resulting
+      // in a TypeError. Additionally, the transaction manager may not
+      // exist yet, which causes access to it to throw NS_ERROR_FAILURE.
+      // In either event, the transaction manager doesn't exist it, so we
+      // don't need to worry about clearing it.
+      if (!(e instanceof TypeError) && e.result != Components.results.NS_ERROR_FAILURE) {
+        throw e;
+      }
+    }
+    if (transactionManager) {
+      transactionManager.clear();
+    }
+  },
+
   _element: function EIO__element(aID) {
     return document.getElementById("editBMPanel_" + aID);
   },
 
   _getItemStaticTitle: function EIO__getItemStaticTitle() {
     if (this._titleOverride)
       return this._titleOverride;
 
@@ -355,20 +383,17 @@ var gEditItemOverlay = {
   },
 
   _initNamePicker: function EIO_initNamePicker() {
     var namePicker = this._element("namePicker");
 
     namePicker.value = this._getItemStaticTitle();
     namePicker.readOnly = this._readOnly;
 
-    // clear the undo stack
-    var editor = namePicker.editor;
-    if (editor)
-      editor.transactionManager.clear();
+    this._editorTransactionManagerClear(namePicker);
   },
 
   uninitPanel: function EIO_uninitPanel(aHideCollapsibleElements) {
     if (aHideCollapsibleElements) {
       // hide the folder tree if it was previously visible
       var folderTreeRow = this._element("folderTreeRow");
       if (!folderTreeRow.collapsed)
         this.toggleFolderTreeVisibility();
@@ -904,18 +929,17 @@ var gEditItemOverlay = {
       return;
     }
 
     switch (aProperty) {
     case "title":
       var namePicker = this._element("namePicker");
       if (namePicker.value != aValue) {
         namePicker.value = aValue;
-        // clear undo stack
-        namePicker.editor.transactionManager.clear();
+        this._editorTransactionManagerClear(namePicker);
       }
       break;
     case "uri":
       var locationField = this._element("locationField");
       if (locationField.value != aValue) {
         this._uri = Components.classes["@mozilla.org/network/io-service;1"]
                               .getService(Components.interfaces.nsIIOService)
                               .newURI(aValue, null, null);
--- a/suite/common/history/history.xul
+++ b/suite/common/history/history.xul
@@ -95,21 +95,17 @@
             <menuseparator id="toolbarmode-sep"/>
           </menupopup>
         </menu>
 
         <menu id="tasksMenu"/>
         <menu id="windowMenu"/>
         <menu id="menu_Help"/>
       </menubar>
-    </toolbar>
-    <toolbar class="chromeclass-toolbar"
-             id="placesSearchToolbar"
-             align="center"
-             grippytooltiptext="&searchBar.tooltip;">
+      <toolbarspring/>
       <textbox id="search-box"
                clickSelectsAll="true"
                type="search"
                aria-controls="historyTree"
                placeholder="&search.placeholder;"
                oncommand="searchHistory(this.value);"/>
     </toolbar>
   </toolbox>
--- a/suite/common/history/places.css
+++ b/suite/common/history/places.css
@@ -1,7 +1,11 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 tree[type="places"] {
   -moz-binding: url("chrome://communicator/content/history/tree.xml#places-tree");
 }
+
+#search-box {
+  width: 16em;
+}
--- a/suite/common/jar.mn
+++ b/suite/common/jar.mn
@@ -73,17 +73,16 @@ comm.jar:
    content/communicator/helpMessengerOverlay.xul
    content/communicator/helpSecurityOverlay.xul
    content/communicator/labelsencodings.properties                  (/mozilla/dom/encoding/labelsencodings.properties)
 # the following file is a suite-specific override of the generic license.html, using suite/common/app-license.html as input:
 *  content/communicator/license.html                                (/mozilla/toolkit/content/license.html)
    content/communicator/nsContextMenu.js
    content/communicator/openLocation.js
    content/communicator/openLocation.xul
-   content/communicator/passwordManager.xul
    content/communicator/safeMode.js
    content/communicator/safeMode.xul
    content/communicator/sanitize.xul
    content/communicator/setDesktopBackground.js
    content/communicator/setDesktopBackground.xul
    content/communicator/tasksOverlay.js
    content/communicator/tasksOverlay.xul
    content/communicator/utilityOverlay.js
deleted file mode 100644
--- a/suite/common/passwordManager.xul
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0"?> <!-- -*- Mode: SGML; indent-tabs-mode: nil -*- -->
-<!-- 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://communicator/skin/" type="text/css"?>
-
-<!DOCTYPE dialog [
-<!ENTITY % managerDTD SYSTEM "chrome://communicator/locale/passwordManager.dtd">
-%managerDTD;
-<!ENTITY % mgrDTD SYSTEM "chrome://passwordmgr/locale/passwordManager.dtd">
-%mgrDTD;
-]>
-
-<dialog id="SignonViewerDialog"
-        windowtype="Toolkit:PasswordManager"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-        buttons="accept,help"
-        buttonlabelaccept="&closebutton.label;"
-        onload="Startup(); SignonsStartup(); RejectsStartup();"
-        onunload="Shutdown();"
-        ondialoghelp="openHelp('password_mgr', 'chrome://communicator/locale/help/suitehelp.rdf');"
-        title="&windowtitle.label;"
-        persist="width height screenX screenY">
-
-  <script type="application/javascript"
-          src="chrome://passwordmgr/content/passwordManagerCommon.js"/>
-  <script type="application/javascript"
-          src="chrome://passwordmgr/content/passwordManager.js"/>
-  <script type="application/javascript"
-          src="chrome://passwordmgr/content/passwordManagerExceptions.js"/>
-  <script type="application/javascript"
-          src="chrome://help/content/contextHelp.js"/>
-
-  <stringbundle id="signonBundle"
-                src="chrome://passwordmgr/locale/passwordmgr.properties"/>
-  <keyset>
-    <key key="&windowClose.key;" modifiers="accel" oncommand="window.close();"/>
-    <key key="&focusSearch1.key;" modifiers="accel"
-         oncommand="if (document.getElementById('signonsTab').selected) FocusFilterBox();"/>
-  </keyset>
-
-  <popupset id="signonsTreeContextSet">
-    <menupopup id="signonsTreeContextMenu"
-               onpopupshowing="UpdateCopyPassword();">
-      <menuitem id="context-copypassword"
-                label="&copyPasswordCmd.label;"
-                accesskey="&copyPasswordCmd.accesskey;"
-                oncommand="CopyPassword();"/>
-    </menupopup>
-  </popupset>
-
-  <tabbox flex="1">
-    <tabs>
-      <tab id="signonsTab" label="&tab.signonsstored.label;"/>
-      <tab id="signonsitesTab" label="&tab.signonsnotstored.label;"/>
-    </tabs>
-    <tabpanels flex="1">
-
-    <!-- saved signons -->
-      <vbox id="savedsignons" flex="1">
-        <!-- filter -->
-        <hbox align="center">
-          <textbox id="filter" flex="1" type="search"
-                   aria-controls="signonsTree"
-                   placeholder="&search.placeholder;"
-                   oncommand="_filterPasswords();"/>
-        </hbox>
-        <separator class="thin"/>
-
-        <label control="signonsTree" id="signonsIntro"/>
-        <separator class="thin"/>
-        <tree id="signonsTree" flex="1"
-              style="height: 20em;" hidecolumnpicker="true"
-              onkeypress="HandleSignonKeyPress(event)"
-              onselect="SignonSelected();"
-              context="signonsTreeContextMenu">
-          <treecols>
-            <treecol id="siteCol" label="&treehead.site.label;" flex="5"
-                     onclick="SignonColumnSort('hostname');"
-                     persist="width" sortDirection="ascending"/>
-            <splitter class="tree-splitter"/>
-            <treecol id="userCol" label="&treehead.username.label;" flex="2"
-                     onclick="SignonColumnSort('username');" persist="width"/>
-            <splitter class="tree-splitter"/>
-            <treecol id="passwordCol" label="&treehead.password.label;" flex="2"
-                     onclick="SignonColumnSort('password');" persist="width"
-                     hidden="true"/>
-          </treecols>
-          <treechildren/>
-        </tree>
-        <separator class="thin"/>
-        <hbox id="SignonViewerButtons">
-          <button id="removeSignon" disabled="true" icon="remove"
-                  label="&remove.label;" accesskey="&remove.accesskey;"
-                  oncommand="DeleteSignon();"/>
-          <button id="removeAllSignons" icon="clear"
-                  label="&removeall.label;" accesskey="&removeall.accesskey;"
-                  oncommand="DeleteAllSignons();"/>
-          <spacer flex="1"/>
-          <button id="togglePasswords"
-                  oncommand="TogglePasswordVisible();"/>
-        </hbox>
-      </vbox>
-
-      <!-- rejected sites -->
-      <vbox id="rejectedsites" flex="1">
-        <description control="rejectsTree">&loginsSpielExceptions.label;</description>
-        <separator class="thin"/>
-        <tree id="rejectsTree" flex="1" style="height: 20em;" hidecolumnpicker="true"
-              onkeypress="HandleRejectKeyPress(event)"
-              onselect="RejectSelected();">
-          <treecols>
-            <treecol id="rejectCol" label="&treehead.site.label;" flex="5"
-                     onclick="RejectColumnSort('host');" sortDirection="ascending"/>
-          </treecols>
-          <treechildren/>
-        </tree>
-        <separator class="thin"/>
-        <hbox>
-          <button id="removeReject" disabled="true" icon="remove"
-                  accesskey="&remove.accesskey;"
-                  label="&remove.label;" oncommand="DeleteReject();"/>
-          <button id="removeAllRejects"
-                  accesskey="&removeall.accesskey;"
-                  icon="clear" label="&removeall.label;"
-                  oncommand="DeleteAllRejects();"/>
-        </hbox>
-      </vbox>
-    </tabpanels>
-  </tabbox>
-</dialog>
--- a/suite/common/places/nsPlacesAutoComplete.js
+++ b/suite/common/places/nsPlacesAutoComplete.js
@@ -3,18 +3,16 @@
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
 Components.utils.import("resource://gre/modules/Services.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
                                   "resource://gre/modules/PlacesUtils.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "TelemetryStopwatch",
-                                  "resource://gre/modules/TelemetryStopwatch.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "NetUtil",
                                   "resource://gre/modules/NetUtil.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "Task",
                                   "resource://gre/modules/Task.jsm");
 
 ////////////////////////////////////////////////////////////////////////////////
 //// Constants
 
@@ -543,17 +541,16 @@ nsPlacesAutoComplete.prototype = {
       [this._getBoundAdaptiveQuery()];
 
     if (this._hasBehavior("openpage")) {
       queries.push(this._getBoundOpenPagesQuery(tokens));
     }
     queries.push(query);
 
     // Start executing our queries.
-    this._telemetryStartTime = Date.now();
     this._executeQueries(queries);
 
     // Set up our persistent state for the duration of the search.
     this._searchTokens = tokens;
     this._usedPlaces = {};
   },
 
   stopSearch: function PAC_stopSearch()
@@ -800,29 +797,16 @@ nsPlacesAutoComplete.prototype = {
   {
     let result = this._result;
     let resultCode = result.matchCount ? "RESULT_SUCCESS" : "RESULT_NOMATCH";
     if (aSearchOngoing) {
       resultCode += "_ONGOING";
     }
     result.setSearchResult(Ci.nsIAutoCompleteResult[resultCode]);
     this._listener.onSearchResult(this, result);
-    if (this._telemetryStartTime) {
-      let elapsed = Date.now() - this._telemetryStartTime;
-      if (elapsed > 50) {
-        try {
-          Services.telemetry
-                  .getHistogramById("PLACES_AUTOCOMPLETE_1ST_RESULT_TIME_MS")
-                  .add(elapsed);
-        } catch (ex) {
-          Components.utils.reportError("Unable to report telemetry.");
-        }
-      }
-      this._telemetryStartTime = null;
-    }
   },
 
   /**
    * Synchronize suggest.* prefs with autocomplete.enabled.
    */
   _syncEnabledPref: function PAC_syncEnabledPref()
   {
     let suggestPrefs = ["suggest.history", "suggest.bookmark", "suggest.openpage"];
--- a/suite/config/version.txt
+++ b/suite/config/version.txt
@@ -1,1 +1,1 @@
-2.49.3
+2.49.4
--- a/suite/locales/en-US/chrome/common/help/composer_help.xhtml
+++ b/suite/locales/en-US/chrome/common/help/composer_help.xhtml
@@ -356,17 +356,17 @@
     list, click the bulleted list button) in the Format toolbar.</li>
 </ol>
 
 <p>To position indented text below a list item:</p>
 
 <ol>
   <li>Click to place the insertion point within the list item.</li>
   <li>Press <kbd>Shift</kbd>+<kbd class="mac">Return</kbd><kbd
-    class="noMac">Enter</kbd>to create the hanging indent.</li>
+    class="noMac">Enter</kbd> to create the hanging indent.</li>
   <li>Type the text you want to indent.</li>
   <li>Press <kbd>Shift</kbd>+<kbd class="mac">Return</kbd><kbd
     class="noMac">Enter</kbd> to create another indented paragraph, or press
     <kbd class="mac">Return</kbd><kbd class="noMac">Enter</kbd> to create the
     next list item.</li>
 </ol>
 
 <p><strong>Tip</strong>: You can increase or decrease the indentation of list
deleted file mode 100644
--- a/suite/locales/en-US/chrome/common/passwordManager.dtd
+++ /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/. -->
-
-<!ENTITY      windowtitle.label               "Password Manager">
-<!ENTITY      tab.signonsstored.label         "Passwords Saved">
-<!ENTITY      tab.signonsnotstored.label      "Passwords Never Saved">
-<!ENTITY      search.placeholder              "Search">
--- a/suite/locales/jar.mn
+++ b/suite/locales/jar.mn
@@ -34,17 +34,16 @@
   locale/@AB_CD@/communicator/defaultClientDialog.dtd                       (%chrome/common/defaultClientDialog.dtd)
   locale/@AB_CD@/communicator/feeds/subscribe.dtd                           (%chrome/common/feeds/subscribe.dtd)
   locale/@AB_CD@/communicator/feeds/subscribe.properties                    (%chrome/common/feeds/subscribe.properties)
   locale/@AB_CD@/communicator/gopherAddon.dtd                               (%chrome/common/gopherAddon.dtd)
   locale/@AB_CD@/communicator/notification.dtd                              (%chrome/common/notification.dtd)
   locale/@AB_CD@/communicator/notification.properties                       (%chrome/common/notification.properties)
   locale/@AB_CD@/communicator/openLocation.dtd                              (%chrome/common/openLocation.dtd)
   locale/@AB_CD@/communicator/openLocation.properties                       (%chrome/common/openLocation.properties)
-  locale/@AB_CD@/communicator/passwordManager.dtd                           (%chrome/common/passwordManager.dtd)
   locale/@AB_CD@/communicator/printPreview.dtd                              (%chrome/common/printPreview.dtd)
   locale/@AB_CD@/communicator/safeBrowsing.dtd                              (%chrome/common/safeBrowsing.dtd)
   locale/@AB_CD@/communicator/quitDialog.properties                         (%chrome/common/quitDialog.properties)
   locale/@AB_CD@/communicator/shellservice.properties                       (%chrome/common/shellservice.properties)
   locale/@AB_CD@/communicator/sanitize.dtd                                  (%chrome/common/sanitize.dtd)
   locale/@AB_CD@/communicator/setDesktopBackground.dtd                      (%chrome/common/setDesktopBackground.dtd)
   locale/@AB_CD@/communicator/tasksOverlay.dtd                              (%chrome/common/tasksOverlay.dtd)
   locale/@AB_CD@/communicator/typeaheadfind.properties                      (%chrome/common/typeaheadfind.properties)
--- a/suite/mailnews/msgMail3PaneWindow.js
+++ b/suite/mailnews/msgMail3PaneWindow.js
@@ -294,16 +294,18 @@ var folderListener =
       else if (eventType == "AboutToCompact") {
         if (gDBView)
           gCurrentlyDisplayedMessage = gDBView.currentlyDisplayedMessage;
       }
       else if (eventType == "CompactCompleted") {
         HandleCompactCompleted(folder);
       }
       else if (eventType == "RenameCompleted") {
+        // Clear this so we don't try to clear its new messages.
+        gMsgFolderSelected = null;
         SelectFolder(folder.URI);
       }
       else if (eventType == "JunkStatusChanged") {
         HandleJunkStatusChanged(folder);
       }
     }
 }
 
--- a/suite/themes/modern/global/autocomplete.css
+++ b/suite/themes/modern/global/autocomplete.css
@@ -34,30 +34,32 @@ textbox[nomatch="true"][highlightnonmatc
 
 .autocomplete-history-dropmarker[open="true"] {
   margin-top: 3px;
   margin-bottom: 1px;
   margin-inline-start: 3px;
   margin-inline-end: 1px;
 }
 
-/* ::::: popups ::::: */
+/* ::::: autocomplete popups ::::: */
 
-.autocomplete-history-popup,
-panel[type="autocomplete"] {
+panel[type="autocomplete"],
+panel[type="autocomplete-richlistbox"],
+.autocomplete-history-popup {
+  -moz-appearance: none;
   border: 1px solid;
   -moz-border-top-colors: #6B747E;
   -moz-border-right-colors: #6B747E;
   -moz-border-bottom-colors: #6B747E;
   -moz-border-left-colors: #6B747E;
   background-color: #FFFFFF;
 }
 
 .autocomplete-history-popup {
-  max-height: 25em;
+  max-height: 180px;
 }
 
 /* ::::: tree ::::: */
 
 .autocomplete-tree {
   border: none;
   background-color: transparent !important;
 }
@@ -80,8 +82,27 @@ panel[type="autocomplete"] {
 .autocomplete-treebody::-moz-tree-cell-text(selected) {
   color: #FFFFFF !important;
 }
 
 .autocomplete-treebody::-moz-tree-image(treecolAutoCompleteValue) {
   max-width: 16px;
   height: 16px;
 }
+
+/* ::::: richlistbox autocomplete ::::: */
+
+.autocomplete-richlistbox {
+  -moz-appearance: none;
+  margin: 0px !important;
+  border: none !important;
+  padding: 0px !important;
+}
+
+/* ::::: textboxes inside toolbarpaletteitems ::::: */
+
+toolbarpaletteitem > toolbaritem > textbox > hbox > hbox > html|*.textbox-input {
+  visibility: hidden;
+}
+
+toolbarpaletteitem > toolbaritem > * > textbox > hbox > hbox > html|*.textbox-input {
+  visibility: hidden;
+}
--- a/suite/themes/modern/jar.mn
+++ b/suite/themes/modern/jar.mn
@@ -569,16 +569,17 @@ modern.jar:
   skin/modern/messenger/smime/icons/sbCryptoOk.gif                 (messenger/smime/icons/sbCryptoOk.gif)
   skin/modern/messenger/smime/icons/sbCryptoNotOk.gif              (messenger/smime/icons/sbCryptoNotOk.gif)
   skin/modern/messenger/smime/icons/hdrSignOk.gif                  (messenger/smime/icons/hdrSignOk.gif)
   skin/modern/messenger/smime/icons/hdrSignUnknown.gif             (messenger/smime/icons/hdrSignUnknown.gif)
   skin/modern/messenger/smime/icons/hdrSignNotOk.gif               (messenger/smime/icons/hdrSignNotOk.gif)
   skin/modern/messenger/smime/icons/hdrCryptoOk.gif                (messenger/smime/icons/hdrCryptoOk.gif)
   skin/modern/messenger/smime/icons/hdrCryptoNotOk.gif             (messenger/smime/icons/hdrCryptoNotOk.gif)
   skin/modern/messenger-newsblog/feed-subscriptions.css            (messenger/newsblog/feed-subscriptions.css)
+  skin/modern/mozapps/aboutNetworking.css                          (mozapps/aboutNetworking.css)
   skin/modern/mozapps/downloads/downloadIcon.png                   (mozapps/downloads/downloadIcon.png)
   skin/modern/mozapps/downloads/downloads.css                      (mozapps/downloads/downloads.css)
   skin/modern/mozapps/downloads/unknownContentType.css             (mozapps/downloads/unknownContentType.css)
   skin/modern/mozapps/extensions/about.css                         (mozapps/extensions/about.css)
   skin/modern/mozapps/extensions/alerticon-error.png               (mozapps/extensions/alerticon-error.png)
   skin/modern/mozapps/extensions/alerticon-info-negative.png       (mozapps/extensions/alerticon-info-negative.png)
   skin/modern/mozapps/extensions/alerticon-info-positive.png       (mozapps/extensions/alerticon-info-positive.png)
   skin/modern/mozapps/extensions/alerticon-warning.png             (mozapps/extensions/alerticon-warning.png)
new file mode 100644
--- /dev/null
+++ b/suite/themes/modern/mozapps/aboutNetworking.css
@@ -0,0 +1,151 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+@import url("chrome://global/skin/plugins.css");
+@import url("chrome://global/skin/button.css"); 
+
+html {
+  height: 100%;
+}
+
+body {
+  display: block;
+  align-items: stretch;
+  height: 100%;
+}
+
+#sectionTitle {
+  float: left;
+}
+
+#refreshDiv {
+  text-align: end;
+  margin-bottom: 0.5em;
+}
+
+#refreshButton {
+  vertical-align: middle;
+}
+
+/** Categories **/
+
+#categories > .category
+{
+  -moz-appearance: button;
+  display: inline-block;
+
+  margin: 2px;
+  border: 6px solid;
+  -moz-border-top-colors: transparent transparent transparent #000000 #BBC6D1 #B1BBC9;
+  -moz-border-right-colors: transparent transparent transparent #000000 #A2AEBB #A7B4C1;
+  -moz-border-bottom-colors: transparent transparent transparent #000000 #97A6B6 #9DAAB9;
+  -moz-border-left-colors: transparent transparent transparent #000000 #BBC6D1 #B1BBC9;
+  border-radius: 5px;
+  min-width: 6em;
+  background-color: #AAB6C4;
+  background-clip: padding-box;
+  color: #000000;
+  font: menu;
+}
+
+.category {
+  cursor: pointer;
+  /* Center category names */
+  align-items: center;
+}
+
+.category .category-name {
+  pointer-events: none;
+}
+
+#categories hr {
+  display: none;
+}
+
+/** Warning container **/
+
+/* XXX: a lot of this is duplicated from info-pages.css since that stylesheet
+   is incompatible with this type of layout */
+.warningBackground:not([hidden]) {
+  display: flex;
+}
+
+.warningBackground {
+  flex-direction: column;
+  box-sizing: border-box;
+  align-items: center;
+  justify-content: center;
+  width: 100%;
+  height: 50%;
+  top: 0;
+  left: 0;
+  position: fixed;
+}
+
+.container {
+  width: 40%;
+  color: #22262F;
+  background-color: #C7D0D9;
+  background-image: url("chrome://global/skin/icons/warning-48.png");
+  background-repeat: no-repeat;
+  background-position: 30px 3em;
+  border: 1px solid #494F5D;
+  border-radius: 10px;
+  padding: 3em;
+  padding-inline-start: 78px;
+}
+
+.title {
+  display: inline-block;
+  font-size: 1rem;
+  position: relative;
+  border-bottom: 1px solid #000000;
+  margin-bottom: 1em;
+  padding-bottom: 0.5em;
+}
+
+.warningBackground button {
+  margin-top: 1em;
+  margin-left: 0;
+  min-width: 100px;
+}
+
+/** Content area **/
+
+.warningBackground:not([hidden]) ~ div
+{
+  display: none;
+}
+
+.main-content {
+  flex: 1;
+  margin: 5px 0px;
+  padding: 5px;
+  border: 1px solid #2D3B49;
+  border-radius: 6px;
+}
+
+.header-name {
+  font-size: 1.5rem;
+  font-weight: bold;
+} 
+
+.tab {
+  padding: 0.5em 0;
+}
+
+.tab table {
+  border: 1px solid;
+  width: 100%;
+}
+
+th, td, table {
+  text-align: start;
+}
+
+th {
+  font-size: medium;
+  text-align: start;
+  border-top: 1px dotted #2D3B49;
+}