[Pkg-mozext-commits] [firebug] 13/18: Imported Upstream version 2.0.17

David Prévot taffit at moszumanska.debian.org
Thu Jun 9 01:36:44 UTC 2016


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository firebug.

commit c419ad3a4be588c2e22dffb54229426a3d29e5e8
Merge: 5fd4217 65f8ddb
Author: David Prévot <david at tilapin.org>
Date:   Wed Jun 8 21:05:46 2016 -0400

    Imported Upstream version 2.0.17

 META-INF/manifest.mf                               |  52 +++++++--------
 META-INF/mozilla.rsa                               | Bin 4188 -> 4188 bytes
 META-INF/mozilla.sf                                |   4 +-
 content/firebug/branch.properties                  |   2 +-
 content/firebug/css/computedPanel.js               |   1 +
 .../firebug/debugger/script/breakNotification.js   |   3 +
 content/firebug/firefox/browserOverlay.css         |  16 +++++
 content/firebug/firefox/browserOverlay.js          |  70 ++++++++++++++++++++-
 .../firebug/firefox/external-editors/editors.js    |   2 +-
 .../firefox/newMultiprocessNotificationPanel.xml   |  48 +++++++++++---
 content/firebug/lib/url.js                         |   2 +-
 content/firebug/net/netCacheReader.js              |  12 +++-
 content/firebug/net/netProgress.js                 |   2 +
 defaults/preferences/firebug.js                    |   4 ++
 install.rdf                                        |   6 +-
 locale/en-US/multiprocess-notification.properties  |  16 +++--
 16 files changed, 187 insertions(+), 53 deletions(-)

diff --cc META-INF/manifest.mf
index 4dbc8f6,0000000..9372bbc
mode 100644,000000..100644
--- a/META-INF/manifest.mf
+++ b/META-INF/manifest.mf
@@@ -1,3162 -1,0 +1,3162 @@@
 +Manifest-Version: 1.0
 +
 +Name: install.rdf
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: xRusy5pQyUvlRY7HRawzBw==
- SHA1-Digest: 7YjIi1dfIfXUgjAcGqdfYBGuGGg=
++MD5-Digest: Fo8crNgxgIKfaES4cm2y8w==
++SHA1-Digest: aoYDLy9wFmJywdhFBwYMNFlGYyA=
 +
 +Name: chrome.manifest
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: bdcjVC3MPhyaQDhDfbOh6A==
 +SHA1-Digest: e884HHfJg++1lsgHg/Z+FvYLM+4=
 +
 +Name: bootstrap.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: w/4lqvFkLBAM88mkSlAfPQ==
 +SHA1-Digest: 2VyPyLcNKkp4rqIg4cZf9bL5ciM=
 +
 +Name: build.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: hDscyxUedUWHS3CPE6/fwQ==
 +SHA1-Digest: ySlbVIfMcV5XlSvqEME00GAoxNM=
 +
 +Name: content/firebug/branch.properties
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: nh94sscGsIbPe9TJ0zwimQ==
- SHA1-Digest: J8XBAa297u8g5uw3ERPXCwDEavs=
++MD5-Digest: 46OQnK5yBi8GmapJNrXPgA==
++SHA1-Digest: /2W82I6mwjLxY+oY6lQSSyS55Zc=
 +
 +Name: content/firebug/firebug.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: MQUAuUtQ+N0RP9BdiVLeRQ==
 +SHA1-Digest: XpMkLp1UY+6GThNZu2cEOmskL2M=
 +
 +Name: content/firebug/firebug.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: r/QjQ/uJlspfQL2GQcMeiQ==
 +SHA1-Digest: pSKqp41rol4yvvXI2WLvbzhifeA=
 +
 +Name: content/firebug/firebugOverlay.xul
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: yz4K2TFMmJplsYA8cAlzFQ==
 +SHA1-Digest: A1xja27+mGZOBe79eZLU5ZjFjaY=
 +
 +Name: content/firebug/legacy.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: cyOW1DFRc3Va8V/ZkdfMdA==
 +SHA1-Digest: XHSukn6s2dd3wD3Mj4MZp09VGpQ=
 +
 +Name: content/firebug/main.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 6jr/9rY8z+Xxeq+IxwrFTQ==
 +SHA1-Digest: 81D8MZQ81fOkzqCrMuuOIieUguI=
 +
 +Name: content/firebug/moduleConfig.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: fpoL0QD2LRX4oG+r3w20Vg==
 +SHA1-Digest: TedHD9/Ksyia66k9R9fPNqHTVrE=
 +
 +Name: content/firebug/trace.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: kBBL0ffN+Iqbins4CIb+GA==
 +SHA1-Digest: gz7eAP1oeWQsIWCAIyz4RZO1rJo=
 +
 +Name: content/firebug/accessible/a11y.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 1GMHJA6cYhlEnJFDBg0STA==
 +SHA1-Digest: 1foz3CTUzwqK51J4qVFymaYx0Nk=
 +
 +Name: content/firebug/bti/inProcess/browser.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 2Mj/QRZaqswkbQj1JUaQyA==
 +SHA1-Digest: vtk0WnWyDr7NQ++0vvkXRtZkyWM=
 +
 +Name: content/firebug/bti/inProcess/compilationunit.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: F3Qp980L5CrTY/+kEyWyCA==
 +SHA1-Digest: JYzQg5NrV7t7XrccSZUJetB9GlU=
 +
 +Name: content/firebug/bti/inProcess/javascripttool.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: MLLmOIMMPK8mirXlkC/Brg==
 +SHA1-Digest: 9GhR0RfQ8kmcvFpAiv5Qt9UpGUs=
 +
 +Name: content/firebug/bti/inProcess/webApp.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ZmFYBvLYXa5tdiHyddkz/g==
 +SHA1-Digest: HFS7yQCI/Uvv9I1xDTG3zf6Rgbc=
 +
 +Name: content/firebug/chrome/activableModule.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: pPl+YUw1q6hsMj/1hSigLg==
 +SHA1-Digest: igfoscZz+jeC3MCsmFDzSxv0DZQ=
 +
 +Name: content/firebug/chrome/activablePanel.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: o5t7i1P2w3fjXtj8VphGgA==
 +SHA1-Digest: CEPlzQfBTYEuELdxkB8+xT6Y0cM=
 +
 +Name: content/firebug/chrome/activation.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: LjftwhVIyEw3r3xKyBq2CA==
 +SHA1-Digest: FOzQ1heSaTLORKD/GXh7QPeqqpA=
 +
 +Name: content/firebug/chrome/annotations.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Efni1TVUHpCuKEizqEkH4A==
 +SHA1-Digest: J19yiDaLSC92GDLzgzR4RUBBIj4=
 +
 +Name: content/firebug/chrome/balloonNote.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: HcbPGUB96cOiodIRoN+SFg==
 +SHA1-Digest: SudHI+wA+KO+beL7GLI2XXv/Pt8=
 +
 +Name: content/firebug/chrome/chrome.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 5sCnpBRt9vXcB6jAXno3yg==
 +SHA1-Digest: rFqv0piYpfyX9To/aB5474ptKnM=
 +
 +Name: content/firebug/chrome/domTree.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 6eRbKGi/8KpRijTc9x2g7g==
 +SHA1-Digest: OrQN54zVTFJpfefxY0f8364k+7s=
 +
 +Name: content/firebug/chrome/eventSource.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ZXjDxxpoC0N0RGtBWYib3w==
 +SHA1-Digest: 8qWnSghi0XJxRzEalownN0DedZU=
 +
 +Name: content/firebug/chrome/firefox.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: t8otGbiNLZ3GsXjKOIKvFg==
 +SHA1-Digest: r+qp46W0Q6nOUiv4Kv6mATffG7o=
 +
 +Name: content/firebug/chrome/infotip.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: fq2D+/BM72RCBxjX34XpsA==
 +SHA1-Digest: w8iUQ1+akBSCuQ4Byf6V3E76pP4=
 +
 +Name: content/firebug/chrome/knownIssues.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: vSjjxd2airNqOr1mRo135w==
 +SHA1-Digest: RRk++e99zZnNzIddzbaUZvBgMRc=
 +
 +Name: content/firebug/chrome/measureBox.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 3iONxHzwPF+rt9eCV+bWIQ==
 +SHA1-Digest: I3LWwk/gE8JydAKKv5HWrOVUOXU=
 +
 +Name: content/firebug/chrome/menu.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: VT4M9ru0umaWrGpzCgcLMA==
 +SHA1-Digest: bN7wZkVCQV1IeNZ/ehb3Ixi496U=
 +
 +Name: content/firebug/chrome/module.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 3k6GA4mkrc3KWoenNLbpuA==
 +SHA1-Digest: YgbpguJWvC3+W2ToC2DRVAJ4vxg=
 +
 +Name: content/firebug/chrome/navigationHistory.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: agIx3H91FeiO20ZnmBwFcQ==
 +SHA1-Digest: mvCgwBOHvzBQKft5SdqWlU3HQ/s=
 +
 +Name: content/firebug/chrome/panel.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 9QszMBUbPM5H5IlnN7jg5A==
 +SHA1-Digest: 8fScKnmdFOdNMw4u6NrpYoYlEBU=
 +
 +Name: content/firebug/chrome/panelActivation.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 8dTdQykizF7/+CzEMAXYoQ==
 +SHA1-Digest: uyyj5Ol5ScO5ukWlen3YsTmiQeI=
 +
 +Name: content/firebug/chrome/panelNotification.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: O+cTZGGqslrssWg4OtIo6g==
 +SHA1-Digest: SyPlj/V7BJdMtX2TNuhC+k6Otfs=
 +
 +Name: content/firebug/chrome/panelSelector.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: mIqlVDOyOKNY6z7QRjdFgQ==
 +SHA1-Digest: b/Kpg3gYKlzwaA02peeCJlTZHyo=
 +
 +Name: content/firebug/chrome/plugin.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: GuRDXNnJO9WBgccPkRqZTg==
 +SHA1-Digest: T3xNIfbpmG228xLM3jDsgkhqdSc=
 +
 +Name: content/firebug/chrome/privacy.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: kwR5G8zLWs7lZku0TFfMJQ==
 +SHA1-Digest: dUVDhmIlJTpUMm6uNlb6ycVcKwI=
 +
 +Name: content/firebug/chrome/rep.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: T5px3PEYhlQv/7U08Wf0SA==
 +SHA1-Digest: 2x6Ktpqn/KUxjVpL1toO5LImRDs=
 +
 +Name: content/firebug/chrome/reps.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: SEKAZPSSH/+j6FM81o5JwA==
 +SHA1-Digest: 4+LYpBp5wbM6/hxQQX9eqtDUWUw=
 +
 +Name: content/firebug/chrome/searchBox.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: o5RaYdFLsNxz7b8RIWCdYQ==
 +SHA1-Digest: Yqe1to6z7thN3853hhSkhyIt04s=
 +
 +Name: content/firebug/chrome/shortcuts.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ek8Kw0O0VNudh99qvr8zlg==
 +SHA1-Digest: ZIlylR2MHsOPIrSbeeoG7g1GhRo=
 +
 +Name: content/firebug/chrome/statusPath.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ifiEwstyrFR7gi+ls82VEg==
 +SHA1-Digest: AxswfvZhrU5iFcbTzPZ74tnIwn8=
 +
 +Name: content/firebug/chrome/tabContext.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: CQqjQCFDhREXxNxz6zTHug==
 +SHA1-Digest: p7ecfjvXu8hZmdsP9ttRf+/5bUE=
 +
 +Name: content/firebug/chrome/tableRep.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: MHRGhpp/XZqSR+H7NCfmbA==
 +SHA1-Digest: W7iK3khdHR8vYO556yrKtuxp9fM=
 +
 +Name: content/firebug/chrome/tabWatcher.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: HDl82NHua+zHRgt5+msErg==
 +SHA1-Digest: vZGmak2HlK7LlAkmS16rwQgpzK4=
 +
 +Name: content/firebug/chrome/toggleSidePanels.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ES6bpjFN5EpKjzkRFN7aug==
 +SHA1-Digest: 6GZuQMN+Zk1gHCwaNS2HxHKpe0o=
 +
 +Name: content/firebug/chrome/tool.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: NhqAqLh5lYrCFsrWa9rp7g==
 +SHA1-Digest: 2Gju+OjFTys6z7jpK9UUsTG7Png=
 +
 +Name: content/firebug/chrome/toolbar.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: lfNbMHYniXPjgNlOfMLJJg==
 +SHA1-Digest: t7xjHuJmHYwYf8FppaLoHvz6A90=
 +
 +Name: content/firebug/chrome/window.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: dLuj7T0wPUhwaRKcK1wf5A==
 +SHA1-Digest: LB2PZ6J2DZyXQ/SC8rMqBO8IEKQ=
 +
 +Name: content/firebug/console/autoCompleter.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: mMxxyaTrR6iefZSIBE4mpQ==
 +SHA1-Digest: hfrpBfgI8gF65jFM/BRaVAat9FA=
 +
 +Name: content/firebug/console/closureInspector.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: FcLSdH54BABNk0+LZfSjMg==
 +SHA1-Digest: DGbwFkIo0BoJGKJiTLjeBK2z438=
 +
 +Name: content/firebug/console/commandEditor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: qUMZrYah8SrHnHY3Pbo4fg==
 +SHA1-Digest: +g3HoqMwzPgLGHyatWArhlAw4ss=
 +
 +Name: content/firebug/console/commandHistory.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: FfnqJsgQ3rftXr+QEd8Aog==
 +SHA1-Digest: T8XS6RXU7uLWYpiOmgEgvDCBNsk=
 +
 +Name: content/firebug/console/commandLine.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 4v5EME+X1YUkbVwPUqQDJQ==
 +SHA1-Digest: DT6Me54v0Qn1mQ+Zoamfzgxoovs=
 +
 +Name: content/firebug/console/commandLineAPI.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 4UADeSvsxDSEN4cmTtOOiA==
 +SHA1-Digest: 3fpcB05PTrUniKyofollHAA+v8A=
 +
 +Name: content/firebug/console/commandLineExposed.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: vAU58xiSWbyu/scBWXRhRA==
 +SHA1-Digest: FP+P85XiqQymQOlkoCYBIukcCaA=
 +
 +Name: content/firebug/console/commandLinePopup.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: THhlFARwA0dU4bUhGVgVIA==
 +SHA1-Digest: I8ChsVIM1lUf6lFPpMStBAG3IJc=
 +
 +Name: content/firebug/console/console.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 5v7uFz05eVHHXqdyYlCayA==
 +SHA1-Digest: wsKDx1BYOkgPTp/a5xzPHIe0Kto=
 +
 +Name: content/firebug/console/consoleBase.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: XxKBPyceMrD1abacIfuk4g==
 +SHA1-Digest: 0CvgbEzchC2nbYyi/mw5J8Ttef0=
 +
 +Name: content/firebug/console/consoleExposed.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: M2rY8Uj2Eun8SCK0mqplLA==
 +SHA1-Digest: JW/fNJRpWKT94PO2rVIoUKQMKVU=
 +
 +Name: content/firebug/console/consoleInjector.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: frUTZEcGBBUUSwfjgmdrAg==
 +SHA1-Digest: D+4Nla0el6vLT1nBGXA3MdOc7HI=
 +
 +Name: content/firebug/console/consolePanel.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 14OzKPcN4BwDpsBrIBl88Q==
 +SHA1-Digest: C/URVuUwCszOj1XW8t0BYb+l5kA=
 +
 +Name: content/firebug/console/errorCopy.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: g0WHqyRu2a81fLLcf5DyTA==
 +SHA1-Digest: fluPTGkAR7Hn6ickgTpvOMnhCE8=
 +
 +Name: content/firebug/console/errorMessageObj.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Gcxuew98nvIrgnyzx0VyYg==
 +SHA1-Digest: qEpB5j+yBZh4K0U72PXhCImzM9o=
 +
 +Name: content/firebug/console/errorMessageRep.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: hZnrZDxEY06V7oCyHof8HQ==
 +SHA1-Digest: yO6hKCZE0Zte30Ud9wwCn2F861Y=
 +
 +Name: content/firebug/console/errors.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: dJ07bvcSFJvbztrl2nHl/w==
 +SHA1-Digest: 2TWxBLQZMQZcg5bcfswlhvY+ZaA=
 +
 +Name: content/firebug/console/errorStackTraceObserver.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 9Gc+sw4GDe/0csVBE9bAiA==
 +SHA1-Digest: IjzDWM8EJ9Cqkgp13Gtir3UqaMY=
 +
 +Name: content/firebug/console/exceptionRep.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: SaDu1rIDzYX1NPPSattqrw==
 +SHA1-Digest: 3uWxFRXfNOzOBQ5oq0yZ+kUgu6U=
 +
 +Name: content/firebug/console/functionMonitor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: g8k+3oGn1m1vNkaf3LYH+A==
 +SHA1-Digest: KEnJ/TxBEK6zzDtq+RVOk3WZ5Pg=
 +
 +Name: content/firebug/console/inlineJSEditor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: LA4+dyhBn/1o6elTJ63YoQ==
 +SHA1-Digest: sAh6B99EBXBbNWZ+pj+XoaIijaI=
 +
 +Name: content/firebug/console/performanceTiming.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: biGPATlsVgese6+d6hHaVQ==
 +SHA1-Digest: HfqCrdF0Ycicw1yNxoCAPAYLGjk=
 +
 +Name: content/firebug/console/profilerEngine.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: NqiwkaKuuzp3eVLeRo5PiA==
 +SHA1-Digest: lMabs7scnoztr7fwcb2lbDPYaOw=
 +
 +Name: content/firebug/console/toggleCommandEditor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: mMIEa3vAWoiPoclM6mf83g==
 +SHA1-Digest: sg7CVWpI6r7JdwiEB06MGpAZC/o=
 +
 +Name: content/firebug/console/commands/commandLineHelp.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: SwZ0+hc695auKqMh0FysCg==
 +SHA1-Digest: paEmsvg2cXflb20+/HyfInnBBvs=
 +
 +Name: content/firebug/console/commands/commandLineInclude.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ydr+icJ2WiRle5EMY7AQvg==
 +SHA1-Digest: FBEgBlDxvO9zPi/Pfu9C6l4blmc=
 +
 +Name: content/firebug/console/commands/eventMonitor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: rDb6YTD84YMsmVF+/DEmsw==
 +SHA1-Digest: sCMVWQudiNxv4C5VFrdycsE9KE0=
 +
 +Name: content/firebug/console/commands/getEventListeners.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 0/U6g6gXTm3YuysZcVRObw==
 +SHA1-Digest: gVEX4SGMvFF4N15H4gT/UZN5y3Q=
 +
 +Name: content/firebug/console/commands/lastCommandLineResult.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: mAOGyFU3c6EYJHrD78MHzg==
 +SHA1-Digest: Yew6aNCC30yNb2HpSy9jcClld94=
 +
 +Name: content/firebug/console/commands/profiler.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: a5KgtDOa/jzRXUKHnQXvZQ==
 +SHA1-Digest: fHzxH/mXOQIRsnLybKn7I13QKzA=
 +
 +Name: content/firebug/console/commands/useInCommandLine.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: AJrh6rv2jTUJrloWgyuClA==
 +SHA1-Digest: e0RquhNhq72Mfz1ylBAXEg2FSkE=
 +
 +Name: content/firebug/cookies/baseObserver.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 2gR0Ly27h0/9akTEZo576A==
 +SHA1-Digest: rj3GoVWziv/RxoBVHix733NpRJc=
 +
 +Name: content/firebug/cookies/breakpoints.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: qgGzOP9Rv1hYkEz27WtG+w==
 +SHA1-Digest: GpYZr4Uv6p30jV6kaNADMyCnsNI=
 +
 +Name: content/firebug/cookies/cookie.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: JG7T4oGdstrRUTwRygHsWQ==
 +SHA1-Digest: nCdHpYBrrR4ITdN/8LsLRDEeT4U=
 +
 +Name: content/firebug/cookies/cookieClipboard.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: GICei1DzjUfnDYdZNwWKyg==
 +SHA1-Digest: 8MDIJekCsEYnR0KbV6as7JzLuWU=
 +
 +Name: content/firebug/cookies/cookieEvents.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Ksu7L13yLxJny7Uqsio8Vw==
 +SHA1-Digest: LCXdLfvMoptd3Oftycv5vcoqSvI=
 +
 +Name: content/firebug/cookies/cookieModule.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: a3hZ2YLHwFprClhWYOCNTA==
 +SHA1-Digest: P+LLPyPSQwE2wwF8nOkule1k67g=
 +
 +Name: content/firebug/cookies/cookieObserver.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: tD/okH6S5j8Efv/Ic9I4cA==
 +SHA1-Digest: ir+/CRPVnKJBRHBUvFYrAk7ridY=
 +
 +Name: content/firebug/cookies/cookiePanel.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: qLMHtssSiEhBhKeko1WlBg==
 +SHA1-Digest: KSmZGNwjglfIKCSaZDPf+QAlWD8=
 +
 +Name: content/firebug/cookies/cookiePanel.xul
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 6fRG9WEJaUF9dZiURWKwrw==
 +SHA1-Digest: woYy8y+XMb+d5Gns0AYwb41swEg=
 +
 +Name: content/firebug/cookies/cookiePermissions.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: PD6yz53Byismd3TFnfTolw==
 +SHA1-Digest: jzr3GORI4I3wdy6q0Pa4YDbZ0aI=
 +
 +Name: content/firebug/cookies/cookieReps.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: H5bX/taDSaRIWHnjvdALxA==
 +SHA1-Digest: /BR9D0/UyyzspSZFr2BxC/MVD00=
 +
 +Name: content/firebug/cookies/cookies.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 543ZGbnpZKrGG2eOM61w9A==
 +SHA1-Digest: V9vJEg6iHn+wQOxleELu3B+z27o=
 +
 +Name: content/firebug/cookies/cookieUtils.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: LQhPY8Ripb2DfTB36rWkIw==
 +SHA1-Digest: ajy1ZNBPU1oHJpn81BOU1KvYuj4=
 +
 +Name: content/firebug/cookies/dateTimePicker.xml
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 1onma4s13lMt3dX9zqE6sg==
 +SHA1-Digest: 6pZw26RXutE+OLZkPjrVMVVqcac=
 +
 +Name: content/firebug/cookies/editCookie.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: fxlZVS+v/qP8jsOsm1yl1Q==
 +SHA1-Digest: 63IdJtVfGdFMUBceGk0nkZJrTPY=
 +
 +Name: content/firebug/cookies/editCookie.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: dxBCq+5RfuExjNaid2K4pA==
 +SHA1-Digest: tYObghcYWWa/bP/tIW4/e8DawV4=
 +
 +Name: content/firebug/cookies/editCookie.xul
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 9EPHPzT8/DetOLEsi22Qnw==
 +SHA1-Digest: lCWX2Q8iNrNiQCGkz+LXtKqhpus=
 +
 +Name: content/firebug/cookies/headerResizer.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: TZ6K9/C8MOIIlA0Q4qrDrA==
 +SHA1-Digest: mmYYES9ZyjEEG6OiliAZ6wivonU=
 +
 +Name: content/firebug/cookies/httpObserver.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: zNMTjNzMkpEg33BkYQ2dGw==
 +SHA1-Digest: 2ox3XVKDP3SEw9obWXfX9I8aru0=
 +
 +Name: content/firebug/cookies/legacy.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: l67sr/87QYikaDOvuMvBUg==
 +SHA1-Digest: UAIyncRorgrWWylVu1wOhFOO1G0=
 +
 +Name: content/firebug/cookies/menuUtils.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: rwb0RSH9acr504vMAc7rCg==
 +SHA1-Digest: zW/sdqG9qpZhytGkTgHDjai/Zp4=
 +
 +Name: content/firebug/cookies/popupFilterPanel.xml
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: JU/ejY09fhZ4wz7cu+obVg==
 +SHA1-Digest: 9PCqgo81sMl26Fwxg0SZg/0lKLE=
 +
 +Name: content/firebug/css/autoCompleter.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: vb55QChxkhxluPkhyFJmHg==
 +SHA1-Digest: hdHQc4eqIVezaZpFZesIdYNeHgE=
 +
 +Name: content/firebug/css/computedPanel.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: nLdeScK9hayrLYZwYKAuLg==
- SHA1-Digest: 0rFd95THTnBLExRCqt2leJkrRRI=
++MD5-Digest: dXPI0eskuCqyxlMfuG3E0g==
++SHA1-Digest: jrVNiUjdWjOR6SivBp2SQ+CSK1M=
 +
 +Name: content/firebug/css/cssDirtyListener.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: vuUygix3nyVIu+QB0/LNMg==
 +SHA1-Digest: uQUCmMo2kE2dc6UC9tXQUqxAQps=
 +
 +Name: content/firebug/css/cssEditor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: hB37Fv1MZG3tINES0cQrlA==
 +SHA1-Digest: obBM3fZ+zId3tCENnHDSSTCtQvg=
 +
 +Name: content/firebug/css/cssModule.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: I/l0OHKw+DSHfidPkV8stQ==
 +SHA1-Digest: 5CHP4k0+gJXGW06o9KsG0TVm5Xg=
 +
 +Name: content/firebug/css/cssPanel.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: IaImERV/rdRvfCPrrlyJXQ==
 +SHA1-Digest: QBjIzzw8T3OQ+z977hK3ZIH93Sk=
 +
 +Name: content/firebug/css/cssPanelMutationObserver.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: W5VS3gBcz5dm83UZHJ76yg==
 +SHA1-Digest: LNPkq9tECH+niKe+T+u9XfhmdSo=
 +
 +Name: content/firebug/css/cssPanelUpdater.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: qYDETXFkKb/VowtgxKRsng==
 +SHA1-Digest: PL+OALjH6xy0rZspVr22YHLs8vs=
 +
 +Name: content/firebug/css/cssReps.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 13rf6zFQWtQL7t/9VgDzVQ==
 +SHA1-Digest: ACep+cO4NaJcqcG60RRUci7Nu2o=
 +
 +Name: content/firebug/css/cssRuleEditor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: NmqX1kDYBWdHl2quTyrr5g==
 +SHA1-Digest: Jj8GOK1+BWm9/7JF4iG7ctQB9F4=
 +
 +Name: content/firebug/css/loadHandler.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: BAB3tcdDd5Er/KjXgCXT2A==
 +SHA1-Digest: s4JgGBh6uAx3kWSxxoOdoI1VOOY=
 +
 +Name: content/firebug/css/selectorEditor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: r33k8QUa7oaQGgthQm/8DQ==
 +SHA1-Digest: vDtX2qYo+bdJnI58GkzdYAbCTPI=
 +
 +Name: content/firebug/css/selectorModule.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Hfa1pdkd/PlTXSv7NwxCIA==
 +SHA1-Digest: oL6YU/o+656ZsKbJZcZiakUWaCo=
 +
 +Name: content/firebug/css/selectorPanel.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: s3ZFQA/dO/6OxXtm7uJlFw==
 +SHA1-Digest: wxujNtvezemNpBlvIzbgu1b57+I=
 +
 +Name: content/firebug/css/stylePanel.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: uCsxnMnBrYKYKNsG7OE8tQ==
 +SHA1-Digest: ydCShYfVFVc6KWgfY7dc17BPc0E=
 +
 +Name: content/firebug/css/styleSheetEditor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: x5uhY3UV2bsC7GuSVYSzMg==
 +SHA1-Digest: 1pfwNsHPo2X9hyrrPNsWTMO+HvE=
 +
 +Name: content/firebug/debugger/commands.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: BpbzwOCK3IrAX1xtBNbVvw==
 +SHA1-Digest: fZKfvVqi2xCUMOJrutz/F3LhCwE=
 +
 +Name: content/firebug/debugger/debugger.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: B68XNsaRMMyY6bJZopN/6g==
 +SHA1-Digest: LfYUpkt4zEllFxrfu5mpcViftmE=
 +
 +Name: content/firebug/debugger/debuggerHalter.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Ese0ZF+LwcrD5oPFaEeI7w==
 +SHA1-Digest: aTwFVb418R3Od08obFsBqqEdASQ=
 +
 +Name: content/firebug/debugger/debuggerLib.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: gs1IH+6MMHld9RGUYmbkCA==
 +SHA1-Digest: wxJgdWxw7IMstbe10xJqxCTuBvc=
 +
 +Name: content/firebug/debugger/debuggerTool.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: iRSK02MKBEEHIsOJE+WFoQ==
 +SHA1-Digest: xv2NQao537zbs1Sar35quFJk9vE=
 +
 +Name: content/firebug/debugger/main.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ZkL6JXdxDL15dNs8hRrwGg==
 +SHA1-Digest: D7F9vqSGEFsthSgq9ji0xgKd+xI=
 +
 +Name: content/firebug/debugger/rdp.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 5Eo+KqpBRsT7yECOgA8rqQ==
 +SHA1-Digest: ac4gIaBPSX8BPLz3qK3FYuC2xmg=
 +
 +Name: content/firebug/debugger/actors/breakpointActor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: xzIRFdVR7OFoMxTMzYGOpA==
 +SHA1-Digest: 8tzbIyvHI3SgOpQBpgxVhHo6jHQ=
 +
 +Name: content/firebug/debugger/actors/elementActor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: UC3qb9vBea8V3fOfxhYMwQ==
 +SHA1-Digest: iBVZcVeYo1pG223ZTfkp/LqjUFc=
 +
 +Name: content/firebug/debugger/actors/objectActor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: RgHhHGW7UFNkBOfvjCYg2w==
 +SHA1-Digest: I+sE6SrQG+opbz1nOT+1+loBXtU=
 +
 +Name: content/firebug/debugger/actors/threadActor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: jAdle0p0+3xRG3vEYeRpVw==
 +SHA1-Digest: 9xfoZU1B1x7lo5hQgmHdiv5qjSM=
 +
 +Name: content/firebug/debugger/breakpoints/breakOnError.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: dvm7+x4eh09Hej20OxfqFw==
 +SHA1-Digest: xl8Ax81xREdxyLeWz0agGKrN+Rk=
 +
 +Name: content/firebug/debugger/breakpoints/breakOnNext.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: qhLxckaVC35yUrnX086g4Q==
 +SHA1-Digest: vkYB/9VRfgxJq1Gps/E8aYSNMIM=
 +
 +Name: content/firebug/debugger/breakpoints/breakpoint.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: C7VZ7xWR5c23wilBH54ueA==
 +SHA1-Digest: PYBtI2Xhyrf344eYkAiN1SsU7b8=
 +
 +Name: content/firebug/debugger/breakpoints/breakpointConditionEditor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Atob6ArNYcoyLYAmbqz6Tg==
 +SHA1-Digest: te3dSb/0sEXwvX47O5V2hUNkSmk=
 +
 +Name: content/firebug/debugger/breakpoints/breakpointGroup.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: qBVLaEBaEehMrhX12R84ng==
 +SHA1-Digest: iBu2sV9x4QFl/R4VbRPmYnVGEkg=
 +
 +Name: content/firebug/debugger/breakpoints/breakpointModule.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: xciGCDmlAPXQAT83+FZg4A==
 +SHA1-Digest: 1P2BFTXUF6VU0umZa5OKdQ2uoJk=
 +
 +Name: content/firebug/debugger/breakpoints/breakpointPanel.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: rEj4gJeVrq6W0x4eBWWdkA==
 +SHA1-Digest: j46RCOQTPVLh34EnjT5Jf50SDvU=
 +
 +Name: content/firebug/debugger/breakpoints/breakpointReps.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 4z/EW8/P9QY1VYJm+hEOqg==
 +SHA1-Digest: W2XMapUC854NCRrJ+8ekhLNy0dg=
 +
 +Name: content/firebug/debugger/breakpoints/breakpointStore.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: oXm06sh2KKabSnJkxRi9kA==
 +SHA1-Digest: dU2cY5Bg+3pLdLlj53uvIQXFmHY=
 +
 +Name: content/firebug/debugger/breakpoints/breakpointTool.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: EQFPiQEISolcAJBDWK7y3w==
 +SHA1-Digest: yapMtTnwaP+H3DVVjEeAx77NM4s=
 +
 +Name: content/firebug/debugger/breakpoints/debuggerKeyword.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: AsIKvH9VqG+75zxB2ITXWA==
 +SHA1-Digest: RKYyzLFNJOMOU/LPhCWN/l+95cw=
 +
 +Name: content/firebug/debugger/clients/clientCache.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 6E4WtACirBpdoTfkAtOXpA==
 +SHA1-Digest: IdiK+r8sQPvmYdLRyUXHC7BefeQ=
 +
 +Name: content/firebug/debugger/clients/clientFactory.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: lBJmxuh4pa/5QgftS+3Sdw==
 +SHA1-Digest: Utn4Y1ZfEhQp7vUtNc/ejkwZrSQ=
 +
 +Name: content/firebug/debugger/clients/clientProvider.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: kzyUSM2BZKLd39aFYLNXig==
 +SHA1-Digest: +PPPJFkeXoH/qvBAD5xjq946hZE=
 +
 +Name: content/firebug/debugger/clients/functionClient.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: nlHGRLhmaCxvFZJu9V4jew==
 +SHA1-Digest: rwvgFveb/vfYKzuVXB/QxfqBZRU=
 +
 +Name: content/firebug/debugger/clients/grip.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: SYRsgZA1Nc5md+gQOiS4Gw==
 +SHA1-Digest: FZoRuBGCVtoJRJxY1TWCpgpJEdY=
 +
 +Name: content/firebug/debugger/clients/objectClient.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: lKHGplOJPk3kbX6q/uCHkQ==
 +SHA1-Digest: zxkPhh9/Cu5rRF3GNd2D3G1ole8=
 +
 +Name: content/firebug/debugger/clients/remoteNodeListRep.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Rz++YU1yXL7jKtfONJQFgg==
 +SHA1-Digest: PagbMO4RohjvYjQWV6DHysBT/cw=
 +
 +Name: content/firebug/debugger/clients/scopeClient.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: VDrV1lWAkpRy4J0v783AlQ==
 +SHA1-Digest: m3UKAsvfZAqqEbPE/XsOFtaYTpc=
 +
 +Name: content/firebug/debugger/script/breakNotification.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: rSOUGI+uGetl0yRIg4IWdA==
- SHA1-Digest: HGrMkQc/Nru6fgUnp6u2sZIUPNY=
++MD5-Digest: 5O51Vbz8+qOUel1neuNWXw==
++SHA1-Digest: xonxk1QGjoAmqvH5hWJED8pfXFY=
 +
 +Name: content/firebug/debugger/script/scriptPanel.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: zXbgk5FnQFymm0voARHfMA==
 +SHA1-Digest: idYuzjc4VJEt8qmijXuM9hGeIOs=
 +
 +Name: content/firebug/debugger/script/scriptPanelLineUpdater.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: dEAl+tAYGRqsxYjoJzTDrg==
 +SHA1-Digest: k0yA0C9m6cuNKB7VBunhSHmcK58=
 +
 +Name: content/firebug/debugger/script/scriptPanelWarning.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: lZRnLCtNxPtU9djYpOccww==
 +SHA1-Digest: XfyIRXZl48o20FeO3m+yWsaLq7Q=
 +
 +Name: content/firebug/debugger/script/scriptView.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: oTyw2ihoNhoO5QcDhN1h2w==
 +SHA1-Digest: VLCLtsjriQ8nJf1346x6JtGqEEg=
 +
 +Name: content/firebug/debugger/script/sourceFile.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: rM/295lviCm8bbHgPjDWqw==
 +SHA1-Digest: hAF1bezPSvz4sPj5P60D6xMBJXs=
 +
 +Name: content/firebug/debugger/script/sourceLink.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Jn13Cud2wHZlFWAjwnekvQ==
 +SHA1-Digest: rMa08mqqTj8n8hu8GkjGSwMneJ4=
 +
 +Name: content/firebug/debugger/script/sourceTool.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: DCzKAzSP377r5Kg0E0qc3w==
 +SHA1-Digest: NcOMcr5H+lcIQYJYZZ08LPEIevQ=
 +
 +Name: content/firebug/debugger/stack/callstackPanel.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: C1BDO1cXcEyA7GikqXYB4Q==
 +SHA1-Digest: t3CRf/SfrARRF4vJiddQd2Ix6Rg=
 +
 +Name: content/firebug/debugger/stack/stackFrame.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: GY0P8WT6u+pZwrEOOhG+qg==
 +SHA1-Digest: 5Z7HhzjNFO3CmmHw7Wh5RTT+MbY=
 +
 +Name: content/firebug/debugger/stack/stackFrameRep.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: HrrOAWnrMjBQPNueuqNrvA==
 +SHA1-Digest: 2LQH1RqZJxmDi9ajxaXwL1PIBuw=
 +
 +Name: content/firebug/debugger/stack/stackTrace.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Z65z/sFW9J7u4D2UaWKgNQ==
 +SHA1-Digest: xWzycxH7Ox/Eqnmyba9ArCHiW5Y=
 +
 +Name: content/firebug/debugger/stack/stackTraceRep.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: nhLaFy4B6o7eOPKxNiLymQ==
 +SHA1-Digest: K0t583qqzGbm7Xwzkz+079tIG3o=
 +
 +Name: content/firebug/debugger/watch/returnValueModifier.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Fr5q+4wkizDFHCVqUBYnpg==
 +SHA1-Digest: HOUvT71P3DNFvNGWyDjDi0otSes=
 +
 +Name: content/firebug/debugger/watch/watchEditor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: fTSaHKG3MgA+8tdz8Tasew==
 +SHA1-Digest: yljn9nE6JOmuxl2pRZky2rDZPAE=
 +
 +Name: content/firebug/debugger/watch/watchExpression.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: +Z7z4mFj7V97ZHTELafzTw==
 +SHA1-Digest: e9kinvB6pK3JxZ+S5xN+MFrjSXg=
 +
 +Name: content/firebug/debugger/watch/watchPanel.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: X9O95wmwTnMUez34R15Kpg==
 +SHA1-Digest: quJloGQu1kFcastRUN/kEio8qzU=
 +
 +Name: content/firebug/debugger/watch/watchProvider.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ne6LbLAymTXQncmxH2Oa1Q==
 +SHA1-Digest: vAOW5mAi2ZisfS2NBEog71dlC80=
 +
 +Name: content/firebug/debugger/watch/watchTree.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: O7EWZhFPVN3377bwHN+ojg==
 +SHA1-Digest: jCoIVtLAyR1ghMf59811jdxkm4w=
 +
 +Name: content/firebug/dom/domBasePanel.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: x6FQ6nq0GgLgEp72e82NTQ==
 +SHA1-Digest: gaHR6+F8j3D/CLpXIXk8FBfSVno=
 +
 +Name: content/firebug/dom/domBaseTree.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: D2EjShIa1aCvL1EmQfjDiA==
 +SHA1-Digest: PWLgplHLwNSwg476hzZo95KQ+90=
 +
 +Name: content/firebug/dom/domBreakpoint.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: nZYEzfMO1zwK0vmKZT4ZfQ==
 +SHA1-Digest: eBX+0rkcR01Mcxf9OOkqSuiwBcI=
 +
 +Name: content/firebug/dom/domBreakpointGroup.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: z5bbR29HP/dKGVY/obX4Bg==
 +SHA1-Digest: OErD0Bg+Mp2ktllPt+cLEvlPvgc=
 +
 +Name: content/firebug/dom/domEditor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: pRs2Bx9wwOe6GFGtQ2djHg==
 +SHA1-Digest: xdSuDoTd93jOi/bcSWMhO3GvmkY=
 +
 +Name: content/firebug/dom/domMemberProvider.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ehf3uZ3AlnEbqbgQuppTyA==
 +SHA1-Digest: 1MzJNans/rjAK1LQGLWxW3fS8qM=
 +
 +Name: content/firebug/dom/domModule.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: oZ5peQN/6Vcc/QX+FcmRxQ==
 +SHA1-Digest: PPH6EL40bhtPpZrKtNqkxJtWCy0=
 +
 +Name: content/firebug/dom/domPanel.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: kUnbAZqTyIqlQx0zmKb4HA==
 +SHA1-Digest: QtgIzAdO3G8xJNyjaI4+Oz9Lmsc=
 +
 +Name: content/firebug/dom/domPanelTree.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: xq9KnuQBkkagi5Lsa+UZ0Q==
 +SHA1-Digest: f+9TwR/uSn+MDESY+Ubqcg/3NhQ=
 +
 +Name: content/firebug/dom/domProvider.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 1qXcP/WdZoTLuTQm1ptBAA==
 +SHA1-Digest: M07KoUrIyXPBAUd1679op9nijVc=
 +
 +Name: content/firebug/dom/domReps.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Fx4vPCzHRlrSHOmO3i1dDg==
 +SHA1-Digest: Uk8Ll7aa9yJoIqP1JcPSJB+M1Xc=
 +
 +Name: content/firebug/dom/domSidePanel.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: i+TgkA4Po937UrPxorUeFw==
 +SHA1-Digest: XoGAqSGqmf0Z9kSUweGWwFsSHdA=
 +
 +Name: content/firebug/dom/toggleBranch.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: mvQLKNHQ4oLZ8CPwZFEMxQ==
 +SHA1-Digest: jPzuKD53u/9WehQ1F6QqxKctkVE=
 +
 +Name: content/firebug/editor/baseEditor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: UxspthyOUJ/m+/7S7vRaqg==
 +SHA1-Digest: Ik1hPhNk1KgFa+pOE34+uo/L1rA=
 +
 +Name: content/firebug/editor/editor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 7etXJ1h1t/gQ0+k8T2jPoQ==
 +SHA1-Digest: 7l350fx3Uhl/AcVK63MsQk4N1ME=
 +
 +Name: content/firebug/editor/editorSelector.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: hwpDAtw9sWqJVb+IvW9Ubg==
 +SHA1-Digest: nctZkWyJgsp9NbrwyJq/82zjjxw=
 +
 +Name: content/firebug/editor/inlineEditor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: H1YfTVawgOxKmbtweoFPuw==
 +SHA1-Digest: ijchCMpayd+FofZN0WrTtFZl8Ik=
 +
 +Name: content/firebug/editor/sourceEditor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: D7bKxzUhRVr6YJsEgkQ4ZQ==
 +SHA1-Digest: d0MPJQoe4RxD5s4WCixjfCUlG9w=
 +
 +Name: content/firebug/editor/sourceSearch.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: cKr/wHqshBl69SFWawXJxw==
 +SHA1-Digest: DQekC6BTACMJcy0ssGXRm9QpC8g=
 +
 +Name: content/firebug/editor/codemirror/codemirror.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: gE628u3RvPz2TQ0w+QktTQ==
 +SHA1-Digest: /EQRXrMmLt+H+ILqQY65wjUu7to=
 +
 +Name: content/firebug/editor/codemirror/html-hint-data.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: odBNcZCF06BhhxxA1eaQjg==
 +SHA1-Digest: 9lM+A53rIncXimO0nIRu/cPJ5KA=
 +
 +Name: content/firebug/editor/codemirror/LICENSE.txt
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 26MnU3xeMstQWSa7bZZ79Q==
 +SHA1-Digest: oRTQUnAg/oiUesqa11pQdx0UR1Q=
 +
 +Name: content/firebug/editor/codemirror/addon/show-hint.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: e2XAU2v0DQw9ItnipzoZOg==
 +SHA1-Digest: ZiufavWq7bWri4v6OCeCMxsHOdk=
 +
 +Name: content/firebug/editor/codemirror/addon/search/searchcursor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: S+8jlGS3qdFl2/C9BJQzdg==
 +SHA1-Digest: ZIVIOilyPUhjM889FcMT2dF5BwQ=
 +
 +Name: content/firebug/editor/codemirror/mode/css.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Liokkw3lQVGtx//C9khlkA==
 +SHA1-Digest: U+/6jKwx2ndy+RhFzOkqBOqgMwA=
 +
 +Name: content/firebug/editor/codemirror/mode/htmlmixed.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: YV9kUeuaYXWFz2s/Pp55yQ==
 +SHA1-Digest: 2fhuYOBy4uInUEfV1YBesaQoR8U=
 +
 +Name: content/firebug/editor/codemirror/mode/javascript.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: REarX0obfKLah6jIKjP42Q==
 +SHA1-Digest: NN8HToKK0k8YEj42R0oNau11eeg=
 +
 +Name: content/firebug/editor/codemirror/mode/xml.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 2hjcO4QSnd3nB4rIJttDig==
 +SHA1-Digest: pNY5b4VJAVnrTWKV4U41Mq/ZMWw=
 +
 +Name: content/firebug/firebugui/blank.gif
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: mT/Cyl/sFEhojbwyvrX3oQ==
 +SHA1-Digest: z6C4LpYW5bemhNyExp0cVFO/164=
 +
 +Name: content/firebug/firebugui/codemirror-firebug.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: MDkZxTqPS8u6gQpXp7e7qQ==
 +SHA1-Digest: igOrIxVKsMHDRq83eB1MOPvvN7c=
 +
 +Name: content/firebug/firebugui/codemirror-showhint.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: WD7LUeJnh8WtVdfJZ5ORYQ==
 +SHA1-Digest: hncLYSKfOC1zRQQ5KKJV4x8jvYc=
 +
 +Name: content/firebug/firebugui/codemirror.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: c03j79nN/P7Bsr2oGyDSSg==
 +SHA1-Digest: rooF5X3Sa2r1EPtmZxkQmqPYHDo=
 +
 +Name: content/firebug/firebugui/commandEditor.html
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: G5wMNcFi9u8a2++tQSZwrg==
 +SHA1-Digest: DDhKeAvlDiny7ATTBXXW7g8Fx30=
 +
 +Name: content/firebug/firebugui/filters.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: opHcWcpECzjpTQWJbX3uqg==
 +SHA1-Digest: +z9rbeXt4V33cHpZ3dxshMMFfaI=
 +
 +Name: content/firebug/firebugui/panel.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: drHQa51GGPdfPOsoP8GCsg==
 +SHA1-Digest: 9yxEZDMBXLergpBztwlBoZhDgjQ=
 +
 +Name: content/firebug/firebugui/panel.html
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: C/DzU9z8JPtSH1DoVK8+hQ==
 +SHA1-Digest: qEsXddDTmAxS4rFmoM6lD017QYI=
 +
 +Name: content/firebug/firefox/auroraNotificationPanel.xml
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: /3X9NUCl2x8FGMJ6ZEcJ3g==
 +SHA1-Digest: g//uthVvPwfF/c57ZgNNETGMEm4=
 +
 +Name: content/firebug/firefox/bindings.xml
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 9HJr21HDQ/wX6yxjnWGzRg==
 +SHA1-Digest: ycVMAYpS5vYMNOyrb9+04UdPD+I=
 +
 +Name: content/firebug/firefox/browserCommands.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: /y5ifRCWPyJNYRLy/rmq9Q==
 +SHA1-Digest: BC6I0g3LxAjVc8zSQjWex7c7gGQ=
 +
 +Name: content/firebug/firefox/browserMenu.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ftvBUdJNLcUdY0PFyx8evA==
 +SHA1-Digest: KPvObxUQqe7cz83xRq4wIrmP0+0=
 +
 +Name: content/firebug/firefox/browserOverlay.css
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: Ev9dUUEMghgvqMVMCorjAQ==
- SHA1-Digest: VEcUgqJR5uffopVZ2bWXBpHQE5U=
++MD5-Digest: wj2I6sHhCHWeCQk+E3VHDw==
++SHA1-Digest: iYU0cfsC+qgYen1h4qP+yKiUXP8=
 +
 +Name: content/firebug/firefox/browserOverlay.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: Xs64+vHRt4IHwZbDVe2vwQ==
- SHA1-Digest: 8sYIuHF/jMT6WgeE0Sa+mOMJO+c=
++MD5-Digest: wmi0mDUGp0ySGYsTbzfORg==
++SHA1-Digest: RY92Gblo0yQ8hVd0yPh97cBeW6s=
 +
 +Name: content/firebug/firefox/browserOverlayLib.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: /YHVS3H5fUUj4qSRPQuIuw==
 +SHA1-Digest: eOm89ZN5zzSpK1fBEdYNL5yb9uA=
 +
 +Name: content/firebug/firefox/browserToolbar.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: EuCBDyy3z64ZIB2wnZjqvg==
 +SHA1-Digest: i/W664I5SsNg6SytQkShGp43Ljc=
 +
 +Name: content/firebug/firefox/customizeShortcuts.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: B9ayJwTonCHV2+pg66OOqQ==
 +SHA1-Digest: CI1zxNUd01Qwsj+NYq+HOJ9QLrI=
 +
 +Name: content/firebug/firefox/customizeShortcuts.xul
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: fDfEUKLLxwcQAhgibzBQRg==
 +SHA1-Digest: OACt1y7S8G2hih0YP0a952qTxg0=
 +
 +Name: content/firebug/firefox/firebug.xul
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: VCgTXEOFXozBqiwQ74GEmA==
 +SHA1-Digest: vy0HhriSSWF0OaNR+1q88+3mZGQ=
 +
 +Name: content/firebug/firefox/firebugFrame.xul
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: c2kt2Jdu6Vc+aV2qxtwA/w==
 +SHA1-Digest: DUeIco5kxtWWyHhthYAyK5yDsCw=
 +
 +Name: content/firebug/firefox/firebugMenuOverlay.xul
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: /vcFdOcIWsoFTPTV4pDYjg==
 +SHA1-Digest: 3f7DdE7fak1peMkxNpKYnTE3QiU=
 +
 +Name: content/firebug/firefox/macBrowserOverlay.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: T2lbezOvCO1+2g8rK+eKVg==
 +SHA1-Digest: bLKhdzNtbreRev4hiXGxleLSQ38=
 +
 +Name: content/firebug/firefox/multiprocessNotificationPanel.xml
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: XQDYaH6CfRuZTijD7+4mwg==
 +SHA1-Digest: LNvX0VgiFQD3WgrmmSSjVJGADNo=
 +
 +Name: content/firebug/firefox/newMultiprocessNotificationPanel.xml
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: B0IIJ/srQkGFxPDQdGoENA==
- SHA1-Digest: xBgH0uB6xYHln8MCneCBV9265TQ=
++MD5-Digest: unMqKDo9HiVUNSpvCRDyYQ==
++SHA1-Digest: uw+ygnSvCJiBv0NqF/Pn3i5jU5Y=
 +
 +Name: content/firebug/firefox/panelBarWaiter.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: nlrLJcio+tymUxnYS69T+g==
 +SHA1-Digest: AfX4NFLKU5EMngxQTW+7L7ehhhk=
 +
 +Name: content/firebug/firefox/searchBox.xml
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: iZWaxfqIfZs4f29pHr24Cw==
 +SHA1-Digest: l8wA+/cBO45/+D4bAEo9valR95E=
 +
 +Name: content/firebug/firefox/upgradeFirebugPanel.xml
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 7CtQ47hjbbWbpci8gt7Dbg==
 +SHA1-Digest: OVT8hrZfxpKcoo3vm7hbVNrrfyc=
 +
 +Name: content/firebug/firefox/external-editors/changeeditor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: dSDfR7EqOzhrmKM17U6KWA==
 +SHA1-Digest: Y3oMiaCegASlMbP1qQvoQ1opDng=
 +
 +Name: content/firebug/firefox/external-editors/changeeditor.xul
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: KTUDFa0+jDhIRebcFg0mpQ==
 +SHA1-Digest: A7PDuha2lyVn1q2ZRCkCerj74WY=
 +
 +Name: content/firebug/firefox/external-editors/editors.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: 8PNM7Fs9zxUDFuW4CXthHg==
- SHA1-Digest: z7vTFHyfk5KwLpELgySO9jzBOyM=
++MD5-Digest: VcecK6X8r+M8eIzvJI9ejw==
++SHA1-Digest: WxT1FxlHvD0W8F9XOkXgJNSRCMc=
 +
 +Name: content/firebug/firefox/external-editors/editors.xul
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: FV7MrXvZV98mytPIsK+WfA==
 +SHA1-Digest: 5qQWETRlcHDk1EWzPtT7Wga2lX0=
 +
 +Name: content/firebug/firefox/external-editors/externalEditors.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: wBgcH4qXxUjYUZQgPtZonQ==
 +SHA1-Digest: 7g8YzKigNxqV75h23eI4c7kTYs4=
 +
 +Name: content/firebug/firefox/start-button/startButton.xml
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Qr4B95pXfRk+F8HP23AYpQ==
 +SHA1-Digest: lHqjuJdcqfo0eQp8Ap6Rmd3j4LQ=
 +
 +Name: content/firebug/firefox/start-button/startButtonOverlay.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Kk6P60eC78G6thxntMAnaQ==
 +SHA1-Digest: jgGlhWcwkESjStppQRjXdxOPTbE=
 +
 +Name: content/firebug/html/attributeEditor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 4SV0aLpCC7WWReK+PtGTAA==
 +SHA1-Digest: zrzqPz/t/rtMaRyA0laVPKldw/A=
 +
 +Name: content/firebug/html/eventsPanel.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: vmapVDxXdaaWkS052d/4EA==
 +SHA1-Digest: qJLi/f5wasVtOrfiV+uYcTJddFo=
 +
 +Name: content/firebug/html/highlighter.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: V6/6HZoPvN3V5vDNa/yVjg==
 +SHA1-Digest: Np1PqGiBhHVL7YE254KlNZgqi4Y=
 +
 +Name: content/firebug/html/highlighterCache.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: IOY5UySg2c0vETFskkiXTg==
 +SHA1-Digest: DR6fSQ03LKWygajjPN4/M14HhFA=
 +
 +Name: content/firebug/html/htmlEditor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: sKgQuWo97DbXKY//fvT/Qw==
 +SHA1-Digest: KAiS+q5eGnkZkpj8x87asoHh/4A=
 +
 +Name: content/firebug/html/htmlEditorSearch.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: hn99+y+0SNyvVNLlJsYHdA==
 +SHA1-Digest: 0ZK336QUuT2u2yIUv7aMvE/G+oU=
 +
 +Name: content/firebug/html/htmlLib.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: t+Y0viD04M1j0dXJUwxIZQ==
 +SHA1-Digest: /hh1wHyi+hH4gVitGACYoTeebrQ=
 +
 +Name: content/firebug/html/htmlModule.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: wW98NhRIjs/1fIOksmKJfQ==
 +SHA1-Digest: DOsqNR6yKs7Nl8r5jSEw8RVJ5bQ=
 +
 +Name: content/firebug/html/htmlPanel.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: wYXUYHTpZY/yp11HLF5AsA==
 +SHA1-Digest: QJ7VVt3uIENxk84s2mTx59aVtnY=
 +
 +Name: content/firebug/html/htmlReps.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: yyosCVfdtl9k++urlZ04vA==
 +SHA1-Digest: Vi1I1K2hWDa0ixuuGUsc861nLj4=
 +
 +Name: content/firebug/html/insideOutBox.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: +Egr6bD3M841TIVwRuAUAw==
 +SHA1-Digest: PM9qr/D0JJzEp5+wtA60bhiEXi4=
 +
 +Name: content/firebug/html/inspector.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Qs+bMYc8YT1s7c3bN6xKsQ==
 +SHA1-Digest: 0FtRTRa0iexk6/OYa8Fa+QBKpZs=
 +
 +Name: content/firebug/html/layout.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: oWB+RcTsg1kIthE3sEFN6A==
 +SHA1-Digest: lPkxrW9N2wNaUfwDLHSMRTUvvgE=
 +
 +Name: content/firebug/html/quickInfoBox.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: TwAl+4GCcFffv5yGPK+wqw==
 +SHA1-Digest: CApl2w7UE2WT+t5Z8+wYWPN0jKg=
 +
 +Name: content/firebug/html/quickInfoBox.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: IQ4xknkE75a4Y6qfUDux+w==
 +SHA1-Digest: HsTgoxke9JptSzOb3Tcxk91SFhY=
 +
 +Name: content/firebug/html/textDataEditor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: MrCWTXb0+Vp9nazZLjmd9g==
 +SHA1-Digest: VZezaNqdVP6eexUgg44VOajDKWA=
 +
 +Name: content/firebug/html/textNodeEditor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: EEZK2ohIN/WDxWHcjL7qPg==
 +SHA1-Digest: p4uevcns4SkNowlko/fQPngi5eI=
 +
 +Name: content/firebug/lib/array.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: qAEgJviwnazzflw8hgh/Gg==
 +SHA1-Digest: As2vJphrKp4CsIlqdVP8e8B/vTk=
 +
 +Name: content/firebug/lib/channel.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: jCZmzuD219CqPvJkLvSynA==
 +SHA1-Digest: WJ65ywdTbQ5zZC+yidjQVfv3+Q8=
 +
 +Name: content/firebug/lib/css.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: WonlTDlrHNkF1EJ9wrKUqA==
 +SHA1-Digest: NQZ81ndHML4EvWdJkbl9slWhUO4=
 +
 +Name: content/firebug/lib/deprecated.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 3ie4NZ4z+VrzC2LkM5k8Ug==
 +SHA1-Digest: N+hhkfo3bu/yelk7UT+5GygWvow=
 +
 +Name: content/firebug/lib/devtools.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: +M+RVzdosvXlWWgZk4Uz0w==
 +SHA1-Digest: huMfsmm1QhYV/diclBmzT3YA3lM=
 +
 +Name: content/firebug/lib/dom.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: p6LN/MnOdqkMwWBSdxLhPw==
 +SHA1-Digest: x4MPLSCbXIf1eEriKbzLuwfXtoI=
 +
 +Name: content/firebug/lib/domplate.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: lZODMSB1qFcQwUhzKdAlKA==
 +SHA1-Digest: GCmwFeGNrME0vom2sUwJK9sW9/4=
 +
 +Name: content/firebug/lib/dragdrop.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ar9qIUviNap9z6SxqCr15A==
 +SHA1-Digest: z5MgCOjElOabAI4HpCK1e0rYIoY=
 +
 +Name: content/firebug/lib/events.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ZrTkp/GvPzkTgnGjCV02GA==
 +SHA1-Digest: u1LxYLA3swFu/Zz3x6wuWQh95FI=
 +
 +Name: content/firebug/lib/fonts.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: gX+3uJPBVpd6xJIhhUpKKQ==
 +SHA1-Digest: r9vK1e4yLSHvhvNHQH+mohkTQuE=
 +
 +Name: content/firebug/lib/http.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: omiLqkHXDfYCOwsLeHcuBg==
 +SHA1-Digest: jIKVAdrES5uuV9ipWLOELWQ4Gyo=
 +
 +Name: content/firebug/lib/json.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 32tgRRclahr2E6onx5nbMw==
 +SHA1-Digest: nv3mwJOCFvBPr6qRU1AGmc2KnSs=
 +
 +Name: content/firebug/lib/keywords.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: toErtEhdLAH9v2CKkLxTxg==
 +SHA1-Digest: XV7OT5hNLEpckrT/NDzh5/goAsY=
 +
 +Name: content/firebug/lib/lib.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Xhzd1qSBU4brVuFk9J5v1g==
 +SHA1-Digest: wDoUFivGi/W+o4KOKJKWGU3THns=
 +
 +Name: content/firebug/lib/locale.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: nzd2BAU/ul718Y+vctK2Vw==
 +SHA1-Digest: nXm0d03fFkST1ypnePrTCTcnJfo=
 +
 +Name: content/firebug/lib/object.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: uQ5c+0/w0Te3rbIeIbhY5Q==
 +SHA1-Digest: a6V3h1y5+sejFTFjBDDY/FJsBBc=
 +
 +Name: content/firebug/lib/options.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: vB92K749KOekOWjvgB9Hdg==
 +SHA1-Digest: KHHG0F6ERvFrgB9es9uHurhWFF8=
 +
 +Name: content/firebug/lib/persist.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: vO91YITDRedCI/vvY1mdGA==
 +SHA1-Digest: j20ZISrXqw7ne2olwjVco/xxZes=
 +
 +Name: content/firebug/lib/promise.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Y7txepiz/p+y/FRj6A6lxg==
 +SHA1-Digest: ZaANkRa0yRO0rB9rBBPllix5kS0=
 +
 +Name: content/firebug/lib/search.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: liDvvZtiwiIHt6sYVUiLyw==
 +SHA1-Digest: FURevgDks+1C0QcsaNT21qy5zjc=
 +
 +Name: content/firebug/lib/string.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: EJi1nogoRKnTTdFW/oXLeA==
 +SHA1-Digest: XasJEBU4ldLlSXkZtS1LdGUdmOw=
 +
 +Name: content/firebug/lib/system.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: BffUgoH9AoH6HH0Ink3jlw==
 +SHA1-Digest: OpN7qGnEtsB7UQ7tO2ygRNG3+Tw=
 +
 +Name: content/firebug/lib/tool.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: FZF0qZ1NlRflLm8LlNApLg==
 +SHA1-Digest: 4pCcCCvlBYOPQFZMLxo7TQIVnUw=
 +
 +Name: content/firebug/lib/trace.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: mbgMUI+sHCLRbSl15iXztQ==
 +SHA1-Digest: lw+dI/HMVCKygEF4INUiS5qlzkE=
 +
 +Name: content/firebug/lib/url.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: ZCHWhFGRmWK1lOBeUtYNVg==
- SHA1-Digest: L4I2xDJZNpFPWMK/qf36A30aIDg=
++MD5-Digest: mVXEoo/0QFIVRTc3QMJPVw==
++SHA1-Digest: BW0V56J6Zn6cTxqjydDdzexIMbM=
 +
 +Name: content/firebug/lib/wrapper.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: AlI94gW2VJTQjaVkyFSNUg==
 +SHA1-Digest: IJYXQWVCvGTURffA++TVDUfzZC8=
 +
 +Name: content/firebug/lib/xml.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: pit4ewUqlkANyo4blOW4Og==
 +SHA1-Digest: 5O+HOLrH1uyxwhndiWmlZvjhGT8=
 +
 +Name: content/firebug/lib/xpath.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: VGqm9uRCLOIj7tQnbCUNKw==
 +SHA1-Digest: dGyYtiOO5rTyLrmZ/eu0HMHwKKE=
 +
 +Name: content/firebug/lib/xpcom.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: oB8tv/eFS97zZtdu10HIEw==
 +SHA1-Digest: YRdnJuLIw0L73qUixQA49FoT1Uo=
 +
 +Name: content/firebug/net/fontViewer.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: msU8WjIqks+fd0smsPh9hg==
 +SHA1-Digest: 2SlRuIFBTh2tlPJqCbd625wCzzY=
 +
 +Name: content/firebug/net/httpActivityObserver.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: sbsqpPCmQnSG7g4YPJbw9Q==
 +SHA1-Digest: /PdYB5d3fOiB5zVKrONJhE86Af0=
 +
 +Name: content/firebug/net/jsonViewer.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: qSiGdJ0DmfSZcv8na/vD/w==
 +SHA1-Digest: kQ01KoT8S2jtd+Rg/CTs9orPmiA=
 +
 +Name: content/firebug/net/netCacheReader.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: pDtxl2znJ+xFvsD/bYL0TA==
- SHA1-Digest: 5PcMP7hPq8X+ffhskdpFNCex/y0=
++MD5-Digest: mIakJdVvQxecQ3BHqV+YLQ==
++SHA1-Digest: g0rWHQhByHELlU4axd7L18g6sWg=
 +
 +Name: content/firebug/net/netDebugger.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: MwOGZnjZT/jA6I53uiV04Q==
 +SHA1-Digest: +kRhVGeFudd/Egyu0p2hLXDaYrI=
 +
 +Name: content/firebug/net/netMonitor.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Q1+piMoKZfEjmn89CTcpJQ==
 +SHA1-Digest: jCGQ3XqdWONm6Kaif6hDRQYZUyg=
 +
 +Name: content/firebug/net/netPanel.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: bOGavUqFYzOUBcKKVhztIw==
 +SHA1-Digest: DzW0U5Nd4j9SCoIROs15wLrileo=
 +
 +Name: content/firebug/net/netProgress.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: LHlV+Z7xsqXIMUTiGFJVVg==
- SHA1-Digest: bi/+CwyNG7Dy5Sn5/6qqswrtYAg=
++MD5-Digest: 1HOlCIV+v2EagbcaFCxxGw==
++SHA1-Digest: V1X+txTmd6jbX2HrtcygVqt7TeQ=
 +
 +Name: content/firebug/net/netReps.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 91y8gqAdFNqJV6q1SYlMkA==
 +SHA1-Digest: BbBfjRrUJTHkIvgpdsosVRWrebg=
 +
 +Name: content/firebug/net/netUtils.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: +9IsxDdvL/08nxtGij3Abw==
 +SHA1-Digest: 7vUp2UpS+wHs5eH+XQFUvEzZzVQ=
 +
 +Name: content/firebug/net/requestObserver.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: sZyasnbT9fLpxz9/sewS6Q==
 +SHA1-Digest: e/a8BoFvr8aHaJ22YZ1jJ3LbF9Y=
 +
 +Name: content/firebug/net/responseObserver.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: PBKkV92E1q8v6Ulrrb9fGw==
 +SHA1-Digest: pnuXXrn3oRY6fU0kOKzdwg3SBSw=
 +
 +Name: content/firebug/net/sourceCache.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: mwpPc0eEk/SQ5bI7etY1vQ==
 +SHA1-Digest: 04Dw9s6Yyhn5ws0Ev4psCBWgDRc=
 +
 +Name: content/firebug/net/spy.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: RxR2bA0s9TmlebpZ4iJviA==
 +SHA1-Digest: Jyy9xec71itZLxaEyUNDSR2wmkw=
 +
 +Name: content/firebug/net/svgViewer.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: /sPAHayRHOgo+KnsoJLbEA==
 +SHA1-Digest: rEaU60QQktgONA1Pte+PWvHMfcE=
 +
 +Name: content/firebug/net/tabCache.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: P4s85h57lWLZrZKYWLamag==
 +SHA1-Digest: 6eJblcjgutjnMpndn2SCvCvi1hA=
 +
 +Name: content/firebug/net/timeInfoTip.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: YWSld+I39RIRZR6BZVHTSw==
 +SHA1-Digest: 5GHKQ3GXa6dXcYO7rb4Y24ahQFw=
 +
 +Name: content/firebug/net/xmlViewer.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: iGhgr7oCcxjl8MAc/wmQow==
 +SHA1-Digest: pUFj+aTH5BQeEmx4runa/teyVg8=
 +
 +Name: content/firebug/remoting/connectionMenu.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: eg7QLg9QhV2jaAGT7FfNaQ==
 +SHA1-Digest: Q6yMbCMB+pqU8sGSiPN8tercj1w=
 +
 +Name: content/firebug/remoting/connectionMenu.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ZopdkMeFn8tGGdh0G3jziQ==
 +SHA1-Digest: Clevk0lS/Byz9aCMAzBFvJVYBwg=
 +
 +Name: content/firebug/remoting/connectionMenu.xul
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: GHmNJ9GlcaXrEV/mQp3CYQ==
 +SHA1-Digest: DdfSoykv7YNs4qoTM7bzF2fHk54=
 +
 +Name: content/firebug/remoting/debuggerClient.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: kB6HMV3rwszwLuxdDyPBPQ==
 +SHA1-Digest: Z3A0mP5p/ZyISJdnkpRPHrUBT0U=
 +
 +Name: content/firebug/remoting/tabClient.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: +KNzp5A5siySY10c+35J4w==
 +SHA1-Digest: Rl/ZUtBkVoSp05NpEcFWowlEu5k=
 +
 +Name: content/firebug/remoting/tabListMenu.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: SaNKYYHJr7C9BT6ibTy5Zg==
 +SHA1-Digest: 4oBSjo1ElubUrcCgpxtdNvZKaUA=
 +
 +Name: content/firebug/remoting/tabWatcherProxy.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ZwZRDWRa1VhhQWlgJLIJzw==
 +SHA1-Digest: VceVpZpcISjVeaQmY31rJQGNpsE=
 +
 +Name: content/firebug/server/main.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: vNpE2RG/8AYyicePiDZ2XQ==
 +SHA1-Digest: yYP4SAjfWxcBNJ949xbVps/+8ME=
 +
 +Name: content/firebug/server/server.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: PXGFikwG/0AKXYNNOfmItQ==
 +SHA1-Digest: O3WTU2UUVtxaUAqu1fWcXcWVq6s=
 +
 +Name: content/firebug/trace/debug.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: TegX7xoKTgbf97Bc12DoTQ==
 +SHA1-Digest: L9f7Cb08z+TzDO6wCNSqmr9+QBI=
 +
 +Name: content/firebug/trace/traceListener.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 0Ogkmk23U3+EfQztD3Zlpg==
 +SHA1-Digest: HFRwXtie674wQdosLgxV2ookKlM=
 +
 +Name: content/firebug/trace/traceModule.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: OFy7yhQvxtHL8ZXLaEHkow==
 +SHA1-Digest: p3srnKKF5g34cXZwE1KOwuAQBwc=
 +
 +Name: defaults/preferences/cookies.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: VWlaDLikaW0MjRz+Hgpq6g==
 +SHA1-Digest: 7X+GlQUQUp25aNtwGq3m4cJhfXs=
 +
 +Name: defaults/preferences/firebug.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: y6aTX3ET+bc7tRYCVTNfnA==
- SHA1-Digest: oTKp5eFPHsu8RQBwZf6V0nvCneY=
++MD5-Digest: L0cqRPD1HBokmBojN8djKg==
++SHA1-Digest: j/cmWUBP8bogrNxN9s45YsRV980=
 +
 +Name: defaults/preferences/tracingConsole.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: WR/PYbj7EIWnmgHyHJ49Sw==
 +SHA1-Digest: +yNE6mQ3quU4nIaU0B2CPVF7/go=
 +
 +Name: icons/default/firebug.ico
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: WgnXzDizNuDIcs8X4PCihw==
 +SHA1-Digest: WRKQFDt7R/E782K3AnsTjJdariE=
 +
 +Name: locale/bg/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: rXgWnJnl7vSg3wzeikXyEg==
 +SHA1-Digest: cEjPDwRIC/OQ/kuRH4uwdMT6JRo=
 +
 +Name: locale/bg/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: SECRtamqQ8bxgD900UOPHA==
 +SHA1-Digest: aFiZTAWWg0j42uXyZlemYL8VFjE=
 +
 +Name: locale/bg/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: WjlPLs8Ma0+6AaHohD6lpQ==
 +SHA1-Digest: OExJeMF0AZYQil/TQ/HqY868H6U=
 +
 +Name: locale/bg/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: yEpwLn+bYEyWk3OBx7dbdA==
 +SHA1-Digest: n5Wu77XEIat0ZiCP9rNVmqHQNck=
 +
 +Name: locale/bg/keys.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: sJ4qw+tsLXLofTZjcoA46Q==
 +SHA1-Digest: N5eeaAAAeHWPaOqQIq9P8HM58RE=
 +
 +Name: locale/bg/selectors.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: nP97ysYG4wRxleXZNW65Ag==
 +SHA1-Digest: kqU3DtBH69QgP+07k/lGHcV62PQ=
 +
 +Name: locale/ca-AD/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 9XnTENM//Ey/HNNXfmGJBQ==
 +SHA1-Digest: 3ijeJjOfw97P6t86E7kJE/EuE6U=
 +
 +Name: locale/ca-AD/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: iGa+UK601QYef/iefwDDmA==
 +SHA1-Digest: Z+cAHxnLxaS75ehA2fZalvqk2Tk=
 +
 +Name: locale/ca-AD/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: zYNVGD6A6VLuc8YZ9t5M+Q==
 +SHA1-Digest: UApsfsF7cIkA+rIpAlu4WXMdsF8=
 +
 +Name: locale/ca-AD/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: BcQuxWt9o/WTsHQTfC/Y5g==
 +SHA1-Digest: AYwIToyZOdEcAQ4L3QiDif8VI8g=
 +
 +Name: locale/cs/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: bW1Bi4Sw1hcjVqkBQ8n58g==
 +SHA1-Digest: VfruYOa4jGqmAPMJan6o4OaXN6Y=
 +
 +Name: locale/cs/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: qSgGj7/1m5YI/ZXwtgdL2A==
 +SHA1-Digest: HOQJ9r8uoCRKMpYQejw1RK79ni0=
 +
 +Name: locale/cs/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: gb3mXOy6ewOy/1khf1aRCw==
 +SHA1-Digest: sbunlylGsc/FmZKUYmL8wEslj0k=
 +
 +Name: locale/cs/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: BcevMkJbOjIow29BXRf9gA==
 +SHA1-Digest: Bbm6uYyQTKGD/sTJSpY9djcHWFM=
 +
 +Name: locale/da/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: qxweMkJB+v9s4w29kZtIfQ==
 +SHA1-Digest: PiFx9JwIrW43SUb0UHMG+z8/FPk=
 +
 +Name: locale/da/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 57//Ath8EdG2IJTUknuleQ==
 +SHA1-Digest: 9EIMZ//xuAPQ32WHVe6BNJFQsKM=
 +
 +Name: locale/da/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 9vJqXoS4T6ObPDn8qZarGQ==
 +SHA1-Digest: xXpY4YgeRNXbtOobcP6VgzLoGRM=
 +
 +Name: locale/da/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ErnL8BXPRmMJsfhiWo/qSg==
 +SHA1-Digest: 40A2l69TglvSHJZAsM5KLB15iAI=
 +
 +Name: locale/de/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: WFoqK3tZHOSxfQvhrisxbw==
 +SHA1-Digest: mGCHsMS/Xnafe3+d70uR631t0qw=
 +
 +Name: locale/de/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: o3qF0CfCaGpx4Bsog/Z9uQ==
 +SHA1-Digest: lOcbC9MHRF4lzMFMgQ0ntvWLkRo=
 +
 +Name: locale/de/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 5mTiaUT1O/xTdjL69hVcCA==
 +SHA1-Digest: H22iTw0HcOV6rebGc79PzB2riHQ=
 +
 +Name: locale/de/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Vvy9MCtM7FHEoCmm18uVPg==
 +SHA1-Digest: CS2Sg1rUT9G028x56LPCjvIUbYE=
 +
 +Name: locale/de/keys.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 7OuEMCOgBi0rKB7nUPguXQ==
 +SHA1-Digest: XIBALSFzBNoqIVnuVUnBXLp+wfo=
 +
 +Name: locale/de/selectors.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: a4WtfAVkEpqIZgwn3hAYUQ==
 +SHA1-Digest: JMEGS51lWSS4Vsw3wYfSWQ6if00=
 +
 +Name: locale/el/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 1LVdw0xKYrFck+2haDRpMQ==
 +SHA1-Digest: CdNbwzAtR4rx+o7AI3SqH8GhlrE=
 +
 +Name: locale/el/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 75k2K+My7wacgKkK3RyWgA==
 +SHA1-Digest: vSI9AYh+v/IQf5mD/mbAhfQVGz4=
 +
 +Name: locale/el/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: R53yStFcRXZU72SRpcEhCw==
 +SHA1-Digest: V5RAx7EOo6Vryb9Ha7Yc0Ju6YcQ=
 +
 +Name: locale/el/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: PB1RbZ1HbvNOmqmb1bxyfg==
 +SHA1-Digest: hAJ+sQ4qSyUkkiDQaQh0r1oWHP8=
 +
 +Name: locale/en-US/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 14us+sy+DJcf6s9Kq8uFGw==
 +SHA1-Digest: GS9fmheOtB7qcX1d35lupYfic8w=
 +
 +Name: locale/en-US/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: cNh9wY6oW3eN0bZR1+usbw==
 +SHA1-Digest: Xnf3i/Sj0g5vqRiSpo826x9d6Uc=
 +
 +Name: locale/en-US/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: dQ8KI57G9qFHKQtAsWj2qA==
 +SHA1-Digest: VFsYe437rwgYLJFDcjBPiYUG0zE=
 +
 +Name: locale/en-US/keys.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: wfgrzqK9ukoDWSHegY0veA==
 +SHA1-Digest: Xmn/jT1tjchvcThKj9f0mlmODI4=
 +
 +Name: locale/en-US/multiprocess-notification.properties
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: qpA+OHCEUbIL9JLnM25Q9w==
- SHA1-Digest: JKM4iEqUCqc36wxAODo6tUPIGZ0=
++MD5-Digest: N/+HhwHccbJjn5eAUofasQ==
++SHA1-Digest: Yg0ptwbeHfhfTFccCR55r7jbfHU=
 +
 +Name: locale/en-US/selectors.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: i+AIR+15HqS+r9McB0qJrg==
 +SHA1-Digest: 1tj5Da+Z08Tj5BLIzMcY1MfLC+8=
 +
 +Name: locale/es-AR/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: mZGKtBVUnkz8+vNuHRCeng==
 +SHA1-Digest: G7QX/8H60sMKmXdP8G5jlS9h4Og=
 +
 +Name: locale/es-AR/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: SoWYiXT5o3GrRCU/RfzdBQ==
 +SHA1-Digest: +7tJYw54JwiVWFXCEhmC/nQap+A=
 +
 +Name: locale/es-AR/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: tmiC+pAARQJcY2CT4cI4fA==
 +SHA1-Digest: bTl8xuwvGxAg132wlr26b4SWU9U=
 +
 +Name: locale/es-AR/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 6p8pR6/apsNNMIuZjLTMLg==
 +SHA1-Digest: r0qDcL0KJYyIc9JSBa0WYEjJPJQ=
 +
 +Name: locale/es-AR/keys.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: J+OdFzYebBjNPCwdQ8VwRg==
 +SHA1-Digest: RX8CvWimF2fdyw7i+J3B1EsyGig=
 +
 +Name: locale/es-AR/selectors.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 16zhKIZfpryv99GExutCLA==
 +SHA1-Digest: UPegNAuE1ID8yyAr8wRGdWqCRZw=
 +
 +Name: locale/es/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ifWNLXrw+QeACKoxebEd4A==
 +SHA1-Digest: gOZH4t190cClaNzWt745xi8oYrw=
 +
 +Name: locale/es-ES/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: +zwD0qgtRXsTK2D6RJSA1A==
 +SHA1-Digest: RNjdiN8clS/G7ehcjftv6UiPVHU=
 +
 +Name: locale/es-ES/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: MYcrk+oex76ZUOdpMSaBxw==
 +SHA1-Digest: IovLgTqT3HS00Xx1dn2XvKSNkJI=
 +
 +Name: locale/es-ES/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: lPcxscq248G6uXFZeOPLLw==
 +SHA1-Digest: yEkFvxYTKhfvRbwSfrBmR8b8zqI=
 +
 +Name: locale/es-ES/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 3vyf3xnZSyGxopAwaDPijg==
 +SHA1-Digest: wz+q6tj2onFk1T/T0wuRoDrOxdo=
 +
 +Name: locale/es-ES/keys.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: rRL5WearUBxafo0mZ3MUCw==
 +SHA1-Digest: s22mPglN+SAfe/c4kAot/81u5VM=
 +
 +Name: locale/es-ES/selectors.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: nGzo135ppbQulqGkKAJC/Q==
 +SHA1-Digest: JwCiUnwJqXWN89nAQkqznTxfBx0=
 +
 +Name: locale/es/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: rzreeKxntFTiH+swFYBGwg==
 +SHA1-Digest: zju3gJXTXssADwbS02C8INozH10=
 +
 +Name: locale/es/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: NBLIdLJfNBHufT9ssPJaJA==
 +SHA1-Digest: k4kVBwpd1iq+PCuuPm0kXstwHaM=
 +
 +Name: locale/es/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 9gTGnYoLivQcTSg/chhnxQ==
 +SHA1-Digest: cIIui1BkG+ODGeWQ4kDa+1O4IXo=
 +
 +Name: locale/eu/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: sHUAEdli7igTBnInZybHzA==
 +SHA1-Digest: sQyL4vFJiQ7kAI+eXTJN5ubHHxQ=
 +
 +Name: locale/eu/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: r4LDyWdJv2qGKW6YjBrp+w==
 +SHA1-Digest: S6e/5TqVM4/FY91ehsKGz81gWN4=
 +
 +Name: locale/eu/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: vyF4ig8o4ZIfKWavUO6uzQ==
 +SHA1-Digest: J7r3qBKPX6IRoDTF0NRlVIo1iXE=
 +
 +Name: locale/eu/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: jYG21+1F7RzRNx10A2LM2g==
 +SHA1-Digest: vX5nl9LVZMc9AT5QCxO8b+JzDgM=
 +
 +Name: locale/fa/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: qxweMkJB+v9s4w29kZtIfQ==
 +SHA1-Digest: PiFx9JwIrW43SUb0UHMG+z8/FPk=
 +
 +Name: locale/fa/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: nU24py57gfzN7/3D9HrYgA==
 +SHA1-Digest: 63BInKs8/DhkaJDWoUiYYT6r7bw=
 +
 +Name: locale/fa/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: aGaJ2ygIBPIJpuTBzkDYMQ==
 +SHA1-Digest: 0MNGHJO6ITi+K+Ikb7XgQxm+3mg=
 +
 +Name: locale/fa/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: hvzi7OoAiikmm03F9YC84A==
 +SHA1-Digest: ai576Awm/B7jddt6YM+GCzTRwsw=
 +
 +Name: locale/fr/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: wl0RyXUP6qDdoCed7M1oeQ==
 +SHA1-Digest: nUU33gpw71vqxs6Px/U7YoZKpTU=
 +
 +Name: locale/fr/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 07hj9W0gOVE7F6TnKzMqIw==
 +SHA1-Digest: 9pvcFJeZMfLGp/cI53U6DUCeHt8=
 +
 +Name: locale/fr/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 9ViJCh6vyfJ4aCVbHkURxQ==
 +SHA1-Digest: WOCB+tvGXa53CBtwOldLOgSWios=
 +
 +Name: locale/fr/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: KjnO4j+0Dq5f16ue1hgLXg==
 +SHA1-Digest: kb/4kVFcdzRhH7V3PWWUFBFvE1s=
 +
 +Name: locale/fr/keys.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: iCt4WZggcRPTdv7yFyrWcQ==
 +SHA1-Digest: Twdm52MLw3WpJmjF00CBJyp2c7s=
 +
 +Name: locale/fr/selectors.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: q+ArEa9DdlOfZ/4EzQH/BQ==
 +SHA1-Digest: ruPdeZN60gMRMBF2Vawr+NcDVyc=
 +
 +Name: locale/he/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: qxweMkJB+v9s4w29kZtIfQ==
 +SHA1-Digest: PiFx9JwIrW43SUb0UHMG+z8/FPk=
 +
 +Name: locale/he/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: mIbIlE8o3kS0SINIcJZ5hQ==
 +SHA1-Digest: BqFVd/oRE/wkyjrOKJ7qDR3PoYk=
 +
 +Name: locale/he/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: gWgYC9OeNan+6aFoFnB7Tg==
 +SHA1-Digest: LKdMiLL0E8YWNfHb0d+qP3xCngQ=
 +
 +Name: locale/he/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: pjmHywSeVNlMA81ZBvcqCw==
 +SHA1-Digest: PJHlKb0z5zR8Z7SiwFWuolAu/rw=
 +
 +Name: locale/hr-HR/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: qxweMkJB+v9s4w29kZtIfQ==
 +SHA1-Digest: PiFx9JwIrW43SUb0UHMG+z8/FPk=
 +
 +Name: locale/hr-HR/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: X8EKQts6HF/ej19KWUKqPw==
 +SHA1-Digest: XaCXHxp7CFjEy/mCSNt3s17XlIk=
 +
 +Name: locale/hr-HR/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Yd3FYYPCslsxbK5NcvCXsA==
 +SHA1-Digest: ttgUWQhDIxJ1ZUwQfyWFpBzxsUs=
 +
 +Name: locale/hr-HR/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: JXyJ5pvOMbq7m0sJYnQeTw==
 +SHA1-Digest: 34bljLxiuo9xKC0ccFsgYr6QLyo=
 +
 +Name: locale/hu-HU/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: TKU8JfUiwmF1h6+fXvnf6w==
 +SHA1-Digest: /ZRDcM8El/koFFDvIXxZNyK1C3M=
 +
 +Name: locale/hu-HU/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: iwF+Qb0gBQ8IHzPcBBILuQ==
 +SHA1-Digest: O0uPDAy569Q8biJHesRAV1lBBQk=
 +
 +Name: locale/hu-HU/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 8Eg1fMy3gC22GNP7zkwrzg==
 +SHA1-Digest: b9ZGhu2U5utn1mvoveuZJypeu7k=
 +
 +Name: locale/hu-HU/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: iSu36KXhskGl5+bADXBVJw==
 +SHA1-Digest: 96jRuorWLU7DumsxIDJuD8VCVYk=
 +
 +Name: locale/hu-HU/keys.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: bp1nMOu3BLuwLRH7aqTf3Q==
 +SHA1-Digest: uRXAm+kmjbPYM6chnEj+3AMizrI=
 +
 +Name: locale/hu-HU/selectors.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: gTlCOf7q0JXL4BnBNImO7g==
 +SHA1-Digest: LgcBDLlVcmQyFX4ygxJZ+pVrjAw=
 +
 +Name: locale/hy-AM/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: qxweMkJB+v9s4w29kZtIfQ==
 +SHA1-Digest: PiFx9JwIrW43SUb0UHMG+z8/FPk=
 +
 +Name: locale/hy-AM/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: X81FjeCquWMfdjZf09SRng==
 +SHA1-Digest: 9s8tpB+YzVFNhsxIcFVGX5MQ5Go=
 +
 +Name: locale/hy-AM/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: n+uHD3l6yH9j1s1k+Bne9Q==
 +SHA1-Digest: YEU0oJ8w38K/AXcyXcxN993zokA=
 +
 +Name: locale/hy-AM/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: rc7OvKriO2cdMM0TV5Kl9w==
 +SHA1-Digest: AogvGl7bhOPTX2N1Tm+HUtjq0qE=
 +
 +Name: locale/is-IS/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: qxweMkJB+v9s4w29kZtIfQ==
 +SHA1-Digest: PiFx9JwIrW43SUb0UHMG+z8/FPk=
 +
 +Name: locale/is-IS/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: z8O3+1VN2nm1+e1W+/jZEw==
 +SHA1-Digest: 153ALT3YTVyvejtubZuQ3H/yX8g=
 +
 +Name: locale/is-IS/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Xdb/MnWwkGSXVqrIpd+ZUQ==
 +SHA1-Digest: aWF+0+oUxuMMFyIZvo/qC9+xIUg=
 +
 +Name: locale/is-IS/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: NOiImBdaSDBGNWQFjkfMLg==
 +SHA1-Digest: Qm6J+vD4HcG116LhB3dYndLvR1E=
 +
 +Name: locale/it/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: HCy/POFwpVFYk9Qtmt/S4w==
 +SHA1-Digest: NLyzqSxuRsg2yEsguNatKuvA/sY=
 +
 +Name: locale/it/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: zpLZfvBY4O9htto3/EOJpA==
 +SHA1-Digest: KLlCmUkF9pzNEN5XurQD3lleQDo=
 +
 +Name: locale/it/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 0KHtBEVX1ZC7vx72Nfct9w==
 +SHA1-Digest: cOkLwALOzLeuNmCVp8RT+McTOt4=
 +
 +Name: locale/it/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 6Q/qSf51AGP2XGY7tPBuww==
 +SHA1-Digest: HMy93YvIVZjV8SUF5P0BznE3iS8=
 +
 +Name: locale/ja-JP/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: S6nBygaeGU51nBH/Ll5g5A==
 +SHA1-Digest: KG+NqNLM4Kux6b57P/J2EDhmuAw=
 +
 +Name: locale/ja-JP/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 8bkepBFi6QjtacFvdCWT6g==
 +SHA1-Digest: SAh27FmX552QxyYBMylWq++4PWY=
 +
 +Name: locale/ja-JP/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: O+TgA/X9VdloipNUneKpmg==
 +SHA1-Digest: ynD/2YfcMyLyNfE1Og77FA39SFU=
 +
 +Name: locale/ja-JP/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 1DCo83nkrI2IFFz0rFIyaQ==
 +SHA1-Digest: H0yCYNQZTiSM9VrBQairZWMDpfA=
 +
 +Name: locale/ja-JP/keys.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: uyYf36DpQ3WKYevSO3cZJQ==
 +SHA1-Digest: n7eNolrCpcGCifJ3jRgP0xw7fEg=
 +
 +Name: locale/ja-JP/selectors.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: k0csLrtxIqrY9ql03wtamw==
 +SHA1-Digest: 9hoTwjpicOHkGxspsv6SbpCUGXs=
 +
 +Name: locale/ko-KR/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: XrKnrNy1B7cLMQvoLkJrpQ==
 +SHA1-Digest: IJ0ND3mZlJ1uGVdF9YAaMlJBBzI=
 +
 +Name: locale/ko-KR/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: cBEv2Y9gVzKItFPNr/2vOQ==
 +SHA1-Digest: /lG/LHEwJVZbZrAD+VTZqrbp2gs=
 +
 +Name: locale/ko-KR/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: aGaJ2ygIBPIJpuTBzkDYMQ==
 +SHA1-Digest: 0MNGHJO6ITi+K+Ikb7XgQxm+3mg=
 +
 +Name: locale/ko-KR/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 0X2g/EBHM2xrlqd+8TrGSg==
 +SHA1-Digest: LRLmevKYbSNUrWTG4nfK+qZ0yLw=
 +
 +Name: locale/nl/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: pe8xQBQrx2KRA7aVo09qqQ==
 +SHA1-Digest: mQw1sf/HuOfrOgCAFW5QasK4eIU=
 +
 +Name: locale/nl/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: vT877GmO0cYQjSmWvFq95Q==
 +SHA1-Digest: co/gn75CFRvtngOEfpxMs78Rrh8=
 +
 +Name: locale/nl/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: S7KqqLVZ47bXznAIEOZrXQ==
 +SHA1-Digest: YRFQlTscos+yxwfDijKuaLMuyoA=
 +
 +Name: locale/nl/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: wVAjgmC14Qbd1/0j9siTBA==
 +SHA1-Digest: CjztlbM1XwHicBT9skla3dZAVJ8=
 +
 +Name: locale/nl/keys.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: rE9EQcGROimnSoR2QrNtwA==
 +SHA1-Digest: wOZY5Qg0xyKU9ivwMNVdR4nA28U=
 +
 +Name: locale/nl/selectors.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: nt3rqQgkNhnO5Kjn9stBDA==
 +SHA1-Digest: xNfdrGtvuQO9XDOi0EZVtqFUGNw=
 +
 +Name: locale/pl/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: OuG3wYAMl/MZEiNI3vCbLA==
 +SHA1-Digest: 0NFqFUnhNjCWUoxShi2nFoVum/A=
 +
 +Name: locale/pl/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: aKYRegGT1bYH7frKR95JKA==
 +SHA1-Digest: hU58hWBSR6dvVaL2xxWhwRHMF24=
 +
 +Name: locale/pl/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 4BVDxE6LMfgefVEScCiwgA==
 +SHA1-Digest: WvThaN3JyKJ1348Y88NRMIZCCOM=
 +
 +Name: locale/pl/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: FoIYZJbbi9kQcWDr5BQW/w==
 +SHA1-Digest: MBsCbggo8UZ6YzkwIrWO4C3pLG8=
 +
 +Name: locale/pl/keys.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 5Aw3rVEIJOrTDF7vK+HIWg==
 +SHA1-Digest: jTt0+cqvXW0GlaCmaJ/J0pmXM1Q=
 +
 +Name: locale/pl/selectors.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: snmJuZ7hptpZY5WS91ecbQ==
 +SHA1-Digest: SGpXvGi0ZaZggjWvugtkR/+RWJA=
 +
 +Name: locale/pt-BR/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 3lX4w4cHZ8dsuaSzJIQoBg==
 +SHA1-Digest: 2fkUumYPTXDF/78ytZNSetjvzCA=
 +
 +Name: locale/pt-BR/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: EeGN9+3RSVd8ujc32WfsWg==
 +SHA1-Digest: 0F0Ekq+CeCFfn3mEwTx4QSk2nh0=
 +
 +Name: locale/pt-BR/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: aM86Zc1B8TDF2l0QnLG1Eg==
 +SHA1-Digest: Yi7hGq0TaH5UNRLiddoxaAeutWU=
 +
 +Name: locale/pt-BR/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: HOH+VagYw+J8mzj/DScT2A==
 +SHA1-Digest: xwTJhMNVEGRPJrQSj2n+NPtfQwo=
 +
 +Name: locale/pt-PT/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: OSAqzIXSsXyFE5gZ/r03RA==
 +SHA1-Digest: Co+oDRu8mJZ2bmNBJcZR3bXWmm4=
 +
 +Name: locale/pt-PT/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: hu1aQ+mcNMKorgrmPOhVzw==
 +SHA1-Digest: oWd5m3Slh2esl+ZycWdxiY/AgRE=
 +
 +Name: locale/pt-PT/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: PXEifwfr3kjYK3lkEDjiKw==
 +SHA1-Digest: PhWFZJrajopt7ecJG4Ojdfc+LW8=
 +
 +Name: locale/pt-PT/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 18j7TuxEIoYn5Rsxj07cVw==
 +SHA1-Digest: 9GnJ4xSbIXD1ptuAWpJ4YwuXvVs=
 +
 +Name: locale/ro-RO/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: QOGgxSXSEye7EnjoqFxCIA==
 +SHA1-Digest: PHkwis9KLDgHr5Hy/YM/1FvzVxg=
 +
 +Name: locale/ro-RO/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: kXN9rfKuDWdRcGJ6Xju59A==
 +SHA1-Digest: bOwdrOrByFzQI18L03QxxrlxTiI=
 +
 +Name: locale/ro-RO/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: wO2n0jpKSlr0hL+muYbHdA==
 +SHA1-Digest: +J7vxGRgCEiYVjajWWybyXAAMjg=
 +
 +Name: locale/ro-RO/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 50TpUN10vbFAvLsgunbnUw==
 +SHA1-Digest: bhwo5IQLWeUOnnYTfz+4fuBl0kg=
 +
 +Name: locale/ru/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: /9510+++KOfyKrVu3OZA2w==
 +SHA1-Digest: E2Xcot0EOEYO6yk5A3hg1pWpi/g=
 +
 +Name: locale/ru/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Hdzp0xqz3yx3J4VBYuEjYg==
 +SHA1-Digest: NpzfLclEFOrKkvu71M2uqNOBa2A=
 +
 +Name: locale/ru/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 4m5LQ2dP5cL53Tu9LiPBFQ==
 +SHA1-Digest: C2h0UkI2F0eaehWgRcwN44Cqn3c=
 +
 +Name: locale/ru/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 6cubDPjME9ACLgVqjusOaQ==
 +SHA1-Digest: TF2IKAWq8DKJwNvyvyqsY/9stgI=
 +
 +Name: locale/ru/keys.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: GHigRto4aHv/yuKasyckFg==
 +SHA1-Digest: R/dmyCZ1nG/rk7zJos7IyFs06bw=
 +
 +Name: locale/ru/selectors.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: JKy0iJxosiX4982uXFa3Qw==
 +SHA1-Digest: ryES+0lCbk5BHHOFlC2++1OQo4s=
 +
 +Name: locale/sk-SK/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: RbG3GmlojxILc8m0B0eOjw==
 +SHA1-Digest: IqlFDso+rwJET+r9u5nXBVLFn5w=
 +
 +Name: locale/sk-SK/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: EWQAwBNjqgjD661O4dXBtQ==
 +SHA1-Digest: KkS8LirICxgciX7oRN/Rg946tLs=
 +
 +Name: locale/sk-SK/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: J/c9NkL7olFJ8dlrKu/+KA==
 +SHA1-Digest: 9uzuyOC3hUMKtiFoklmOW5+YbT8=
 +
 +Name: locale/sk-SK/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: v5UaUXun1Ds2QNT4HxRz2A==
 +SHA1-Digest: d1gYWGCMZeCXMRODNss83h2ThMw=
 +
 +Name: locale/sk-SK/selectors.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: rVI+Ojt9rxt53//du0K9GA==
 +SHA1-Digest: D81yPVHSA4RXkIV/QpS477BSbh8=
 +
 +Name: locale/sl-SI/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: zQ/mpxMqh1GiD4PhdcL3cw==
 +SHA1-Digest: H4ZW5A446XeIJUcTHwJftBWMyNQ=
 +
 +Name: locale/sl-SI/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ahGZEAKMdln1fsoic5aB7Q==
 +SHA1-Digest: y3kkamgVLQRBE3F1tNJ+AoFsHd4=
 +
 +Name: locale/sl-SI/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 11h7ft2z9i4hZprlQLz8xQ==
 +SHA1-Digest: ifTKZgMA4HCAh6KCpfXAlyWaRWI=
 +
 +Name: locale/sl-SI/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 7cwEGfZG+N1S+XSEifcwKg==
 +SHA1-Digest: zTkKKM1IWAqvVaygdfKUrRDdlPA=
 +
 +Name: locale/sl-SI/selectors.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: OAcrAbF+EVyzsgedpxgnHw==
 +SHA1-Digest: vdjD0w1rl7X1R7HZXANnzFAHTdc=
 +
 +Name: locale/sr/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: qxweMkJB+v9s4w29kZtIfQ==
 +SHA1-Digest: PiFx9JwIrW43SUb0UHMG+z8/FPk=
 +
 +Name: locale/sr/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: LCvD542cYNnGOaLIMvFwjQ==
 +SHA1-Digest: HE4TWOOFEMFqWmOeYT+e58eh0Gc=
 +
 +Name: locale/sr/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: AJI+Xkkknz4yAQOtX2Iv7w==
 +SHA1-Digest: NxVKUsBIZodiJmNvDxegF6KtgrE=
 +
 +Name: locale/sr/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 5lADmOocY0kligZf2kNeLQ==
 +SHA1-Digest: sdOkNh6XrM3cj4LNb+C8m9DdOko=
 +
 +Name: locale/sv-SE/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 4rZMWgho33Jl/KszsOTXhQ==
 +SHA1-Digest: ITIg0W9/0wmQYY8syEzK6biFgpA=
 +
 +Name: locale/sv-SE/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 8CT0z6ThzKjrezh93x1TQA==
 +SHA1-Digest: 1FmsBadHuXIvYj++b5EPl1d0Qhs=
 +
 +Name: locale/sv-SE/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: vwNjvC9LGXuNddIX0kUg6A==
 +SHA1-Digest: DvOijmOy+qiq6C/o8mxHw1i9e2o=
 +
 +Name: locale/sv-SE/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: XSBaDVwaF/0Ap6q39zV+YQ==
 +SHA1-Digest: zP2h5VEZAc2lUHAWmMUzA0HMsgc=
 +
 +Name: locale/sv-SE/selectors.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: owqw1o9eOlyTHeQnq6hvLg==
 +SHA1-Digest: NjKY6m6KKYSEp+XxWFAKZ9NfuLk=
 +
 +Name: locale/tr/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 58jafukebWahNW6wccghAg==
 +SHA1-Digest: 1dVUU73Qc6SnVsIjz49l/i6ipgU=
 +
 +Name: locale/tr/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: nU24py57gfzN7/3D9HrYgA==
 +SHA1-Digest: 63BInKs8/DhkaJDWoUiYYT6r7bw=
 +
 +Name: locale/tr/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: aGaJ2ygIBPIJpuTBzkDYMQ==
 +SHA1-Digest: 0MNGHJO6ITi+K+Ikb7XgQxm+3mg=
 +
 +Name: locale/tr/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: TcL+9Zcig3QjQXcfXU6FlQ==
 +SHA1-Digest: ZtJ0RmFnp7/iruEQ38uasK6LX5Q=
 +
 +Name: locale/uk-UA/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Ofm7872HgrzoMk7MRsrasA==
 +SHA1-Digest: qlBWyYHyLwIFpnr8hF8f7xHttMc=
 +
 +Name: locale/uk-UA/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: EB5y/dKjGJdMoYVUUTWBDg==
 +SHA1-Digest: YQqgq/9WpJsVbDDfwPRSbyjNw70=
 +
 +Name: locale/uk-UA/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: R7LKIC8ZZPmZft3F5h+EiQ==
 +SHA1-Digest: cQ8xnKSQPYEOvvkwLhlx29mWfV8=
 +
 +Name: locale/uk-UA/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Wl6gXykNyh6sRQ3d+V6rtQ==
 +SHA1-Digest: gQBODUgxiI1UgtC57a2Wajdi6wQ=
 +
 +Name: locale/vi/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: qxweMkJB+v9s4w29kZtIfQ==
 +SHA1-Digest: PiFx9JwIrW43SUb0UHMG+z8/FPk=
 +
 +Name: locale/vi/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: KBEQkJh5QCDMdeV6yUgcdg==
 +SHA1-Digest: V7VOAXm/1cDgz5Dlg7FlVQm73+Y=
 +
 +Name: locale/vi/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: vqSTAfZweQFlqe8ecGgJLw==
 +SHA1-Digest: cKS1JMvJ1IJItiSuOBdhm0JAAt8=
 +
 +Name: locale/vi/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: yaft1RtGn4pO5LUy9GZHtg==
 +SHA1-Digest: 6DZm33F8kcyizXsLb8w9r4xqn24=
 +
 +Name: locale/zh-CN/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: aQMj7XbqqV3oCXGn3NRw5g==
 +SHA1-Digest: AlR/ToRfr6D+aww87Szmu5dO54U=
 +
 +Name: locale/zh-CN/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: mI6aP+EgNNIp2qtIsjLMmw==
 +SHA1-Digest: IoD4vALlopJ5JeQQ7eumm7E4BPE=
 +
 +Name: locale/zh-CN/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: icXCGTg8EZjlhGiPftaRtQ==
 +SHA1-Digest: nxH8YiUAwRx6ON1eSdcaAW6In8c=
 +
 +Name: locale/zh-CN/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: e3nB8Q4jOasdMYnQTwydAA==
 +SHA1-Digest: w6D0UfKJbOK97rs1RlajxqvHJe0=
 +
 +Name: locale/zh-CN/keys.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: uvaQzvf36AcNMhqVBIN7Jg==
 +SHA1-Digest: HV1m68qZTypfjrDMdPHmn1CZmiI=
 +
 +Name: locale/zh-CN/selectors.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 8M8ZM3tu60dDBUthBM+0AQ==
 +SHA1-Digest: 4KltluFQeCpAvCpazwqJoZ9oEoQ=
 +
 +Name: locale/zh-TW/cookies.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 8nXT6mCx75EgMDJGyvNuwQ==
 +SHA1-Digest: wprFvU5usflzf9/IKJyMabBC6C4=
 +
 +Name: locale/zh-TW/firebug-amo.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Pr+ICJcZnN5ctTePFO7ojg==
 +SHA1-Digest: itoh3Gv059oxrjvwOVuwE8dZtpg=
 +
 +Name: locale/zh-TW/firebug-tracing.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: RVpfYkgtXvyd3DXA1XT4Gg==
 +SHA1-Digest: ifq2h0PwBf5D2J5JGmmBE7T6gSk=
 +
 +Name: locale/zh-TW/firebug.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: IIPQoAPzweY/ZdON0oaj1g==
 +SHA1-Digest: D3rZsKBEKyjr9r8Wa52RD5+5CRg=
 +
 +Name: locale/zh-TW/keys.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: OSZGxnpTwiX+S+CsQu5UqA==
 +SHA1-Digest: JuVH7pba0dNeRKN2NU9gs4HcNX0=
 +
 +Name: locale/zh-TW/selectors.properties
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: B5h9zWXqc4tQclIet1rRlg==
 +SHA1-Digest: +YilQxbEE9e8qSiMEwVenufEpcE=
 +
 +Name: modules/fbtrace.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: z4QYfokxxVdHd8kix7eStw==
 +SHA1-Digest: tExXtyByHY797+8W3PvSKS7VRtg=
 +
 +Name: modules/firebug-http-observer.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: VENa8QoZxH7jdxufy234ow==
 +SHA1-Digest: FAHVkEsG5DCMYqoMfoj5xlBPpGE=
 +
 +Name: modules/firebug-trace-service.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: xcdxDy/TCqsr0aX+JCkRzA==
 +SHA1-Digest: q0WJDbDsdiOeZS/eIxoCcfpayXQ=
 +
 +Name: modules/gcli.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 7UbMfhbMNLfryGVF2fNgdw==
 +SHA1-Digest: nce2eAoYnqlYCJf6VAPiRZ9jBw4=
 +
 +Name: modules/loader.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: zjx72h0LVYKxy4b76zE7fQ==
 +SHA1-Digest: /k0RYYd8gaDifhYHH3QAAwCDtmI=
 +
 +Name: modules/locale.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: SIyhq4sFonw8hLH0VCePUA==
 +SHA1-Digest: EAPevGGcJLh/yuZ9ifHGw7Gzp14=
 +
 +Name: modules/mini-require.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: YGk4IAmZWMdZ8qSJZrGEBA==
 +SHA1-Digest: f8SIoMTlIe6Bzgg9WBzKpx/iGmg=
 +
 +Name: modules/observer-service.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 2oOgnKFFdnOgotXF8RAR5g==
 +SHA1-Digest: zZ60QzHd1BUDIgPAOltaqTH4AQE=
 +
 +Name: modules/prefLoader.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: zXDfsge5qCdN89RO2lrViQ==
 +SHA1-Digest: cH8hL5aD/RG/eCLieEgMocOi4yc=
 +
 +Name: modules/require-debug.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: SzQxRFaFGTc+ZbcftfyHAg==
 +SHA1-Digest: Ex4l2FE0Cb8CKjbHSgDys4Zw+w8=
 +
 +Name: modules/require.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: YBBmgRo/U0qmfEK/3thQ2A==
 +SHA1-Digest: xsOFMLZ1FZ23ZRyrhsMojL6aYAs=
 +
 +Name: modules/storageService.js
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: OZmGbJuemhvms+xJcg676Q==
 +SHA1-Digest: Mf8K3InIhRyVWBQQLsa1HoXnEq4=
 +
 +Name: skin/classic/activation-menu-console.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: YzRw6OeGVUc5O7Odv26cEw==
 +SHA1-Digest: hWsCMB5F4v5ppV8MaTdjqtmTYaY=
 +
 +Name: skin/classic/activation-menu-net.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: cm82VszVZr02pgFejowIYA==
 +SHA1-Digest: ruESasmNmYpa5UMPN62dWUpfLEA=
 +
 +Name: skin/classic/activation-menu-script.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ZRbIsfTnW4WJ5vBBbERM+A==
 +SHA1-Digest: BKfpumat2+NPrbZUY7V1m0L5Xck=
 +
 +Name: skin/classic/arrowDown.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: X452gzEGFMEZxLHGBB+wuA==
 +SHA1-Digest: fw69vi2FDZ+KJzWHPadvIYWGfgE=
 +
 +Name: skin/classic/arrowUp.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: rxzPz904FDSUPQYPSefUSQ==
 +SHA1-Digest: BdDWNAc7lU6y1mq8xy+mq+L0B/E=
 +
 +Name: skin/classic/balloonNote.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 7ICwohtry7rivuXSt60kPg==
 +SHA1-Digest: erOu1FLHUjZdMRZJPMqdk+O0+TQ=
 +
 +Name: skin/classic/bindings.xml
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ywcNtqFPM3qaO/yI6EAzKA==
 +SHA1-Digest: lK0Qwo/5tPJsal/tubis44jB1nA=
 +
 +Name: skin/classic/breakOn.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: yx0ToKM/rwwL/XhjgTsNWw==
 +SHA1-Digest: wXSXv/Piloml5Neh2fG6SOOd2bI=
 +
 +Name: skin/classic/breakOnArmed.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: CcsMnUH4wWb0s7tLgsWF6w==
 +SHA1-Digest: U6VcW+g4WNeL/iZ0eWHJ7opFQIo=
 +
 +Name: skin/classic/breakpoint.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: YYeJV+ExpozYP6pSE5LRpw==
 +SHA1-Digest: BvKSa1uTOZ+PZOI9310nz7MIC24=
 +
 +Name: skin/classic/breakpoint.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ehYROf6zuawSgADaAaYERA==
 +SHA1-Digest: 7/GQylN6h3vH0whDH/GtopFm/e8=
 +
 +Name: skin/classic/breakpointCondition.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: MBvIQdcbod8bS+IhA1iXuw==
 +SHA1-Digest: lw7enO/D0mIIP/5xvSJUXEm/oKw=
 +
 +Name: skin/classic/callstack.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: /GPxrYoBulKPSRCqpbKjtA==
 +SHA1-Digest: u/fGoAv7Vll5YMs5/XF52B1r3Rw=
 +
 +Name: skin/classic/callstackPanel.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: H0wAojzfm9c2acfdLnEAFg==
 +SHA1-Digest: feqYZbyloj9m30zF1w1n3rHselM=
 +
 +Name: skin/classic/collapseSidePanels.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: xRCQb6Uv+2SEi+ZtFZKKBA==
 +SHA1-Digest: PEpw9JQLx3WheIzEvq6wK1ExAJo=
 +
 +Name: skin/classic/collapseSidePanelsVertical.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: s6ewmqIT6xhA6hSTszLvVg==
 +SHA1-Digest: ix683m8uf39Fk63bAAZXWX/GIXw=
 +
 +Name: skin/classic/command.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: wk3uz661qJ4o3DOYSv0I0A==
 +SHA1-Digest: xf9pDRhFMPJ5/exdnW4kljIIPqo=
 +
 +Name: skin/classic/commandLinePopup.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Obf2+tv0Tby0a6uV8lQznQ==
 +SHA1-Digest: VugMCQRldEEWEHY1HkNAQsiHG6Y=
 +
 +Name: skin/classic/console.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: idMff6A0iahlX3ja4wQqDQ==
 +SHA1-Digest: uT5ZzMIxgUirHg2lk/hi7KviTOk=
 +
 +Name: skin/classic/continue.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: GbUcYKz1L5QONpApU3Fnwg==
 +SHA1-Digest: /qOX4q4oTcXgmGdvHwQ5GOMuU0E=
 +
 +Name: skin/classic/css.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 7DS5aSZEPQ5kyX4BnRZqoQ==
 +SHA1-Digest: urE5w50zxsFoMswiiNt6VdXCB3Y=
 +
 +Name: skin/classic/customizeShortcuts.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: kIQNK1iKf9a/H5El2fjNQg==
 +SHA1-Digest: 2W5Bon0YcO8kGvNYeHYUjWeBbi4=
 +
 +Name: skin/classic/debugger.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: MQ4Yn2fJu1G3Y+vcokEU4Q==
 +SHA1-Digest: V3ofMjvk27apdS9ZHL/Hrezsvog=
 +
 +Name: skin/classic/disable.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 0FMCCKn8iEKcxr/w147TAw==
 +SHA1-Digest: ULonwiGI+1wH/8fjzTJymSjxnnU=
 +
 +Name: skin/classic/dom.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 0QoiZEeITcCifMUM/614mA==
 +SHA1-Digest: n/Yc4xFZ54FsSlXzyt39wRS+694=
 +
 +Name: skin/classic/dropMarker.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: kqSmhcwXYTU/EQtKjkn7GA==
 +SHA1-Digest: cuztnU9b46wuldFNRp7GgS5ZthI=
 +
 +Name: skin/classic/error.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: SZd57RZhyO0ZxwUjVplqPQ==
 +SHA1-Digest: gxNlxnyjHI7oRX+Nr00m509mhCs=
 +
 +Name: skin/classic/errorColumnIndicator.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: nTFrTC00x6aS8Lt2h45XbA==
 +SHA1-Digest: ZESW7vMmCjUpbap8uhHPRwKJyrw=
 +
 +Name: skin/classic/events.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: C9UMcX9hBXmhFRcz+FfjbQ==
 +SHA1-Digest: rBHaDseH1vOc4ILw0yW6yZmUJGo=
 +
 +Name: skin/classic/executionPointer.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: wgqFCr9OBzT/ouPIRe5CxA==
 +SHA1-Digest: 6nZCNCQ98pDH6ilHTvH78Hsfqns=
 +
 +Name: skin/classic/expandSidePanels.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 8+b1ShNLKRYGVRhzMltBCA==
 +SHA1-Digest: 9msnsn3BROtbGRXrlvbP2nebFMo=
 +
 +Name: skin/classic/expandSidePanelsVertical.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: VreH/DcqptOWrEtPIOsiiQ==
 +SHA1-Digest: odAsshmqeViQAVeWhxzjl6KRFBU=
 +
 +Name: skin/classic/firebug.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: TGxsNWMwi82FVAoXuZZ2kQ==
 +SHA1-Digest: zfID0Q79DAFbvqlF2kamR8MDlJQ=
 +
 +Name: skin/classic/firebug64.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: uwPmrK9kcN8fXgAO98jn+g==
 +SHA1-Digest: eDSm1PtR/6u+vwLioCP5lC8kTyU=
 +
 +Name: skin/classic/firebugBig.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: LOFVnCKCorn57iSd/XFFtQ==
 +SHA1-Digest: oZybzzrQUNFRbAliczCopL22aXg=
 +
 +Name: skin/classic/firebugSmall.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 1S8jOSwzS9jq+xVJlxJJ4g==
 +SHA1-Digest: tWNqtNwfoBPG1wI4+Nhg8qOxego=
 +
 +Name: skin/classic/fontViewer.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: c+zNkBXwqRDPcsSyhnf0qQ==
 +SHA1-Digest: zcQfLuxogrR/qVUwr88foIQYnjs=
 +
 +Name: skin/classic/html.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: UYnCEalAMMw9zepX2JP+wQ==
 +SHA1-Digest: fiySQ6cLy61Mzs9PDLcR8HAlxXU=
 +
 +Name: skin/classic/info.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: LTkyUE+l9fsMPT8XSXtnDA==
 +SHA1-Digest: lstIPaPgHAQcpMOFGaZqHiGGI4k=
 +
 +Name: skin/classic/inspect.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: vReHUiBRiQrM4txJurYP5g==
 +SHA1-Digest: T8yCLbyPx85LYF1drFa+bpXjROA=
 +
 +Name: skin/classic/jsonViewer.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: BAsT7ivAwtd+25XGHCs8gg==
 +SHA1-Digest: KgC55/LsQ+IJMK93vMDYoA7f+Uo=
 +
 +Name: skin/classic/layout.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 23fCSpJ4unqKJmQCcY5J+g==
 +SHA1-Digest: JqmIuPdak7jodLS493xVdL5AIQs=
 +
 +Name: skin/classic/loading.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: wwS3HcG39HGTpnftsfDYrg==
 +SHA1-Digest: KBxqMg3C2FfvvGGvduGwvrZS/sQ=
 +
 +Name: skin/classic/navigationBack.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: lu+io0xpOPKoicSSC3OFvQ==
 +SHA1-Digest: N4lAkf/yTGHskk54ch6xb9qxZlc=
 +
 +Name: skin/classic/navigationForward.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 0v7bq2zIYwZ+u66mnVm11g==
 +SHA1-Digest: lF020imNMtKbj/SjVR+jqT6dTQo=
 +
 +Name: skin/classic/net.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: lQzGyX0YiIDDoFzL4Db4xQ==
 +SHA1-Digest: vHiWJgBsfn/aHUtof9buiraDmKo=
 +
 +Name: skin/classic/noteBorders.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 8jdxtY6AvFnJ52QqAqvmIQ==
 +SHA1-Digest: bLWDAlr+GW9gdpv7A71en9t7Usg=
 +
 +Name: skin/classic/noteBordersUps.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 3JvKcj3shtHXm13UiUNXDA==
 +SHA1-Digest: r+6MviNDlS/XIB5qvMRWtsSuJFg=
 +
 +Name: skin/classic/noteContent.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: nXvIFiUzAjzqhTCdneJAdQ==
 +SHA1-Digest: K5qPuXjVYLHiMt1Iu7QTpudv3QI=
 +
 +Name: skin/classic/noteContentUps.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: khktnlZWbFfTA0MgK9pCOQ==
 +SHA1-Digest: UfDj1wL8DOQ3IfXNAJw2jHIhXww=
 +
 +Name: skin/classic/noteCorners.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 6mvT373MJe1yMp2FzGh0Ig==
 +SHA1-Digest: kiFQmOaNZUflRXRi+R5Pt56keyw=
 +
 +Name: skin/classic/noteCornersUps.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: oeYcrywOKQn3gBD4dzdKiA==
 +SHA1-Digest: 5pCKyTvuqKs5v0langp2n2Q0KjM=
 +
 +Name: skin/classic/optionsMenuTarget.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 0McTIQB7fMZ9QGpVURBRAw==
 +SHA1-Digest: 8io6/72PTHZvrPyoQtnFZ9TwAM4=
 +
 +Name: skin/classic/optionsMenuTargetHover.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: F5MoY3yIDnvltHGzEvNdjg==
 +SHA1-Digest: UpFT882fcQpPMRUEflNhoHLBuK8=
 +
 +Name: skin/classic/panel.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: p2WsFiBV0xlcpqA38vz8GQ==
 +SHA1-Digest: tXgTd6/ltm7uFc/Dtu471tfI9k4=
 +
 +Name: skin/classic/panelbase.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: kz1jATRZVpKB+h8L9NcH/w==
 +SHA1-Digest: 7IFci/ylzdFoL6rhicrm+J9FHZM=
 +
 +Name: skin/classic/panelNotification.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: d3PT7gd54jimp7ggnyT+RA==
 +SHA1-Digest: XAN9OB4LKlBmsC6Kh277jMgA9zY=
 +
 +Name: skin/classic/performanceTiming.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: WD8n+GKercHNPernPfLZAQ==
 +SHA1-Digest: ha5dzvFDoBqGVX65OrDL696ZpJQ=
 +
 +Name: skin/classic/prettyPrint.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: TdenMGq+ev5nhCuOV/j7xQ==
 +SHA1-Digest: kjmXuwceW87YfQFx8GLrKSiLpbY=
 +
 +Name: skin/classic/quickInfoBox.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 9GoaPZP+E4L3QjzKaiDZwg==
 +SHA1-Digest: RyaG/XZ2QxphrGcCm/alJ709smU=
 +
 +Name: skin/classic/quickInfoBoxPanel.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Nt/5wPhGKiECffZlTuCA+w==
 +SHA1-Digest: lvvrJ3EXn5aznvwctE/kmpM5fWA=
 +
 +Name: skin/classic/readOnlyProp.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: LdxYSt/MRJNnMbGGcONKIA==
 +SHA1-Digest: gjrbzCuy5hzYHOhbgUJSG4S1ZzE=
 +
 +Name: skin/classic/rerun.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: tIPY9ONcadvzU/iETVZvTg==
 +SHA1-Digest: 6wpHFMcgt1HNQ9ih7ev+ZKMinBI=
 +
 +Name: skin/classic/rulerH.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: iAFuxMRm+s3wT/3qyfgpgw==
 +SHA1-Digest: hnkDaMEucNPQE4XZN/3X+lTpyUw=
 +
 +Name: skin/classic/rulerV.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: bSPSL1drREE9tLDXTVlsKw==
 +SHA1-Digest: Zlhy10ed7CRIQ6JaELa7d42kEOM=
 +
 +Name: skin/classic/scriptPanel.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ctCwchB6JLsFMpiuK+mmXQ==
 +SHA1-Digest: DC09Nb3ECRhTRYAzEz25eKWQR68=
 +
 +Name: skin/classic/search.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ZNTEfg5LY27JQ+o3LDL3pQ==
 +SHA1-Digest: YL/NXAaSRjXiEz6MZpqDJGwpMaw=
 +
 +Name: skin/classic/searchCancel.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: JCl9lqTG2s/DU54xarhexg==
 +SHA1-Digest: xkd8BmzrVO4VdGMcEwbf9ow6pyU=
 +
 +Name: skin/classic/searchNext.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Qkg7Sgq5C1cYx+24KbVK6Q==
 +SHA1-Digest: 8hCuqJcV0auctR682FzQIbYRiB4=
 +
 +Name: skin/classic/searchPrevious.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: JPTcwTUPrwxuNPT70zOI+Q==
 +SHA1-Digest: Ic+DUB0Zzf6GpfG1ikETQCGgynU=
 +
 +Name: skin/classic/selectors.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: azq+4PbptAy5hn8Q4LYuuA==
 +SHA1-Digest: vcNQ6nMM6D4vkpppxLg6A06uBp4=
 +
 +Name: skin/classic/spinner.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 2NxT4DR8u1yo19noaSR/iQ==
 +SHA1-Digest: BV6SLbAqsLC4Oe8lW1zGsxrshLo=
 +
 +Name: skin/classic/statusPathSeparator.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 1RR7dFvs8mwEmsY25Bv9ig==
 +SHA1-Digest: vHFrYtWglNRZZk4VkHMCh+FdMZY=
 +
 +Name: skin/classic/stepInto.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ySZweJl8fClr9TT4O+BBNw==
 +SHA1-Digest: JRjpeBzHxFjBBlazv0plE2bzGOE=
 +
 +Name: skin/classic/stepOut.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: vHh0VTQYc6rFc0fRIbzPAg==
 +SHA1-Digest: 1F4ZM1CWATKV4U+dbiuTyeBWihI=
 +
 +Name: skin/classic/stepOver.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: GRNLt5ET+mtpCJ5rKQZgfw==
 +SHA1-Digest: UQyKot5Ax15ChZ2R+z9EgpxeU7Y=
 +
 +Name: skin/classic/tableRep.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: jJoTzqd+qgv6OzgL2UY57g==
 +SHA1-Digest: gH2n85pANmYvu05gPRhv7YI2J5g=
 +
 +Name: skin/classic/timeInfoTip.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: yE+QQ273GeqqtpNp+kWX8Q==
 +SHA1-Digest: hnhYpzYzf1s1JsFZNvMS+Jn46JE=
 +
 +Name: skin/classic/trace.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: spYGvjQS/szDIxq9e8RbsA==
 +SHA1-Digest: /5MVb9m1E9Y3zAOux+h828Ti4wg=
 +
 +Name: skin/classic/warning.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 7kuQB0/nVEZGjArSBBepHg==
 +SHA1-Digest: BrMJgwGWyTyqX8O6nQOtwX7Taoo=
 +
 +Name: skin/classic/watch.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: U2BIJU10RtA6Nh6xyvYrhg==
 +SHA1-Digest: wVe44AVIikzJsgzBmkO9Vcdif6w=
 +
 +Name: skin/classic/window.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 8HvLiZArGotQvpEdRYF24A==
 +SHA1-Digest: clHrbs6lH6JQTyc0oHw6I2LfFq0=
 +
 +Name: skin/classic/wrappedListener.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: w62CBrLeQIx82KZJWWlJpQ==
 +SHA1-Digest: FM7Z0myFeJYssv/FyC5nKoK3XRE=
 +
 +Name: skin/classic/breakOn/breakOnError.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: VAWCUsTpkCcr3lPRh3w6NA==
 +SHA1-Digest: TJgDGZu+Hs0KHdP7MJsBzInVaQA=
 +
 +Name: skin/classic/breakOn/breakOnMutate.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: DGn9nL4jXcgciGqCo1+dNA==
 +SHA1-Digest: Pg6gpWHcWOoVVV4OXYy8679wf8Q=
 +
 +Name: skin/classic/breakOn/breakOnNext.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: rF6hmIhGBUbt6rsfYC642A==
 +SHA1-Digest: i56tMFGnV/t2OshpxPuxOdx7gOM=
 +
 +Name: skin/classic/breakOn/breakOnXHR.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: yO55ZAc+ysqozcanmOc9VA==
 +SHA1-Digest: ldaYzrE3LrcOnwTWIXJ2xTvZHpE=
 +
 +Name: skin/classic/cookies/activation-menu-cookies.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: CBrf4AoFoz6YzjcK6aM6sw==
 +SHA1-Digest: bwECpkirSLfrGkhEV0l4j7IUGDQ=
 +
 +Name: skin/classic/cookies/breakOnCookie.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: sTXTk/8IFFHRJ2Ma/VtmRw==
 +SHA1-Digest: 48ibbd8Ut2Ujxg+QbaOTJ00NsP8=
 +
 +Name: skin/classic/cookies/cookie.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: zWkDVCT9MtshImvi37p3YQ==
 +SHA1-Digest: D7QxbxpVwv/6oeB1sZPi1xcNnUw=
 +
 +Name: skin/classic/cookies/cookies.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: K8XFEIdU0+zrjeR4ddGFSQ==
 +SHA1-Digest: eXmC5MvbFMHUCRiJZJeoBdxYGys=
 +
 +Name: skin/classic/cookies/editCookie.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: xdnJWh6K94HgcIsrftcG5A==
 +SHA1-Digest: nV3OSI6SMnPnRZLlDUthwJJE70Q=
 +
 +Name: skin/classic/cookies/trace.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: cbr+7tpWcpjDFkHK+C5WQA==
 +SHA1-Digest: NUBT0T8FnrO0XdHYYTsPpFU6cy4=
 +
 +Name: skin/classic/linux/console.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 3M5hbgOS6j5zcgC7GQmr5g==
 +SHA1-Digest: FVExHMpmxOPZGcDDuywtt0v53JI=
 +
 +Name: skin/classic/linux/cookies.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: otdef/028KQOXjy9wNWNbw==
 +SHA1-Digest: +6ajqHVx2q6Yj4cpc1kqxAOf6lk=
 +
 +Name: skin/classic/linux/firebug.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: qgk/lztleGEoy9mDC9CEnA==
 +SHA1-Digest: 5nuacJgS3FNMPKT5ZhsideBjyUY=
 +
 +Name: skin/classic/linux/net.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: g6X0t0oBST/6aGUsK4mm9A==
 +SHA1-Digest: NobYBVuI9xM1KFmRNYqwP9Rb0p4=
 +
 +Name: skin/classic/mac/breakpointConditionEditor.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: jWXCOzG5/7mh0bp4KV0OmA==
 +SHA1-Digest: EUBoPjNh+4sq9mrCkL7V/nLPkiQ=
 +
 +Name: skin/classic/mac/breakpointConditionEditorDown.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 5XvhlBw7wuqm2l1Nakk2dg==
 +SHA1-Digest: dEzvPad/BqvEuiYAFpsfebg73DQ=
 +
 +Name: skin/classic/mac/close.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 2dXLbRXKBMYUm7Rrh62jZw==
 +SHA1-Digest: CKq6JqdwYTnShJX5Ozinbic4WL8=
 +
 +Name: skin/classic/mac/collapseSidePanels.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: fIXrUnmyTPTtokB9uXKVPw==
 +SHA1-Digest: /Loiu87BblD5sKZNfkvBFyUXeGM=
 +
 +Name: skin/classic/mac/collapseSidePanelsVertical.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Y1T7uu35gCf2dHBbxSkqFw==
 +SHA1-Digest: 3oHX2HveXhN++Lewiro7Mi8qkiU=
 +
 +Name: skin/classic/mac/commandHistory.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: VzsRuQrurr71FfZl+LIP8Q==
 +SHA1-Digest: KafzYxh4IV5Bn4nFHRFqSi7RqWQ=
 +
 +Name: skin/classic/mac/console.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: BJcJpjLYJcBAlP6QW7Bt6g==
 +SHA1-Digest: nVuAntpRLUYqOgA5DK9xE8xff9g=
 +
 +Name: skin/classic/mac/cookies.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: fSdS2EobjhT4jT83nEj2xg==
 +SHA1-Digest: 7D+4o8lbbuf6Ld7jSHG9i+oq4AI=
 +
 +Name: skin/classic/mac/debugger.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: nsr2Qax8nMGx86Zj7rm8Fg==
 +SHA1-Digest: TGRAWEQWIZsTSG9QXUguZXeY8t4=
 +
 +Name: skin/classic/mac/detach.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: XiYjNdPNuP4KgNTmbpKEBA==
 +SHA1-Digest: Z3ZLb8Na3mHL1/dSQoMyY9cl7kc=
 +
 +Name: skin/classic/mac/expandSidePanels.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: uC3EYFcE2AVeTFuWhllSwg==
 +SHA1-Digest: PYskgccaZToLIuq9y1xsPM2tfYA=
 +
 +Name: skin/classic/mac/expandSidePanelsVertical.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Dy5BAM78LacDxEqByRi8Og==
 +SHA1-Digest: Fz7tDcfezDYkNDqVi7HmKHDZC+M=
 +
 +Name: skin/classic/mac/firebug.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 0vegIzoZK8GFEPquxXjtmA==
 +SHA1-Digest: BWjKRF3amvzbqouTDXhEg2iVsPI=
 +
 +Name: skin/classic/mac/minimize.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: grzvmpO/3ztgwv46+obpKw==
 +SHA1-Digest: 356hTQ/P840889mGA18QVc1hBjg=
 +
 +Name: skin/classic/mac/net.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: W514rvOzIPBYhH4m5+Ozbg==
 +SHA1-Digest: n3FUnl2o28+yaGZ941bOqxE8XVU=
 +
 +Name: skin/classic/mac/optionsMenuTarget.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: TIMLe6S/GVX+joWQAjI05Q==
 +SHA1-Digest: Lge8mJTk1NMHGxNvfHcBKjNs3xM=
 +
 +Name: skin/classic/mac/optionsMenuTargetHover.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: u9iO2DZffvT6PIrtLNdCyw==
 +SHA1-Digest: h7S+N/YxU1n4OYuVJ/EFvtDNfhA=
 +
 +Name: skin/classic/mac/panel.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: AlwXXqlR8g8yIkko897ZQA==
 +SHA1-Digest: 5YfgsVycjYB89tvNyasHkF3KkzA=
 +
 +Name: skin/classic/mac/pin.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: t7GFCUJIs7xKmy3TjYH3og==
 +SHA1-Digest: 7VxqX8eLcYDQhs4x/JSAxjwpQlE=
 +
 +Name: skin/classic/mac/pinned.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Rb1zp8rvCrluz2V5SoA4uw==
 +SHA1-Digest: hw1ESoG8Jnes//DI8v24DuFYlhw=
 +
 +Name: skin/classic/mac/quickInfoBox.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Ky0dMiutA3JVmHnIboVICw==
 +SHA1-Digest: s1r0WLTQJrAWxAV27qmMrY8fVzQ=
 +
 +Name: skin/classic/mac/search.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: DS/3gTMGEmc7Ltd1310ffQ==
 +SHA1-Digest: 3VE4jVDtj0XkHEuygSK22JZc3G8=
 +
 +Name: skin/classic/mac/twistyClosed.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: MbyvQBdAWB11H4YzuNATgw==
 +SHA1-Digest: EfBwNoy7MrPhTqUcbQeLRxi9kfU=
 +
 +Name: skin/classic/mac/twistyOpen.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: UebHwh2xwpy6Ml8hMVlN/Q==
 +SHA1-Digest: Jve+i9XgAefVKefaHH8zAOeqiNo=
 +
 +Name: skin/classic/mac/window.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: DoCyfVwz1NSQoyHT5RhYTA==
 +SHA1-Digest: m40kgCCkNOi/GNlPU9V8x9PPi7E=
 +
 +Name: skin/classic/win/breakpointConditionEditor.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: LqBX5xCLxcK/sWZVSWK7ew==
 +SHA1-Digest: MIZU+0NFKvfKgtJojuJcU/m7Jas=
 +
 +Name: skin/classic/win/breakpointConditionEditorDown.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: o+SshOp39W4Zb/TM85J1Lw==
 +SHA1-Digest: 5XJQEDhlynn+4t2z6UYF9Qkdz5Q=
 +
 +Name: skin/classic/win/close.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: MB/XP38hvJqX4AAgKqqhkQ==
 +SHA1-Digest: aZeswGD8G9LNMC/Qtu50kc0yMlw=
 +
 +Name: skin/classic/win/commandHistory.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ivSOoxLqG8NvBuhE6xtc1w==
 +SHA1-Digest: XE5u39xTzHLDHNGdB0mAdfawWBo=
 +
 +Name: skin/classic/win/deactivate.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 93F5EJVhK7g2LKR4zLhCBg==
 +SHA1-Digest: C7QjcHRFATt3CYNzauYwZTcBm5o=
 +
 +Name: skin/classic/win/detach.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 2J9JwcSe7dtbvcYeb1pu/g==
 +SHA1-Digest: BmPV3ehAsxAxxfARo484vW/tA1Q=
 +
 +Name: skin/classic/win/down.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: zVuBnO6bnml895TX59F0QQ==
 +SHA1-Digest: pyvIvtSQ5Uktb10S6m/yVPQ8cPM=
 +
 +Name: skin/classic/win/firebug.css
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: b8rnmpfJMK/ygM12ea6I/w==
 +SHA1-Digest: RBriqIM6Ozv8cFir7QW/HHH8sWs=
 +
 +Name: skin/classic/win/minimize.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: IMRDWtdCAjQR7DYNqpb69w==
 +SHA1-Digest: C7/EmzwlNYT2V/jJCgimbk8D6x0=
 +
 +Name: skin/classic/win/pin.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 70TQX67PuV01CYjDbyeEGw==
 +SHA1-Digest: FHIuWaRPdswt5BL0lJrJO6TdnYc=
 +
 +Name: skin/classic/win/pinned.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: XeYo0SfE2P3hCXIuj/nq7Q==
 +SHA1-Digest: s8HzEdFyVf+5dneEcTwlL4uSyhA=
 +
 +Name: skin/classic/win/twistyClosed.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: yHOjTtsu6B1abGiHpNrZkg==
 +SHA1-Digest: oFs3XCeZQFVKnMUQhcdPxfyRHoA=
 +
 +Name: skin/classic/win/twistyOpen.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 3+YKfsavEeDqdWunTA3wWQ==
 +SHA1-Digest: CBtyXq8AISFnnRsjrETtT8zE+ec=
 +
 +Name: skin/classic/win/up.svg
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: +ACY3yLS6QE33wZMuFLpKw==
 +SHA1-Digest: 3pyYOpIJSmgv6WaUMpMJxXQ9QlQ=
 +
 +Name: license.txt
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: imDMjjQBGsHnSU9kxGaZSw==
 +SHA1-Digest: 6Q5Ia5b3ACtCPUpTIcDZDE6xxWM=
 +
diff --cc META-INF/mozilla.rsa
index 36b6cb3,0000000..9a97017
mode 100644,000000..100644
Binary files differ
diff --cc META-INF/mozilla.sf
index 8ae8ceb,0000000..4fc2315
mode 100644,000000..100644
--- a/META-INF/mozilla.sf
+++ b/META-INF/mozilla.sf
@@@ -1,4 -1,0 +1,4 @@@
 +Signature-Version: 1.0
- MD5-Digest-Manifest: KgXeJ/PXkKQgvdET8xAE4w==
- SHA1-Digest-Manifest: YG9VuLoxjWpjOnRTwQgG4Sa7jOI=
++MD5-Digest-Manifest: YjEkt9Nnz7i9MUNaVfo8cg==
++SHA1-Digest-Manifest: zVbmsfDpMohS/68DOnXVaivQc4I=
 +
diff --cc content/firebug/branch.properties
index 354a2a6,0000000..0aa580d
mode 100644,000000..100644
--- a/content/firebug/branch.properties
+++ b/content/firebug/branch.properties
@@@ -1,8 -1,0 +1,8 @@@
 +# DO NOT MERGE INTO TRUNK
- RELEASE=.16
++RELEASE=.17
 +VERSION=2.0
 +TRUNK=
 +# To allow build.xml to drop the xpi directly into the svn working copy for getfirebug.com
 +# the root of the fbug svn tree must be be at the same level as the root of getfirebug.com
 +# Otherwise specify your own path.
 +GETFIREBUG=../../../../getfirebug.com/tags/production
diff --cc content/firebug/css/computedPanel.js
index 939cabe,0000000..ed2fdd2
mode 100644,000000..100644
--- a/content/firebug/css/computedPanel.js
+++ b/content/firebug/css/computedPanel.js
@@@ -1,937 -1,0 +1,938 @@@
 +/* See license.txt for terms of usage */
 +
 +define([
 +    "firebug/firebug",
 +    "firebug/lib/array",
 +    "firebug/lib/css",
 +    "firebug/lib/dom",
 +    "firebug/lib/domplate",
 +    "firebug/lib/events",
 +    "firebug/lib/locale",
 +    "firebug/lib/object",
 +    "firebug/lib/options",
 +    "firebug/lib/persist",
 +    "firebug/lib/string",
 +    "firebug/lib/url",
 +    "firebug/lib/xml",
 +    "firebug/lib/devtools",
 +    "firebug/chrome/menu",
 +    "firebug/chrome/panel",
 +    "firebug/css/cssModule",
 +    "firebug/css/cssReps",
 +    "firebug/css/loadHandler",
 +    "firebug/debugger/script/sourceLink",
 +],
 +function(Firebug, Arr, Css, Dom, Domplate, Events, Locale, Obj, Options, Persist, Str, Url, Xml,
 +    DevTools, Menu, Panel, CSSModule, CSSReps, LoadHandler, SourceLink) {
 +
 +"use strict";
 +
 +// ********************************************************************************************* //
 +// Constants
 +
 +var Cu = Components.utils;
 +
 +var statusClasses = ["cssUnmatched", "cssParentMatch", "cssOverridden", "cssBestMatch"];
 +
 +var {domplate, FOR, TAG, DIV, H1, SPAN, TABLE, TBODY, TR, TD} = Domplate;
 +
 +//********************************************************************************************* //
 +//Module Implementation
 +
 +try
 +{
 +    // Firefox 24
 +    // waiting for: https://bugzilla.mozilla.org/show_bug.cgi?id=867595
 +    var {CssLogic} = DevTools.safeRequire(DevTools.devtools,
++      "devtools/shared/inspector/css-logic",
 +      "devtools/shared/styleinspector/css-logic",
 +      "devtools/styleinspector/css-logic");
 +}
 +catch (e)
 +{
 +    if (FBTrace.DBG_ERRORS)
 +        FBTrace.sysout("cssComputedPanel: EXCEPTION CssLogic is not available! " + e, e);
 +}
 +
 +// ********************************************************************************************* //
 +// CSS Computed panel (HTML side panel)
 +
 +function CSSComputedPanel() {}
 +
 +CSSComputedPanel.prototype = Obj.extend(Panel,
 +{
 +    template: domplate(
 +    {
 +        computedStylesTag:
 +            DIV({"class": "a11yCSSView", role: "list", "aria-label":
 +                Locale.$STR("a11y.labels.computed styles")}),
 +
 +        groupedStylesTag:
 +            FOR("group", "$groups",
 +                DIV({"class": "computedStylesGroup", $opened: "$group.opened", role: "list",
 +                        $hidden: "$group.props|hasNoStyles", _repObject: "$group"},
 +                    H1({"class": "cssComputedHeader groupHeader focusRow", role: "listitem"},
 +                        DIV({"class": "twisty", role: "presentation"}),
 +                        SPAN({"class": "cssComputedLabel"}, "$group.title")
 +                    ),
 +                    TAG("$stylesTag", {props: "$group.props"})
 +                )
 +            ),
 +
 +        stylesTag:
 +            TABLE({"class": "computedStyleTable", role: "list"},
 +                TBODY({role: "presentation"},
 +                    FOR("prop", "$props",
 +                        TR({"class": "focusRow computedStyleRow computedStyle",
 +                                $opened: "$prop.opened", role: "listitem",
 +                                $hasSelectors: "$prop|hasSelectors", _repObject: "$prop"},
 +                            TD({"class": "stylePropName", role: "presentation"},
 +                                "$prop.property"
 +                            ),
 +                            TD({role: "presentation"},
 +                                SPAN({"class": "stylePropValue"}, "$prop.value|formatValue"))
 +                        ),
 +                        TR({"class": "focusRow computedStyleRow matchedSelectors", _repObject: "$prop"},
 +                            TD({colspan: 2},
 +                                TAG("$selectorsTag", {prop: "$prop"})
 +                            )
 +                        )
 +                    )
 +                )
 +            ),
 +
 +        selectorsTag:
 +            TABLE({"class": "matchedSelectorsTable", role: "list"},
 +                TBODY({role: "presentation"},
 +                    FOR("selector", "$prop.matchedSelectors",
 +                        TR({"class": "focusRow computedStyleRow styleSelector "+
 +                            "$selector.status|getStatusClass", role: "listitem",
 +                                _repObject: "$selector"},
 +                            TD({"class": "selectorName", role: "presentation"},
 +                                "$selector.selector.text"),
 +                            TD({"class": "propValue", role: "presentation"},
 +                                SPAN({"class": "stylePropValue"}, "$selector|getAuthoredValue|formatValue")),
 +                            TD({"class": "styleSourceLink", role: "presentation"},
 +                                TAG(FirebugReps.SourceLink.tag, {object: "$selector|getSourceLink"})
 +                            )
 +                        )
 +                    )
 +                )
 +            ),
 +
 +        getStatusClass: function(status)
 +        {
 +            return statusClasses[status];
 +        },
 +
 +        hasNoStyles: function(props)
 +        {
 +            return props.length == 0;
 +        },
 +
 +        hasSelectors: function(prop)
 +        {
 +            return prop.matchedRuleCount != 0;
 +        },
 +
 +        getSourceLink: function(selector)
 +        {
 +            var href = selector.href.href || selector.href;
 +            var line = selector.ruleLine;
 +            var selectorDef = selector.selector;
 +            // Dev tools API starting from FF 26.0 renamed the "_cssRule" property to "cssRule"
 +            // (see issue 6609)
 +            // TODO: This check can be removed as soon as FF 26.0 is the minimum supported version
 +            var rule = selectorDef.cssRule ?
 +                selectorDef.cssRule.domRule : selectorDef._cssRule._domRule;
 +
 +            var instance = Css.getInstanceForStyleSheet(rule.parentStyleSheet);
 +            var sourceLink = line != -1 ? new SourceLink(href, line, "css",
 +                rule, instance) : null;
 +
 +            return sourceLink;
 +        },
 +
 +        getAuthoredValue: function(selector)
 +        {
 +            if (Options.get("colorDisplay") !== "authored")
 +                return selector.value;
 +
 +            var style = selector.selector.cssRule.domRule.style;
 +            return style.getAuthoredPropertyValue ?
 +                style.getAuthoredPropertyValue(selector.property) : selector.value;
 +        },
 +
 +        formatValue: function(value)
 +        {
 +            value = formatColor(value);
 +
 +            var limit = Options.get("stringCropLength");
 +            if (limit > 0)
 +                value = Str.cropString(value, limit);
 +
 +            // Add a zero-width space after a comma to allow line breaking
 +            return value.replace(/,/g, ",\u200B");
 +        }
 +    }),
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +
 +    updateComputedView: function(element)
 +    {
 +        // The current selection can be null.
 +        if (!element)
 +            return;
 +
 +        // Update now if the document is loaded, otherwise wait for "load" event.
 +        var loadHandler = new LoadHandler();
 +        loadHandler.handle(this.context, Obj.bindFixed(this.doUpdateComputedView, this, element));
 +    },
 +
 +    doUpdateComputedView: function(element)
 +    {
 +        function isUnwantedProp(propName)
 +        {
 +            return !Options.get("showMozillaSpecificStyles") && Str.hasPrefix(propName, "-moz");
 +        }
 +
 +        var win = element.ownerDocument.defaultView;
 +        var computedStyle = win.getComputedStyle(element);
 +
 +        try
 +        {
 +            if (this.cssLogic)
 +                this.cssLogic.highlight(element);
 +        }
 +        catch (e)
 +        {
 +            // An exception is thrown if the document is not fully loaded yet
 +            // The cssLogic API needs to be used after "load" has been fired.
 +            if (FBTrace.DBG_ERRORS)
 +                FBTrace.sysout("computedPanel.doUpdateComputedView; EXCEPTION " + e, e);
 +        }
 +
 +        var showUserAgentCSS = Options.get("showUserAgentCSS");
 +        var props = [];
 +        for (var i = 0; i < computedStyle.length; ++i)
 +        {
 +            // xxxsz: There's a bug in the CssLogic module, which is caused by styles inherited
 +            // from inline styles of ancestor elements. See issue 7269.
 +            try
 +            {
 +                var prop = this.cssLogic ? this.cssLogic.getPropertyInfo(computedStyle[i]) :
 +                    Firebug.CSSModule.getPropertyInfo(computedStyle, computedStyle[i]);
 +
 +                if (isUnwantedProp(prop.property) ||
 +                    (this.cssLogic && !showUserAgentCSS && prop.matchedRuleCount == 0))
 +                {
 +                    continue;
 +                }
 +
 +                props.push(prop);
 +            }
 +            catch (e)
 +            {
 +            }
 +        }
 +
 +        var parentNode = this.template.computedStylesTag.replace({}, this.panelNode);
 +
 +        if (props.length != 0)
 +        {
 +            if (Options.get("computedStylesDisplay") === "alphabetical")
 +            {
 +                this.sortProperties(props);
 +
 +                for (var i = 0; i < props.length; ++i)
 +                    props[i].opened = this.styleOpened[props[i].property];
 +
 +                var result = this.template.stylesTag.replace({props: props}, parentNode);
 +            }
 +            else
 +            {
 +                var groups = [];
 +                for (var groupName in styleGroups)
 +                {
 +                    var title = Locale.$STR("StyleGroup-" + groupName);
 +                    var group = {name: groupName, title: title, props: []};
 +
 +                    var groupProps = styleGroups[groupName];
 +                    for (var i = 0; i < groupProps.length; ++i)
 +                    {
 +                        var propName = groupProps[i];
 +                        if (isUnwantedProp(propName))
 +                            continue;
 +
 +                        var prop = this.cssLogic ? this.cssLogic.getPropertyInfo(propName) :
 +                            Firebug.CSSModule.getPropertyInfo(computedStyle, propName);
 +
 +                        if (!showUserAgentCSS && prop.matchedRuleCount == 0)
 +                            continue;
 +
 +                        prop.opened = this.styleOpened[propName];
 +
 +                        group.props.push(prop);
 +
 +                        for (var j = 0; j < props.length; ++j)
 +                        {
 +                            if (props[j].property == propName)
 +                            {
 +                                props.splice(j, 1);
 +                                break;
 +                            }
 +                        }
 +                    }
 +
 +                    group.opened = this.groupOpened[groupName];
 +
 +                    groups.push(group);
 +                }
 +
 +                if (props.length > 0)
 +                {
 +                    var group = groups[groups.length-1];
 +                    for (var i = 0; i < props.length; ++i)
 +                    {
 +                        var propName = props[i].property;
 +                        if (isUnwantedProp(propName))
 +                            continue;
 +
 +                        var prop = this.cssLogic ? this.cssLogic.getPropertyInfo(propName) :
 +                            Firebug.CSSModule.getPropertyInfo(computedStyle, propName);
 +
 +                        prop.opened = this.styleOpened[propName];
 +
 +                        group.props.push(prop);
 +                    }
 +
 +                    group.opened = this.groupOpened[group.name];
 +                }
 +
 +                var result = this.template.groupedStylesTag.replace({groups: groups}, parentNode);
 +            }
 +        }
 +        else
 +        {
 +            FirebugReps.Warning.tag.replace({object: "computed.No_User-Defined_Styles"},
 +                this.panelNode);
 +        }
 +
 +        if (this.scrollTop)
 +        {
 +            this.panelNode.scrollTop = this.scrollTop;
 +            delete this.scrollTop;
 +        }
 +
 +        Events.dispatch(this.fbListeners, "onCSSRulesAdded", [this, result]);
 +    },
 +
 +    toggleGroup: function(node)
 +    {
 +        var groupNode = Dom.getAncestorByClass(node, "computedStylesGroup");
 +        var group = Firebug.getRepObject(groupNode);
 +
 +        Css.toggleClass(groupNode, "opened");
 +        var opened = Css.hasClass(groupNode, "opened");
 +        this.groupOpened[group.name] = opened;
 +
 +        if (opened)
 +        {
 +            var offset = Dom.getClientOffset(node);
 +            var titleAtTop = offset.y < this.panelNode.scrollTop;
 +
 +            Dom.scrollTo(groupNode, this.panelNode, null,
 +                groupNode.offsetHeight > this.panelNode.clientHeight || titleAtTop ? "top" : "bottom");
 +        }
 +    },
 +
 +    toggleAllStyles: function(event, expand)
 +    {
 +        var computedStyles = this.panelNode.getElementsByClassName("computedStyle");
 +
 +        for (var i = 0; i < computedStyles.length; ++i)
 +        {
 +            if (!Css.hasClass(computedStyles[i], "hasSelectors"))
 +                continue;
 +
 +            var isOpened = Css.hasClass(computedStyles[i], "opened");
 +            if ((expand && !isOpened) || (!expand && isOpened))
 +                this.toggleStyle(computedStyles[i], false);
 +        }
 +    },
 +
 +    toggleStyle: function(node, scroll)
 +    {
 +        var styleNode = Dom.getAncestorByClass(node, "computedStyle");
 +        var style = Firebug.getRepObject(styleNode);
 +
 +        Css.toggleClass(styleNode, "opened");
 +        var opened = Css.hasClass(styleNode, "opened");
 +        this.styleOpened[style.property] = Css.hasClass(styleNode, "opened");
 +
 +        if (opened && scroll)
 +        {
 +            var selectorsNode = styleNode.nextSibling;
 +            var offset = Dom.getClientOffset(styleNode);
 +            var titleAtTop = offset.y < this.panelNode.scrollTop;
 +            var totalHeight = styleNode.offsetHeight + selectorsNode.offsetHeight;
 +            var alignAtTop = totalHeight > this.panelNode.clientHeight || titleAtTop;
 +
 +            Dom.scrollTo(alignAtTop ? styleNode : selectorsNode, this.panelNode, null,
 +                alignAtTop ? "top" : "bottom", alignAtTop);
 +        }
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // Events
 +
 +    onClick: function(event)
 +    {
 +        if (!Events.isLeftClick(event))
 +            return;
 +
 +        var cssComputedHeader = Dom.getAncestorByClass(event.target, "cssComputedHeader");
 +        if (cssComputedHeader)
 +        {
 +            this.toggleGroup(event.target);
 +            return;
 +        }
 +
 +        var computedStyle = Dom.getAncestorByClass(event.target, "computedStyle");
 +        if (computedStyle && Css.hasClass(computedStyle, "hasSelectors"))
 +        {
 +            this.toggleStyle(event.target, true);
 +            return;
 +        }
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // extends Panel
 +
 +    name: "computed",
 +    parentPanel: "html",
 +    order: 1,
 +
 +    initialize: function()
 +    {
 +        if (typeof CssLogic != "undefined")
 +            this.cssLogic = new CssLogic();
 +
 +        this.groupOpened = [];
 +        for (var groupName in styleGroups)
 +            this.groupOpened[groupName] = true;
 +
 +        this.styleOpened = [];
 +
 +        // Listen for CSS changes so the Computed panel is properly updated when needed.
 +        Firebug.CSSModule.addListener(this);
 +
 +        this.onClick = Obj.bind(this.onClick, this);
 +
 +        Panel.initialize.apply(this, arguments);
 +    },
 +
 +    destroy: function(state)
 +    {
 +        state.scrollTop = this.panelNode.scrollTop ? this.panelNode.scrollTop : this.lastScrollTop;
 +        state.groupOpened = this.groupOpened;
 +        state.styleOpened = this.styleOpened;
 +
 +        Persist.persistObjects(this, state);
 +
 +        Firebug.CSSModule.removeListener(this);
 +
 +        Panel.destroyNode.apply(this, arguments);
 +    },
 +
 +    initializeNode: function(oldPanelNode)
 +    {
 +        Events.addEventListener(this.panelNode, "click", this.onClick, false);
 +
 +        Panel.initializeNode.apply(this, arguments);
 +    },
 +
 +    destroyNode: function()
 +    {
 +        Events.removeEventListener(this.panelNode, "click", this.onClick, false);
 +
 +        Panel.destroyNode.apply(this, arguments);
 +    },
 +
 +    show: function(state)
 +    {
 +        // Wait for loadedContext to restore the panel
 +        if (this.context.loaded)
 +        {
 +            Persist.restoreObjects(this, state);
 +
 +            if (state)
 +            {
 +                if (state.scrollTop)
 +                    this.scrollTop = state.scrollTop;
 +
 +                if (state.groupOpened)
 +                    this.groupOpened = state.groupOpened;
 +
 +                if (state.styleOpened)
 +                    this.styleOpened = state.styleOpened;
 +            }
 +        }
 +
 +        if (this.selection)
 +            this.refresh();
 +    },
 +
 +    hide: function()
 +    {
 +        this.lastScrollTop = this.panelNode.scrollTop;
 +    },
 +
 +    updateView: function(element)
 +    {
 +        this.updateComputedView(element);
 +    },
 +
 +    supportsObject: function(object, type)
 +    {
 +        return object instanceof window.Element ? 1 : 0;
 +    },
 +
 +    refresh: function()
 +    {
 +        this.updateSelection(this.selection);
 +    },
 +
 +    updateSelection: function(element)
 +    {
 +        this.updateComputedView(element);
 +    },
 +
 +    updateOption: function(name, value)
 +    {
 +        var options = new Set();
 +        options.add("showUserAgentCSS");
 +        options.add("computedStylesDisplay");
 +        options.add("colorDisplay");
 +        options.add("showMozillaSpecificStyles");
 +
 +        if (options.has(name))
 +            this.refresh();
 +    },
 +
 +    getOptionsMenuItems: function()
 +    {
 +        var items = [];
 +
 +        if (this.cssLogic)
 +        {
 +            items.push(
 +                Menu.optionMenu("Show_User_Agent_CSS", "showUserAgentCSS",
 +                "style.option.tip.Show_User_Agent_CSS")
 +            );
 +        }
 +
 +        items.push(
 +            {
 +                label: "Sort_alphabetically",
 +                type: "checkbox",
 +                checked: Options.get("computedStylesDisplay") === "alphabetical",
 +                tooltiptext: "computed.option.tip.Sort_Alphabetically",
 +                command: Obj.bind(this.toggleDisplay, this)
 +            },
 +            Menu.optionMenu("Show_Mozilla_specific_styles",
 +                "showMozillaSpecificStyles",
 +                "computed.option.tip.Show_Mozilla_Specific_Styles")
 +        );
 +
 +        items = Arr.extendArray(items, CSSModule.getColorDisplayOptionMenuItems());
 +
 +        return items;
 +    },
 +
 +    getContextMenuItems: function(style, target)
 +    {
 +        var items = [];
 +        var computedStyles = this.panelNode.getElementsByClassName("computedStyle");
 +        var expandAll = false;
 +        var collapseAll = false;
 +        for (var i = 0; i < computedStyles.length; ++i)
 +        {
 +            if (!Css.hasClass(computedStyles[i], "hasSelectors"))
 +                continue;
 +
 +            if (!expandAll && !Css.hasClass(computedStyles[i], "opened"))
 +                expandAll = true;
 +            if (!collapseAll && Css.hasClass(computedStyles[i], "opened"))
 +                collapseAll = true;
 +        }
 +
 +        if (expandAll)
 +        {
 +            items.push(
 +                {
 +                    label: "computed.option.label.Expand_All_Styles",
 +                    command: Obj.bind(this.toggleAllStyles, this, true),
 +                    tooltiptext: "computed.option.tip.Expand_All_Styles"
 +                }
 +            );
 +        }
 +
 +        if (collapseAll)
 +        {
 +            items.push(
 +                {
 +                    label: "computed.option.label.Collapse_All_Styles",
 +                    command: Obj.bind(this.toggleAllStyles, this, false),
 +                    tooltiptext: "computed.option.tip.Collapse_All_Styles"
 +                }
 +            );
 +        }
 +
 +        return items;
 +    },
 +
 +    onMouseDown: function(event)
 +    {
 +        if (!Events.isLeftClick(event))
 +            return;
 +
 +        var cssComputedHeader = Dom.getAncestorByClass(event.target, "cssComputedHeader");
 +        if (cssComputedHeader)
 +            this.toggleNode(event);
 +    },
 +
 +    toggleNode: function(event)
 +    {
 +        var group = Dom.getAncestorByClass(event.target, "computedStylesGroup");
 +        var groupName = group.getElementsByClassName("cssComputedLabel")[0].textContent;
 +
 +        Css.toggleClass(group, "opened");
 +        this.groupOpened[groupName] = Css.hasClass(group, "opened");
 +    },
 +
 +    toggleDisplay: function()
 +    {
 +        var display = Options.get("computedStylesDisplay") === "alphabetical" ?
 +            "grouped" : "alphabetical";
 +        Options.set("computedStylesDisplay", display);
 +    },
 +
 +    sortProperties: function(props)
 +    {
 +        props.sort(function(a, b)
 +        {
 +            return a.property > b.property ? 1 : -1;
 +        });
 +    },
 +
 +    getStylesheetURL: function(rule, getBaseUri)
 +    {
 +        // If parentStyleSheet.href is null, then per the CSS standard this is an inline style.
 +        if (rule && rule.parentStyleSheet && rule.parentStyleSheet.href)
 +            return rule.parentStyleSheet.href;
 +        else if (getBaseUri)
 +            return this.selection.ownerDocument.baseURI;
 +        else
 +            return this.selection.ownerDocument.location.href;
 +    },
 +
 +    showInfoTip: function(infoTip, target, x, y, rangeParent, rangeOffset)
 +    {
 +        var propValue = Dom.getAncestorByClass(target, "stylePropValue");
 +        // xxxsz: This code is duplicated from CSSStyleSheetPanel. We should centralize the code somewhere,
 +        // so it can be reused here
 +        if (propValue)
 +        {
 +            var propInfo = Firebug.getRepObject(target);
 +
 +            var prop = propInfo.property;
 +
 +            var style = propInfo.selector ? propInfo.selector.cssRule.domRule.style : null;
 +            var value = (Options.get("colorDisplay") === "authored" && style &&
 +                    style.getAuthoredPropertyValue) ?
 +                style.getAuthoredPropertyValue(propInfo.property) : formatColor(propInfo.value);
 +
 +            var cssValue;
 +
 +            if (prop == "font" || prop == "font-family")
 +            {
 +                if (value.charAt(rangeOffset) == ",")
 +                    return;
 +
 +                cssValue = Firebug.CSSModule.parseCSSFontFamilyValue(value, rangeOffset, prop);
 +            }
 +            else
 +            {
 +                cssValue = Firebug.CSSModule.parseCSSValue(value, rangeOffset);
 +            }
 +
 +            if (!cssValue)
 +                return false;
 +
 +            if (cssValue.type === "colorKeyword" || cssValue.type === "gradient")
 +            {
 +                var currentColor = this.getCurrentColor();
 +                cssValue.value = cssValue.value.replace(/currentcolor/gi, currentColor);
 +                if (cssValue.value === "")
 +                    return false;
 +            }
 +
 +            if (cssValue.value == this.infoTipValue)
 +                return true;
 +
 +            this.infoTipValue = cssValue.value;
 +
 +            switch (cssValue.type)
 +            {
 +                case "rgb":
 +                case "hsl":
 +                case "gradient":
 +                case "colorKeyword":
 +                    this.infoTipType = "color";
 +                    this.infoTipObject = cssValue.value;
 +                    return CSSReps.CSSInfoTip.populateColorInfoTip(infoTip, cssValue.value);
 +
 +                case "url":
 +                    if (Css.isImageProperty(prop))
 +                    {
 +                        var baseURL = typeof propInfo.href == "object" ? propInfo.href.href : propInfo.href;
 +                        if (!baseURL)
 +                            baseURL = propInfo.matchedSelectors[0].href;
 +                        var relURL = Firebug.CSSModule.parseURLValue(cssValue.value);
 +                        var absURL = Url.isDataURL(relURL) ? relURL : Url.absoluteURL(relURL, baseURL);
 +                        var repeat = Firebug.CSSModule.parseRepeatValue(value);
 +
 +                        this.infoTipType = "image";
 +                        this.infoTipObject = absURL;
 +
 +                        return CSSReps.CSSInfoTip.populateImageInfoTip(infoTip, absURL, repeat);
 +                    }
 +                    break;
 +
 +                case "fontFamily":
 +                    return CSSReps.CSSInfoTip.populateFontFamilyInfoTip(infoTip, cssValue.value);
 +            }
 +
 +            delete this.infoTipType;
 +            delete this.infoTipValue;
 +            delete this.infoTipObject;
 +
 +            return false;
 +        }
 +    },
 +
 +    getCurrentColor: function()
 +    {
 +        var cs = this.selection.ownerDocument.defaultView.getComputedStyle(this.selection);
 +        return cs.getPropertyValue("color");
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // Change Listener
 +
 +    onCSSInsertRule: function(styleSheet, cssText, ruleIndex)
 +    {
 +        // Force update, this causes updateSelection to be called.
 +        // See {@link Panel.select}
 +        this.selection = null;
 +    },
 +
 +    onCSSDeleteRule: function(styleSheet, ruleIndex)
 +    {
 +        this.selection = null;
 +    },
 +
 +    onCSSSetProperty: function(style, propName, propValue, propPriority, prevValue,
 +        prevPriority, rule, baseText)
 +    {
 +        this.selection = null;
 +    },
 +
 +    onCSSRemoveProperty: function(style, propName, prevValue, prevPriority, rule, baseText)
 +    {
 +        this.selection = null;
 +    }
 +});
 +
 +// ********************************************************************************************* //
 +// Helpers
 +
 +function formatColor(color)
 +{
 +    switch (Options.get("colorDisplay"))
 +    {
 +        case "hex":
 +            return Css.rgbToHex(color);
 +
 +        case "hsl":
 +            return Css.rgbToHSL(color);
 +
 +        case "rgb":
 +            return Css.colorNameToRGB(color);
 +
 +        default:
 +            return color;
 +    }
 +}
 +
 +const styleGroups =
 +{
 +    text: [
 +        "font-family",
 +        "font-size",
 +        "font-weight",
 +        "font-style",
 +        "font-size-adjust",
 +        "color",
 +        "text-transform",
 +        "text-decoration",
 +        "letter-spacing",
 +        "word-spacing",
 +        "line-height",
 +        "text-align",
 +        "vertical-align",
 +        "direction",
 +        "column-count",
 +        "column-gap",
 +        "column-width",
 +        "-moz-tab-size", // FF4.0
 +        "-moz-font-feature-settings", // FF4.0
 +        "-moz-font-language-override", // FF4.0
 +        "-moz-text-blink", // FF6.0
 +        "-moz-text-decoration-color", // FF6.0
 +        "-moz-text-decoration-line", // FF6.0
 +        "-moz-text-decoration-style", // FF6.0
 +        "hyphens", // FF 6.0
 +        "text-overflow" // FF7.0
 +    ],
 +
 +    background: [
 +        "background-color",
 +        "background-image",
 +        "background-repeat",
 +        "background-position",
 +        "background-attachment",
 +        "opacity",
 +        "background-clip",
 +        "-moz-background-inline-policy",
 +        "background-origin",
 +        "background-size",
 +        "-moz-image-region"
 +    ],
 +
 +    box: [
 +        "width",
 +        "height",
 +        "top",
 +        "right",
 +        "bottom",
 +        "left",
 +        "margin-top",
 +        "margin-right",
 +        "margin-bottom",
 +        "margin-left",
 +        "padding-top",
 +        "padding-right",
 +        "padding-bottom",
 +        "padding-left",
 +        "-moz-padding-start",
 +        "-moz-padding-end",
 +        "border-top-width",
 +        "border-right-width",
 +        "border-bottom-width",
 +        "border-left-width",
 +        "border-top-color",
 +        "-moz-border-top-colors",
 +        "border-right-color",
 +        "-moz-border-right-colors",
 +        "border-bottom-color",
 +        "-moz-border-bottom-colors",
 +        "border-left-color",
 +        "-moz-border-left-colors",
 +        "border-top-style",
 +        "border-right-style",
 +        "border-bottom-style",
 +        "border-left-style",
 +        "-moz-border-end",
 +        "-moz-border-end-color",
 +        "-moz-border-end-style",
 +        "-moz-border-end-width",
 +        "border-image",
 +        "-moz-border-start",
 +        "-moz-border-start-color",
 +        "-moz-border-start-style",
 +        "-moz-border-start-width",
 +        "border-top-left-radius",
 +        "border-top-right-radius",
 +        "border-bottom-left-radius",
 +        "border-bottom-right-radius",
 +        "-moz-outline-radius-bottomleft",
 +        "-moz-outline-radius-bottomright",
 +        "-moz-outline-radius-topleft",
 +        "-moz-outline-radius-topright",
 +        "box-shadow",
 +        "outline-color",
 +        "outline-offset",
 +        "outline-top-width",
 +        "outline-right-width",
 +        "outline-bottom-width",
 +        "outline-left-width",
 +        "outline-top-color",
 +        "outline-right-color",
 +        "outline-bottom-color",
 +        "outline-left-color",
 +        "outline-top-style",
 +        "outline-right-style",
 +        "outline-bottom-style",
 +        "outline-left-style",
 +        "-moz-box-align",
 +        "-moz-box-direction",
 +        "-moz-box-flex",
 +        "-moz-box-ordinal-group",
 +        "-moz-box-orient",
 +        "-moz-box-pack",
 +        "-moz-box-sizing",
 +        "-moz-margin-start",
 +        "-moz-margin-end"
 +    ],
 +
 +    layout: [
 +        "position",
 +        "display",
 +        "visibility",
 +        "z-index",
 +        "overflow-x",  // http://www.w3.org/TR/2002/WD-css3-box-20021024/#overflow
 +        "overflow-y",
 +        "overflow-clip",
 +        "transform",
 +        "transform-origin",
 +        "white-space",
 +        "clip",
 +        "float",
 +        "clear",
 +        "-moz-appearance",
 +        "-moz-stack-sizing",
 +        "-moz-column-count",
 +        "-moz-column-gap",
 +        "-moz-column-width",
 +        "-moz-column-rule",
 +        "-moz-column-rule-width",
 +        "-moz-column-rule-style",
 +        "-moz-column-rule-color",
 +        "-moz-float-edge",
 +        "orient"
 +    ],
 +
 +    other: []
 +};
 +
 +// ********************************************************************************************* //
 +// Registration
 +
 +Firebug.registerPanel(CSSComputedPanel);
 +
 +return CSSComputedPanel;
 +
 +// ********************************************************************************************* //
 +});
diff --cc content/firebug/debugger/script/breakNotification.js
index 8cad9d6,0000000..8cc2179
mode 100644,000000..100644
--- a/content/firebug/debugger/script/breakNotification.js
+++ b/content/firebug/debugger/script/breakNotification.js
@@@ -1,408 -1,0 +1,411 @@@
 +/* See license.txt for terms of usage */
 +
 +define([
 +    "firebug/lib/object",
 +    "firebug/firebug",
 +    "firebug/chrome/rep",
 +    "firebug/lib/domplate",
 +    "firebug/chrome/reps",
 +    "firebug/lib/locale",
 +    "firebug/lib/events",
 +    "firebug/lib/css",
 +    "firebug/lib/dom",
 +    "firebug/lib/string",
 +    "firebug/lib/options",
 +],
 +function(Obj, Firebug, Rep, Domplate, FirebugReps, Locale, Events, Css, Dom, Str, Options) {
 +
 +"use strict";
 +
 +// ********************************************************************************************* //
 +// Constants
 +
 +var {domplate, DIV, TABLE, TBODY, TR, TD, IMG, SPAN, BUTTON, TAG} = Domplate;
 +
 +var TraceError = FBTrace.toError();
 +var Trace = FBTrace.to("DBG_BREAKNOTIFICATION");
 +
 +// ********************************************************************************************* //
 +// Breakpoint Notification
 +
 +/**
 + * @domplate Construct a break notification popup
 + *
 + * @param doc the document to contain the notification
 + * @param cause info object for the popup, with these optional fields:
 + *   strings: message, attrName
 + *   elements: target
 + *   objects: prevValue, newValue
 + */
 +function BreakNotification(cause, listener)
 +{
 +    this.cause = cause;
 +    this.listener = listener;
 +}
 +
 +BreakNotification.prototype = domplate(Rep,
 +/** @lends BreakNotification */
 +{
 +    tag:
 +        DIV({"class": "notificationBox"},
 +            TABLE({"class": "notificationTable", onclick: "$onHide",
 +                onmouseover: "$onMouseOver", onmouseout: "$onMouseOut"},
 +                TBODY(
 +                    TR(
 +                        TD({"class": "imageCol"},
 +                            IMG({"class": "notificationImage",
 +                                src: "chrome://firebug/skin/breakpoint.svg"})
 +                        ),
 +                        TD({"class": "descCol"},
 +                            SPAN({"class": "notificationDesc"}, "$cause|getDescription"),
 +                            SPAN(" "),
 +                            SPAN({"class": "diff"}, "$cause|getDiff"),
 +                            SPAN({"class": "targets"}),
 +                            DIV({"class": "noNotificationDesc"})
 +                        ),
 +                        TD({"class": "buttonsCol"},
 +                            BUTTON({"class": "notificationButton copyButton",
 +                                onclick: "$onCopyAction",
 +                                $collapsed: "$cause|hideCopyAction"},
 +                                Locale.$STR("Copy")
 +                            ),
 +                            BUTTON({"class": "notificationButton skipButton",
 +                                onclick: "$onSkipAction",
 +                                $collapsed: "$cause|hideSkipAction"},
 +                                Locale.$STR("script.balloon.Disable")
 +                            ),
 +                            BUTTON({"class": "notificationButton okButton",
 +                                onclick: "$onOkAction",
 +                                $collapsed: "$cause|hideOkAction"},
 +                                Locale.$STR("script.balloon.Continue")
 +                            )
 +                        ),
 +                        TD(
 +                            DIV({"class": "notificationClose", onclick: "$onHide"})
 +                        )
 +                    )
 +                )
 +            )
 +        ),
 +
 +    targets:
 +        SPAN(
 +            SPAN(" "),
 +            TAG("$cause|getTargetTag", {object: "$cause.target"}),
 +            SPAN(" "),
 +            TAG("$cause|getRelatedTargetTag", {object: "$cause.relatedNode"})
 +        ),
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +
 +    onMouseOver: function(event)
 +    {
 +        var target = event.target;
 +        var box = Dom.getAncestorByClass(target, "notificationBox");
 +        var close = box.querySelector(".notificationClose");
 +
 +        // The close button is "active" (red) if the mouse hovers over the notification
 +        // area except when it hovers over a button or link.
 +        var localName = target.localName ? target.localName.toLowerCase() : "";
 +        if (Css.hasClass(target, "notificationButton") || localName == "a")
 +            close.removeAttribute("active");
 +        else
 +            close.setAttribute("active", true);
 +    },
 +
 +    onMouseOut: function(event)
 +    {
 +        var box = Dom.getAncestorByClass(event.target, "notificationBox");
 +        var close = box.querySelector(".notificationClose");
 +        close.removeAttribute("active");
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +
 +    onHide: function(event)
 +    {
 +        var notify = this.getNotifyObject(event.target);
 +        notify.hide();
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +
 +    getDescription: function(cause)
 +    {
 +        var str = cause.message + (cause.attrName ? (" '" + cause.attrName + "'") : "");
 +        if (this.getDiff(cause))
 +            str += ":";
 +
 +        return str;
 +    },
 +
 +    getTargetTag: function(cause)
 +    {
 +        return this.getElementTag(cause.target) || null;
 +    },
 +
 +    getRelatedTargetTag: function(cause)
 +    {
 +        return this.getElementTag(cause.relatedNode) || null;
 +    },
 +
 +    getElementTag: function(node)
 +    {
 +        if (node)
 +        {
 +            var rep = Firebug.getRep(node);
 +            if (rep)
 +                return rep.shortTag || rep.tag;
 +        }
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // Button Handlers
 +
 +    hideCopyAction: function(cause)
 +    {
 +        return !cause.copyAction;
 +    },
 +
 +    hideSkipAction: function(cause)
 +    {
 +        return !cause.skipAction;
 +    },
 +
 +    hideOkAction: function(cause)
 +    {
 +        return !cause.okAction;
 +    },
 +
 +    onCopyAction: function(event)
 +    {
 +        var notify = this.getNotifyObject(event.target);
 +        if (notify.cause.copyAction)
 +            notify.cause.copyAction();
 +    },
 +
 +    onSkipAction: function(event)
 +    {
 +        var notify = this.getNotifyObject(event.target);
 +        if (notify.cause.skipAction)
 +            notify.cause.skipAction();
 +    },
 +
 +    onOkAction: function(event)
 +    {
 +        var notify = this.getNotifyObject(event.target);
 +        if (notify.cause.okAction)
 +            notify.cause.okAction();
 +    },
 +
 +    onCloseAction: function(event)
 +    {
 +        var notify = this.getNotifyObject(event.target);
 +        if (notify.cause.onCloseAction)
 +            notify.cause.onCloseAction();
 +        else
 +            notify.hide(event); // same as click on notify body
 +    },
 +
 +    getNotifyObject: function(target)
 +    {
 +        var parentNode = Dom.getAncestorByClass(target, "notificationBox");
 +        return parentNode.repObject;
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // Action handlers from "do not show again" description
 +
 +    onClickLink: function(event)
 +    {
 +        this.showTabMenu(event);
 +    },
 +
 +    disableNotifications: function(event)
 +    {
 +        Firebug.setPref(Firebug.prefDomain, "showBreakNotification", false);
 +
 +        // Hide the notification, but default processing of this event would hide it anyway.
 +        this.onHide(event);
 +    },
 +
 +    showTabMenu: function(event)
 +    {
 +        // Open panel's tab menu to show the "Show Break Notifications" option
 +        // to teach the user where to enable it again.
 +        var panelBar = Firebug.chrome.$("fbPanelBar1");
 +        var tab = panelBar.getTab("script");
 +        tab.tabMenu.showMenu();
 +
 +        // Avoid default processing that hides the notification popup.
 +        Events.cancelEvent(event);
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // Helpers
 +
 +    getDiff: function(cause)
 +    {
 +        var str = "";
 +
 +        if (cause.prevValue)
 +            str += Str.cropString(cause.prevValue, 40) + " -> ";
 +
 +        if (cause.newValue)
 +            str += Str.cropString(cause.newValue, 40);
 +
 +        if (!str.length)
 +            return "";
 +
 +        if (!cause.target)
 +            return str;
 +
 +        return str;
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // Public
 +
 +    show: function(parentNode)
 +    {
 +        Trace.sysout("breakNotification.show;");
 +
 +        // Render the entire notification box.
 +        this.box = this.tag.append(this.cause, parentNode, this);
 +        this.box.repObject = this;
 +
 +        // Make sure the notification box is at the top.
 +        parentNode.insertBefore(this.box, this.box.previousSibling);
 +
 +        // Appends the HTML targets dynamically. In case they are null, it breaks
 +        // click events.
 +        // xxxHonza: this problem would deserve clarification.
 +        if (this.cause.target || this.cause.relatedNode)
 +        {
 +            var targetsNode = this.box.querySelector(".targets");
 +            this.targets.replace(this.cause, targetsNode, this);
 +        }
 +
 +        // Render "do not show again" text
 +        var descNode = this.box.querySelector(".noNotificationDesc");
 +        FirebugReps.Description.render(Locale.$STR("firebug.breakpoint.doNotShowBreakNotification2"),
 +            descNode, Obj.bind(this.onClickLink, this));
 +
 +        // Tooltips
 +        if (this.cause.skipActionTooltip)
 +            this.box.querySelector(".skipButton").setAttribute("title", this.cause.skipActionTooltip);
 +        if (this.cause.okActionTooltip)
 +            this.box.querySelector(".okButton").setAttribute("title", this.cause.okActionTooltip);
 +        if (this.cause.copyActionTooltip)
 +            this.box.querySelector(".copyButton").setAttribute("title", this.cause.copyActionTooltip);
 +
 +        // xxxHonza: disable the animation, the interval seems to be frozen during debugger break.
 +        this.box.style.top = "0";
 +
 +        this.listener.onNotificationShow(this);
 +        return;
 +
++        // xxxSebastian: Code is unreachable, therefore commented out
++        /*
 +        // Animation
 +        var self = this;
 +        var delta = Math.max(3, Math.floor(this.box.clientHeight/5));
 +        var clientHeight = this.box.clientHeight;
 +
 +        this.box.style.top = -clientHeight + "px";
 +        var interval = setInterval(function slide(event)
 +        {
 +            var top = parseInt(self.box.style.top, 10);
 +            if (top >= 0)
 +            {
 +                clearInterval(interval);
 +            }
 +            else
 +            {
 +                var newTop = (top + delta) > 0 ? 0 : (top + delta);
 +                self.box.style.top = newTop + "px";
 +            }
 +        }, 15);
 +
 +        return this.box;
++        */
 +    },
 +
 +    hide: function()
 +    {
 +        Trace.sysout("breakNotification.hide; " + this.box);
 +
 +        // xxxHonza: disable the animation, the interval seems to be frozen during debugger break.
 +        if (this.box.parentNode)
 +            this.box.parentNode.removeChild(this.box);
 +
 +        this.listener.onNotificationHide(this);
 +        return;
 +
 +        // Animation
 +        var self = this;
 +        var delta = Math.max(3, Math.floor(this.box.clientHeight/5));
 +        var clientHeight = this.box.clientHeight;
 +        var top = 0;
 +
 +        var interval = setInterval(function slide(event)
 +        {
 +            top = top - delta;
 +            if (top < -clientHeight)
 +            {
 +                clearInterval(interval);
 +
 +                if (self.box.parentNode)
 +                    self.box.parentNode.removeChild(self.box);
 +            }
 +            else
 +            {
 +                self.box.style.top = top + "px";
 +            }
 +        }, 15);
 +    }
 +});
 +
 +// ********************************************************************************************* //
 +// Public API
 +
 +BreakNotification.show = function(context, parentNode, breakType, listener)
 +{
 +    Trace.sysout("BreakNotification.show");
 +
 +    // There is a global option that can be used to switch off the break notification
 +    // (it can be annoying sometimes)
 +    if (!Options.get("showBreakNotification"))
 +        return;
 +
 +    // If there is no breaking cause object, there is nothing to display so, bail out.
 +    if (!context.breakingCause)
 +        return;
 +
 +    var box = new BreakNotification(context.breakingCause, listener);
 +    box.show(parentNode);
 +
 +    // Remember the box, we need to hide it when the debugger is resumed.
 +    context.breakingCauseBox = box;
 +
 +    delete context.breakingCause;
 +
 +    return box;
 +}
 +
 +BreakNotification.hide = function(context)
 +{
 +    var box = context.breakingCauseBox;
 +    if (box)
 +        box.hide();
 +
 +    delete context.breakingCauseBox;
 +}
 +
 +// ********************************************************************************************* //
 +// Registration
 +
 +return BreakNotification;
 +
 +// ********************************************************************************************* //
 +});
diff --cc content/firebug/firefox/browserOverlay.css
index 4f5c360,0000000..bf18a79
mode 100644,000000..100644
--- a/content/firebug/firefox/browserOverlay.css
+++ b/content/firebug/firefox/browserOverlay.css
@@@ -1,259 -1,0 +1,275 @@@
 +/* See license.txt for terms of usage */
 +
 +/*************************************************************************************************/
 +/* Customizable Dialog Toolbar Buttons */
 +
 +/* Inspector button */
 +#firebug-inspectorButton {
 +    list-style-image: url(chrome://firebug/skin/inspect.svg);
 +}
 +
 +#firebug-inspectorButton:hover {
 +    filter: url(resource://firebugui/filters.svg#darken);
 +}
 +
 +#firebug-inspectorButton:active {
 +    filter: url(resource://firebugui/filters.svg#deepDarken);
 +}
 +
 +/* Firebug Start Button */
 +#firebug-button {
 +    -moz-binding: url("chrome://firebug/content/firefox/start-button/startButton.xml#start-button");
 +    list-style-image: url(chrome://firebug/skin/firebugSmall.svg) !important;
 +    filter: url(resource://firebugui/filters.svg#grayscale);
 +}
 +
 +#firebug-button[firebugActive="true"] {
 +    filter: none;
 +}
 +
 +/* Error badge (displays an error counter). The badge is only visible if error count
 +   should be displayed */
 +#firebug-error-badge {
 +    display: none;
 +    margin: 0;
 +}
 +
 +#firebug-error-badge[showErrors="true"] {
 +    display: block;
 +    -moz-box-sizing: border-box;
 +}
 +
 +#firebug-error-label {
 +    -moz-box-sizing: border-box;
 +    visibility: hidden;
 +    font-size: 10px;
 +    padding: 0 3px;
 +    line-height: 13px;
 +    font-family: Arial, Helvetica, sans-serif;
 +    text-shadow: 0 0 1px #EEF1F7;
 +    color: #900;
 +    border-radius: 3px;
 +    background-color: rgba(255, 0, 0, 0.9);
 +    box-shadow: inset 0px 0px 1px white;
 +    background-image: linear-gradient(
 +        to top,
 +        #DBE1EB 0%,
 +        #DEE4EB 80%,
 +        #E7EBF3 81%
 +    );
 +    border-width: 1px;
 +    border-style: solid;
 +    border-color: #B3BBC4 #9DA4AD #868D96 #9DA4AD;
 +    box-shadow: 0 0 1px rgba(255, 255, 255, 0.3) inset,
 +                0 1px 0 rgba(180, 189, 202, 0.7),
 +                0 0 3px rgba(153, 0, 0, 0.9);
 +}
 +
 +#firebug-error-badge[showErrors="true"] > #firebug-error-label:not([errorCount="0"]) {
 +    visibility: visible;
 +}
 +
 +/* old statusbar item look when on addonbar*/
 +#addon-bar #firebug-button dropmarker {
 +    display: none;
 +}
 +
 +#addon-bar #firebug-button .fb-toolbarbutton {
 +    padding: 0 3px !important;
 +}
 +
 +/* Slightly different positions of the badge for individual toolbars */
 +#nav-bar #firebug-error-badge {
 +    margin: 3px -10px 0 -8px;
 +}
 +
 +#addon-bar #firebug-error-badge {
 +    margin-top: 1px;
 +}
 +
 +#TabsToolbar #firebug-error-badge {
 +    margin-top: 4px;
 +}
 +
 +#toolbar-menubar #firebug-error-badge {
 +    margin-top: 4px;
 +}
 +
 +#firebug-button .fb-toolbarbutton {
 +    padding: 0;
 +}
 +
 +/* See issue 7444 */
 +#firebug-button .badge {
 +    display: none;
 +    margin: 0;
 +}
 +
 +/*************************************************************************************************/
 +/* Firebug Menu & Firefox context menu */
 +
 +#menu_firebug,
 +#appmenu_firebug,
 +#menu_webDeveloper_firebug {
 +    list-style-image: url(chrome://firebug/skin/firebugSmall.svg);
 +}
 +
 +#menu_firebug_firebugInspect {
 +    list-style-image: url(chrome://firebug/skin/inspect.svg);
 +}
 +
 +#menu_firebug_firebugInspect:hover {
 +    filter: url(resource://firebugui/filters.svg#darken);
 +}
 +
 +#menu_firebug_firebugInspect:active {
 +    filter: url(resource://firebugui/filters.svg#deepDarken);
 +}
 +
 +/*************************************************************************************************/
 +/* browser.xul & browserOverlayWithFrame */
 +
 +#fbMainFrame {
 +    height: 270px;
 +    width: 370px;
 +    min-height: 30px;
 +    min-width: 30px;
 +}
 +
 +/*************************************************************************************************/
 +/* Firebug Splitter */
 +
 +#fbContentSplitter{
 +    border-color: none;
 +    background-color: rgb(221,221,221);
 +    /*background-color: rgb(210, 224, 237); Australis*/
 +    border: none;
 +}
 +
 +#fbContentSplitter[dir=reverse]{
 +    transform: scale(-1, -1);
 +}
 +
 +#fbContentSplitter[orient=vertical] {
 +    min-height: 5px;
 +    max-height: 5px;
 +    /*background-color: -moz-dialog;*/
 +}
 +
 +#fbContentSplitter[orient=horizontal] {
 +    min-width: 5px;
 +    max-width: 5px;
 +    /*background-color: -moz-dialog;*/
 +}
 +
 +/*************************************************************************************************/
 +/* Start Button Tooltip */
 +
 +.firebugButtonTooltip .version {
 +    font-weight: bold;
 +}
 +
 +.firebugButtonTooltip .alwaysOn {
 +    color: gray;
 +}
 +
 +.firebugButtonTooltip .enablement {
 +    border-top: 1px gray dotted;
 +    margin-top: 5px;
 +    padding-top: 5px;
 +    font-style: italic;
 +}
 +
 +.firebugButtonTooltip .panelName,
 +.firebugButtonTooltip .panelStatus {
 +    color: gray;
 +    margin-top: 0;
 +    margin-bottom: 0;
 +    min-width: 75px
 +}
 +
 +.firebugButtonTooltip .panelStatus.on,
 +.firebugButtonTooltip .panelName.on {
 +    color: black;
 +}
 +
 +/*************************************************************************************************/
 +/* Start Button - Multiprocess Notification Panel */
 +
 +fbMultiprocessNotificationPanel {
 +    -moz-binding: url("chrome://firebug/content/firefox/multiprocessNotificationPanel.xml#panel");
 +}
 +
 +fbNewMultiprocessNotificationPanel {
 +    -moz-binding: url("chrome://firebug/content/firefox/newMultiprocessNotificationPanel.xml#panel");
 +}
 +
 +fbAuroraNotificationPanel {
 +    -moz-binding: url("chrome://firebug/content/firefox/auroraNotificationPanel.xml#panel");
 +}
 +
 +fbUpgradeNotificationPanel {
 +    -moz-binding: url("chrome://firebug/content/firefox/upgradeFirebugPanel.xml#panel");
 +}
 +
 +fbUpgradeNotificationPanel .iconbox,
 +fbAuroraNotificationPanel .iconbox,
 +fbNewMultiprocessNotificationPanel .iconbox,
 +fbMultiprocessNotificationPanel .iconbox {
 +    padding-right: 10px;
 +}
 +
++fbNewMultiprocessNotificationPanel .closeButton {
++    background-image: url(chrome://firebug/skin/mac/close.svg);
++    width: 13px;
++    height: 13px;
++    border: none;
++    cursor: pointer;
++}
++
++fbNewMultiprocessNotificationPanel .closeButton:hover {
++    filter: url(resource://firebugui/filters.svg#darken);
++}
++
++fbNewMultiprocessNotificationPanel .closeButton:active {
++    filter: url(resource://firebugui/filters.svg#deepDarken);
++}
++
 +fbUpgradeNotificationPanel .desc,
 +fbAuroraNotificationPanel .desc,
 +fbNewMultiprocessNotificationPanel .desc,
 +fbMultiprocessNotificationPanel .desc {
 +    max-width: 300px;
 +}
 +
 +fbUpgradeNotificationPanel .title {
 +    font-weight: bold;
 +    font-size: 16px;
 +}
 +
 +fbNewMultiprocessNotificationPanel .warn,
 +fbMultiprocessNotificationPanel .warn {
 +    max-width: 275px;
 +}
 +
 +fbNewMultiprocessNotificationPanel .warn,
 +fbMultiprocessNotificationPanel .warn {
 +    color: gray;
 +}
 +
 +fbNewMultiprocessNotificationPanel .warningbox,
 +fbMultiprocessNotificationPanel .warningbox {
 +    margin-top: 15px;
 +}
 +
 +fbNewMultiprocessNotificationPanel .warningicon,
 +fbMultiprocessNotificationPanel .warningicon {
 +    margin-right: 4px;
 +}
 +
 +fbUpgradeNotificationPanel .progress,
 +fbAuroraNotificationPanel .progress,
 +fbNewMultiprocessNotificationPanel .progress,
 +fbMultiprocessNotificationPanel .progress {
 +    margin: 8px;
 +}
diff --cc content/firebug/firefox/browserOverlay.js
index 6e207c3,0000000..ea6f311
mode 100644,000000..100644
--- a/content/firebug/firefox/browserOverlay.js
+++ b/content/firebug/firefox/browserOverlay.js
@@@ -1,996 -1,0 +1,1060 @@@
 +/* See license.txt for terms of usage */
 +
 +define([
 +    "firebug/lib/trace",
 +    "firebug/lib/options",
 +    "firebug/lib/locale",
 +    "firebug/lib/events",
 +    "firebug/lib/array",
 +    "firebug/lib/string",
 +    "firebug/lib/xpcom",
 +    "firebug/firefox/browserOverlayLib",
 +    "firebug/firefox/browserCommands",
 +    "firebug/firefox/browserMenu",
 +    "firebug/firefox/browserToolbar",
 +    "firebug/lib/system",
 +    "firebug/lib/devtools",
 +    "firebug/lib/channel",
 +],
 +function(FBTrace, Options, Locale, Events, Arr, Str, Xpcom, BrowserOverlayLib,
 +    BrowserCommands, BrowserMenu, BrowserToolbar, System, DevTools, Channel) {
 +
 +// ********************************************************************************************* //
 +// Constants
 +
 +var Cc = Components.classes;
 +var Ci = Components.interfaces;
 +var Cu = Components.utils;
 +
 +var {$, $el, $stylesheet, $menuitem, $menuseparator} = BrowserOverlayLib;
 +
 +Locale.registerStringBundle("chrome://firebug/locale/firebug.properties");
 +Locale.registerStringBundle("chrome://firebug/locale/cookies.properties");
 +Locale.registerStringBundle("chrome://firebug/locale/selectors.properties");
 +Locale.registerStringBundle("chrome://firebug/locale/keys.properties");
 +Locale.registerStringBundle("chrome://global-platform/locale/platformKeys.properties");
 +Locale.registerStringBundle("chrome://global/locale/keys.properties");
 +Locale.registerStringBundle("chrome://firebug/locale/multiprocess-notification.properties");
 +
 +Cu.import("resource://firebug/loader.js");
 +Cu.import("resource://firebug/fbtrace.js");
 +Cu.import("resource://gre/modules/AddonManager.jsm");
 +
 +var servicesScope = {};
 +Cu.import("resource://gre/modules/Services.jsm", servicesScope);
 +
 +const firstRunPage = "https://getfirebug.com/firstrun#Firebug ";
 +
 +var auroraChannel = "";
 +try {
 +  var value = servicesScope.Services.prefs.getCharPref("app.update.channel");
 +  auroraChannel = (value == "aurora") || (value == "nightly-gum");
 +}
 +catch (err) {
 +}
 +
 +// xxxHonza: getfirebug.com (or just the firebug/3.0 directory) is
 +// surprisingly often not available.
 +var downloadError = "Failed to get the latest Firebug 3 XPI from:\n\n" +
 +    "https://getfirebug.com/releases/firebug/3.0/\n\n" +
 +    "Try again or download the latest XPI manually.";
 +
 +// ********************************************************************************************* //
 +// BrowserOverlay Implementation
 +
 +function BrowserOverlay(win)
 +{
 +    this.win = win;
 +    this.doc = win.document;
 +}
 +
 +BrowserOverlay.prototype =
 +{
 +    // When Firebug is disabled or uninstalled this elements must be removed from
 +    // chrome UI (XUL).
 +    nodesToRemove: [],
 +
 +    auroraChannel: auroraChannel,
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // Initialization
 +
 +    initialize: function(reason)
 +    {
 +        // Expose BrowserOverlayLib object to extensions.
 +        this.win.Firebug.BrowserOverlayLib = BrowserOverlayLib;
 +
 +        // This element (a broadcaster) is storing Firebug state information. Other elements
 +        // (like for example the Firebug start button) can watch it and display the info to
 +        // the user.
 +        $el(this.doc, "broadcaster", {id: "firebugStatus", suspended: true},
 +            $(this.doc, "mainBroadcasterSet"));
 +
 +        var node = $stylesheet(this.doc, "chrome://firebug/content/firefox/browserOverlay.css");
 +
 +        if (System.isMac(this.win))
 +            $stylesheet(this.doc, "chrome://firebug/content/firefox/macBrowserOverlay.css");
 +
 +        this.nodesToRemove.push(node);
 +
 +        this.loadContextMenuOverlay();
 +        this.loadFirstRunPage(reason);
 +
 +        var version = this.getVersion();
 +
 +        BrowserCommands.overlay(this.doc);
 +        BrowserMenu.overlay(this);
 +        BrowserToolbar.overlay(this.doc, version);
 +
 +        this.internationalize();
 +        this.allPagesActivation();
 +    },
 +
 +    internationalize: function()
 +    {
 +        // Internationalize all elements with 'fbInternational' class. Clone
 +        // before internationalization.
 +        var elements = Arr.cloneArray(this.doc.getElementsByClassName("fbInternational"));
 +        Locale.internationalizeElements(this.doc, elements, ["label", "tooltiptext", "aria-label"]);
 +    },
 +
 +    allPagesActivation: function()
 +    {
 +        // Load Firebug by default if activation is on for all pages (see issue 5522)
 +        if (Options.get("allPagesActivation") == "on" || !Options.get("delayLoad"))
 +        {
 +            var self = this;
 +            this.startFirebug(function(Firebug)
 +            {
 +                var browser = Firebug.Firefox.getBrowserForWindow(self.win);
 +                var uri = Firebug.Firefox.getCurrentURI();
 +
 +                // Open Firebug UI (e.g. if the annotations say so, issue 5623)
 +                if (uri && Firebug.TabWatcher.shouldCreateContext(browser, uri.spec, null))
 +                    Firebug.toggleBar(true);
 +
 +                FBTrace.sysout("Firebug loaded by default since 'allPagesActivation' is on " +
 +                    "or 'delayLoad' is false");
 +            });
 +        }
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // Load Rest of Firebug
 +
 +    /**
 +     * This method is called by the Framework to load entire Firebug. It's executed when
 +     * the user requires Firebug for the first time.
 +     *
 +     * @param {Object} callback Executed when Firebug is fully loaded
 +     */
 +    startFirebug: function(callback)
 +    {
 +        // Special case for e10s enabled browser.
 +        if (this.isMultiprocessEnabled()) {
 +            this.showNewMultiprocessNotification();
 +            return;
 +        }
 +
 +        /*if (this.isMultiprocessEnabled()) {
 +            this.showMultiprocessNotification();
 +            return;
 +        }
 +        else if (this.isAuroraChannel()) {
 +            this.showAuroraNotification();
 +            return;
 +        }*/
 +
 +        if (this.win.Firebug.waitingForFirstLoad)
 +            return;
 +
 +        if (this.win.Firebug.isInitialized)
 +            return callback && callback(this.win.Firebug);
 +
 +        if (FBTrace.DBG_INITIALIZE)
 +            FBTrace.sysout("overlay; Load Firebug...", (callback ? callback.toString() : ""));
 +
 +        this.win.Firebug.waitingForFirstLoad = true;
 +
 +        // List of Firebug scripts that must be loaded into the global scope (browser.xul)
 +        // FBTrace is no longer loaded into the global space.
 +        var scriptSources = [
 +            "chrome://firebug/content/legacy.js",
 +            "chrome://firebug/content/moduleConfig.js"
 +        ];
 +
 +        // Create script elements.
 +        var self = this;
 +        scriptSources.forEach(function(url)
 +        {
 +            servicesScope.Services.scriptloader.loadSubScript(url, self.doc);
 +
 +            // xxxHonza: This doesn't work since Firefox 28. From some reason the script
 +            // isn't parsed when inserted into the second browser window. See issue 6731
 +            // $script(self.doc, url);
 +        });
 +
 +        var container = $(this.doc, "appcontent");
 +
 +        // Create Firebug splitter element.
 +        $el(this.doc, "splitter", {id: "fbContentSplitter", collapsed: "true"}, container);
 +
 +        // Create Firebug main frame and container.
 +        $el(this.doc, "vbox", {id: "fbMainFrame", collapsed: "true", persist: "height,width"}, [
 +            $el(this.doc, "browser", {
 +                id: "fbMainContainer",
 +                flex: "2",
 +                src: "chrome://firebug/content/firefox/firebugFrame.xul",
 +                disablehistory: "true"
 +            })
 +        ], container);
 +
 +        // When Firebug is fully loaded and initialized it fires a "FirebugLoaded"
 +        // event to the browser document (browser.xul scope). Wait for that to happen.
 +        this.doc.addEventListener("FirebugLoaded", function onLoad()
 +        {
 +            self.doc.removeEventListener("FirebugLoaded", onLoad, false);
 +            self.win.Firebug.waitingForFirstLoad = false;
 +
 +            // xxxHonza: TODO find a better place for notifying extensions
 +            FirebugLoader.dispatchToScopes("firebugFrameLoad", [self.win.Firebug]);
 +            if (callback)
 +                callback(self.win.Firebug);
 +        }, false);
 +    },
 +
 +    stopFirebug: function()
 +    {
 +        this.unloadContextMenuOverlay();
 +        BrowserCommands.resetDisabledKeys(this.win);
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // Firebug Menu Handlers
 +
 +    onOptionsShowing: function(popup)
 +    {
 +        for (var child = popup.firstChild; child; child = child.nextSibling)
 +        {
 +            if (child.localName == "menuitem")
 +            {
 +                var option = child.getAttribute("option");
 +                if (option)
 +                {
 +                    var checked = Options.get(option);
 +
 +                    // xxxHonza: I believe that allPagesActivation could be simple boolean option.
 +                    if (option == "allPagesActivation")
 +                        checked = (checked == "on") ? true : false;
 +
 +                    child.setAttribute("checked", checked);
 +                }
 +            }
 +        }
 +    },
 +
 +    onToggleOption: function(menuItem)
 +    {
 +        var option = menuItem.getAttribute("option");
 +        var checked = menuItem.getAttribute("checked") == "true";
 +
 +        Options.set(option, checked);
 +    },
 +
 +    onMenuShowing: function(popup, event)
 +    {
 +        // If the event comes from a sub menu, just ignore it.
 +        if (popup != event.target)
 +            return;
 +
 +        while (popup.lastChild)
 +            popup.removeChild(popup.lastChild);
 +
 +        // Generate dynamic content.
 +        for (var i=0; i<BrowserMenu.firebugMenuContent.length; i++)
 +            popup.appendChild(BrowserMenu.firebugMenuContent[i].cloneNode(true));
 +
 +        var collapsed = "true";
 +        if (this.win.Firebug.chrome)
 +        {
 +            var fbContentBox = this.win.Firebug.chrome.$("fbContentBox");
 +            collapsed = fbContentBox.getAttribute("collapsed");
 +        }
 +
 +        var currPos = Options.get("framePosition");
 +        var placement = this.win.Firebug.getPlacement ? this.win.Firebug.getPlacement() : "";
 +
 +        // Switch between "Open Firebug" and "Hide Firebug" label in the popup menu.
 +        var toggleFirebug = popup.querySelector("#menu_firebug_toggleFirebug");
 +        if (toggleFirebug)
 +        {
 +            var hiddenUI = (collapsed == "true" || placement == "minimized");
 +            toggleFirebug.setAttribute("label", (hiddenUI ?
 +                Locale.$STR("firebug.ShowFirebug") : Locale.$STR("firebug.HideFirebug")));
 +
 +            toggleFirebug.setAttribute("tooltiptext", (hiddenUI ?
 +                Locale.$STR("firebug.menu.tip.Open_Firebug") :
 +                Locale.$STR("firebug.menu.tip.Minimize_Firebug")));
 +
 +            var currentLocation = toggleFirebug.ownerDocument.defaultView.top.location.href;
 +            var inDetachedWindow = currentLocation.indexOf("firebug.xul") > 0;
 +
 +            // If Firebug is detached, use "Focus Firebug Window" label
 +            // instead of "Hide Firebug" when the menu isn't opened from
 +            // within the detached Firebug window. the 'placement' is used
 +            // to ensure Firebug isn't closed with close button of detached window
 +            // and 'inDetachedWindow' variable is also used to ensure the menu is
 +            // opened from within the detached window.
 +            if (currPos == "detached" && this.win.Firebug.currentContext &&
 +                placement != "minimized" && !inDetachedWindow)
 +            {
 +                toggleFirebug.setAttribute("label", Locale.$STR("firebug.FocusFirebug"));
 +                toggleFirebug.setAttribute("tooltiptext",
 +                    Locale.$STR("firebug.menu.tip.Focus_Firebug"));
 +            }
 +        }
 +
 +        // Hide "Deactivate Firebug" menu if Firebug is not active.
 +        var closeFirebug = popup.querySelector("#menu_firebug_closeFirebug");
 +        if (closeFirebug)
 +        {
 +            closeFirebug.setAttribute("collapsed",
 +                (this.win.Firebug.currentContext ? "false" : "true"));
 +        }
 +
 +        // Update About Menu
 +        var version = this.getVersion();
 +        if (version)
 +        {
 +            var node = popup.getElementsByClassName("firebugAbout")[0];
 +            var aboutLabel = node.getAttribute("label");
 +            node.setAttribute("label", aboutLabel + " " + version);
 +            node.classList.remove("firebugAbout");
 +        }
 +
 +        // Allow Firebug menu customization (see FBTest and FBTrace as an example).
 +        var event = new this.win.CustomEvent("firebugMenuShowing", {detail: popup});
 +        this.doc.dispatchEvent(event);
 +    },
 +
 +    onMenuHiding: function(popup, event)
 +    {
 +        if (popup != event.target)
 +            return;
 +
 +        // xxxHonza: I don't know why the timeout must be here, but if it isn't
 +        // the icon menu is broken (see issue 5427)
 +        this.win.setTimeout(function()
 +        {
 +            while (popup.lastChild)
 +                popup.removeChild(popup.lastChild);
 +        });
 +    },
 +
 +    onViewMenuShowing: function()
 +    {
 +        // Check whether Firebug is open
 +        var open = false;
 +        if (this.win.Firebug.chrome)
 +        {
 +            var fbContentBox = this.win.Firebug.chrome.$("fbContentBox");
 +            open = fbContentBox.getAttribute("collapsed") == "true" ? false : true;
 +        }
 +
 +        var firebugViewMenuItem = this.win.document.
 +            getElementById("menu_firebug_viewToggleFirebug");
 +        firebugViewMenuItem.setAttribute("checked", open);
 +    },
 +
 +    onPositionPopupShowing: function(popup)
 +    {
 +        while (popup.lastChild)
 +            popup.removeChild(popup.lastChild);
 +
 +        // Load Firebug before the position is changed.
 +        var oncommand = "Firebug.browserOverlay.startFirebug(function(){" +
 +            "Firebug.chrome.setPosition('%pos%')" + "})";
 +
 +        var items = [];
 +        var currPos = Options.get("framePosition");
 +
 +        var positions = ["detached", "top", "bottom", "left", "right"];
 +        for (var i=0; i<positions.length; i++)
 +        {
 +            var pos = positions[i];
 +            var label = Str.capitalize(pos);
 +
 +            var item = $menuitem(this.doc, {
 +                label: "firebug.menu." + label,
 +                tooltiptext: "firebug.menu.tip." + label,
 +                type: "radio",
 +                oncommand: oncommand.replace("%pos%", pos),
 +                checked: (currPos == pos)
 +            });
 +
 +            if (pos == "detached")
 +                items.key = "key_firebug_detachFirebug";
 +
 +            popup.appendChild(item);
 +        }
 +
 +        return true;
 +    },
 +
 +    openAboutDialog: function()
 +    {
 +        var self = this;
 +
 +        // Firefox 4.0+
 +        Cu["import"]("resource://gre/modules/AddonManager.jsm");
 +        this.win.AddonManager.getAddonByID("firebug at software.joehewitt.com", function(addon)
 +        {
 +            self.win.openDialog("chrome://mozapps/content/extensions/about.xul", "",
 +                "chrome,centerscreen,modal", addon);
 +        });
 +    },
 +
 +    setPosition: function(newPosition)
 +    {
 +        // todo
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // Firebug PanelSelector Menu
 +
 +    onPanelSelectorShowing: function(popup)
 +    {
 +        var self = this;
 +        this.startFirebug(function()
 +        {
 +            self.win.Firebug.PanelSelector.onMenuShowing(popup);
 +        });
 +    },
 +
 +    onPanelSelectorHiding: function(popup)
 +    {
 +        var self = this;
 +        this.startFirebug(function()
 +        {
 +            self.win.Firebug.PanelSelector.onMenuHiding(popup);
 +        });
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // Firebug Version
 +
 +    getVersion: function()
 +    {
 +        var versionURL = "chrome://firebug/content/branch.properties";
 +
 +        var loadingPrincipal = servicesScope.Services.scriptSecurityManager.getSystemPrincipal();
 +
 +        var channel = Channel.new(versionURL);
 +        var input = channel.open();
 +        var sis = Cc["@mozilla.org/scriptableinputstream;1"].
 +            createInstance(Ci.nsIScriptableInputStream);
 +        sis.init(input);
 +
 +        var content = sis.readBytes(input.available());
 +        sis.close();
 +
 +        var m = /RELEASE=(.*)/.exec(content);
 +        if (!m)
 +            return "no RELEASE in " + versionURL;
 +
 +        var release = m[1];
 +
 +        m = /VERSION=(.*)/.exec(content);
 +        if (!m)
 +            return "no VERSION in " + versionURL;
 +
 +        var version = m[1];
 +
 +        return version+""+release;
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // External Editors
 +
 +    onEditorsShowing: function(popup)
 +    {
 +        var self = this;
 +        this.startFirebug(function()
 +        {
 +            self.win.Firebug.ExternalEditors.onEditorsShowing(popup);
 +        });
 +
 +        return true;
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // Page Context Menu Overlay
 +
 +    loadContextMenuOverlay: function()
 +    {
 +        var contextMenu = this.win.nsContextMenu;
 +        if (typeof(contextMenu) == "undefined")
 +            return;
 +
 +        // isTargetAFormControl is removed, see:
 +        // https://bugzilla.mozilla.org/show_bug.cgi?id=433168
 +        if (typeof(contextMenu.prototype.isTargetAFormControl) != "undefined")
 +        {
 +            var setTargetOriginal = this.setTargetOriginal = contextMenu.prototype.setTarget;
 +            contextMenu.prototype.setTarget = function(aNode, aRangeParent, aRangeOffset)
 +            {
 +                setTargetOriginal.apply(this, arguments);
 +
 +                if (this.isTargetAFormControl(aNode))
 +                    this.shouldDisplay = true;
 +            };
 +        }
 +
 +        // Hide built-in inspector if the pref says so.
 +        var initItemsOriginal = this.initItemsOriginal = contextMenu.prototype.initItems;
 +        contextMenu.prototype.initItems = function()
 +        {
 +            initItemsOriginal.apply(this, arguments);
 +
 +            // Hide built-in inspector menu item if the pref "extensions.firebug.hideDefaultInspector"
 +            // says so. Note that there is also built-in preference "devtools.inspector.enable" that
 +            // can be used for the same purpose.
 +            var hideInspect = Options.get("hideDefaultInspector");
 +            if (hideInspect)
 +            {
 +                this.showItem("inspect-separator", false);
 +                this.showItem("context-inspect", false);
 +            }
 +        };
 +    },
 +
 +    unloadContextMenuOverlay: function()
 +    {
 +        var contextMenu = this.win.nsContextMenu;
 +        if (typeof(contextMenu) == "undefined")
 +            return;
 +
 +        if (this.setTargetOriginal)
 +            contextMenu.prototype.setTarget = this.setTargetOriginal;
 +
 +        if (this.initItemsOriginal)
 +            contextMenu.prototype.initItems = this.initItemsOriginal;
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // First Run Page
 +
 +    loadFirstRunPage: function(reason)
 +    {
 +        if (this.checkFirebugVersion(Options.get("currentVersion")) <= 0)
 +            return;
 +
 +        // Do not show the first run page when Firebug is being updated. It'll be displayed
 +        // the next time the browser is restarted
 +        // # ADDON_UPGRADE == 7
 +        if (reason == 7)
 +            return;
 +
 +        // Open the page in the top most window, so the user can see it immediately.
 +        var wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);
 +        if (wm.getMostRecentWindow("navigator:browser") == this.win.top)
 +        {
 +            // Update the preference to make sure the page is not displayed again.
 +            // To avoid being annoying when Firefox crashes, forcibly save it, too.
 +            var version = this.getVersion();
 +            Options.set("currentVersion", version);
 +
 +            if (Options.get("showFirstRunPage"))
 +            {
 +                var self = this;
 +                var timeout = this.win.setTimeout(function()
 +                {
 +                    if (self.win.closed)
 +                        return;
 +
 +                    self.openFirstRunPage(self.win);
 +                }, 1000);
 +
 +                this.win.addEventListener("unload", function()
 +                {
 +                    self.win.clearTimeout(timeout);
 +                }, false);
 +            }
 +        }
 +    },
 +
 +    openFirstRunPage: function(win)
 +    {
 +        var version = this.getVersion();
 +        var url = firstRunPage + version;
 +
 +        var browser = win.gBrowser || win.getBrowser();
 +        if (!browser)
 +        {
 +            FBTrace.sysout("browserOverlay.openFirstRunPage; ERROR there is no gBrowser!");
 +            return;
 +        }
 +
 +        // Open the firstRunPage in background
 +        /*gBrowser.selectedTab = */browser.addTab(url, null, null, null);
 +
 +        // Make sure prefs are stored, otherwise the firstRunPage would be displayed
 +        // again if Firefox crashes.
 +        this.win.setTimeout(function()
 +        {
 +            Options.forceSave();
 +        }, 400);
 +    },
 +
 +    // xxxsz: Can't System.checkFirebugVersion() be used for that?
 +    checkFirebugVersion: function(currentVersion)
 +    {
 +        if (!currentVersion)
 +            return 1;
 +
 +        var version = this.getVersion();
 +
 +        // Use Firefox comparator service
 +        var versionChecker = Xpcom.CCSV("@mozilla.org/xpcom/version-comparator;1",
 +            "nsIVersionComparator");
 +
 +        return versionChecker.compare(version, currentVersion);
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // Upgrade Firebug
 +
 +    upgradeFirebug: function(event)
 +    {
 +        Events.cancelEvent(event);
 +
 +        this.showUpgradeNotification();
 +
 +        // Start download automatically
 +        this.onUpgradeFirebug(event, 'fbUpgradeNotificationPanel');
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // Remote Browser (aka e10s enabled browser)
 +
 +    isMultiprocessEnabled: function()
 +    {
 +        var content = $(this.doc, "content");
 +        if (content.mCurrentBrowser.isRemoteBrowser)
 +          return true;
 +
 +        var browser = this.win.gBrowser || this.win.getBrowser();
 +        if (browser.isRemoteBrowser)
 +          return true;
 +
 +        if (servicesScope.Services.appinfo.browserTabsRemoteAutostart)
 +          return true;
 +
 +        return false;
 +    },
 +
 +    isAuroraChannel: function() {
 +      if (this.notNow)
 +          return false;
 +
 +      if (Options.get("noThanksFirebugNext"))
 +          return false;
 +
 +      return auroraChannel;
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // Aurora notification
 +
 +    showAuroraNotification: function()
 +    {
 +        var popupSet = $(this.doc, "mainPopupSet");
 +        var panel = this.doc.querySelector("fbAuroraNotificationPanel");
 +        if (!panel)
 +        {
 +            panel = this.doc.createElement("fbAuroraNotificationPanel");
 +            panel.setAttribute("upgradecommand", "Firebug.browserOverlay.onUpgradeFirebug(event, 'fbAuroraNotificationPanel')");
 +            panel.setAttribute("notnowcommand", "Firebug.browserOverlay.onNotNow(event)");
 +            panel.setAttribute("nothankscommand", "Firebug.browserOverlay.onNoThanks(event)");
 +            panel.setAttribute("cancelcommand", "Firebug.browserOverlay.onCancelUpgrade(event, 'fbAuroraNotificationPanel')");
 +            popupSet.appendChild(panel);
 +        }
 +
 +        panel.internationalize(Locale);
 +        panel.open();
 +    },
 +
 +    onNoThanks: function(event)
 +    {
 +        Events.cancelEvent(event);
 +
 +        // Not sure why the timeout needs to be here, but the 'close'
 +        // method is only available asynchronously.
 +        this.win.setTimeout(() => {
 +          Options.set("noThanksFirebugNext", true);
 +          this.openFirebug2(event.target);
 +        });
 +    },
 +
 +    onNotNow: function(event)
 +    {
 +        Events.cancelEvent(event);
 +
 +        this.win.setTimeout(() => {
 +          this.notNow = true;
 +          this.openFirebug2(event.target);
 +        });
 +    },
 +
 +    openFirebug2: function(panel)
 +    {
 +        var button = this.doc.getElementById("firebug-button");
 +        button.enableFirebugActions();
 +        panel.close();
 +
 +        this.startFirebug(function(Firebug) {
 +            Firebug.toggleBar(true);
 +        });
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // Manual upgrade panel
 +
 +    showUpgradeNotification: function()
 +    {
 +        var popupSet = $(this.doc, "mainPopupSet");
 +        var panel = this.doc.querySelector("fbUpgradeNotificationPanel");
 +        if (!panel)
 +        {
 +            panel = this.doc.createElement("fbUpgradeNotificationPanel");
 +            panel.setAttribute("upgradecommand", "Firebug.browserOverlay.onUpgradeFirebug(event, 'fbUpgradeNotificationPanel')");
 +            panel.setAttribute("cancelcommand", "Firebug.browserOverlay.onCancelUpgrade(event, 'fbUpgradeNotificationPanel')");
 +            popupSet.appendChild(panel);
 +        }
 +
 +        panel.internationalize(Locale);
 +        panel.open();
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // e10s enabled browser Notification
 +
 +    showMultiprocessNotification: function()
 +    {
 +        var popupSet = $(this.doc, "mainPopupSet");
 +        var panel = this.doc.querySelector("fbMultiprocessNotificationPanel");
 +        if (!panel)
 +        {
 +            panel = this.doc.createElement("fbMultiprocessNotificationPanel");
 +            panel.setAttribute("upgradecommand", "Firebug.browserOverlay.onUpgradeFirebug(event, 'fbMultiprocessNotificationPanel')");
 +            panel.setAttribute("disablecommand", "Firebug.browserOverlay.onDisableE10s(event)");
 +            panel.setAttribute("cancelcommand", "Firebug.browserOverlay.onCancelUpgrade(event, 'fbMultiprocessNotificationPanel')");
 +            popupSet.appendChild(panel);
 +        }
 +
 +        panel.internationalize(Locale);
 +        panel.open();
 +    },
 +
 +    showNewMultiprocessNotification: function()
 +    {
 +        if (Options.get("noMultiprocessMessage"))
 +        {
 +          this.toggleDevTools();
 +          return;
 +        }
 +
++        this.oldTheme = Options.getPref("devtools", "theme");
++        this.oldTheme = (this.oldTheme == "firebug") ? "light" : this.oldTheme;
++        this.domPanelWasEnabled = Options.getPref("devtools", "dom.enabled");
++
 +        var popupSet = $(this.doc, "mainPopupSet");
 +        var panel = this.doc.querySelector("fbNewMultiprocessNotificationPanel");
 +        if (!panel)
 +        {
 +            panel = this.doc.createElement("fbNewMultiprocessNotificationPanel");
 +            panel.setAttribute("opendevtoolscommand", "Firebug.browserOverlay.onOpenDevTools(event, 'fbMultiprocessNotificationPanel')");
 +            panel.setAttribute("disablecommand", "Firebug.browserOverlay.onDisableE10s(event)");
++            panel.setAttribute("activatefirebugtheme", "Firebug.browserOverlay.onActivateFirebugTheme(event)");
++
 +            popupSet.appendChild(panel);
 +        }
 +
++        let firebugTheme = Options.get("activateFirebugTheme");
++        panel.firebugTheme.checked = firebugTheme;
++
++        //panel.notAgain.checked = false;
++
++        if (firebugTheme)
++        {
++            this.activateFirebugTheme("firebug");
++            this.enableDomPanel(true);
++        }
++
 +        panel.internationalize(Locale);
 +        panel.open();
++
++        this.toggleDevTools(true);
 +    },
 +
 +    onDisableE10s: function(event)
 +    {
 +      Events.cancelEvent(event);
 +
 +      // xxxHonza: there is no other way to disable e10s that set
 +      // both realated prefs. It's unlikely that there will be .2
 +      Options.setPref("browser.tabs", "remote.autostart", false);
 +      Options.setPref("browser.tabs", "remote.autostart.1", false);
 +
 +      var panel = this.doc.querySelector("fbNewMultiprocessNotificationPanel");
-       Options.set("noMultiprocessMessage", panel.notAgain.checked);
++      //Options.set("noMultiprocessMessage", panel.notAgain.checked);
++      Options.set("noMultiprocessMessage", true);
 +
 +      restartFirefox();
 +    },
 +
 +    onOpenDevTools: function(event)
 +    {
 +      Events.cancelEvent(event);
 +
 +      var panel = this.doc.querySelector("fbNewMultiprocessNotificationPanel");
-       Options.set("noMultiprocessMessage", panel.notAgain.checked);
++      //Options.set("noMultiprocessMessage", panel.notAgain.checked);
++      Options.set("noMultiprocessMessage", true);
 +
 +      panel.close();
++    },
++
++    onActivateFirebugTheme: function(event) {
++      var panel = this.doc.querySelector("fbNewMultiprocessNotificationPanel");
++      var newTheme = panel.firebugTheme.checked ? "firebug" : this.oldTheme;
++
++      // Remember state of the checkbox.
++      Options.set("activateFirebugTheme", panel.firebugTheme.checked);
++
++      // Activate/deactivate Firebug theme.
++      this.activateFirebugTheme(newTheme);
 +
-       this.toggleDevTools(true);
++      // When Firebug theme is activated show also the DOM panel.
++      this.enableDomPanel(panel.firebugTheme.checked);
++    },
++
++    activateFirebugTheme: function(newTheme) {
++      var oldTheme = Options.getPref("devtools", "theme");
++
++      Options.setPref("devtools", "theme", newTheme);
++
++      let data = {
++        pref: "devtools.theme",
++        newValue: newTheme,
++        oldValue: oldTheme
++      };
++
++      DevTools.gDevTools.emit("pref-changed", data);
++    },
++
++    enableDomPanel: function(enable) {
++      var enableDomPanel = enable ? true : this.domPanelWasEnabled;
++      var currValue = Options.getPref("devtools", "dom.enabled");
++      if (currValue == enableDomPanel) {
++        return;
++      }
++
++      Options.setPref("devtools", "dom.enabled", enableDomPanel);
++
++      if (enableDomPanel) {
++        DevTools.gDevTools.emit("tool-registered", "dom");
++      } else {
++        let toolDefinition = DevTools.gDevTools._tools.get("dom");
++        DevTools.gDevTools.emit("tool-unregistered", toolDefinition);
++      }
 +    },
 +
 +    toggleDevTools: function(forceOpen) {
 +      var toolbox = getToolbox(this.win);
 +      if (toolbox && forceOpen) {
 +        return;
 +      }
 +
 +      if (toolbox) {
 +        destroyToolbox(this.win);
 +      } else {
 +        showToolbox(this.win);
 +      }
 +    },
 +
 +    onUpgradeFirebug: function(event, panelId)
 +    {
 +        Events.cancelEvent(event);
 +
 +        var self = this;
 +        var panel = this.doc.querySelector(panelId);
 +
 +        // Listen for installation end
 +        var listener =
 +        {
 +          onInstallEnded: function(install, addon)
 +          {
 +              install.removeListener(listener);
 +              self.install = null;
 +
 +              // Bug 749745: on FF14+, onInstallEnded is called just before `startup()`
 +              // is called, but we expect to resolve the promise only after it.
 +              // As startup is called synchronously just after onInstallEnded,
 +              // a simple setTimeout(0) is enough
 +              self.win.setTimeout(function()
 +              {
 +                restartFirefox();
 +              }, 0);
 +          },
 +          onInstallFailed: function (install)
 +          {
 +              install.removeListener(listener);
 +              self.install = null;
 +
 +              Cu.reportError(install.error);
 +              Cu.reportError(downloadError);
 +
 +              panel.upgradeButton.removeAttribute("collapsed");
 +              panel.progress.setAttribute("collapsed", "true");
 +              panel.cancelButton.setAttribute("collapsed", "true");
 +
 +              self.win.alert(downloadError);
 +          },
 +          onDownloadFailed: function(install)
 +          {
 +              this.onInstallFailed(install);
 +          },
 +          onDownloadStarted: function(install)
 +          {
 +              panel.progress.setAttribute("value", "0");
 +              panel.upgradeButton.setAttribute("collapsed", "true");
 +              panel.progress.removeAttribute("collapsed");
 +              panel.cancelButton.removeAttribute("collapsed");
 +          },
 +          onDownloadProgress: function(install)
 +          {
 +              var value = install.progress / (install.maxProgress / 100);
 +              panel.progress.value = value;
 +          }
 +        };
 +
 +        findFirebugUpdate(function(url)
 +        {
 +            if (!url)
 +            {
 +                Cu.reportError(downloadError);
 +                self.win.alert(downloadError);
 +                return;
 +            }
 +
 +            AddonManager.getInstallForURL(url, (install) =>
 +            {
 +                install.addListener(listener);
 +                install.install();
 +                self.install = install;
 +            }, "application/x-xpinstall");
 +        });
 +    },
 +
 +    onCancelUpgrade: function(event, panelId)
 +    {
 +        Events.cancelEvent(event);
 +
 +        if (!this.install)
 +          return;
 +
 +        this.install.cancel();
 +        this.install = null;
 +
 +        var panel = this.doc.querySelector(panelId);
 +        panel.upgradeButton.removeAttribute("collapsed");
 +        panel.progress.setAttribute("value", "0");
 +        panel.progress.setAttribute("collapsed", "true");
 +        panel.cancelButton.setAttribute("collapsed", "true");
 +    },
 +};
 +
 +// Helpers
 +
 +function findFirebugUpdate(callback)
 +{
 +    var xhr = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance();
 +    var url = "https://getfirebug.com/releases/firebug/3.0/update.rdf";
 +    xhr.open("GET", url, true);
 +
 +    xhr.onload = function()
 +    {
 +        if (xhr.readyState !== 4)
 +            return;
 +
 +        if (xhr.status !== 200)
 +        {
 +            callback(null);
 +            return;
 +        }
 +
 +        try
 +        {
 +            var parser = Xpcom.CCIN("@mozilla.org/xmlextras/domparser;1", "nsIDOMParser");
 +            var doc = parser.parseFromString(xhr.responseText, "text/xml");
 +            var root = doc.documentElement;
 +            var link = root.querySelector("updateLink");
 +            callback(link.textContent);
 +        }
 +        catch (err)
 +        {
 +            FBTrace.sysout("EXCEPTION " + err, err);
 +            callback(null);
 +        }
 +    };
 +
 +    xhr.onerror = function(e)
 +    {
 +        Cu.reportError(e.target.status);
 +    };
 +
 +    xhr.send(null);
 +}
 +
 +function restartFirefox()
 +{
 +    Cc["@mozilla.org/toolkit/app-startup;1"].getService(Ci.nsIAppStartup).
 +        quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit);
 +}
 +
 +function getCurrentTab(win)
 +{
 +    let browserDoc = win.top.document;
 +    let browser = browserDoc.getElementById("content");
 +    return browser.selectedTab;
 +}
 +
 +function showToolbox(win)
 +{
 +    let tab = getCurrentTab(win);
 +    let target = DevTools.devtools.TargetFactory.forTab(tab);
 +    return DevTools.gDevTools.showToolbox(target);
 +}
 +
 +function destroyToolbox(win)
 +{
 +    let toolbox = getToolbox(win);
 +    if (toolbox) {
 +      return toolbox.destroy();
 +    }
 +}
 +
 +function getToolbox(win)
 +{
 +    let tab = getCurrentTab(win);
 +    let target = DevTools.devtools.TargetFactory.forTab(tab);
 +    return DevTools.gDevTools.getToolbox(target);
 +}
 +
 +// ********************************************************************************************* //
 +// Registration
 +
 +return BrowserOverlay;
 +
 +// ********************************************************************************************* //
 +});
diff --cc content/firebug/firefox/external-editors/editors.js
index 0927f51,0000000..f69908c
mode 100644,000000..100644
--- a/content/firebug/firefox/external-editors/editors.js
+++ b/content/firebug/firefox/external-editors/editors.js
@@@ -1,490 -1,0 +1,490 @@@
 +/* See license.txt for terms of usage */
 +
 +define([
 +    "firebug/firebug",
 +    "firebug/lib/trace",
 +    "firebug/lib/locale",
 +    "firebug/lib/array",
 +    "firebug/lib/system",
 +    "firebug/firefox/external-editors/changeeditor",
 +],
 +function(Firebug, FBTrace, Locale, Arr, System, ChangeEditor) {
 +
 +// ********************************************************************************************* //
 +// Constants
 +
 +const Cc = Components.classes;
 +const Ci = Components.interfaces;
 +const Cu = Components.utils;
 +
 +const prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
 +const names = ["label", "executable", "cmdline", "image"];
 +
 +// ********************************************************************************************* //
 +// Globals
 +
 +function EditorManager(prefName)
 +{
 +    this._prefName = prefName;
 +
 +    this._tree = null;
 +    this._data = [];
 +    this._removeButton = null;
 +    this._changeButton = null;
 +    this._moveUpButton = null;
 +}
 +
 +EditorManager.prototype =
 +{
 +    init: function(win)
 +    {
 +        this.win = win;
 +
 +        (this._removeButton = this.win.document.getElementById("removeEditor")).disabled = true;
 +        (this._changeButton = this.win.document.getElementById("changeEditor")).disabled = true;
 +        (this._moveUpButton = this.win.document.getElementById("moveUpEditor")).disabled = true;
 +
 +        this._tree = this.win.document.getElementById("editorsList");
 +
 +        this._treeView =
 +        {
 +            data: this._data,
 +            selection: null,
 +
 +            get rowCount() { return this.data.length; },
 +            getCellText: function(row, column)
 +            {
 +                switch (column.id)
 +                {
 +                case "editorName":
 +                    return " "+this.data[row].label;
 +                case "editorExecutable":
 +                    return this.data[row].executable;
 +                case "editorParams":
 +                    return this.data[row].cmdline;
 +                }
 +                return "";
 +            },
 +            setTree: function(treebox){ this.treebox = treebox; },
 +            isContainer: function(row) { return false; },
 +            isContainerOpen: function(row) { return false; },
 +            isContainerEmpty: function(row) { return false; },
 +            isSeparator: function(row) { return false; },
 +            isSorted: function() { return false; },
 +            getLevel: function(row) { return 0; },
 +            getImageSrc: function(row,column) {
 +                return column.id=="editorName" ? this.data[row].image : null; },
 +            getRowProperties: function(row,props) {},
 +            getCellProperties: function(row,column,props) {},
 +            getColumnProperties: function(colid,column,props) {}
 +        };
 +
 +        this._load();
 +        this._tree.view = this._treeView;
 +
 +        this.internationalizeUI(this.win.document);
 +    },
 +
 +    uninit: function()
 +    {
 +    },
 +
 +    internationalizeUI: function(doc)
 +    {
 +        var elements = doc.getElementsByClassName("fbInternational");
 +        var attributes = ["title", "label", "value"];
 +
 +        for (var i=0; i<elements.length; i++)
 +        {
 +            for (var j=0; j<attributes.length; j++)
 +            {
 +                if (elements[i].hasAttribute(attributes[j]))
 +                    Locale.internationalize(elements[i], attributes[j]);
 +            }
 +        }
 +    },
 +
 +    onSelectionChanged: function()
 +    {
 +        var selection = this._tree.view.selection, disabled = (selection.count != 1);
 +        this._removeButton.disabled = disabled;
 +        this._changeButton.disabled = disabled;
 +        this._moveUpButton.disabled = disabled || (selection.currentIndex == 0);
 +    },
 +
 +    addEditorHandler: function()
 +    {
 +        var item = { label: "", executable: null, cmdline: "" };
 +        var result = {};
 +
 +        this.win.openDialog("chrome://firebug/content/firefox/external-editors/changeeditor.xul",
 +            "_blank", "modal,centerscreen,resizable", new ChangeEditor(item), result);
 +
 +        if (result.saveChanges)
 +        {
 +            item.id = item.label.replace(/\W/g, "_");
 +            this._saveItem(item);
 +
 +            this._loadItem(item);
 +            this._data.push(item);
 +            this._tree.view = this._treeView;
 +
 +            var editors = [];
 +            try
 +            {
 +                editors = prefs.getCharPref(this._prefName).split(",");
 +                for (var i=0; i<editors.length; ++i)
 +                {
 +                    if (editors[i].replace(/^\s+|\s+$/,"") == "")
 +                        editors.splice(i, 1);
 +                }
 +            }
 +            catch (exc)
 +            {
 +                if (FBTrace.DBG_ERRORS)
 +                    FBTrace.sysout("EXCEPTION " + exc, exc);
 +            }
 +
 +            editors.push(item.id);
 +            prefs.setCharPref(this._prefName, editors.join(","));
 +        }
 +    },
 +
 +    removeEditorHandler: function()
 +    {
 +        var selection = this._tree.view.selection;
 +        if (selection.count < 1)
 +            return;
 +
 +        var item = this._data[selection.currentIndex];
 +        this._data.splice(selection.currentIndex, 1);
 +        this._tree.view = this._treeView;
 +
 +        try
 +        {
 +            var editors = prefs.getCharPref(this._prefName).split(",");
 +            Arr.remove(editors, item.id);
 +
 +            prefs.setCharPref(this._prefName, editors.join(","));
 +            prefs.deleteBranch(this._prefName+"."+item.id);
 +        }
 +        catch (exc)
 +        {
 +            if (FBTrace.DBG_ERRORS)
 +                FBTrace.sysout("EXCEPTION " + exc, exc);
 +        }
 +
 +        // update disabled state of buttons
 +        if (this._data.length == 0)
 +            selection.clearSelection();
 +    },
 +
 +    changeEditorHandler: function()
 +    {
 +        var selection = this._tree.view.selection;
 +        if (selection.count != 1)
 +            return;
 +
 +        var item = this._data[selection.currentIndex];
 +        var result = {};
 +
 +        this.win.openDialog("chrome://firebug/content/firefox/external-editors/changeeditor.xul",
 +            "_blank", "modal,centerscreen", new ChangeEditor(item), result);
 +
 +        if (result.saveChanges)
 +            this._saveItem(item);
 +
 +        this._loadItem(item);
 +        this._tree.view = this._treeView;
 +    },
 +
 +    moveUpEditorHandler: function()
 +    {
 +        var selection = this._tree.view.selection;
 +        if (selection.count < 1)
 +            return;
 +
 +        var item = this._data[selection.currentIndex];
 +        this._data.splice(selection.currentIndex, 1);
 +        this._data.unshift(item);
 +        this._tree.view = this._treeView;
 +
 +        try
 +        {
-             var editors = this._data.map(function(x) x.id);
++            var editors = this._data.map(x => x.id);
 +            prefs.setCharPref(this._prefName, editors.join(","));
 +        }
 +        catch (exc)
 +        {
 +            if (FBTrace.DBG_ERRORS)
 +                FBTrace.sysout("EXCEPTION " + exc, exc);
 +        }
 +    },
 +
 +
 +    _loadItem: function(item)
 +    {
 +        const prefName = this._prefName;
 +
 +        for (var i=0; i<names.length; ++i)
 +        {
 +            try
 +            {
 +                item[names[i]] = prefs.getCharPref(prefName+"."+item.id+"."+names[i]);
 +            }
 +            catch(exc)
 +            {
 +            }
 +        }
 +
 +        if (!item.image)
 +            item.image = System.getIconURLForFile(item.executable);
 +    },
 +
 +    _saveItem: function(item)
 +    {
 +        if (item.image && item.image == System.getIconURLForFile(item.executable))
 +            item.image = null;
 +
 +        const prefName = this._prefName;
 +        for (var i=0; i<names.length; ++i)
 +        {
 +            try
 +            {
 +                var value = item[names[i]];
 +                if (value)
 +                    prefs.setCharPref(prefName + "." + item.id + "." + names[i], value);
 +                else
 +                    prefs.clearUserPref(prefName + "." + item.id + "." + names[i]);
 +            }
 +            catch (exc)
 +            {
 +            }
 +        }
 +    },
 +
 +    _load: function()
 +    {
 +        try
 +        {
 +            var list = prefs.getCharPref(this._prefName).split(",");
 +            for (var i=0; i<list.length; ++i)
 +            {
 +                var editorId = list[i].replace(/\s/g, "_");
 +                if (!editorId)
 +                    continue;
 +
 +                var item = { id: editorId };
 +                this._data.push(item);
 +                this._loadItem(item);
 +            }
 +        }
 +        catch (exc)
 +        {
 +            if (FBTrace.DBG_ERRORS)
 +                FBTrace.sysout("EXCEPTION " + exc, exc);
 +        }
 +    }
 +};
 +
 +// ********************************************************************************************* //
 +// URLMappings
 +
 +Cu.import("resource://firebug/loader.js");
 +
 +var headerName = "X-Local-File-Path";
 +var headerExplaination = "\
 +// the following regexp is used by firebug to determine\n\
 +// if it should send request to the server to get\n\
 +// file path with " + headerName + " header\n\
 +// defalt value is ^https?:\\/\\/(localhost)(\\/|:|$)";
 +
 +var listExplaination = "\
 +// list of mappings in the form\n\
 +// ^https?:\\/\\/my.domain.com/ => c:\\php/www\\ \n\
 +// ";
 +var noMapping = "no mappings for tested url";
 +var willQueryServer = "for this url Firebug will send query to server";
 +
 +var splitter = " => ";
 +var gUrlMappingManager =
 +{
 +    init: function()
 +    {
 +        var extModule = Firebug.ExternalEditors;
 +        this.checkHeaderRe = extModule.checkHeaderRe;
 +        this.pathTransformations = extModule.pathTransformations;
 +
 +        var val = [
 +            headerExplaination, "\n",
 +            headerName, splitter, extModule.checkHeaderRe.source,
 +            "\n\n",
 +            listExplaination,
 +            "\n"
 +        ];
 +
 +        for (var i = 0; i < this.pathTransformations.length; i++)
 +        {
 +            var transform = this.pathTransformations[i];
 +            val.push(transform.regexp.source, splitter, transform.filePath, "\n");
 +        }
 +
 +        val.push(splitter, "\n");
 +
 +        this.win.document.getElementById("urlMappings").value = val.join("");
 +        this.win.document.getElementById("test").value = Firebug.Firefox.getCurrentBrowser().currentURI.spec;
 +
 +        this.onMainInput();
 +    },
 +
 +    uninit: function()
 +    {
 +        this.save();
 +        Firebug.ExternalEditors.saveUrlMappings();
 +    },
 +
 +    save: function()
 +    {
 +        var checkHeaderRe = this.checkHeaderRe;
 +        var pathTransformations = this.pathTransformations;
 +
 +        FirebugLoader.forEachWindow(function(win)
 +        {
 +            var extModule = win.Firebug.ExternalEditors;
 +            delete extModule.pathTransformations;
 +            delete extModule.checkHeaderRe;
 +            extModule.checkHeaderRe = checkHeaderRe;
 +            extModule.pathTransformations = pathTransformations;
 +        });
 +    },
 +
 +    parse: function(val)
 +    {
 +        var lines = val.split(/(?:\n\r|\n|\r)/);
 +        var errors = this.errors = [];
 +        function addRegexp(source, line)
 +        {
 +            if (!source)
 +                return;
 +
 +            try
 +            {
 +                source = source.replace(/\\?\//g, '\\/');
 +                return RegExp(source, 'i');
 +            }
 +            catch(e)
 +            {
 +                errors.push(line + ': ' + e);
 +                return null;
 +            }
 +        }
 +
 +        this.pathTransformations = [];
 +        this.checkHeaderRe = null;
 +        for (var i in lines)
 +        {
 +            var line = lines[i].split('=>');
 +
 +            if (!line[1] || !line[0])
 +                continue;
 +
 +            var start = line[0].trim();
 +            var end = line[1].trim();
 +
 +            if (start[0] == '/' && start[1] == '/')
 +                continue;
 +
 +            if (start == headerName)
 +            {
 +                if (this.checkHeaderRe)
 +                    erors.push(i);
 +                else
 +                    this.checkHeaderRe = addRegexp(end, i);
 +                continue;
 +            }
 +
 +            var t = {
 +                regexp: addRegexp(start, i),
 +                filePath: end
 +            };
 +
 +            if (t.regexp && t.filePath)
 +                this.pathTransformations.push(t);
 +        }
 +
 +        if (!this.checkHeaderRe)
 +            this.checkHeaderRe = /^$/;
 +    },
 +
 +    onTestInput: function()
 +    {
 +        var testBox = this.win.document.getElementById("test");
 +        var resultBox = this.win.document.getElementById("result");
 +        var href = testBox.value;
 +
 +        if (this.checkHeaderRe.test(href))
 +        {
 +            resultBox.value = "firebug will send query to server";
 +        }
 +        else
 +        {
 +            for (var i=0; i<this.pathTransformations.length; i++)
 +            {
 +                var transform = this.pathTransformations[i];
 +                if (transform.regexp.test(href))
 +                {
 +                    var path = href.replace(transform.regexp, transform.filePath);
 +                    break;
 +                }
 +            }
 +
 +            if (path)
 +            {
 +                resultBox.style.cssText = "box-shadow: 0px 0px 1.5px 1px lime;";
 +                href = path;
 +            }
 +
 +            resultBox.value = href.replace(/([^:\\\/])[\\\/]+/g, '$1/');
 +        }
 +    },
 +
 +    onMainInput: function()
 +    {
 +        this.parse(this.win.document.getElementById("urlMappings").value);
 +        var resultBox = this.win.document.getElementById("result");
 +        if (this.errors.length)
 +        {
 +            resultBox.value = this.errors;
 +            resultBox.style.cssText = "box-shadow: 0px 0px 1.5px 1px red;";
 +        }
 +        else
 +        {
 +            resultBox.style.cssText = "";
 +            this.onTestInput();
 +        }
 +    },
 +
 +    schedule: function(funcName)
 +    {
 +        if (this._scheduled != "onMainInput")
 +            this._scheduled = funcName;
 +
 +        if (this.timeOut != null)
 +            return;
 +
 +        this.timeOut = setTimeout(function(_this)
 +        {
 +            _this[_this._scheduled]();
 +            _this._scheduled = _this.timeOut = null;
 +            _this.save()
 +        }, 80, this);
 +    }
 +};
 +
 +// ********************************************************************************************* //
 +// Registration
 +
 +return EditorManager;
 +
 +// ********************************************************************************************* //
 +});
diff --cc content/firebug/firefox/newMultiprocessNotificationPanel.xml
index 0af7481,0000000..bbc36a0
mode 100644,000000..100644
--- a/content/firebug/firefox/newMultiprocessNotificationPanel.xml
+++ b/content/firebug/firefox/newMultiprocessNotificationPanel.xml
@@@ -1,118 -1,0 +1,148 @@@
 +<?xml version="1.0"?>
 +<!-- See license.txt for terms of usage -->
 +
 +<bindings xmlns="http://www.mozilla.org/xbl"
 +    xmlns:xbl="http://www.mozilla.org/xbl"
 +    xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
 +    xmlns:html="http://www.w3.org/1999/xhtml">
 +
 +<binding id="panel">
 +    <resources>
 +      <stylesheet src="chrome://global/skin/notification.css"/>
 +    </resources>
 +    <content>
 +        <xul:panel anonid="panel" norestorefocus="true" noautofocus="true"
 +            ignorekeys="true" role="presentation" type="arrow" class="panel">
 +            <xul:hbox>
-                 <xul:vbox class="iconbox">
-                     <xul:image src="chrome://firebug/skin/firebug64.png"/>
-                 </xul:vbox>
-                 <xul:vbox>
++               <xul:vbox class="iconbox">
++                   <xul:image src="chrome://firebug/skin/firebug64.png"/>
++               </xul:vbox>
++               <xul:vbox>
++                    <xul:hbox class="warningbox"></xul:hbox>
++
 +                    <xul:description anonid="desc" class="desc" />
 +
 +                    <xul:hbox class="warningbox"></xul:hbox>
 +
 +                    <xul:label anonid="learnMore"
 +                        class="text-link popup-notification-learnmore-link learnMore"
-                         href="https://getfirebug.com/merging-into-firefox-developer-tools"/>
++                        href="https://getfirebug.com/unifying-firebug-and-firefox-devtools"/>
++
++                    <xul:hbox class="warningbox"></xul:hbox>
++
++                    <xul:description anonid="desc3" class="desc" />
 +
 +                    <xul:hbox class="warningbox">
 +                        <xul:vbox>
-                             <xul:checkbox anonid="notAgain" checked="false"/>
++                            <xul:checkbox anonid="firebugTheme" checked="true"
++                                xbl:inherits="oncommand=activatefirebugtheme" />
 +                        </xul:vbox>
 +                    </xul:hbox>
 +
++                    <!-- <xul:hbox class="warningbox">
++                        <xul:vbox>
++                            <xul:checkbox anonid="notAgain" checked="false" />
++                        </xul:vbox>
++                    </xul:hbox> -->
++
 +                    <xul:hbox class="warningbox" style="height: 10px;"></xul:hbox>
 +
 +                    <xul:hbox align="right">
 +                        <xul:progressmeter anonid="progress" class="progress"
 +                            mode="determined" value="0" collapsed="true"/>
 +                        <xul:spacer width="20px" />
 +                        <xul:button anonid="opendevtools" type="menu-button"
 +                            xbl:inherits="oncommand=opendevtoolscommand"
 +                            class="popup-notification-menubutton">
 +                            <xul:menupopup>
 +                                <xul:menuitem anonid="disable"
 +                                    xbl:inherits="oncommand=disablecommand"/>
 +                            </xul:menupopup>
 +                        </xul:button>
 +                    </xul:hbox>
 +                </xul:vbox>
-             </xul:hbox>
++                <xul:vbox>
++                    <xul:image class="closeButton" anonid="closeButton"/>
++                </xul:vbox>
++             </xul:hbox>
 +        </xul:panel>
 +    </content>
 +
 +    <implementation>
 +        <constructor><![CDATA[
 +        ]]></constructor>
 +
 +        <method name="internationalize">
 +            <parameter name="Locale" />
 +            <body><![CDATA[
 +                var desc = document.getAnonymousElementByAttribute(this, "anonid", "desc");
 +                desc.textContent = Locale.$STR("multiprocess.description");
 +
++                var desc3 = document.getAnonymousElementByAttribute(this, "anonid", "desc3");
++                desc3.textContent = Locale.$STR("multiprocess.description3");
++
 +                var learnMore = document.getAnonymousElementByAttribute(this, "anonid", "learnMore");
 +                learnMore.textContent = Locale.$STR("multiprocess.learnMore");
 +
-                 var notAgain = document.getAnonymousElementByAttribute(this, "anonid", "notAgain");
-                 notAgain.label = Locale.$STR("multiprocess.notAgain");
++                //var notAgain = document.getAnonymousElementByAttribute(this, "anonid", "notAgain");
++                //notAgain.label = Locale.$STR("multiprocess.notAgain");
 +
 +                var openDevToolsButton = document.getAnonymousElementByAttribute(this, "anonid", "opendevtools");
 +                openDevToolsButton.label = Locale.$STR("multiprocess.openDevTools");
 +
 +                var disableMenu = document.getAnonymousElementByAttribute(this, "anonid", "disable");
 +                disableMenu.label = Locale.$STR("multiprocess.disable");
++
++                this.firebugTheme.label = Locale.$STR("multiprocess.activateFirebugTheme");
++
++                var closeButton = document.getAnonymousElementByAttribute(this, "anonid", "closeButton");
++                closeButton.addEventListener('click', this.close.bind(this), false);
 +            ]]></body>
 +        </method>
 +
 +        <method name="open">
 +            <body><![CDATA[
 +                var offsetY = 0;
 +                var offsetX = 0;
 +                var target = document.getElementById("nav-bar-customization-target");
 +
 +                var startButton = document.getElementById("firebug-button");
 +                if (startButton) {
 +                    var style = document.defaultView.getComputedStyle(startButton.button);
 +                    offsetY = parseInt(style["padding-bottom"]);
 +                    offsetX = parseInt(style["width"])/2;
 +                    target = startButton.button;
 +                }
 +
 +                var panel = document.getAnonymousElementByAttribute(this, "anonid", "panel");
 +                panel.openPopup(target, "after_end", -offsetX, -offsetY, false, false);
 +            ]]></body>
 +        </method>
 +
 +        <method name="close">
 +            <body><![CDATA[
 +                var panel = document.getAnonymousElementByAttribute(this, "anonid", "panel");
 +                panel.hidePopup();
 +            ]]></body>
 +        </method>
 +
 +        <property name="openDevToolsButton">
 +            <getter><![CDATA[
 +                return document.getAnonymousElementByAttribute(this, "anonid", "opendevtools");
 +            ]]></getter>
 +        </property>
 +
 +        <property name="notAgain">
 +            <getter><![CDATA[
 +                return document.getAnonymousElementByAttribute(this, "anonid", "notAgain");
 +            ]]></getter>
 +        </property>
++
++        <property name="firebugTheme">
++            <getter><![CDATA[
++                return document.getAnonymousElementByAttribute(this, "anonid", "firebugTheme");
++            ]]></getter>
++        </property>
 +    </implementation>
 +</binding>
 +</bindings>
diff --cc content/firebug/lib/url.js
index dfad6e2,0000000..72f6a8f
mode 100644,000000..100644
--- a/content/firebug/lib/url.js
+++ b/content/firebug/lib/url.js
@@@ -1,598 -1,0 +1,598 @@@
 +/* See license.txt for terms of usage */
 +
 +define([
 +    "firebug/lib/trace",
 +    "firebug/lib/string",
 +    "firebug/lib/options",
 +],
 +function (FBTrace, Str, Options) {
 +
 +"use strict";
 +
 +// ********************************************************************************************* //
 +// Constants
 +
 +var Cc = Components.classes;
 +var Ci = Components.interfaces;
 +
 +var ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
 +
 +// ********************************************************************************************* //
 +// Implementation
 +
 +var Url = {};
 +
 +// ************************************************************************************************
 +// Regular expressions
 +
 +Url.reCSS = /\.css$/;
 +Url.reJavascript = /\s*javascript:\s*(.*)/;
 +Url.reFile = /file:\/\/([^\/]*)\//;
 +Url.reChrome = /chrome:\/\/([^\/]*)\//;
 +Url.reDataURL = /data:text\/javascript;fileName=([^;]*);baseLineNumber=(\d*?),((?:.*?%0A)|(?:.*))/g;
 +
 +// ************************************************************************************************
 +// URLs
 +
 +Url.getFileName = function(url)
 +{
 +    var split = Url.splitURLBase(url);
 +    return split.name;
 +};
 +
 +Url.getProtocol = function(url)
 +{
 +    var split = Url.splitURLBase(url);
 +    return split.protocol;
 +};
 +
 +Url.splitURLBase = function(url)
 +{
 +    if (Url.isDataURL(url))
 +        return Url.splitDataURL(url);
 +    return Url.splitURLTrue(url);
 +};
 +
 +Url.splitDataURL = function(url)
 +{
 +    if (!Str.hasPrefix(url, "data:"))
 +        return false; //  the first 5 chars must be 'data:'
 +
 +    var point = url.indexOf(",", 5);
 +    if (point < 5)
 +        return false; // syntax error
 +
 +    var props = { protocol: "data", encodedContent: url.substr(point+1) };
 +
 +    var metadataBuffer = url.substring(5, point);
 +    var metadata = metadataBuffer.split(";");
 +    for (var i = 0; i < metadata.length; i++)
 +    {
 +        var nv = metadata[i].split("=");
 +        if (nv.length == 2)
 +            props[nv[0]] = nv[1];
 +    }
 +
 +    // Additional Firebug-specific properties
 +    if (props.hasOwnProperty("fileName"))
 +    {
 +         var caller_URL = decodeURIComponent(props["fileName"]);
 +         var caller_split = Url.splitURLTrue(caller_URL);
 +
 +         props["fileName"] = caller_URL;
 +
 +        if (props.hasOwnProperty("baseLineNumber"))  // this means it's probably an eval()
 +        {
 +            props["path"] = caller_split.path;
 +            props["line"] = props["baseLineNumber"];
 +            var hint = decodeURIComponent(props["encodedContent"]).substr(0,200).replace(/\s*$/, "");
 +            props["name"] =  "eval->"+hint;
 +        }
 +        else
 +        {
 +            props["name"] = caller_split.name;
 +            props["path"] = caller_split.path;
 +        }
 +    }
 +    else
 +    {
 +        if (!props.hasOwnProperty("path"))
 +            props["path"] = "data:";
 +        if (!props.hasOwnProperty("name"))
 +            props["name"] =  decodeURIComponent(props["encodedContent"]).substr(0,200).replace(/\s*$/, "");
 +    }
 +
 +    return props;
 +};
 +
 +const reSplitFile = /^([^:]*):\/{2,3}([^\/]*)(.*?)([^\/]*?)($|\?.*)/;
 +Url.splitURLTrue = function(url)
 +{
 +    var m = reSplitFile.exec(url);
 +    if (!m)
 +        return {name: url, path: url};
 +    else if (m[4] == "" && m[5] == "")
 +        return {protocol: m[1], domain: m[2], path: m[3], name: m[3] != "/" ? m[3] : m[2]};
 +    else
 +        return {protocol: m[1], domain: m[2], path: m[2]+m[3], name: m[4]+m[5]};
 +};
 +
 +Url.getFileExtension = function(url)
 +{
 +    if (!url)
 +        return null;
 +
 +    // Remove query string from the URL if any.
 +    var queryString = url.indexOf("?");
 +    if (queryString != -1)
 +        url = url.substr(0, queryString);
 +
 +    // Now get the file extension.
 +    var lastDot = url.lastIndexOf(".");
 +    return url.substr(lastDot+1);
 +};
 +
 +Url.isSystemURL = function(url)
 +{
 +    if (!url) return true;
 +    if (url.length == 0) return true;
 +    if (url[0] == "h") return false;
 +    if (url.substr(0, 9) == "resource:")
 +        return true;
 +    else if (url.substr(0, 16) == "chrome://firebug")
 +        return true;
 +    else if (url.substr(0, 6) == "about:")
 +        return true;
 +    else
 +        return false;
 +};
 +
 +Url.isSystemPage = function(win)
 +{
 +    try
 +    {
 +        var doc = win.document;
 +        if (!doc)
 +            return false;
 +
 +        // Detect pages for pretty printed XML
 +        if ((doc.styleSheets.length && doc.styleSheets[0].href
 +                == "chrome://global/content/xml/XMLPrettyPrint.css")
 +            || (doc.styleSheets.length > 1 && doc.styleSheets[1].href
 +                == "chrome://browser/skin/feeds/subscribe.css"))
 +            return true;
 +
 +        return Url.isSystemURL(win.location.href);
 +    }
 +    catch (exc)
 +    {
 +        // Sometimes documents just aren't ready to be manipulated here, but don't let that
 +        // gum up the works
 +        FBTrace.sysout("Url.isSystemPage; EXCEPTION document not ready?: " + exc);
 +        return false;
 +    }
 +};
 +
 +Url.isSystemStyleSheet = function(sheet)
 +{
 +    var href = sheet && sheet.href;
 +    return href && Url.isSystemURL(href);
 +};
 +
 +Url.getURIHost = function(uri)
 +{
 +    try
 +    {
 +        if (uri)
 +            return uri.host;
 +        else
 +            return "";
 +    }
 +    catch (exc)
 +    {
 +        return "";
 +    }
 +};
 +
 +Url.isLocalURL = function(url)
 +{
 +    if (url.substr(0, 5) == "file:")
 +        return true;
 +    else if (url.substr(0, 8) == "wyciwyg:")
 +        return true;
 +    else
 +        return false;
 +};
 +
 +Url.isDataURL = function(url)
 +{
 +    return (url && url.substr(0,5) == "data:");
 +};
 +
 +Url.getLocalPath = function(url)
 +{
 +    if (this.isLocalURL(url))
 +    {
 +        var fileHandler = ioService.getProtocolHandler("file")
 +            .QueryInterface(Ci.nsIFileProtocolHandler);
 +        var file = fileHandler.getFileFromURLSpec(url);
 +        return file.path;
 +    }
 +};
 +
 +/**
 + * Mozilla URI from non-web URL
 + * @param URL
 + * @returns undefined or nsIURI
 + */
 +Url.getLocalSystemURI = function(url)
 +{
 +    try
 +    {
 +        var uri = ioService.newURI(url, null, null);
 +        if (uri.schemeIs("resource"))
 +        {
 +            var ph = ioService.getProtocolHandler("resource")
 +                .QueryInterface(Ci.nsIResProtocolHandler);
 +            var abspath = ph.getSubstitution(uri.host);
 +            uri = ioService.newURI(uri.path.substr(1), null, abspath);
 +        }
 +        while (uri.schemeIs("chrome"))
 +        {
 +            var chromeRegistry = Cc["@mozilla.org/chrome/chrome-registry;1"]
 +                .getService(Ci.nsIChromeRegistry);
 +            uri = chromeRegistry.convertChromeURL(uri);
 +        }
 +        return uri;
 +    }
 +    catch(exc)
 +    {
 +        if (FBTrace.DBG_ERRORS)
 +            FBTrace.sysout("getLocalSystemURI failed for "+url);
 +    }
 +};
 +
 +/*
 + * Mozilla native path for local URL
 + */
 +Url.getLocalOrSystemPath = function(url, allowDirectories)
 +{
 +    var uri = Url.getLocalSystemURI(url);
 +    if (uri instanceof Ci.nsIFileURL)
 +    {
 +        var file = uri.file;
 +        if (allowDirectories)
 +            return file && file.path;
 +        else
 +            return file && !file.isDirectory() && file.path;
 +    }
 +};
 +
 +Url.getLocalOrSystemFile = function(url)
 +{
 +    var uri = Url.getLocalSystemURI(url);
 +    if (uri instanceof Ci.nsIFileURL)
 +        return uri.file;
 +};
 +
 +Url.getURLFromLocalFile = function(file)
 +{
 +    var fileHandler = ioService.getProtocolHandler("file")
 +        .QueryInterface(Ci.nsIFileProtocolHandler);
 +    var URL = fileHandler.getURLSpecFromFile(file);
 +    return URL;
 +};
 +
 +Url.getDataURLForContent = function(content, url)
 +{
 +    // data:text/javascript;fileName=x%2Cy.js;baseLineNumber=10,<the-url-encoded-data>
 +    var uri = "data:text/html;";
 +    uri += "fileName="+encodeURIComponent(url)+ ",";
 +    uri += encodeURIComponent(content);
 +    return uri;
 +};
 +
 +Url.getDomain = function(url)
 +{
 +    var m = /[^:]+:\/{1,3}([^\/]+)/.exec(url);
 +    return m ? m[1] : "";
 +};
 +
 +Url.getURLPath = function(url)
 +{
 +    var m = /[^:]+:\/{1,3}[^\/]+(\/.*?)$/.exec(url);
 +    return m ? m[1] : "";
 +};
 +
 +Url.getPrettyDomain = function(url)
 +{
 +    var m = /[^:]+:\/{1,3}(www\.)?([^\/]+)/.exec(url);
 +    return m ? m[2] : "";
 +};
 +
 +/**
 + * Returns the base URL for a given window
 + * @param {Object} win DOM window
 + * @returns {String} Base URL
 + */
 +Url.getBaseURL = function(win)
 +{
 +    if (!win)
 +        return;
 +
 +    var base = win.document.getElementsByTagName("base").item(0);
 +    return base ? base.href : win.location.href;
 +};
 +
 +/**
 + * Returns true if the URL is absolute otherwise false, see the following
 + * examples:
 + *
 + * 1) http://example.com -> true
 + * 2) //myserver/index.html -> true
 + * 3) index.html -> false
 + * 4) /index.html -> false
 + *
 + * @param {String} URL
 + * @returns {Boolean} True if the URL is absolute.
 + */
 +Url.isAbsoluteUrl = function(url)
 +{
 +    return (/^(?:[a-z]+:)?\/\//i.test(url))
 +}
 +
 +Url.absoluteURL = function(url, baseURL)
 +{
 +    return Url.absoluteURLWithDots(url, baseURL).replace(/\/\.\//g, "/");
 +};
 +
 +Url.absoluteURLWithDots = function(url, baseURL)
 +{
 +    // Should implement http://www.apps.ietf.org/rfc/rfc3986.html#sec-5
 +    // or use the newURI approach described in issue 3110.
 +    // See tests/content/lib/absoluteURLs.js
 +
 +    if (url.length === 0)
 +        return baseURL;
 +
 +    var R_query_index = url.indexOf("?");
 +    var R_head = url;
 +    if (R_query_index !== -1)
 +        R_head = url.substr(0, R_query_index);
 +
 +    if (url.indexOf(":") !== -1)
 +        return url;
 +
 +    var reURL = /(([^:]+:)\/{1,2}[^\/]*)(.*?)$/;
 +    var m_url = reURL.exec(R_head);
 +    if (m_url)
 +        return url;
 +
 +    var B_query_index = baseURL.indexOf("?");
 +    var B_head = baseURL;
 +    if (B_query_index !== -1)
 +        B_head = baseURL.substr(0, B_query_index);
 +
 +    if (url[0] === "?")   // cases where R.path is empty.
 +        return B_head + url;
 +    if  (url[0] === "#")
 +        return baseURL.split("#")[0]+url;
 +
 +    var m = reURL.exec(B_head);
 +    if (!m)
 +        return "";
 +
 +    var head = m[1];
 +    var tail = m[3];
 +    if (url.substr(0, 2) == "//")
 +    {
 +        return m[2] + url;
 +    }
 +    else if (url[0] == "/")
 +    {
 +        return head + url;
 +    }
 +    else if (tail[tail.length-1] == "/")
 +    {
 +        return B_head + url;
 +    }
 +    else
 +    {
 +        var parts = tail.split("/");
 +        return head + parts.slice(0, parts.length-1).join("/") + "/" + url;
 +    }
 +};
 +
 +/**
 + * xxxHonza: This gets called a lot, any performance improvement welcome.
 + */
 +Url.normalizeURL = function(url)
 +{
 +    if (!url)
 +        return "";
 +
 +    // Guard against monsters.
 +    if (url.length > 255)
 +        return url;
 +
 +    // Normalize path traversals (a/b/../c -> a/c).
 +    while (url.indexOf("/../") !== -1 && url[0] != "/")
-         url = url.replace(/[^\/]+\/\.\.\//g, "");
++        url = url.replace(/[^\/]+\/+\.\.\//g, "");
 +
 +    // Issue 1496, avoid #
 +    url = url.replace(/#.*/, "");
 +
 +    // For script tags inserted dynamically sometimes the script.fileName is bogus
 +    if (url.indexOf("->") !== -1)
 +        url = url.replace(/[^\s]*\s->\s/, "");
 +
 +    if (url.startsWith("chrome:"))
 +    {
 +        var m = /^chrome:\/\/([^\/]*)\/(.*?)$/.exec(url);
 +        if (m)
 +        {
 +            url = "chrome://" + m[1].toLowerCase() + "/" + m[2];
 +        }
 +    }
 +    return url;
 +};
 +
 +Url.denormalizeURL = function(url)
 +{
 +    return url.replace(/file:\/\/\//g, "file:/");
 +};
 +
 +// ********************************************************************************************* //
 +
 +Url.parseURLParams = function(url)
 +{
 +    var q = url ? url.indexOf("?") : -1;
 +    if (q == -1)
 +        return [];
 +
 +    var search = url.substr(q+1);
 +    var h = search.lastIndexOf("#");
 +    if (h != -1)
 +        search = search.substr(0, h);
 +
 +    if (!search)
 +        return [];
 +
 +    return Url.parseURLEncodedText(search);
 +};
 +
 +Url.parseURLEncodedText = function(text, noLimit)
 +{
 +    const maxValueLength = 25000;
 +
 +    var params = [];
 +
 +    // In case the text is empty just return the empty parameters
 +    if (text == "")
 +        return params;
 +
 +    // Unescape '+' characters that are used to encode a space.
 +    // See section 2.2.in RFC 3986: http://www.ietf.org/rfc/rfc3986.txt
 +    text = text.replace(/\+/g, " ");
 +
 +    // Unescape '&' character
 +    text = Str.unescapeForURL(text);
 +
 +    function decodeText(text)
 +    {
 +        try
 +        {
 +            return decodeURIComponent(text);
 +        }
 +        catch (e)
 +        {
 +            return decodeURIComponent(unescape(text));
 +        }
 +    }
 +
 +    var args = text.split("&");
 +    for (var i = 0; i < args.length; ++i)
 +    {
 +        try
 +        {
 +            var index = args[i].indexOf("=");
 +            if (index != -1)
 +            {
 +                var paramName = args[i].substring(0, index);
 +                var paramValue = args[i].substring(index + 1);
 +
 +                if (paramValue.length > maxValueLength && !noLimit)
 +                    paramValue = Locale.$STR("LargeData");
 +
 +                params.push({name: decodeText(paramName), value: decodeText(paramValue)});
 +            }
 +            else
 +            {
 +                var paramName = args[i];
 +                params.push({name: decodeText(paramName), value: ""});
 +            }
 +        }
 +        catch (e)
 +        {
 +            if (FBTrace.DBG_ERRORS)
 +            {
 +                FBTrace.sysout("parseURLEncodedText EXCEPTION ", e);
 +                FBTrace.sysout("parseURLEncodedText EXCEPTION URI", args[i]);
 +            }
 +        }
 +    }
 +
 +    if (Options.get("netSortPostParameters"))
 +        params.sort((a, b) => { return a.name <= b.name ? -1 : 1; });
 +
 +    return params;
 +};
 +
 +Url.reEncodeURL = function(file, text, noLimit)
 +{
 +    var lines = text.split("\n");
 +    var params = Url.parseURLEncodedText(lines[lines.length-1], noLimit);
 +
 +    var args = [];
 +    for (var i = 0; i < params.length; ++i)
 +        args.push(encodeURIComponent(params[i].name)+"="+encodeURIComponent(params[i].value));
 +
 +    var url = file.href;
 +    url += (url.indexOf("?") == -1 ? "?" : "&") + args.join("&");
 +
 +    return url;
 +};
 +
 +/**
 + * Extracts the URL from a CSS URL definition.
 + * Example: url(../path/to/file) => ../path/to/file
 + * @param {String} url CSS URL definition
 + * @returns {String} Extracted URL
 + */
 +Url.extractFromCSS = function(url)
 +{
 +    return url.replace(/^url\(["']?(.*?)["']?\)$/, "$1");
 +};
 +
 +Url.makeURI = function(urlString)
 +{
 +    try
 +    {
 +        if (urlString)
 +            return ioService.newURI(urlString, null, null);
 +    }
 +    catch (exc)
 +    {
 +        //var explain = {message: "Firebug.lib.makeURI FAILS", url: urlString, exception: exc};
 +        // todo convert explain to json and then to data url
 +        if (FBTrace.DBG_ERRORS)
 +            FBTrace.sysout("makeURI FAILS for \""+urlString+"\" ", exc);
 +
 +        return false;
 +    }
 +};
 +
 +/**
 + * Converts resource: to file: Url.
 + * @param {String} resourceURL
 + */
 +Url.resourceToFile = function(resourceURL)
 +{
 +    var resHandler = ioService.getProtocolHandler("resource")
 +        .QueryInterface(Ci.nsIResProtocolHandler);
 +
 +    var justURL = resourceURL.split("resource://")[1];
 +    var split = justURL.split("/");
 +    var sub = split.shift();
 +
 +    var path = resHandler.getSubstitution(sub).spec;
 +    return path + split.join("/");
 +};
 +
 +// ********************************************************************************************* //
 +// Registration
 +
 +return Url;
 +
 +// ********************************************************************************************* //
 +});
diff --cc content/firebug/net/netCacheReader.js
index f63e155,0000000..f246454
mode 100644,000000..100644
--- a/content/firebug/net/netCacheReader.js
+++ b/content/firebug/net/netCacheReader.js
@@@ -1,379 -1,0 +1,387 @@@
 +/* See license.txt for terms of usage */
 +
 +define([
 +    "firebug/firebug",
 +    "firebug/chrome/module",
 +    "firebug/lib/object",
 +    "firebug/lib/locale",
 +    "firebug/lib/http",
 +    "firebug/lib/trace",
 +    "firebug/lib/dom",
 +    "firebug/lib/css",
 +    "firebug/lib/url",
 +    "firebug/net/netMonitor",
 +    "firebug/net/netUtils",
 +    "firebug/lib/domplate",
 +],
 +function(Firebug, Module, Obj, Locale, Http, FBTrace, Dom, Css, Url, NetMonitor, NetUtils, Domplate) {
 +
 +"use strict"
 +
 +// ********************************************************************************************* //
 +// Constants
 +
 +var Cc = Components.classes;
 +var Ci = Components.interfaces;
 +var Cu = Components.utils;
 +
 +var CacheService = Cc["@mozilla.org/network/cache-service;1"];
 +
 +// Firefox 32 introduces new cache service API.
 +// https://developer.mozilla.org/en-US/docs/HTTP_Cache
 +var CacheStorageService = Cc["@mozilla.org/netwerk/cache-storage-service;1"];
 +
 +var cacheSession = null;
 +var autoFetchDelay = 1000;
 +
 +var TraceError = FBTrace.toError();
 +var Trace = FBTrace.to("DBG_NETCACHEREADER");
 +
 +// Concatenated the interface string as workaround, so we don't get a warning from the AMO
 +// verification parser.
 +// The old interface is still needed to support Firefox < 32.
 +var oldICache = Ci["ns" + "ICache"];
 +
 +// ********************************************************************************************* //
 +// Domplate Templates
 +
 +var {TABLE, TBODY} = Domplate;
 +
 +// Used to generate basic structure of the 'Cache' tab that is available within request
 +// info body (visible when a request is expanded in the Net panel).
 +var cacheBodyTag =
 +    TABLE({"class": "netInfoCacheTable", cellpadding: 0, cellspacing: 0, "role": "presentation"},
 +        TBODY({"role": "list", "aria-label": Locale.$STR("Cache")})
 +    );
 +
 +// ********************************************************************************************* //
 +// Model implementation
 +
 +/**
 + * @module Responsible for fetching given URL entry from the browser cache. The Net panel
 + * displays such info for requests that are stored in the cache.
 + */
 +var NetCacheReader = Obj.extend(Module,
 +/** @lends NetCacheReader */
 +{
 +    dispatchName: "netCacheReader",
 +
 +    // Set to true if cache-data should be fetched automatically.
 +    // It's set to true by default since the Net panel needs to display
 +    // file size (coming from the cache) for all requests immediately
 +    // (see issue 6837).
 +    // The cache descriptor was previously fetched asynchronously when the
 +    // user expanded a requests row (see issue 6385), but his problem
 +    // isn't reproducible any more.
 +    autoFetch: true,
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // Initialization
 +
 +    initialize: function()
 +    {
 +        Module.initialize.apply(this, arguments);
 +
 +        // Register a listener so, we can create a custom info tab within request info body.
 +        NetMonitor.NetInfoBody.addListener(this);
 +    },
 +
 +    shutdown: function()
 +    {
 +        Module.shutdown.apply(this, arguments);
 +
 +        NetMonitor.NetInfoBody.removeListener(this);
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // TabView Listener
 +
 +    initTabBody: function(infoBox, file)
 +    {
 +        if (!file.cacheEntryRequested)
 +            return;
 +
 +        // This is the way how templates can access the current context.
 +        var panel = Firebug.getElementPanel(infoBox);
 +        var context = panel.context;
 +
 +        // Create a custom 'Cache' tab.
 +        NetMonitor.NetInfoBody.appendTab(infoBox, "Cache", Locale.$STR("Cache"));
 +
 +        // Fetch data from the cache.
 +        this.getCacheEntry(file, context.netProgress);
 +    },
 +
 +    updateTabBody: function(infoBox, file, context)
 +    {
 +        // If the file is not loaded yet or the cache-entry is not available, bail out.
 +        if (!file.loaded || !file.cacheEntry)
 +            return;
 +
 +        var tab = infoBox.selectedTab;
 +        var tabBody = infoBox.getElementsByClassName("netInfoCacheText").item(0);
 +        if (!Css.hasClass(tab, "netInfoCacheTab") || tabBody.updated)
 +            return;
 +
 +        // The UI update should happen only once so, set this flag.
 +        tabBody.updated = true;
 +
 +        // Render basic body structure (table).
 +        cacheBodyTag.replace({}, tabBody);
 +
 +        // Render cache information in the UI.
 +        NetMonitor.NetInfoBody.insertHeaderRows(tabBody, file.cacheEntry, "Cache");
 +    },
 +
 +    updateRequestTabBody: function(context, file)
 +    {
 +        var panel = context.getPanel("net");
 +        var row = file.row;
 +        if (!row)
 +            return;
 +
 +        // If the row is already closed, bail out.
 +        if (!Css.hasClass(row, "opened"))
 +            return;
 +
 +        // Update the cache info body.
 +        var infoRow = row.nextSibling;
 +        var netInfoBox = infoRow.getElementsByClassName("netInfoBody").item(0);
 +        if (!netInfoBox)
 +            return;
 +
 +        this.updateTabBody(netInfoBox, file, context);
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +
 +    requestCacheEntry: function(file, netProgress)
 +    {
 +        // Bail out if the cache is disabled.
 +        if (!NetMonitor.BrowserCache.isEnabled())
 +            return;
 +
 +        // Don't request the cache entry twice.
 +        if (file.cacheEntryRequested)
 +            return;
 +
 +        // The actual request to the cache will be done as soon as the net panel entry
 +        // is expanded by the user. Reading cache during the page load can influence
 +        // the caching. See issue 6385.
 +        file.cacheEntryRequested = true;
 +
 +        // In case of auto-exporters (such as NetExport) we need to fetch the
 +        // cache entry automatically and not wait till the user touches the UI.
 +        if (this.autoFetch)
 +        {
 +            var listener = this.getCacheEntry.bind(this, file, netProgress);
 +            netProgress.context.setTimeout(listener, autoFetchDelay);
 +        }
 +    },
 +
 +    getCacheEntry: function(file, netProgress)
 +    {
 +        try
 +        {
 +            // Fetch data from the browser cache.
 +            if (CacheStorageService)
 +                fetchCacheEntryNew(file, netProgress);
 +            else
 +                fetchCacheEntry(file, netProgress);
 +        }
 +        catch (exc)
 +        {
 +            if (exc.name != "NS_ERROR_CACHE_KEY_NOT_FOUND")
 +                TraceError.sysout("netCacheReader.getCacheEntry; ERROR " + file.href, exc);
 +        }
 +    }
 +});
 +
 +// ********************************************************************************************* //
 +// Local Helpers
 +
 +function fetchCacheEntry(file, netProgress)
 +{
 +    if (file.cacheEntry)
 +        return;
 +
 +    Trace.sysout("netCacheReader.getCacheEntry; file.href: " + file.href);
 +
 +    // Initialize cache session.
 +    if (!cacheSession)
 +    {
 +        var cacheService = CacheService.getService(Ci.nsICacheService);
 +        cacheSession = cacheService.createSession("HTTP", oldICache.STORE_ANYWHERE, true);
 +        cacheSession.doomEntriesIfExpired = false;
 +    }
 +
 +    cacheSession.asyncOpenCacheEntry(file.href, oldICache.ACCESS_READ,
 +    {
 +        onCacheEntryAvailable: function(descriptor, accessGranted, status)
 +        {
 +            Trace.sysout("netCacheReader.onCacheEntryAvailable; file.href: " + file.href);
 +
 +            if (descriptor)
 +                onDescriptorAvailable(netProgress, file, descriptor);
 +
 +            getCachedHeaders(file);
 +        }
 +    });
 +}
 +
 +function fetchCacheEntryNew(file, netProgress)
 +{
 +    if (file.cacheEntry)
 +        return;
 +
 +    Trace.sysout("netCacheReader.getCacheEntry; file.href: " + file.href);
 +
 +    // Initialize cache session.
 +    if (!cacheSession)
 +    {
 +        var { LoadContextInfo } = Cu.import("resource://gre/modules/LoadContextInfo.jsm", {});
 +        var cacheService = CacheStorageService.getService(Ci.nsICacheStorageService);
 +        var defaultLoadContext = LoadContextInfo.default;
 +        var win = Http.getWindowForRequest(file.request);
 +        if (win)
 +        {
 +            let loadContext = win.QueryInterface(Ci.nsIInterfaceRequestor)
 +                .getInterface(Ci.nsIWebNavigation)
 +                .QueryInterface(Ci.nsILoadContext);
 +
 +            defaultLoadContext = LoadContextInfo.fromLoadContext(loadContext, false)
 +        }
 +
 +        cacheSession = cacheService.diskCacheStorage(defaultLoadContext, false);
 +    }
 +
 +    cacheSession.asyncOpenURI(Url.makeURI(file.href), "", Ci.nsICacheStorage.OPEN_NORMALLY,
 +    {
 +        onCacheEntryCheck: function (entry, appcache)
 +        {
 +            return Ci.nsICacheEntryOpenCallback.ENTRY_WANTED;
 +        },
 +
 +        onCacheEntryAvailable: function (descriptor, isnew, appcache, status)
 +        {
 +          Trace.sysout("netCacheReader.onCacheEntryAvailable; file.href: " + file.href);
 +
 +          if (descriptor)
 +              onDescriptorAvailable(netProgress, file, descriptor);
 +
 +          getCachedHeaders(file);
 +        }
 +      }
 +    );
 +}
 +
 +function onDescriptorAvailable(netProgress, file, descriptor)
 +{
 +    Trace.sysout("netCacheReader.onDescriptorAvailable; file.href: " + file.href, descriptor);
 +
++    // Avoid error message in the Console panel.
++    // See also: https://github.com/firebug/firebug/issues/8003
++    let descriptorDataSize = 0;
++    try {
++        descriptorDataSize = descriptor.dataSize;
++    } catch (err) {
++    }
++
 +    if (file.size <= 0)
-         file.size = descriptor.dataSize;
++        file.size = descriptorDataSize;
 +
 +    if (descriptor.lastModified && descriptor.lastFetched &&
 +        descriptor.lastModified < Math.floor(file.startTime/1000))
 +    {
 +        file.fromCache = true;
 +    }
 +
 +    file.cacheEntry =
 +    [
 +        {
 +            name: "Last Modified",
 +            value: NetUtils.getDateFromSeconds(descriptor.lastModified)
 +        },
 +        {
 +            name: "Last Fetched",
 +            value: NetUtils.getDateFromSeconds(descriptor.lastFetched)
 +        },
 +        {
 +            name: "Expires",
 +            value: NetUtils.getDateFromSeconds(descriptor.expirationTime)
 +        },
 +        {
 +            name: "Data Size",
-             value: descriptor.dataSize
++            value: descriptorDataSize
 +        },
 +        {
 +            name: "Fetch Count",
 +            value: descriptor.fetchCount
 +        }
 +    ];
 +
 +    if (descriptor.deviceID)
 +    {
 +        file.cacheEntry.push({
 +            name: "Device",
 +            value: descriptor.deviceID
 +        });
 +    }
 +
 +    try
 +    {
 +        // Get contentType from the cache.
 +        var value = descriptor.getMetaDataElement("response-head");
 +        var contentType = getContentTypeFromResponseHead(value);
 +        file.mimeType = NetUtils.getMimeType(contentType, file.href);
 +    }
 +    catch (e)
 +    {
 +        TraceError.sysout("netCacheReader.onCacheEntryAvailable; EXCEPTION " + e, e);
 +    }
 +
 +    descriptor.close();
 +    netProgress.update(file);
 +
 +    // Update UI (in case the request/file is currently expanded)
 +    NetCacheReader.updateRequestTabBody(netProgress.context, file);
 +}
 +
 +function getCachedHeaders(file)
 +{
 +    // Cached headers are important only if the request comes from the cache.
 +    if (!file.fromCache)
 +        return;
 +
 +    // The request is containing cached headers now. These will be also displayed
 +    // within the Net panel.
 +    var cache = {};
 +    NetUtils.getHttpHeaders(file.request, cache);
 +    file.cachedResponseHeaders = cache.responseHeaders;
 +}
 +
 +function getContentTypeFromResponseHead(value)
 +{
 +    var values = value.split("\r\n");
 +    for (var i=0; i<values.length; i++)
 +    {
 +        var option = values[i].split(": ");
 +        var headerName = option[0];
 +        if (headerName && headerName.toLowerCase() == "content-type")
 +            return option[1];
 +    }
 +}
 +
 +// ********************************************************************************************* //
 +// Registration
 +
 +// xxxHonza: expose the module through NetMonitor namespace to avoid cycle dependency problem.
 +// NetCacheReader module is used within NetProgress module, but can't be included there.
 +NetMonitor.NetCacheReader = NetCacheReader;
 +
 +Firebug.registerModule(NetCacheReader);
 +
 +return NetCacheReader;
 +
 +// ********************************************************************************************* //
 +});
diff --cc content/firebug/net/netProgress.js
index 2d7daab,0000000..576fa0b
mode 100644,000000..100644
--- a/content/firebug/net/netProgress.js
+++ b/content/firebug/net/netProgress.js
@@@ -1,1173 -1,0 +1,1175 @@@
 +/* See license.txt for terms of usage */
 +
 +define([
 +    "firebug/lib/object",
 +    "firebug/firebug",
 +    "firebug/lib/locale",
 +    "firebug/lib/events",
 +    "firebug/lib/url",
 +    "firebug/debugger/script/sourceLink",
 +    "firebug/lib/http",
 +    "firebug/lib/css",
 +    "firebug/chrome/window",
 +    "firebug/lib/string",
 +    "firebug/lib/array",
 +    "firebug/lib/options",
 +    "firebug/lib/system",
 +    "firebug/net/netUtils"
 +],
 +function(Obj, Firebug, Locale, Events, Url, SourceLink, Http, Css, Win, Str,
 +    Arr, Options, System, NetUtils) {
 +
 +// ********************************************************************************************* //
 +// Constants
 +
 +const Cc = Components.classes;
 +const Ci = Components.interfaces;
 +const Cr = Components.results;
 +
 +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +
 +const reIgnore = /about:|javascript:|resource:|chrome:|jar:/;
 +const reResponseStatus = /HTTP\/\d\.\d\s(\d+)\s(.*)/;
 +
 +var panelName = "net";
 +
 +// ********************************************************************************************* //
 +// Net Progress
 +
 +function NetProgress(context)
 +{
 +    if (FBTrace.DBG_NET)
 +        FBTrace.sysout("net.NetProgress.constructor; " +
 +            (context ? context.getName() : "NULL Context"));
 +
 +    this.context = context;
 +
 +    var panel = null;
 +    var queue = [];
 +
 +    this.post = function(handler, args)
 +    {
 +        if (panel)
 +        {
 +            var file = handler.apply(this, args);
 +            if (file)
 +            {
 +                panel.updateFile(file);
 +
 +                // If the panel isn't currently visible, make sure the limit is up to date.
 +                if (!panel.layoutInterval)
 +                    panel.updateLogLimit(Firebug.NetMonitor.maxQueueRequests);
 +
 +                return file;
 +            }
 +        }
 +        else
 +        {
 +            // The first page request is made before the initContext (known problem).
 +            queue.push(handler, args);
 +        }
 +    };
 +
 +    this.flush = function()
 +    {
 +        for (var i=0; i<queue.length; i+=2)
 +            this.post(queue[i], queue[i+1]);
 +
 +        queue = [];
 +    };
 +
 +    this.activate = function(activePanel)
 +    {
 +        this.panel = panel = activePanel;
 +        if (panel)
 +            this.flush();
 +    };
 +
 +    this.update = function(file)
 +    {
 +        if (panel)
 +            panel.updateFile(file);
 +    };
 +
 +    this.clear = function()
 +    {
 +        for (var i=0; this.files && i<this.files.length; i++)
 +            this.files[i].clear();
 +
 +        this.requests = [];
 +        this.files = [];
 +        this.phases = [];
 +        this.documents = [];
 +        this.windows = [];
 +        this.currentPhase = null;
 +
 +        queue = [];
 +    };
 +
 +    this.clear();
 +}
 +
 +NetProgress.prototype =
 +{
 +    dispatchName: "netProgress",
 +    panel: null,
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +
 +    requestNumber: 1,
 +
 +    openingFile: function openingFile(request, win)
 +    {
 +        var file = this.getRequestFile(request, win);
 +        if (file)
 +        {
 +            // Parse URL params so, they are available for conditional breakpoints.
 +            file.urlParams = Url.parseURLParams(file.href);
 +            this.breakOnXHR(file);
 +        }
 +    },
 +
 +    startFile: function startFile(request, win)
 +    {
 +        // Called asynchronously since Fx17, so can't be used for Break on XHR,
 +        // since JS stack is not available at the moment.
 +        // See https://bugzilla.mozilla.org/show_bug.cgi?id=800799
 +    },
 +
 +    requestedHeaderFile: function requestedHeaderFile(request, time, win, xhr, extraStringData)
 +    {
 +        var file = this.getRequestFile(request);
 +        if (file)
 +        {
 +            logTime(file, "requestedHeaderFile", time);
 +
 +            file.requestHeadersText = extraStringData;
 +
 +            this.requestedFile(request, time, win, xhr);
 +
 +            Events.dispatch(Firebug.NetMonitor.fbListeners, "onRequest", [this.context, file]);
 +        }
 +    },
 +
 +    // Can be called from onModifyRequest (to catch request start even in case of BF cache) and also
 +    // from requestHeaderFile (activity observer)
 +    requestedFile: function requestedFile(request, time, win, xhr)
 +    {
 +        var file = this.getRequestFile(request, win);
 +        if (file)
 +        {
 +            logTime(file, "requestedFile", time);
 +
 +            if (FBTrace.DBG_NET_EVENTS)
 +                FBTrace.sysout("net.events.requestedFile +0 " + getPrintableTime() + ", " +
 +                    request.URI.path, file);
 +
 +            // For cached image files, we may never hear another peep from any observers
 +            // after this point, so we have to assume that the file is cached and loaded
 +            // until we get a respondedFile call later
 +            file.startTime = file.endTime = time;
 +            file.resolvingTime = time;
 +            file.connectingTime = time;
 +            file.connectedTime = time;
 +            file.sendingTime = time;
 +            file.waitingForTime = time;
 +            file.respondedTime = time;
 +            file.isXHR = xhr;
 +            file.isBackground = request.loadFlags & Ci.nsIRequest.LOAD_BACKGROUND;
 +            file.method = request.requestMethod;
 +
 +            if (!Ci.nsIHttpActivityDistributor)
 +                NetUtils.getPostText(file, this.context);
 +
 +            this.extendPhase(file);
 +
 +            return file;
 +        }
 +        else
 +        {
 +            if (FBTrace.DBG_NET)
 +                FBTrace.sysout("net.requestedFile no file for request=");
 +        }
 +    },
 +
 +    breakOnXHR: function breakOnXHR(file)
 +    {
 +        var halt = false;
 +        var conditionIsFalse = false;
 +
 +        // If there is an enabled breakpoint with condition:
 +        // 1) break if the condition is evaluated to true.
 +        var breakpoints = this.context.netProgress.breakpoints;
 +        var bp = breakpoints ? breakpoints.findBreakpoint(file.getFileURL()) : null;
 +        if (bp && bp.checked)
 +        {
 +            halt = true;
 +            if (bp.condition)
 +            {
 +                halt = bp.evaluateCondition(this.context, file);
 +                conditionIsFalse = !halt;
 +            }
 +        }
 +
 +        // 2) If break on XHR flag is set and there is no condition evaluated to false,
 +        // break with "break on next" breaking cause (this new breaking cause can override
 +        // an existing one that is set when evaluating a breakpoint condition).
 +        if (this.context.breakOnXHR && !conditionIsFalse)
 +        {
 +            this.context.breakingCause = {
 +                title: Locale.$STR("net.Break On XHR"),
 +                message: Str.cropString(file.href, 200),
 +                copyAction: Obj.bindFixed(System.copyToClipboard, System, file.href)
 +            };
 +
 +            halt = true;
 +        }
 +
 +        // Ignore if there is no reason to break.
 +        if (!halt)
 +            return;
 +
 +        // Even if the execution was stopped at breakpoint reset the global
 +        // breakOnXHR flag.
 +        this.context.breakOnXHR = false;
 +
 +        Firebug.Breakpoint.breakNow(this.context.getPanel(panelName, true));
 +    },
 +
 +    respondedHeaderFile: function respondedHeaderFile(request, time, extraStringData)
 +    {
 +        var file = this.getRequestFile(request);
 +        if (file)
 +        {
 +            logTime(file, "respondedHeaderFile", time);
 +
 +            file.responseHeadersText = extraStringData;
 +        }
 +    },
 +
 +    bodySentFile: function bodySentFile(request, time)
 +    {
 +        var file = this.getRequestFile(request);
 +        if (file)
 +        {
 +            logTime(file, "bodySentFile", time);
 +
 +            NetUtils.getPostText(file, this.context);
 +        }
 +    },
 +
 +    responseStartedFile: function responseStartedFile(request, time)
 +    {
 +        var file = this.getRequestFile(request);
 +        if (file)
 +        {
 +            logTime(file, "responseStartedFile", time);
 +
 +            if (!file.responseStarted)
 +            {
 +                file.respondedTime = time;
 +                file.responseStarted = true;
 +            }
 +
 +            file.endTime = time;
 +            return file;
 +        }
 +    },
 +
 +    respondedFile: function respondedFile(request, time, info)
 +    {
 +        Events.dispatch(Firebug.NetMonitor.fbListeners, "onExamineResponse", [this.context, request]);
 +
 +        var file = this.getRequestFile(request);
 +        if (file)
 +        {
 +            logTime(file, "respondedFile", time);
 +
 +            if (!Ci.nsIHttpActivityDistributor)
 +            {
 +                file.respondedTime = time;
 +                file.endTime = time;
 +
 +                if (request.contentLength >= 0)
 +                    file.size = request.contentLength;
 +            }
 +
 +            if (info)
 +            {
 +                if (info.responseStatus == 304)
 +                    file.fromCache = true;
 +                else if (!file.fromCache)
 +                    file.fromCache = false;
 +            }
 +
 +            // respondedFile can be executed asynchronously and getting headers now
 +            // could be too late. They could be already replaced by cached headers.
 +            if (info.responseHeaders)
 +                file.responseHeaders = info.responseHeaders;
 +
 +            // Get also request headers (and perhaps also responseHeaders, they won't be
 +            // replaced if already available).
 +            NetUtils.getHttpHeaders(request, file, this.context);
 +
 +            if (info)
 +            {
 +                file.responseStatus = info.responseStatus;
 +                file.responseStatusText = info.responseStatusText;
 +                file.postText = info.postText;
 +            }
 +
 +            file.aborted = false;
 +
 +            // Use ACTIVITY_SUBTYPE_RESPONSE_COMPLETE to get the info if possible.
 +            if (!Ci.nsIHttpActivityDistributor)
 +            {
 +                if (file.fromCache)
 +                    getCacheEntry(file, this);
 +            }
 +
 +            if (FBTrace.DBG_NET_EVENTS)
 +                FBTrace.sysout("net.events.respondedFile +" + (NetUtils.now() - file.startTime) + " " +
 +                     getPrintableTime() + ", " + request.URI.path, file);
 +
 +            // The ACTIVITY_SUBTYPE_TRANSACTION_CLOSE could come earlier.
 +            if (file.loaded)
 +                return;
 +
 +            this.endLoad(file);
 +
 +            // If there is a network error, log it into the Console panel.
 +            if (Options.get("showNetworkErrors") && Firebug.NetMonitor.NetRequestEntry.isError(file))
 +            {
 +                Firebug.Errors.increaseCount(this.context);
 +                var message = "NetworkError: " + Firebug.NetMonitor.NetRequestEntry.getStatus(file) + " - "+file.href;
 +                Firebug.Console.log(message, this.context, "error", null, true, file.getFileLink(message));
 +            }
 +
 +            Events.dispatch(Firebug.NetMonitor.fbListeners, "onResponse", [this.context, file]);
 +            return file;
 +        }
 +    },
 +
 +    respondedCacheFile: function respondedCacheFile(request, time, info)
 +    {
 +        Events.dispatch(Firebug.NetMonitor.fbListeners, "onExamineCachedResponse",
 +            [this.context, request]);
 +
 +        var file = this.getRequestFile(request, null, true);
 +        if (file)
 +        {
 +            logTime(file, "respondedCacheFile", time);
 +
 +            if (FBTrace.DBG_NET_EVENTS)
 +                FBTrace.sysout("net.events.respondedCacheFile +" + (NetUtils.now() - file.startTime) + " " +
 +                     getPrintableTime() + ", " + request.URI.path, file);
 +
 +            // on-examine-cache-response is using different timer, do not track response
 +            // times from the cache and use the proper waiting time.
 +            if (file.waitingStarted)
 +                time = file.waitingForTime;
 +
 +            if (!file.responseStarted)
 +            {
 +                file.respondedTime = time;
 +                file.responseStarted = true;
 +            }
 +
 +            file.endTime = time;
 +            file.fromBFCache = true;
 +            file.fromCache = true;
 +            file.aborted = false;
 +
 +            try
 +            {
 +                if (request instanceof Ci.nsIApplicationCacheChannel)
 +                {
 +                    if (request.loadedFromApplicationCache)
 +                        file.fromAppCache = true;
 +                }
 +            }
 +            catch (e)
 +            {
 +                if (FBTrace.DBG_ERRORS)
 +                    FBTrace.sysout("net.respondedCacheFile ERROR " + e, e);
 +            }
 +
 +            if (request.contentLength >= 0)
 +                file.size = request.contentLength;
 +
 +            NetUtils.getHttpHeaders(request, file, this.context);
 +
 +            if (info)
 +            {
 +                file.responseStatus = info.responseStatus;
 +                file.responseStatusText = info.responseStatusText;
 +                file.postText = info.postText;
 +            }
 +
 +            getCacheEntry(file, this);
 +
 +            this.endLoad(file);
 +
 +            Events.dispatch(Firebug.NetMonitor.fbListeners, "onCachedResponse",
 +                [this.context, file]);
 +
 +            return file;
 +        }
 +        else
 +        {
 +            if (FBTrace.DBG_NET)
 +                FBTrace.sysout("net.respondedCacheFile; NO FILE FOR " +
 +                    Http.safeGetRequestName(request));
 +        }
 +    },
 +
 +    waitingForFile: function waitingForFile(request, time)
 +    {
 +        var file = this.getRequestFile(request, null, true);
 +        if (file)
 +        {
 +            logTime(file, "waitingForFile", time);
 +
 +            if (!file.waitingStarted)
 +            {
 +                file.waitingForTime = time;
 +                file.waitingStarted = true;
 +            }
 +        }
 +
 +        // Don't update the UI now (optimization).
 +        return null;
 +    },
 +
 +    sendingFile: function sendingFile(request, time, size)
 +    {
 +        var file = this.getRequestFile(request, null, true);
 +        if (file)
 +        {
 +            logTime(file, "sendingFile", time);
 +
 +            // Remember when the send started.
 +            if (!file.sendStarted)
 +            {
 +                file.sendingTime = time;
 +                file.waitingForTime = time; // in case waiting-for would never came.
 +                file.sendStarted = true;
 +            }
 +
 +            // Catch 2.
 +            // It can happen that "connected" event sometimes comes after sending,
 +            // which doesn't make much sense (Firefox bug?)
 +            if (!file.connected)
 +            {
 +                file.connected = true;
 +                file.connectedTime = time;
 +            }
 +
 +            file.totalSent = size;
 +
 +            // Catch 1.
 +            // Request is sending so reset following flags. There are cases where
 +            // RESPONSE_COMPLETE and TRANSACTION_CLOSE came in the middle of
 +            // connetion initialization (resolving, connecting, connected).
 +            file.loaded = false;
 +            file.responseStarted = false;
 +
 +            if (FBTrace.DBG_NET_EVENTS)
 +                FBTrace.sysout("net.events.sendingFile +" + (NetUtils.now() - file.startTime) + " " +
 +                     getPrintableTime() + ", " + request.URI.path, file);
 +        }
 +
 +        // Don't update the UI now (optimization).
 +        return null;
 +    },
 +
 +    connectingFile: function connectingFile(request, time)
 +    {
 +        var file = this.getRequestFile(request, null, true);
 +
 +        logTime(file, "connectingFile", time);
 +
 +        // Resolving, connecting and connected can come after the file is loaded
 +        // (closedFile received). This happens if the response is coming from the
 +        // cache. Just ignore it.
 +        if (file && file.loaded)
 +            return null;
 +
 +        if (file && !file.connectStarted)
 +        {
 +            file.connectStarted = true;
 +            file.connectingTime = time;
 +            file.connectedTime = time; // in case connected-to would never came.
 +            file.sendingTime = time;  // in case sending-to would never came.
 +            file.waitingForTime = time; // in case waiting-for would never came.
 +        }
 +
 +        // Don't update the UI now (optimization).
 +        return null;
 +    },
 +
 +    connectedFile: function connectedFile(request, time)
 +    {
 +        var file = this.getRequestFile(request, null, true);
 +
 +        logTime(file, "connectedFile", time);
 +
 +        if (file && file.loaded)
 +            return null;
 +
 +        if (file && !file.connected)
 +        {
 +            file.connected = true;
 +            file.connectedTime = time;
 +            file.sendingTime = time;  // in case sending-to would never came.
 +            file.waitingForTime = time; // in case waiting-for would never came.
 +        }
 +
 +        // Don't update the UI now (optimization).
 +        return null;
 +    },
 +
 +    receivingFile: function receivingFile(request, time, size)
 +    {
 +        var file = this.getRequestFile(request, null, true);
 +        if (file)
 +        {
 +            logTime(file, "receivingFile", time);
 +
 +            if (FBTrace.DBG_NET_EVENTS)
 +                FBTrace.sysout("net.events.receivingFile +" + time + " " +
 +                    getPrintableTime() + ", " +
 +                    Str.formatSize(size) + " (" + size + "B), " +
 +                    request.URI.path, file);
 +
 +            file.endTime = time;
 +            file.totalReceived = size;
 +
 +            // Update phase's lastFinishedFile in case of long time downloads.
 +            // This forces the timeline to have proper extent.
 +            if (file.phase && file.phase.endTime < time)
 +                file.phase.lastFinishedFile = file;
 +
 +            // Force update UI.
 +            if (file.row && Css.hasClass(file.row, "opened"))
 +            {
 +                var netInfoBox = file.row.nextSibling.getElementsByClassName("netInfoBody").item(0);
 +                if (netInfoBox)
 +                {
 +                    netInfoBox.responsePresented = false;
 +                    netInfoBox.htmlPresented = false;
 +                }
 +            }
 +        }
 +
 +        return file;
 +    },
 +
 +    responseCompletedFile: function responseCompletedFile(request, time, responseSize)
 +    {
 +        var file = this.getRequestFile(request, null, true);
 +        if (file)
 +        {
 +            logTime(file, "responseCompletedFile", time);
 +
 +            if (FBTrace.DBG_NET_EVENTS)
 +                FBTrace.sysout("net.events.responseCompletedFile +" + time + " " +
 +                    getPrintableTime() + ", " + request.URI.path, file);
 +
 +            if (responseSize >= 0)
 +                file.size = responseSize;
 +
 +            // This was only a helper to show download progress.
 +            file.totalReceived = 0;
 +
 +            // The request is completed, get cache entry.
 +            getCacheEntry(file, this);
 +
 +            // Sometimes the HTTP-ON-EXAMINE-RESPONSE doesn't come.
 +            if (!file.loaded  && file.responseHeadersText)
 +            {
 +                var info = null;
 +                var m = file.responseHeadersText.match(reResponseStatus);
 +                if (m.length == 3)
 +                    info = {responseStatus: m[1], responseStatusText: m[2]};
 +                this.respondedFile(request, NetUtils.now(), info);
 +            }
 +
 +            this.updateIPInfo(request, file);
 +        }
 +
 +        return file;
 +    },
 +
 +    closedFile: function closedFile(request, time)
 +    {
 +        var file = this.getRequestFile(request, null, true);
 +        if (file)
 +        {
 +            logTime(file, "closedFile", time);
 +
 +            if (FBTrace.DBG_NET_EVENTS)
 +                FBTrace.sysout("net.events.closedFile +" + time + " " +
 +                    getPrintableTime() + ", " + request.URI.path);
 +
 +            // If the response never came, stop the loading and set time info.
 +            // In this case the request is marked with "Timeout" and the
 +            // respondedTime is set to the time when ACTIVITY_SUBTYPE_TRANSACTION_CLOSE
 +            // is received (after timeout).
 +            // If file.responseHeadersText is null the response didn't come.
 +            if (!file.loaded && !file.responseHeadersText)
 +            {
 +                if (FBTrace.DBG_NET_EVENTS)
 +                    FBTrace.sysout("net.events; TIMEOUT " + Http.safeGetRequestName(request));
 +
 +                this.endLoad(file);
 +
 +                file.aborted = true;
 +                if (!file.responseStatusText)
 +                    file.responseStatusText = "Aborted";
 +
 +                if (!file.responseStarted)
 +                {
 +                    file.respondedTime = time;
 +                    file.responseStarted = true;
 +                }
 +
 +                file.endTime = time;
 +            }
 +        }
 +
 +        return file;
 +    },
 +
 +    resolvingFile: function resolvingFile(request, time)
 +    {
 +        var file = this.getRequestFile(request, null, true);
 +
 +        if (file)
 +            logTime(file, "resolvingFile", time);
 +
 +        if (file && file.loaded)
 +            return null;
 +
 +        if (file && !file.resolveStarted)
 +        {
 +            file.resolveStarted = true;
 +            file.resolvingTime = time;
 +            file.connectingTime = time; // in case connecting would never came.
 +            file.connectedTime = time; // in case connected-to would never came.
 +            file.sendingTime = time;  // in case sending-to would never came.
 +            file.waitingForTime = time; // in case waiting-for would never came.
 +        }
 +
 +        return file;
 +    },
 +
 +    resolvedFile: function resolvedFile(request, time)
 +    {
 +        return null;
 +    },
 +
 +    stopFile: function stopFile(request, time, postText, responseText)
 +    {
 +        var file = this.getRequestFile(request, null, true);
 +        if (file)
 +        {
 +
 +            logTime(file, "stopFile", time);
 +
 +            if (FBTrace.DBG_NET_EVENTS)
 +                FBTrace.sysout("net.stopFile +" + (NetUtils.now() - file.startTime) + " " +
 +                    getPrintableTime() + ", " + request.URI.path, file);
 +
 +            // xxxHonza: spy should measure time using the activity observer too.
 +            // Don't ruin the endTime if it was already set.
 +            if (file.endTime == file.startTime)
 +                file.endTime = time;
 +
 +            file.postText = postText;
 +            file.responseText = responseText;
 +
 +            NetUtils.getHttpHeaders(request, file, this.context);
 +
 +            this.endLoad(file);
 +
 +            getCacheEntry(file, this);
 +        }
 +
 +        return file;
 +    },
 +
 +    abortFile: function abortFile(request, time, postText, responseText)
 +    {
 +        var file = this.getRequestFile(request, null, true);
 +        if (file)
 +        {
 +            logTime(file, "abortFile", time);
 +
 +            file.aborted = true;
 +            file.responseStatusText = "Aborted";
 +        }
 +
 +        return this.stopFile(request, time, postText, responseText);
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +    // IP Address and port number
 +
 +    updateIPInfo: function(request, file)
 +    {
 +        file.localAddress = Http.safeGetLocalAddress(request);
 +        file.localPort = Http.safeGetLocalPort(request);
 +        file.remoteAddress = Http.safeGetRemoteAddress(request);
 +        file.remotePort = Http.safeGetRemotePort(request);
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +
 +    windowPaint: function windowPaint(window, time)
 +    {
 +        if (FBTrace.DBG_NET)
 +            FBTrace.sysout("net.windowPaint +? " + getPrintableTime() + ", " +
 +                window.location.href, this.phases);
 +
 +        if (!this.phases.length)
 +            return;
 +
 +        var phase = this.context.netProgress.currentPhase;
 +        var timeStamp = phase.addTimeStamp(Locale.$STR("requestinfo.AfterPaint"), "netPaintBar");
 +        timeStamp.time = time;
 +
 +        // Return the first file, so the layout is updated. I can happen that the
 +        // onLoad event is the last one and the graph end-time must be recalculated.
 +        return phase.files[0];
 +    },
 +
 +    timeStamp: function timeStamp(window, time, label)
 +    {
 +        if (FBTrace.DBG_NET)
 +            FBTrace.sysout("net.timeStamp +? " + getPrintableTime() + ", " +
 +                window.location.href, this.phases);
 +
 +        if (!this.phases.length)
 +            return;
 +
 +        var phase = this.context.netProgress.currentPhase;
 +        var timeStamp = phase.addTimeStamp(label, "netTimeStampBar");
 +        timeStamp.time = time;
 +
 +        return phase.files[0];
 +    },
 +
 +    windowLoad: function windowLoad(window, time)
 +    {
 +        if (FBTrace.DBG_NET_EVENTS)
 +            FBTrace.sysout("net.windowLoad +? " + getPrintableTime() + ", " +
 +                window.location.href, this.phases);
 +
 +        if (!this.phases.length)
 +            return;
 +
 +        // Update all requests that belong to the first phase.
 +        var firstPhase = this.phases[0];
 +
 +        // Keep the information also in the phase for now, NetExport and other could need it.
 +        firstPhase.windowLoadTime = time;
 +
 +        var timeStamp = firstPhase.addTimeStamp(Locale.$STR("requestinfo.WindowLoad"), "netWindowLoadBar");
 +        timeStamp.time = time;
 +
 +        // Return the first file, so the layout is updated. I can happen that the
 +        // onLoad event is the last one and the graph end-time must be recalculated.
 +        return firstPhase.files[0];
 +    },
 +
 +    contentLoad: function contentLoad(window, time)
 +    {
 +        if (FBTrace.DBG_NET_EVENTS)
 +            FBTrace.sysout("net.contentLoad +? " + getPrintableTime() + ", " +
 +                window.location.href);
 +
 +        if (!this.phases.length)
 +            return;
 +
 +        // Update all requests that belong to the first phase.
 +        var firstPhase = this.phases[0];
 +
 +        // Keep the information also in the phase for now, NetExport and other could need it.
 +        firstPhase.contentLoadTime = time;
 +
 +        var timeStamp = firstPhase.addTimeStamp(Locale.$STR("requestinfo.ContentLoad"), "netContentLoadBar");
 +        timeStamp.time = time;
 +
 +        return null;
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +
 +    getRequestFile: function getRequestFile(request, win, noCreate)
 +    {
 +        var name = Http.safeGetRequestName(request);
 +        if (!name || reIgnore.exec(name))
 +            return null;
 +
 +        for (var i=0; i<this.files.length; i++)
 +        {
 +            var file = this.files[i];
 +            if (file.request == request)
 +                return file;
 +        }
 +
 +        if (noCreate)
 +            return null;
 +
 +        if (!win || Win.getRootWindow(win) != this.context.window)
 +            return;
 +
 +        var fileDoc = this.getRequestDocument(win);
 +        var isDocument = request.loadFlags & Ci.nsIChannel.LOAD_DOCUMENT_URI && fileDoc.parent;
 +        var doc = isDocument ? fileDoc.parent : fileDoc;
 +
 +        var file = doc.createFile(request);
 +        if (isDocument)
 +        {
 +            fileDoc.documentFile = file;
 +            file.ownDocument = fileDoc;
 +        }
 +
 +        file.request = request;
 +        file.requestNumber = this.requestNumber;
 +        this.requestNumber++;
 +        this.requests.push(request);
 +        this.files.push(file);
 +
 +        if (FBTrace.DBG_NET_EVENTS)
 +            FBTrace.sysout("net.createFile; " + Http.safeGetRequestName(request) +
 +                "(" + this.files.length + ")");
 +
 +        return file;
 +    },
 +
 +    getRequestDocument: function(win)
 +    {
 +        if (win)
 +        {
 +            var index = this.windows.indexOf(win);
 +            if (index == -1)
 +            {
 +                var doc = new NetDocument();
 +                if (win.parent != win)
 +                    doc.parent = this.getRequestDocument(win.parent);
 +
 +                //doc.level = NetUtils.getFrameLevel(win);
 +
 +                this.documents.push(doc);
 +                this.windows.push(win);
 +
 +                return doc;
 +            }
 +            else
 +                return this.documents[index];
 +        }
 +        else
 +            return this.documents[0];
 +    },
 +
 +    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 +
 +    endLoad: function(file)
 +    {
 +        if (FBTrace.DBG_NET_EVENTS)
 +            FBTrace.sysout("net.events.endLoad +" + (NetUtils.now() - file.startTime) + " " +
 +                getPrintableTime() + ", " + file.request.URI.path, file);
 +
 +        // Set file as loaded.
 +        file.loaded = true;
 +
 +        // Update last finished file of the associated phase.
 +        //xxxHonza: verify this.
 +        if (file.phase)
 +            file.phase.lastFinishedFile = file;
 +    },
 +
 +    extendPhase: function(file)
 +    {
 +        // Phase start can be measured since HTTP-ON-MODIFIED-REQUEST as
 +        // ACTIVITY_SUBTYPE_REQUEST_HEADER won't fire if the response comes from the BF cache.
 +        // If it's real HTTP request we need to start again since ACTIVITY_SUBTYPE_REQUEST_HEADER
 +        // has the proper time.
 +        // Order of ACTIVITY_SUBTYPE_REQUEST_HEADER can be different than order of
 +        // HTTP-ON-MODIFIED-REQUEST events, see issue 4535
 +        if (file.phase)
 +        {
 +            if (file.phase.files[0] == file)
 +                file.phase.startTime = file.startTime;
 +
 +            // Since the request order can be wrong (see above) we need to iterate all files
 +            // in this phase and find the one that actually executed first.
 +            // In some cases, the waterfall can display a request executed before another,
 +            // but started later.
 +            // See: https://bugzilla.mozilla.org/show_bug.cgi?id=664781
 +            var phase = file.phase;
 +            for (var i=0; i<phase.files.length; i++)
 +            {
 +                var file = phase.files[i];
 +                if (file.startTime > 0 && phase.startTime > file.startTime)
 +                    phase.startTime = file.startTime;
 +            }
 +            return;
 +        }
 +
 +        if (this.currentPhase)
 +        {
 +            // If the new request has been started within a "phaseInterval" after the
 +            // previous reqeust has been started, associate it with the current phase;
 +            // otherwise create a new phase.
 +            var phaseInterval = Options.get("netPhaseInterval");
 +            var lastStartTime = this.currentPhase.lastStartTime;
 +            if (phaseInterval > 0 && this.loaded && file.startTime - lastStartTime >= phaseInterval)
 +                this.startPhase(file);
 +            else
 +                this.currentPhase.addFile(file);
 +        }
 +        else
 +        {
 +            // If there is no phase yet, just create it.
 +            this.startPhase(file);
 +        }
 +    },
 +
 +    startPhase: function(file)
 +    {
 +        var phase = new NetPhase(file);
 +        phase.initial = !this.currentPhase;
 +
 +        file.breakLayout = true;
 +
 +        this.currentPhase = phase;
 +        this.phases.push(phase);
 +    },
 +};
 +
 +// ********************************************************************************************* //
 +// Time Logging
 +
 +function logTime(file, title, time)
 +{
 +    // xxxHonza: just for debugging purposes.
++    /*
 +    return;
 +
 +    if (!file._timings)
 +        file._timings = {counter: 0};
 +
 +    if (!file._timings.logs)
 +        file._timings.logs = [];
 +
 +    file._timings.logs.push({
 +        title: title,
 +        index: ++file._timings.counter,
 +        time: time
 +    });
++    */
 +}
 +
 +// ********************************************************************************************* //
 +
 +/**
 + * A Document is a helper object that represents a document (window) on the page.
 + * This object is created for main page document and for every embedded document (iframe)
 + * for which a request is made.
 + */
 +function NetDocument()
 +{
 +    this.id = 0;
 +    this.title = "";
 +}
 +
 +NetDocument.prototype =
 +{
 +    createFile: function(request)
 +    {
 +        return new NetFile(request.name, this);
 +    }
 +};
 +
 +// ********************************************************************************************* //
 +
 +/**
 + * A File is a helper object that represents a file for which a request is made.
 + * The document refers to it's parent document (NetDocument) through a member
 + * variable.
 + */
 +function NetFile(href, document)
 +{
 +    this.href = href;
 +    this.document = document;
 +}
 +
 +NetFile.prototype =
 +{
 +    status: 0,
 +    files: 0,
 +    loaded: false,
 +    fromCache: false,
 +    size: -1,
 +    expectedSize: -1,
 +    endTime: null,
 +    waitingForTime: null,
 +    connectingTime: null,
 +
 +    getFileLink: function(message)
 +    {
 +        // this.SourceLink = function(url, line, type, object, instance)
 +        var link = new SourceLink(this.href, null, "net", this.request);
 +        return link;
 +    },
 +
 +    getFileURL: function()
 +    {
 +        var index = this.href.indexOf("?");
 +        if (index < 0)
 +            return this.href;
 +
 +        return this.href.substring(0, index);
 +    },
 +
 +    clear: function()
 +    {
 +        // Remove all members to avoid circular references and memleaks.
 +        for (var name in this)
 +            delete this[name];
 +    }
 +};
 +
 +Firebug.NetFile = NetFile;
 +
 +// ********************************************************************************************* //
 +
 +/**
 + * A Phase is a helper object that groups requests made in the same time frame.
 + * In other words, if a new requests is started within a given time (specified
 + * by phaseInterval [ms]) - after previous request has been started -
 + * it automatically belongs to the same phase.
 + * If a request is started after this period, a new phase is created
 + * and this file becomes to be the first in that phase.
 + * The first phase is ended when the page finishes it's loading. Other phases
 + * might be started by additional XHR made by the page.
 + *
 + * All phases are stored within NetProgress.phases array.
 + *
 + * Phases are used to compute size of the graphical timeline. The timeline
 + * for each phase starts from the beginning of the graph.
 + */
 +function NetPhase(file)
 +{
 +    // Start time of the phase. Remains the same, even if the file
 +    // is removed from the log (due to a max limit of entries).
 +    // This ensures stability of the time line.
 +    this.startTime = file.startTime;
 +
 +    // The last finished request (file) in the phase.
 +    this.lastFinishedFile = null;
 +
 +    // Set to true if the phase needs to be updated in the UI.
 +    this.invalidPhase = null;
 +
 +    // List of files associated with this phase.
 +    this.files = [];
 +
 +    // List of paint events.
 +    this.windowPaints = [];
 +
 +    this.timeStamps = [];
 +
 +    this.addFile(file);
 +}
 +
 +NetPhase.prototype =
 +{
 +    addFile: function(file)
 +    {
 +        this.files.push(file);
 +        file.phase = this;
 +    },
 +
 +    removeFile: function removeFile(file)
 +    {
 +        Arr.remove(this.files, file);
 +
 +        // The file don't have a parent phase now.
 +        file.phase = null;
 +
 +        // If the last file has been removed, update the last file member.
 +        if (file == this.lastFinishedFile)
 +        {
 +            if (this.files.length == 0)
 +            {
 +                this.lastFinishedFile = null;
 +            }
 +            else
 +            {
 +                for (var i=0; i<this.files.length; i++)
 +                {
 +                    if (this.lastFinishedFile.endTime < this.files[i].endTime)
 +                        this.lastFinishedFile = this.files[i];
 +                }
 +            }
 +        }
 +    },
 +
 +    get lastStartTime()
 +    {
 +        return this.files[this.files.length - 1].startTime;
 +    },
 +
 +    get endTime()
 +    {
 +        var endTime = this.lastFinishedFile ? this.lastFinishedFile.endTime : null;
 +        if (this.timeStamps.length > 0)
 +        {
 +            var lastTimeStamp = this.timeStamps[this.timeStamps.length-1].time;
 +            endTime = (endTime > lastTimeStamp) ? endTime : lastTimeStamp;
 +        }
 +        return endTime;
 +    },
 +
 +    addTimeStamp: function(label, classes)
 +    {
 +        var timeStamp = {
 +            label: label,
 +            classes: classes
 +        };
 +
 +        this.timeStamps.push(timeStamp);
 +        return timeStamp;
 +    }
 +};
 +
 +// ********************************************************************************************* //
 +
 +function getCacheEntry(file, netProgress)
 +{
 +    // xxxHonza: dependency on NetCacheReader can't be used in this module
 +    // since it causes cycle dependency problem. So, use the module through
 +    // NetMonitor namespace.
 +    Firebug.NetMonitor.NetCacheReader.requestCacheEntry(file, netProgress);
 +}
 +
 +// ********************************************************************************************* //
 +// Helper for tracing
 +
 +function getPrintableTime()
 +{
 +    var date = new Date();
 +    return "(" + date.getSeconds() + ":" + date.getMilliseconds() + ")";
 +}
 +
 +// ********************************************************************************************* //
 +// Registration
 +
 +return NetProgress;
 +
 +// ********************************************************************************************* //
 +});
diff --cc install.rdf
index 5789e73,0000000..c17aa79
mode 100644,000000..100644
--- a/install.rdf
+++ b/install.rdf
@@@ -1,98 -1,0 +1,98 @@@
 +<?xml version="1.0" encoding="utf-8"?>
 +
 +<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 +     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
 +
 +  <Description about="urn:mozilla:install-manifest">
 +    <em:id>firebug at software.joehewitt.com</em:id>
-     <em:version>2.0.16</em:version>
++    <em:version>2.0.17</em:version>
 +    <em:type>2</em:type>
 +    <em:bootstrap>true</em:bootstrap>
 +
 +    <!-- Any suitably modern toolkit application -->
 +    <em:targetApplication>
 +      <Description>
 +        <em:id>toolkit at mozilla.org</em:id>
 +        <em:minVersion>30.0a1</em:minVersion>
-         <em:maxVersion>48.0</em:maxVersion>
++        <em:maxVersion>49.0</em:maxVersion>
 +      </Description>
 +    </em:targetApplication>
 +
 +    <!-- Firefox -->
 +    <em:targetApplication>
 +      <Description>
 +        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
 +        <em:minVersion>30.0a1</em:minVersion>
-         <em:maxVersion>48.0</em:maxVersion>
++        <em:maxVersion>49.0</em:maxVersion>
 +      </Description>
 +    </em:targetApplication>
 +
 +    <em:name>Firebug</em:name>
 +    <em:description>Web Development Evolved. Firebug is free and open source software distributed under the BSD License.</em:description>
 +    <em:creator>Joe Hewitt</em:creator>
 +    <em:contributor>John J. Barton (IBM Almaden)</em:contributor>
 +    <em:contributor>Jan Odvarko (Mozilla Corp.)</em:contributor>
 +    <em:contributor>Max Stepanov (Aptana Inc.)</em:contributor>
 +    <em:contributor>Rob Campbell (Mozilla Corp.)</em:contributor>
 +    <em:contributor>Hans Hillen (Paciello Group, Mozilla)</em:contributor>
 +    <em:contributor>Curtis Bartley (Mozilla Corp.)</em:contributor>
 +    <em:contributor>Mike Collins (IBM Almaden)</em:contributor>
 +    <em:contributor>Kevin Decker</em:contributor>
 +    <em:contributor>Mike Ratcliffe (Mozilla Corp.)</em:contributor>
 +    <em:contributor>Hernan Rodriguez Colmeiro</em:contributor>
 +    <em:contributor>Austin Andrews</em:contributor>
 +    <em:contributor>Christoph Dorn</em:contributor>
 +    <em:contributor>Steven Roussey (Illuminations for Developers)</em:contributor>
 +    <em:contributor>Sebastian Zartner</em:contributor>
 +    <em:contributor>Harutyun Amirjanyan</em:contributor>
 +    <em:contributor>Simon Lindholm</em:contributor>
 +    <em:contributor>Stampolidis Anastasios</em:contributor>
 +    <em:contributor>Joe Walker (Mozilla Corp.)</em:contributor>
 +    <em:contributor>Vladimir Zhuravlev</em:contributor>
 +    <em:contributor>Farshid Beheshti</em:contributor>
 +    <em:contributor>Leon Sorokin</em:contributor>
 +    <em:contributor>Florent Fayolle</em:contributor>
 +    <em:contributor>Hector Zhao</em:contributor>
 +    <em:contributor>Bharath Thiruveedula</em:contributor>
 +    <em:contributor>Nathan Mische</em:contributor>
 +    <em:contributor>Belakhdar Abdeldjalil</em:contributor>
 +    <em:contributor>Jakob Kaltenbrunner</em:contributor>
 +
 +    <em:iconURL>chrome://firebug/skin/firebugBig.png</em:iconURL>
 +    <em:homepageURL>http://www.getfirebug.com/</em:homepageURL>
 +
 +
 +    <em:translator>Leszek(teo)Zyczkowski (pl-PL)</em:translator>
 +    <em:translator>markh (nl)</em:translator>
 +    <em:translator>peter3 (sv-SE)</em:translator>
 +    <em:translator>AlleyKat (da-DK)</em:translator>
 +    <em:translator>Hector Zhao, lovelywcm (zh-CN)</em:translator>
 +    <em:translator>Lukas Kucharczyk, Michal Kec (cs-CZ)</em:translator>
 +    <em:translator>Team erweiterungen.de, ReinekeFux, Benedikt Langens, Sebastian Zartner (de-DE)</em:translator>
 +    <em:translator>l0stintranslation, gonzalopirobutirro, Luigi Grilli (it-IT)</em:translator>
 +    <em:translator>alexxed (ro-RO)</em:translator>
 +    <em:translator>Nicolas Martin, Franck Marcia (fr-FR)</em:translator>
 +    <em:translator>gLes (hu-HU)</em:translator>
 +    <em:translator>Xavi Ivars - Softcatala (ca)</em:translator>
 +    <em:translator>gezmen (tr-TR)</em:translator>
 +    <em:translator>eternoendless (es-AR)</em:translator>
 +    <em:translator>Dark Preacher (ru)</em:translator>
 +    <em:translator>Tiago Oliveira, Diego de Carvalho Zimmermann, Alexandre Rapaki (pt-BR)</em:translator>
 +    <em:translator>Juan Botias, Alvaro G. Vicario (es-ES)</em:translator>
 +    <em:translator>Andriy Zhouck (uk-UA)</em:translator>
 +    <em:translator>Hisateru Tanaka, k2jp (ja-JP)</em:translator>
 +    <em:translator>Mohsen Shadroo (fa-IR)</em:translator>
 +    <em:translator>Eduard Babayan (hy-AM)</em:translator>
 +    <em:translator>Helder Magalhaes (pt-PT)</em:translator>
 +    <em:translator>Tomaz Macus (sl-SI)</em:translator>
 +    <em:translator>Stoyan Stefanov, Alexander Shopov (bg)</em:translator>
 +    <em:translator>Kristjan Bjarni Guomundsson (is-IS)</em:translator>
 +    <em:translator>NGUYEN Manh Hung (vi-VN)</em:translator>
 +    <em:translator>Bwah (hr-HR)</em:translator>
 +    <em:translator>Sonickydon (el)</em:translator>
 +    <em:translator>David Gonzales (es)</em:translator>
 +    <em:translator>DakSrbija (sr)</em:translator>
 +    <em:translator>bootleq (zh-TW)</em:translator>
 +    <em:translator>Asier Iturralde Sarasola, Julen Irazoki Oteiza (eu)</em:translator>
 +  </Description>
 +</RDF>
diff --cc locale/en-US/multiprocess-notification.properties
index d7d6a87,0000000..13589b1
mode 100644,000000..100644
--- a/locale/en-US/multiprocess-notification.properties
+++ b/locale/en-US/multiprocess-notification.properties
@@@ -1,37 -1,0 +1,43 @@@
- # LOCALIZATION NOTE (multiprocess.description, multiprocess.learnMore, multiprocess.warning,
++# LOCALIZATION NOTE (multiprocess.description, multiprocess.description3, multiprocess.learnMore, multiprocess.warning,
 +# multiprocess.upgrade, multiprocess.disable, multiprocess.cancel):
 +# Label used in a notification panel that is displayed when the user clicks on Firebug start
 +# button in multiprocess Firefox browser (e10s enabled browser).
- multiprocess.description=The next version of Firebug will be integrated directly into the Firefox Developer Tools for increased performance, stability, and feature tracking of Firefox.  Integration means an updated Inspector, new Performance, Storage and Memory tools, all using the Firebug theme that you're familiar with, so it's easy to get started.
- multiprocess.learnMore=Learn more...
++multiprocess.description=The next version of Firebug has been integrated directly into the Firefox Developer Tools for increased performance and stability.
++multiprocess.description3=This change includes an updated Inspector and new Performance, Storage, and Memory tools, all using the Firebug theme you’re familiar with.
++multiprocess.learnMore=Learn more about the changes...
 +multiprocess.warning=Firebug 3 alpha is based on the built-in Firefox developer tools so Firebug 2 addons don't work just yet, however turning off e10s should only be a temporary measure since it brings performance, stability and security advantages.
 +multiprocess.upgrade=Upgrade and Restart
- multiprocess.disable=Disable e10s and Restart
++multiprocess.disable=Enable old Firebug and disable e10s (requires restart)
 +multiprocess.cancel=Cancel
 +
 +# LOCALIZATION NOTE (multiprocess.notAgain, multiprocess.description2,
 +# multiprocess.openDevTools, multiprocess.warning2): Label used in a new notification panel
 +# that is displayed when the user clicks on Firebug start button in multiprocess
 +# Firefox browser (e10s enabled browser).
 +multiprocess.description2=We've ported many Firebug features into built-in tools in order to support existing Firebug users so, go ahead and check it out!
- multiprocess.openDevTools=Open Firefox Developer Tools
++multiprocess.openDevTools=Don’t show this message again
 +multiprocess.warning2=Turning off e10s should only be a temporary measure since it brings performance, stability and security advantages.
 +multiprocess.notAgain=Do not display this message again
 +
 +# LOCALIZATION NOTE (aurora.description, aurora.description2, aurora.notnow, aurora.nothanks):
 +# Label used in a notification panel that is displayed when the user clicks on Firebug start
 +# button in Aurora (Firefox) channel.
 +aurora.description=Firebug 3 alpha is available for testing. With multiprocess Firefox (e10s) it will offer performance, stability and security advantages. It is based on the built-in Firefox developer tools so Firebug 2 addons don't work just yet.
 +aurora.description2=Do you want to try it out?
 +aurora.notnow=Not Now
 +aurora.nothanks=No Thanks
 +
 +# LOCALIZATION NOTE (firebug.upgradeFirebug, upgrade.tip.upgradeFirebug): A label used within
 +# the Start button menu. The action is used to upgrade Firebug to Firebug 3
 +upgrade.upgradeFirebug=Upgrade Firebug...
 +upgrade.tip.upgradeFirebug=Upgrade to Firebug 3 (for testers)
 +
 +# LOCALIZATION NOTE (upgrade.description, upgrade.description2):
 +# Label used in a notification panel that is displayed when the user wants to explicitly upgrade Firebug.
 +upgrade.description=Firebug 3 alpha is available for testing
 +upgrade.description2=Firebug 3 is based on the built-in Firefox developer tools so it works with the performance, stability and security advantages coming with multiprocess Firefox (also known as e10s), however Firebug 2 addons don't work with Firebug 3 yet.
++
++# LOCALIZATION NOTE (multiprocess.activateFirebugTheme):
++# Label used in a notification panel that is displayed when the user wants to explicitly upgrade Firebug.
++# The label belongs to a checkbox allowing to activate/deactivate Firebug theme for built-in DevTools
++multiprocess.activateFirebugTheme=Activate the Firebug theme

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/firebug.git



More information about the Pkg-mozext-commits mailing list