[Pkg-mozext-commits] [flashgot] 01/02: Imported Upstream version 1.5.6.10+dfsg

Michael Meskes meskes at moszumanska.debian.org
Wed Feb 25 09:24:13 UTC 2015


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

meskes pushed a commit to branch master
in repository flashgot.

commit b74e715a13ed72b30997669ca7cb6f6212329cbc
Author: Michael Meskes <meskes at debian.org>
Date:   Wed Feb 25 10:07:09 2015 +0100

    Imported Upstream version 1.5.6.10+dfsg
---
 chrome/flashgot.jar!/content/flashgot/DMS.js       |  67 ++-
 .../flashgot.jar!/content/flashgot/MediaSniffer.js |  18 +-
 chrome/flashgot.jar!/content/flashgot/Youtube.js   | 103 ++--
 .../flashgot.jar!/content/flashgot/YoutubeSwf.js   | 627 +++++++--------------
 chrome/flashgot.jar!/content/flashgot/about.xul    |   2 +-
 chrome/flashgot.jar!/content/flashgot/contents.rdf |   2 +-
 .../content/flashgot/flashgotGalleryBuilder.js     |   4 +-
 .../content/flashgot/flashgotOverlay.js            | 164 ++++--
 .../content/flashgot/flashgotOverlayFx.xul         |   2 +-
 .../content/flashgot/flashgotOverlayMoz.xul        |   2 +-
 .../locale/af-ZA/flashgot/flashgot.dtd             |   2 +-
 .../locale/be-BY/flashgot/flashgot.dtd             |   2 +-
 .../locale/bg-BG/flashgot/flashgot.dtd             |   2 +-
 .../locale/bn-IN/flashgot/flashgot.dtd             |   2 +-
 .../locale/ca-AD/flashgot/flashgot.dtd             |   2 +-
 .../locale/cs-CZ/flashgot/flashgot.dtd             |   2 +-
 .../locale/da-DK/flashgot/flashgot.dtd             |   2 +-
 .../flashgot.jar!/locale/da/flashgot/flashgot.dtd  |   2 +-
 .../flashgot.jar!/locale/de/flashgot/flashgot.dtd  |   2 +-
 .../locale/el-GR/flashgot/flashgot.dtd             |   2 +-
 .../flashgot.jar!/locale/el/flashgot/flashgot.dtd  |   2 +-
 .../locale/en-US/flashgot/flashgot.dtd             |   2 +-
 .../locale/es-AR/flashgot/flashgot.dtd             |   2 +-
 .../locale/es-CL/flashgot/flashgot.dtd             |   2 +-
 .../locale/es-ES/flashgot/flashgot.dtd             |   2 +-
 .../locale/et-EE/flashgot/flashgot.dtd             |   2 +-
 .../locale/eu-ES/flashgot/flashgot.dtd             |   2 +-
 .../flashgot.jar!/locale/eu/flashgot/flashgot.dtd  |   2 +-
 .../locale/fa-IR/flashgot/flashgot.dtd             |   2 +-
 .../locale/fi-FI/flashgot/flashgot.dtd             |   2 +-
 .../flashgot.jar!/locale/fi/flashgot/flashgot.dtd  |   2 +-
 .../flashgot.jar!/locale/fr/flashgot/flashgot.dtd  |   2 +-
 .../locale/gl-ES/flashgot/flashgot.dtd             |   2 +-
 .../locale/he-IL/flashgot/flashgot.dtd             |   2 +-
 .../flashgot.jar!/locale/he/flashgot/flashgot.dtd  |   2 +-
 .../locale/hi-IN/flashgot/flashgot.dtd             |   2 +-
 .../locale/hr-HR/flashgot/flashgot.dtd             |   2 +-
 .../flashgot.jar!/locale/hu/flashgot/flashgot.dtd  |   2 +-
 .../locale/hy-AM/flashgot/flashgot.dtd             |   2 +-
 .../locale/id-ID/flashgot/flashgot.dtd             |   2 +-
 .../locale/it-IT/flashgot/about.properties         |   2 +-
 .../locale/it-IT/flashgot/flashgot.dtd             |   2 +-
 .../flashgot.jar!/locale/it/flashgot/flashgot.dtd  |   2 +-
 .../locale/ja-JP/flashgot/flashgot.dtd             |   2 +-
 .../locale/ka-GE/flashgot/flashgot.dtd             |   2 +-
 .../locale/kk-KZ/flashgot/flashgot.dtd             |   2 +-
 .../locale/km-KH/flashgot/flashgot.dtd             |   2 +-
 .../locale/lt-LT/flashgot/flashgot.dtd             |   2 +-
 .../locale/mk-MK/flashgot/flashgot.dtd             |   2 +-
 .../locale/ml-IN/flashgot/flashgot.dtd             |   2 +-
 .../locale/mn-MN/flashgot/flashgot.dtd             |   2 +-
 .../locale/ms-MY/flashgot/flashgot.dtd             |   2 +-
 .../locale/nb-NO/flashgot/flashgot.dtd             |   2 +-
 .../flashgot.jar!/locale/nl/flashgot/flashgot.dtd  |   2 +-
 .../flashgot.jar!/locale/pl/flashgot/flashgot.dtd  |   2 +-
 .../locale/pt-BR/flashgot/flashgot.dtd             |   2 +-
 .../locale/pt-PT/flashgot/flashgot.dtd             |   2 +-
 .../locale/ro-RO/flashgot/flashgot.dtd             |   2 +-
 .../flashgot.jar!/locale/ru/flashgot/flashgot.dtd  |   2 +-
 .../locale/sk-SK/flashgot/flashgot.dtd             |   2 +-
 .../locale/sl-SI/flashgot/flashgot.dtd             |   2 +-
 .../locale/sq-AL/flashgot/flashgot.dtd             |   2 +-
 .../flashgot.jar!/locale/sr/flashgot/flashgot.dtd  |   2 +-
 .../locale/sv-SE/flashgot/flashgot.dtd             |   2 +-
 .../locale/th-TH/flashgot/flashgot.dtd             |   2 +-
 .../flashgot.jar!/locale/th/flashgot/flashgot.dtd  |   2 +-
 .../locale/tr-TR/flashgot/flashgot.dtd             |   2 +-
 .../flashgot.jar!/locale/tr/flashgot/flashgot.dtd  |   2 +-
 .../locale/uk-UA/flashgot/flashgot.dtd             |   2 +-
 .../flashgot.jar!/locale/uk/flashgot/flashgot.dtd  |   2 +-
 .../flashgot.jar!/locale/vi/flashgot/flashgot.dtd  |   2 +-
 .../locale/zh-CN/flashgot/flashgot.dtd             |   2 +-
 .../locale/zh-TW/flashgot/flashgot.dtd             |   2 +-
 components/flashgotService.js                      |   8 +-
 defaults/preferences/flashgot.js                   |  73 +--
 install.js                                         |   2 +-
 install.rdf                                        |  10 +-
 77 files changed, 523 insertions(+), 687 deletions(-)

diff --git a/chrome/flashgot.jar!/content/flashgot/DMS.js b/chrome/flashgot.jar!/content/flashgot/DMS.js
index 8888bda..ce8dbc0 100644
--- a/chrome/flashgot.jar!/content/flashgot/DMS.js
+++ b/chrome/flashgot.jar!/content/flashgot/DMS.js
@@ -802,13 +802,28 @@ FlashGotDMX.prototype.createJob = function(links, opType) {
       "  if which gnome-terminal >/dev/null 2>&1; then\n" +
       "    gnome-terminal -t " + title + " -x " + shell + " \"$0\" && exit\n" +
       "  fi\n" +
+      "  if which konsole >/dev/null 2>&1; then\n" +
+      "    konsole -T " + title + " -e " + shell + " \"$0\" && exit\n" +
+      "  fi\n" +
+      "  if which lxterminal >/dev/null 2>&1; then\n" +
+      "    lxterminal -t " + title + " -e " + shell + " \"$0\" && exit\n" +
+      "  fi\n" +
+      "  if which urxvt >/dev/null 2>&1; then\n" +
+      "    urxvt -title " + title + " -e " + shell + " \"$0\" && exit\n" +
+      "  fi\n" +
+      "  if which rxvt >/dev/null 2>&1; then\n" +
+      "    rxvt -title " + title + " -e " + shell + " \"$0\" && exit\n" +
+      "  fi\n" +
+      "  if which xfce4-terminal >/dev/null 2>&1; then\n" +
+      "    xfce4-terminal -T " + title + " -e " + shell + " \"$0\" && exit\n" +
+      "  fi\n" +
       "  if which xterm >/dev/null 2>&1; then\n" +
       "    xterm -T " + title + " -e " + shell + " \"$0\" && exit\n" +
       "  fi\n" +
       "fi\n" +
       job +
         (autoClose < 0
-          ? "\necho -n 'Press any key to exit...' && read k || sleep 5\n"
+          ? "\necho -n 'Press [ENTER] to quit... ' && read l || sleep 5\n"
           : "\nsleep " + autoClose + "\n");
   }
   
@@ -2023,7 +2038,7 @@ FlashGotDM.initDMS = function() {
         referrer.host = "localhost";
         chan.referrer = referrer;
       }
-      chan.loadFlags != chan.INHIBIT_PERSISTENT_CACHING;
+      chan.loadFlags |= chan.INHIBIT_PERSISTENT_CACHING;
     } catch(e) {
       fg.log(e);
     }
@@ -2071,21 +2086,21 @@ FlashGotDM.initDMS = function() {
     for (j in pp) {
       data.push(j + "=" + encodeURIComponent(pp[j].join("\n")));
     }
-    this._post(data.join("&"), this.MAX_RETRIES);
+    this._post({data: data.join("&"), retries: this.MAX_RETRIES});
   };
-  dm._post = function(data, retries) {
+  dm._post = function(ctx) {
     var self = this;
     var r = this._createRequest("POST", function(r) {
-      if (r.status != 200) self._handleRetry(data, retries);
+      if (r.status != 200) self._handleRetry(ctx);
     });
     
     r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
-    r.send(data);
+    r.send(ctx.data);
   };
   
-  dm._handleRetry = function(data, retries) {
+  dm._handleRetry = function(ctx) {
     var msg, fail = true;
-    if (retries-- == this.MAX_RETRIES) {
+    if (ctx.retries-- == this.MAX_RETRIES) {
       if (this._checkPath()) try {
         var args,
             exe = this._winExe() || this._macExe();
@@ -2097,15 +2112,16 @@ FlashGotDM.initDMS = function() {
           }
           exe = this.java;
           args = this.getPref("args", '').split(/\s+/).filter(function(a) { return a });
+          args.push("-jar");
           args.push(this.jdFile.path);
         }
         fail = !this.runNative(args, false, exe);
       } catch(e) {
         fg.log(e);
         this.java = null;
-      } 
+      }
       if (fail) msg = "Cannot launch " + (this.jdFile && this.jdFile.path || "JDownloader") + ". Please launch it manually or ensure Java is enabled in your browser.";
-    } else if (retries == 0) {
+    } else if (ctx.retries == 0) {
       msg = "JDownloader not responding on " + this.getPref("url") + "!\nPlease check your firewall settings.";
     } else {
       fail = false;
@@ -2114,7 +2130,7 @@ FlashGotDM.initDMS = function() {
       DOM.mostRecentBrowserWindow.alert(msg);
     } else {
       var self = this;
-      fg.delayExec(function() { self._post(data, retries); }, this.getPref("delay", 8) * 1000);
+      fg.delayExec(function() { self._post(ctx); }, this.getPref("delay", 8) * 1000);
     }
   };
 
@@ -2554,7 +2570,7 @@ FlashGotDM.initDMS = function() {
     
     var job = 'tell app "' + this.macAppName + '" to download URLs {"'
       + urlList.join('", "') + '"}';
-    var postData = links.links[0].postData || links.postData;
+    var postData = links[0].postData || links.postData;
     if (postData) {
       job += ' by posting data "' + postData + '"';
     }
@@ -2594,7 +2610,7 @@ FlashGotDM.initDMS = function() {
       "end tell\n";
   };
   
-  dm = new FlashGotDMMac("Folx", "com.eltima.Folx");
+  dm = new FlashGotDMMac("Folx 2", "com.eltima.Folx");
   dm.nativeUI = "#folxAddURL, #folxAddAllURLs, #folxAddSelected";
   dm.cookieSupport = true;
   dm.createJob = function(links, opType) {
@@ -2605,7 +2621,7 @@ FlashGotDM.initDMS = function() {
       cookies.push(this.getCookie(l, links));
       titles.push(l.description.replace(/[\u0000-\u0020"\s]+/g, ' '));
     }
-    var job = "tell application \""+ this.macAppName + "\"\nactivate\n" +
+    var job = "tell application \"Folx\"\nactivate\n" +
       'add URLs {"' + urls.join('", "') + 
       "\"} with referrer \"" + this.getReferrer(links) +
       "\" with cookies {\"" + cookies.join('", "') +
@@ -2615,14 +2631,21 @@ FlashGotDM.initDMS = function() {
     if (postData) {
       job += 'with post data "' + postData + '"';
     }
-    return job + "\nend tell\n";
+    job += "\nend tell";
+    
+    return job;
   }
-  
-  dm = new FlashGotDMMac("Folx 3", "com.eltima.Folx3");
+
+  dm = new FlashGotDMMac("Folx", "com.eltima.Folx3");
   ["nativeUI", "cookieSupport", "createJob"].forEach(function(p) {
-    dm[p] = FlashGotDM.dms["Folx"][p];
+    dm[p] = FlashGotDM.dms["Folx 2"][p];
   });
   
+  dm.performDownload = function(links, opType) {
+    var job = this.createJob(links, opType);
+    this.performJob(job, true);
+    this.performJob(job.replace("Folx", "Folx 3"));
+  };
   
   if ("nsIDownloadManager" in CI) {
     dm = new FlashGotDM(fg.getString("dm.builtIn"));
@@ -2703,7 +2726,13 @@ FlashGotDM.initDMS = function() {
     dm._prepareDownload = function(links, opType) {
       const cs = links.document && links.document.characterSet || "UTF-8";
       var ref = this.getReferrer(links);
-      links.refURI = ref && IOS.newURI(ref, cs, null) || null;
+      try {
+        links.refURI = ref && IOS.newURI(ref, cs, null) || null;
+      } catch(e) {
+        fg.log(e + "\n... for ref=" + ref + ", charset=" + cs);
+        links.refURI = null;
+      }
+      
       var self = this;
       this._checkLinks(links, cs, function() { self.performDownload(links, opType); });
     };
diff --git a/chrome/flashgot.jar!/content/flashgot/MediaSniffer.js b/chrome/flashgot.jar!/content/flashgot/MediaSniffer.js
index 8f9d5f9..94872ff 100644
--- a/chrome/flashgot.jar!/content/flashgot/MediaSniffer.js
+++ b/chrome/flashgot.jar!/content/flashgot/MediaSniffer.js
@@ -203,12 +203,13 @@ var MediaSniffer = {
           contentType = this.mediaTypesRx.test(channel.contentType)
             ? channel.contentType
             : Youtube.get_stream_content_type(channel.URI.spec);
-          if (Object.keys(map).some(function(url){return Youtube.stream_url_equals(url, channel.URI.spec);})) {
+          if (Object.keys(map).some(function(url){return !map[url].parsed && Youtube.stream_url_equals(url, channel.URI.spec);})) {
             if ( ! extras["flashgot::parsed"] && ! /^audio\//.test(contentType)) {
               this._set_current_url(win, channel.URI.spec);
             }
             return;
           }
+          extras["flashgot::Youtube"] = Youtube; // for flashgotOverlay.js
         }
         if (!contentType) {
           contentType = channel.contentType;
@@ -248,6 +249,7 @@ var MediaSniffer = {
             url = this.normalizeQuery(url.replace(/&range=[^&]*|\/frag\(\d+\)/g, '').replace(/\b(?:cm2|mt)=\d+\b/, ''));
             const goodDMHost = "vid2.ec.dmcdn.net"; // Dailymotion unfragmented-enabled host
             if (url in map || url.replace(/(:\/\/)[^\/]+\.(?:dmcdn\.net|dailymotion\.com)(?=\/)/, "$1" + goodDMHost) in map) return;
+            if ( ! extras.window) { extras.window = yt_win; }
             if (this.peek(url, extras, function (xhr) {
               switch (xhr.status) {
               case 403:
@@ -332,7 +334,8 @@ var MediaSniffer = {
               : (Math.round(contentLength / 1048576)) + "MB";
 
             // Youtube channel hack
-            var doc = yt_win.document;
+            var title_win = fg.getPref("media.use_iframe_title", false) ? yt_win : win;
+            var doc = title_win.document;
             var node = doc.getElementById("playnav-curvideo-title");
 
             var createStrings = function (title, o) {
@@ -349,12 +352,12 @@ var MediaSniffer = {
               var fname = typeInfo.fname || '';
 
               title = title.replace(/^\s+|\s+$/, '');
-              const unicode = fg.getPref("media.unicode") && /^UTF.?8$/i.test(yt_win.document.characterSet);
+              const unicode = fg.getPref("media.unicode") && /^UTF.?8$/i.test(title_win.document.characterSet);
               if (title) {
                 const nonWordRx = unicode ? /[\u0000-\u0020\u2000-\u206F\u2E00-\u2E7F]+|[^\w\u0080-\uffff]+/g : /\W+/g;
                 // remove site name from title
                 title = title.replace(new RegExp("\\b(?:" +
-                  (yt_win.location.host || '').split(".").filter(function (s) {return s}).join("|") + ")\\b", 'ig'), '')
+                  (title_win.location.host || '').split(".").filter(function (s) {return s}).join("|") + ")\\b", 'ig'), '')
                   .replace(/https?:\/{2}/gi, '')
                   .replace(nonWordRx, '_')
                   .replace(/^_+([^_])/g, '$1')
@@ -398,8 +401,11 @@ var MediaSniffer = {
                 parsed: extras["flashgot::parsed"],
                 seek_pos: extras["flashgot::seek_pos"],
                 sort_key: extras["flashgot::sort_key"],
-                Youtube: extras["flashgot::parsed"] ? Youtube : null,
-                yt_dash: extras["flashgot::yt_dash"]
+                Youtube: extras["flashgot::Youtube"],
+                yt_dash: extras["flashgot::yt_dash"],
+                video_id: extras["flashgot::video_id"],
+                title: extras["flashgot::parsed"] ? extras.title.replace(/^\s+|\s+$/g, "") || ("Video " + extras["flashgot::video_id"]): "",
+                video_link: extras["flashgot::video_link"]
               }));
               fg.interceptor.extractPostData(channel, entry); // adds entry.postData if needed
               // YouTube fallback host.
diff --git a/chrome/flashgot.jar!/content/flashgot/Youtube.js b/chrome/flashgot.jar!/content/flashgot/Youtube.js
index 0a04887..5bfc92f 100644
--- a/chrome/flashgot.jar!/content/flashgot/Youtube.js
+++ b/chrome/flashgot.jar!/content/flashgot/Youtube.js
@@ -100,7 +100,7 @@ var Youtube = {
     // Reentrance guard for do_xhr.
     w["flashgot::Youtube::process::call_cnt"] = (w["flashgot::Youtube::process::call_cnt"] || 0) + 1;
 
-    if (id.type === this.VIDEO_ID_TYPE_GOOGLE) {
+    if (id.type === Youtube.VIDEO_ID_TYPE_GOOGLE) {
       // Just like with YouTube, in some cases all the stream
       // data we need is already present in the document.
       // The problem is that it's not stored in a variable but
@@ -315,14 +315,16 @@ var Youtube = {
       // We're only interested in HTTP streams, no RTMP or something.
       if (!/^https?:\/\//.test(s.url)) { return false; }
 
-      // Save the video ID. They started to encode the "id" parameter,
-      // so you can get 2 different IDs for the same stream from 2
-      // embed iframes for the same video.
-      s["flashgot::video_id"] = data.video_id /*YouTube*/ || data.docid /*Google Drive/Videos*/;
-      if (s["flashgot::video_id"]) {
-        s.url += (s.url.indexOf("?") === -1 ? "?" : "&")
-          + "flashgot_video_id=" + encodeURIComponent(s["flashgot::video_id"]);
+      // For grouping by video in the media menu.
+      // YouTube.
+      if ((s["flashgot::video_id"] = data.video_id)) {
+        s["flashgot::video_link"] = "https://www.youtube.com/watch?v=" + encodeURIComponent(s["flashgot::video_id"]);
       }
+      // Google Drive/Videos.
+      else if ((s["flashgot::video_id"] = data.docid)) {
+        s["flashgot::video_link"] = "https://docs.google.com/file/d/" + encodeURIComponent(s["flashgot::video_id"]);
+      }
+
 
       // Tidy the type: "video/3gpp;+codecs="mp4v.20.3,+mp4a.40.2"" -> "video/3gpp".
       s.type = s.type.split(";")[0];
@@ -517,7 +519,7 @@ var Youtube = {
         if ( ! elm_url) { return; }
         let url = (elm_url.firstChild || {}).nodeValue;
         if ( ! url) { return; }
-        if ( ! itag && /[?&]itag=([^&]+)/.test(url)) {
+        if ( ! itag && /[?&]itag=([^&#]+)/.test(url)) {
           itag = decodeURIComponent(RegExp.$1);
         }
         if ( ! itag) { return; }
@@ -623,7 +625,7 @@ var Youtube = {
         var values;
         if (pref.getPrefType(values_branch_name) != 0 /*PREF_INVALID*/) {
           values = this.parsePrefStringList(pref.getCharPref(values_branch_name));
-          if (values.indexOf(remap_hint) !== -1) { return; }
+          if (values.indexOf(itag) !== -1) { return; }
         } else {
           values = [];
         }
@@ -680,7 +682,6 @@ var Youtube = {
   // (*) "mime" (stream content type, e.g. "video/mp4")
   // (*) those passed in the |extra_keep_params| argument.
   // (*) anything that ends with "bypass" and has the value of "yes".
-  // (*) anything that starts with "flashgot_" (added by us - see process_streams()).
   tidy_stream_url: function (stream, extra_keep_params /*= null*/ ) {
     if (!extra_keep_params) { extra_keep_params = []; }
     var url = stream.url;
@@ -695,12 +696,12 @@ var Youtube = {
     extra_keep_params.forEach(function(p){if (sparams.indexOf(p) === -1) sparams.push(p);});
     var new_qs = [];
     for (var p in qs) {
-      if (sparams.indexOf(p) !== -1 || (/.+bypass$/.test(p) && qs[p] === "yes") || /^flashgot_/.test(p)) {
+      if (sparams.indexOf(p) !== -1 || (/.+bypass$/.test(p) && qs[p] === "yes")) {
         new_qs.push(encodeURIComponent(p) + "=" + encodeURIComponent(qs[p] || ""));
       }
     }
     stream.url = url.substr(0, qs_idx + 1) + new_qs.join("&");
-  }, // tidy_stream_url()
+  },
 
   // For YouTube, we can't rely on simple URL comparison because
   // the query strings of our parsed streams and the ones built by
@@ -708,6 +709,17 @@ var Youtube = {
   stream_url_equals: function (url1, url2) {
     if (!this.is_stream_url(url1) || !this.is_stream_url(url2)) { return false; }
 
+    // The |id| parameter is something like the internal video ID:
+    // it's different for two different videos (those with different
+    // "public" video IDs - /watch?v=VIDEO_ID), and it's the same for
+    // all the streams of the same video.
+    // They started to encode the "id" parameter, so you can get
+    // different values for the same streams from different embed
+    // iframes for the same video.
+    var id1 = /[?&]id=([^&]+)/.test(url1) ? RegExp.$1 : "flashgot-id-1";
+    var id2 = /[?&]id=([^&]+)/.test(url2) ? RegExp.$1 : "flashgot-id-2";
+    if (id1 !== id2) { return false; }
+
     // The only thing that allows us to identify a stream is the |itag|
     // parameter, which is a combination of the container type (MP4,
     // FLV, etc.) and the quality (1080p, 1080p 3D, 720p, etc.).
@@ -719,38 +731,7 @@ var Youtube = {
     // the user wants to save the stream from a particular position).
     var begin1 = /[?&]begin=([^&]+)/.test(url1) ? RegExp.$1 : "0";
     var begin2 = /[?&]begin=([^&]+)/.test(url2) ? RegExp.$1 : "0";
-    if (begin1 !== begin2) { return false; }
-
-    // The |id| parameter is something like the internal video ID:
-    // it's different for two different videos (those with different
-    // "public" video IDs - /watch?v=VIDEO_ID), and it's the same for
-    // all the streams of the same video.
-    // They started to encode the "id" parameter, so you can get
-    // different values for the same streams. So we save the "public"
-    // video ID in process_streams() and use it instead.
-    var id1 = /[?&]flashgot_video_id=([^&]+)/.test(url1) ? RegExp.$1 : null;
-    var id2 = /[?&]flashgot_video_id=([^&]+)/.test(url2) ? RegExp.$1 : null;
-    if (id1 && id2) { return id1 === id2; }
-    id1 = /[?&]id=([^&]+)/.test(url1) ? RegExp.$1 : "flashgot-id-1";
-    id2 = /[?&]id=([^&]+)/.test(url2) ? RegExp.$1 : "flashgot-id-2";
-    if (id1 === id2) { return true; }
-    // So here we are with 2 different encoded IDs.
-    // Apart from giving up right here, our only option is
-    // to compare as many stream properties as we can and
-    // pray for no collisions.
-    // Candidate properties are:
-    // "clen" - content length in bytes.
-    // "dur" - duration in seconds.
-    // "lmt" - last modified time as a unix timestamp in microseconds.
-    return false;
-    var props = ["clen", "dur", "lmt"];
-    var qs1 = this.parse(url1.substr(url1.indexOf("?") + 1));
-    var qs2 = this.parse(url2.substr(url2.indexOf("?") + 1));
-    return props.every(function(p){
-      var p1 = qs1[p];
-      var p2 = qs2[p];
-      return p1 && p2 && p1 === p2;
-    });
+    return begin1 === begin2;
   },
 
   is_stream_url: function (url) {
@@ -875,9 +856,17 @@ ItagMapObserver.prototype = {
       }
       if (branch.getPrefType(path[0]) !== 0 /*PREF_INVALID*/) {
         item.name = branch.getCharPref(path[0]);
+      } else {
+        delete this.map[path[0]];
+        return;
       }
-      if (path.length > 1 && branch.getPrefType(name) !== 0 /*PREF_INVALID*/) {
-        item.itags = Youtube.parsePrefStringList(branch.getCharPref(name));
+      if (path.length > 1) {
+        if (branch.getPrefType(name) !== 0 /*PREF_INVALID*/) {
+          item.itags = Youtube.parsePrefStringList(branch.getCharPref(name));
+        } else {
+          delete this.map[path[0]];
+          return;
+        }
       }
       if (item.name.length === 0 || item.itags.length === 0) {
         delete this.map[path[0]];
@@ -916,15 +905,17 @@ SortOrderObserver.prototype = {
 
 
 // Drop deprecated preferences.
-try {
-  var pref = Components.classes["@mozilla.org/preferences-service;1"]
-    .getService(Components.interfaces.nsIPrefService)
-    .getBranch("flashgot.media.YouTube.");
-  pref.deleteBranch("itag_map.quality.");
-  pref.deleteBranch("itag_remap.quality.");
-  pref.deleteBranch("quality_sort_order");
-  pref.deleteBranch("remap_quality_sort_order");
-} catch (ignore) {}
+void function(){
+  try {
+    var pref = Components.classes["@mozilla.org/preferences-service;1"]
+      .getService(Components.interfaces.nsIPrefService)
+      .getBranch("flashgot.media.YouTube.");
+    pref.deleteBranch("itag_map.quality.");
+    pref.deleteBranch("itag_remap.quality.");
+    pref.deleteBranch("quality_sort_order");
+    pref.deleteBranch("remap_quality_sort_order");
+  } catch (ignore) {}
+}();
 
 Youtube.readItagMap("media.YouTube.itag_map.type.", Youtube.STREAM_TYPE_MAP);
 Youtube.readItagMap("media.YouTube.itag_map.quality_sort_key.", Youtube.STREAM_QUALITY_SORT_MAP);
diff --git a/chrome/flashgot.jar!/content/flashgot/YoutubeSwf.js b/chrome/flashgot.jar!/content/flashgot/YoutubeSwf.js
index 15980af..d809811 100644
--- a/chrome/flashgot.jar!/content/flashgot/YoutubeSwf.js
+++ b/chrome/flashgot.jar!/content/flashgot/YoutubeSwf.js
@@ -53,7 +53,7 @@ var zip_slide;
 var zip_wp;			// current position in slide
 var zip_fixed_tl = null;	// inflate static
 var zip_fixed_td;		// inflate static
-var zip_fixed_bl, fixed_bd;	// inflate static
+var zip_fixed_bl, zip_fixed_bd;	// inflate static
 var zip_bit_buf;		// bit buffer
 var zip_bit_len;		// bits in bit buffer
 var zip_method;
@@ -805,8 +805,7 @@ function swf_inflate(data)
 	if (sig === "FWS") { return data; }
 	if (sig !== "CWS") { throw new Error("Invalid signature: " + sig); }
 	var ss = new SwfStream(data);
-	ss.skip_bytes(3); // Signature.
-	ss.read_uint8(); // Version.
+	ss.skip_bytes(4); // Signature, version.
 	var inflated_size = ss.read_uint32();
 	var inflated = zip_inflate(data, 8);
 	if (inflated.length + 8 !== inflated_size) { throw new Error("Inflated size mismatch: expected " + inflated_size + ", got " + inflated.length); }
@@ -822,12 +821,12 @@ function SwfStream(data)
 	var m_buf = 0;
 	var m_buf_bits = 0;
 
-	var byte_align = this.byte_align = function $SwfStream_$byte_align()
+	var byte_align = this.byte_align = function()
 	{
 		m_buf_bits = 0;
 	};
 
-	var read_bits = this.read_bits = function $SwfStream_$read_bits(count)
+	var read_bits = this.read_bits = function(count)
 	{
 		var rc = 0;
 		while (count !== 0)
@@ -851,14 +850,14 @@ function SwfStream(data)
 	};
 
 
-	var read_uint8 = this.read_uint8 = function $SwfStream_$read_uint8()
+	var read_uint8 = this.read_uint8 = function()
 	{
 		byte_align();
 		return read_bits(8);
 	};
 
 
-	var read_uint16 = this.read_uint16 = function $SwfStream_$read_uint16()
+	var read_uint16 = this.read_uint16 = function()
 	{
 		var b1 = read_uint8();
 		var b2 = read_uint8() << 8;
@@ -866,37 +865,37 @@ function SwfStream(data)
 	};
 
 
-	var read_uint32 = this.read_uint32 = function $SwfStream_$read_uint32()
+	var read_uint32 = this.read_uint32 = function()
 	{
-		var b1 = read_uint8();
-		var b2 = read_uint8() << 8;
-		var b3 = read_uint8() << 16;
-		var b4 = read_uint8() << 24;
-		return (b1 | b2 | b3 | b4) >>> 0;
+		return read_sint32() >>> 0;
 	};
 
 
-	var read_sint32 = this.read_sint32 = function $SwfStream_$read_sint32()
+	var read_sint32 = this.read_sint32 = function()
 	{
-		return read_uint32() | 0;
+		var b1 = read_uint8();
+		var b2 = read_uint8() << 8;
+		var b3 = read_uint8() << 16;
+		var b4 = read_uint8() << 24;
+		return b1 | b2 | b3 | b4;
 	};
 
 
-	var read_fixed8 = this.read_fixed8 = function $SwfStream_$read_fixed8()
+	var read_fixed8 = this.read_fixed8 = function()
 	{
 		var a = read_uint8();
 		var b = read_uint8();
 		return b + (a / 0x100);
 	};
 
-	var read_fixed = this.read_fixed = function $SwfStream_$read_fixed()
+	var read_fixed = this.read_fixed = function()
 	{
 		var a = read_uint16();
 		var b = read_uint16();
 		return b + (a / 0x10000);
 	};
 
-	var read_bytes = this.read_bytes = function $SwfStream_$read_bytes(count)
+	var read_bytes = this.read_bytes = function(count)
 	{
 		byte_align();
 		if (m_byte_idx + count > m_bytes.length)
@@ -908,25 +907,25 @@ function SwfStream(data)
 	};
 
 
-	var skip_bytes = this.skip_bytes = function $SwfStream_$skip_bytes(count)
+	var skip_bytes = this.skip_bytes = function(count)
 	{
 		byte_align();
 		m_byte_idx += count;
 	};
 
-	var n_hbits8 = this.n_hbits8 = function $SwfStream_$n_hbits8(n, count)
+	var n_hbits8 = this.n_hbits8 = function(n, count)
 	{
 		return (n & 0xff) >> (8 - count);
 	};
 
 
-	var n_hbits16 = this.n_hbits16 = function $SwfStream_$n_hbits16(n, count)
+	var n_hbits16 = this.n_hbits16 = function(n, count)
 	{
 		return (n & 0xffff) >> (16 - count);
 	};
 
 
-	var n_lbits16 = this.n_lbits16 = function $SwfStream_$n_lbits16(n, count)
+	var n_lbits16 = this.n_lbits16 = function(n, count)
 	{
 		return n & ((1 << count) - 1);
 	};
@@ -1000,13 +999,13 @@ function doABCReader(bytes)
 	var m_bytes = bytes;
 	var m_byte_idx = 0;
 
-	var eof = this.eof = function $doABCReader_$eof()
+	var eof = this.eof = function()
 	{
 		return m_byte_idx >= m_bytes.length;
 	};
 
 
-	var read_bytes = this.read_bytes = function $doABCReader_$read_bytes(count)
+	var read_bytes = this.read_bytes = function(count)
 	{
 		var end = m_byte_idx + count;
 		if (end > m_bytes.length)
@@ -1019,7 +1018,7 @@ function doABCReader(bytes)
 		return rc;
 	};
 
-	var read_u8 = this.read_u8 = function $doABCReader_$read_u8()
+	var read_u8 = this.read_u8 = function()
 	{
 		if (eof())
 		{
@@ -1029,7 +1028,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_u16 = this.read_u16 = function $doABCReader_$read_u16()
+	var read_u16 = this.read_u16 = function()
 	{
 		var b1 = read_u8();
 		var b2 = read_u8();
@@ -1037,7 +1036,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_s24 = this.read_s24 = function $doABCReader_$read_s24()
+	var read_s24 = this.read_s24 = function()
 	{
 		var b1 = read_u8();
 		var b2 = read_u8() << 8;
@@ -1052,7 +1051,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_u32 = this.read_u32 = function $doABCReader_$read_u32()
+	var read_u32 = this.read_u32 = function()
 	{
 		var n = 0;
 		for (var i = 0; i !== 5; ++i)
@@ -1085,28 +1084,29 @@ function doABCReader(bytes)
 	};
 
 
-	var read_u30 = this.read_u30 = function $doABCReader_$read_u30()
+	var read_u30 = this.read_u30 = function()
 	{
 		// 0x3fffffff is 2^30 - 1.
 		return read_u32() & 0x3fffffff;
 	};
 
 
-	var read_s32 = this.read_s32 = function $doABCReader_$read_s32()
+	var read_s32 = this.read_s32 = function()
 	{
 		return read_u32() | 0;
 	};
 
-	var read_d64 = this.read_d64 = function $doABCReader_$read_d64()
+	var read_d64 = this.read_d64 = function()
 	{
 		// static const boolean little_endian = new Uint8Array(new Uint16Array([1]).buffer)[0] == 1;
-		if (arguments.callee["doABCReader::little_endian"] === undefined)
+		var _static = arguments.callee;
+		if (_static["doABCReader::little_endian"] === undefined)
 		{
-			arguments.callee["doABCReader::little_endian"] = new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;
+			_static["doABCReader::little_endian"] = new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;
 		}
 		var b = new Array(8);
 		for (var i = 0; i !== 8; ++i) { b[i] = read_u8(); }
-		if (!arguments.callee["doABCReader::little_endian"])
+		if ( ! _static["doABCReader::little_endian"])
 		{
 			b.reverse();
 		}
@@ -1114,10 +1114,10 @@ function doABCReader(bytes)
 	};
 
 
-	var read_cpool_info = this.read_cpool_info = function $doABCReader_$read_cpool_info()
+	var read_cpool_info = this.read_cpool_info = function()
 	{
 		var cp = new doabc_cpool_info();
-		
+
 		var cnt;
 
 		cnt = read_u30();
@@ -1201,20 +1201,14 @@ function doABCReader(bytes)
 	};
 
 
-	var read_string_info = this.read_string_info = function $doABCReader_$read_string_info()
+	var read_string_info = this.read_string_info = function()
 	{
 		var size = read_u30();
-		if (size === 0) { return ""; }
-		var arr_utf8 = new Array(size);
-		for (var i = 0; i !== size; ++i)
-		{
-			arr_utf8[i] = String.fromCharCode(read_u8());
-		}
-		return UTF8.decode(arr_utf8.join(""));
+		return size !== 0 ? utf8_decode(read_bytes(size)) : "";
 	};
 
 
-	var read_namespace_info = this.read_namespace_info = function $doABCReader_$read_namespace_info()
+	var read_namespace_info = this.read_namespace_info = function()
 	{
 		var o = {}; //new doabc_namespace_info();
 		o.kind = read_u8();
@@ -1223,7 +1217,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_ns_set_info = this.read_ns_set_info = function $doABCReader_$read_ns_set_info()
+	var read_ns_set_info = this.read_ns_set_info = function()
 	{
 		var o = {}; //new doabc_ns_set_info();
 		var cnt = read_u8();
@@ -1236,7 +1230,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_multiname_info = this.read_multiname_info = function $doABCReader_$read_multiname_info()
+	var read_multiname_info = this.read_multiname_info = function()
 	{
 		var o;
 		var kind = read_u8();
@@ -1270,7 +1264,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_method_info = this.read_method_info = function $doABCReader_$read_method_info()
+	var read_method_info = this.read_method_info = function()
 	{
 		var o = {}; //new doabc_method_info();
 
@@ -1310,7 +1304,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_metadata_info = this.read_metadata_info = function $doABCReader_$read_metadata_info()
+	var read_metadata_info = this.read_metadata_info = function()
 	{
 		var o = {}; //new doabc_metadata_info();
 		o.name = read_u30();
@@ -1324,7 +1318,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_instance_info = this.read_instance_info = function $doABCReader_$read_instance_info()
+	var read_instance_info = this.read_instance_info = function()
 	{
 		var o = {}; //new doabc_instance_info();
 		var cnt;
@@ -1358,7 +1352,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_class_info = this.read_class_info = function $doABCReader_$read_class_info()
+	var read_class_info = this.read_class_info = function()
 	{
 		var o = {}; //new doabc_class_info();
 		o.cinit = read_u30();
@@ -1372,7 +1366,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_script_info = this.read_script_info = function $doABCReader_$read_script_info()
+	var read_script_info = this.read_script_info = function()
 	{
 		var o = {}; //new doabc_script_info();
 		o.init = read_u30();
@@ -1386,7 +1380,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_method_body_info = this.read_method_body_info = function $doABCReader_$read_method_body_info()
+	var read_method_body_info = this.read_method_body_info = function()
 	{
 		var o = {}; //new doabc_method_body_info();
 		var cnt;
@@ -1418,7 +1412,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_option_detail = this.read_option_detail = function $doABCReader_$read_option_detail()
+	var read_option_detail = this.read_option_detail = function()
 	{
 		var o = {}; //new doabc_option_detail();
 		o.val = read_u30();
@@ -1427,7 +1421,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_item_info = this.read_item_info = function $doABCReader_$read_item_info()
+	var read_item_info = this.read_item_info = function()
 	{
 		var o = {}; //new doabc_item_info();
 		o.key = read_u30();
@@ -1436,7 +1430,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_exception_info = this.read_exception_info = function $doABCReader_$read_exception_info()
+	var read_exception_info = this.read_exception_info = function()
 	{
 		var o = {}; //new doabc_exception_info();
 		o.from = read_u30();
@@ -1448,7 +1442,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_traits_info = this.read_traits_info = function $doABCReader_$read_traits_info()
+	var read_traits_info = this.read_traits_info = function()
 	{
 		var o = {}; //new doabc_traits_info();
 		o.name = read_u30();
@@ -1492,7 +1486,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_trait_slot = this.read_trait_slot = function $doABCReader_$read_trait_slot()
+	var read_trait_slot = this.read_trait_slot = function()
 	{
 		var o = {}; //new doabc_trait_slot();
 		o.slot_id = read_u30();
@@ -1506,7 +1500,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_trait_class = this.read_trait_class = function $doABCReader_$read_trait_class()
+	var read_trait_class = this.read_trait_class = function()
 	{
 		var o = {}; //new doabc_trait_class();
 		o.slot_id = read_u30();
@@ -1515,7 +1509,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_trait_function = this.read_trait_function = function $doABCReader_$read_trait_function()
+	var read_trait_function = this.read_trait_function = function()
 	{
 		var o = {}; //new doabc_trait_function();
 		o.slot_id = read_u30();
@@ -1524,7 +1518,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_trait_method = this.read_trait_method = function $doABCReader_$read_trait_method()
+	var read_trait_method = this.read_trait_method = function()
 	{
 		var o = {}; //new doabc_trait_method();
 		o.disp_id = read_u30();
@@ -1533,7 +1527,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_multiname_info_QName = this.read_multiname_info_QName = function $doABCReader_$read_multiname_info_QName()
+	var read_multiname_info_QName = this.read_multiname_info_QName = function()
 	{
 		var o = {}; //new doabc_multiname_info_QName();
 		o.ns = read_u30();
@@ -1542,7 +1536,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_multiname_info_RTQName = this.read_multiname_info_RTQName = function $doABCReader_$read_multiname_info_RTQName()
+	var read_multiname_info_RTQName = this.read_multiname_info_RTQName = function()
 	{
 		var o = {}; //new doabc_multiname_info_RTQName();
 		o.name = read_u30();
@@ -1550,14 +1544,14 @@ function doABCReader(bytes)
 	};
 
 
-	var read_multiname_info_RTQNameL = this.read_multiname_info_RTQNameL = function $doABCReader_$read_multiname_info_RTQNameL()
+	var read_multiname_info_RTQNameL = this.read_multiname_info_RTQNameL = function()
 	{
 		// This kind has no associated data.
 		return {}; //new doabc_multiname_info_RTQNameL();
 	};
 
 
-	var read_multiname_info_Multiname = this.read_multiname_info_Multiname = function $doABCReader_$read_multiname_info_Multiname()
+	var read_multiname_info_Multiname = this.read_multiname_info_Multiname = function()
 	{
 		var o = {}; //new doabc_multiname_info_Multiname();
 		o.name = read_u30();
@@ -1566,7 +1560,7 @@ function doABCReader(bytes)
 	};
 
 
-	var read_multiname_info_MultinameL = this.read_multiname_info_MultinameL = function $doABCReader_$read_multiname_info_MultinameL()
+	var read_multiname_info_MultinameL = this.read_multiname_info_MultinameL = function()
 	{
 		var o = {}; //new doabc_multiname_info_MultinameL();
 		o.ns_set = read_u30();
@@ -1763,114 +1757,64 @@ const AS3_OP_SETPROPERTY = 0x61;
 const AS3_OP_GETPROPERTY = 0x66;
 const AS3_OP_MODULO = 0xa4;
 
-var UTF8 = {
-	decode: function(str)
+function utf8_decode(str)
+{
+	var a = [];
+	for (var i = 0, len = str.length; i < len; ++i)
 	{
-		var a = [];
-		for (var i = 0, len = str.length; i < len; ++i)
+		var cc = str.charCodeAt(i);
+		if (cc > 255) { throw new Error("Illegal character: must be in range [0; 255]: " + cc); }
+		if (cc < 0x80)
 		{
-			var cc = str.charCodeAt(i);
-			if (cc > 255) { throw new Error("Illegal character: must be in range [0; 255]: " + cc); }
-			if (cc < 0x80)
-			{
-				a.push(str.charAt(i));
-				continue;
-			}
-			var n = 0;
-			var num_bytes = 0;
-			// 110xxxxx 10xxxxxx
-			if ((cc & 0xe0) === 0xc0)
-			{
-				num_bytes = 1;
-				n = cc & 0x1f;
-			}
-			// 1110xxxx 10xxxxxx 10xxxxxx
-			else if ((cc & 0xf0) === 0xe0)
-			{
-				num_bytes = 2;
-				n = cc & 0x0f;
-			}
-			// Other is not supported, because we have only 16 bits for code points.
-			// 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
-			// 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
-			// 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
-			else
-			{
-				throw new Error("Code point too big.");
-			}
-			var j = i + 1, j_end = j + num_bytes;
-			if (j_end > len)
-			{
-				throw new Error("Premature end of input string.");
-			}
-			for (; j !== j_end; ++j)
-			{
-				cc = str.charCodeAt(j);
-				if (cc > 255)
-				{
-					throw new Error("Illegal character: must be in range [0; 255]: " + cc);
-				}
-				if ((cc & 0xc0) !== 0x80)
-				{
-					throw new Error("Illegal character: high bits must be 10: " + cc
-						+ " (0x" + hex_pad(cc, cc < 0x100 ? 2 : 4) + ", " + bin_pad(cc, cc < 0x100 ? 8 : 16) + ")");
-				}
-				n <<= 6;
-				n |= cc & 0x3f;
-			}
-			a.push(String.fromCharCode(n));
-			i = j_end - 1;
+			a.push(str.charAt(i));
+			continue;
 		}
-		return a.join("");
-	},
-
-
-	encode: function(str)
-	{
-		var a = [];
-		for (var i = 0, len = str.length; i !== len; ++i)
+		var n = 0;
+		var num_bytes = 0;
+		// 110xxxxx 10xxxxxx
+		if ((cc & 0xe0) === 0xc0)
 		{
-			var cc = str.charCodeAt(i);
-			// 0xxxxxxx
-			if (cc < 0x80)
-			{
-				a.push(str.charAt(i));
-				continue;
-			}
-			var n, num_bytes;
-			// 110xxxxx 10xxxxxx
-			if (cc < 0x0800)
-			{
-				num_bytes = 1;
-				n = 0xc0 | ((cc >> 6) & 0x1f);
-				cc <<= 8;
-			}
-			// 1110xxxx 10xxxxxx 10xxxxxx
-			else if (cc < 0x10000)
-			{
-				num_bytes = 2;
-				n = 0xe0 | ((cc >> 12) & 0x0f);
-				cc <<= 2;
-			}
-			// Other is not supported, because we have only 16 bits for code points.
-			// 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
-			// 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
-			// 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
-			else
+			num_bytes = 1;
+			n = cc & 0x1f;
+		}
+		// 1110xxxx 10xxxxxx 10xxxxxx
+		else if ((cc & 0xf0) === 0xe0)
+		{
+			num_bytes = 2;
+			n = cc & 0x0f;
+		}
+		// Other is not supported, because we have only 16 bits for code points.
+		// 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+		// 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+		// 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+		else
+		{
+			throw new Error("Code point too big.");
+		}
+		var j = i + 1, j_end = j + num_bytes;
+		if (j_end > len)
+		{
+			throw new Error("Premature end of input string.");
+		}
+		for (; j !== j_end; ++j)
+		{
+			cc = str.charCodeAt(j);
+			if (cc > 255)
 			{
-				throw new Error("Code point too big.");
+				throw new Error("Illegal character: must be in range [0; 255]: " + cc);
 			}
-			a.push(String.fromCharCode(n));
-			for (var j = 0; j !== num_bytes; ++j)
+			if ((cc & 0xc0) !== 0x80)
 			{
-				n = 0x80 | ((cc >> 8) & 0x3f);
-				a.push(String.fromCharCode(n));
-				cc <<= 6;
+				throw new Error("Illegal character: high bits must be 10: " + cc);
 			}
+			n <<= 6;
+			n |= cc & 0x3f;
 		}
-		return a.join("");
+		a.push(String.fromCharCode(n));
+		i = j_end - 1;
 	}
-};
+	return a.join("");
+}
 
 
 
@@ -1915,16 +1859,7 @@ function refresh_signature_func(ctx)
 
 	var stopwatch = new Stopwatch();
 	stopwatch.start();
-	var rc;
-	var decoders = [decode1, decode2];
-	for (var i = 0, len = decoders.length; ! rc && i !== len; ++i)
-	{
-		try { rc = decoders[i](df); }
-		catch (x)
-		{
-			//log("YoutubeSwf.js::refresh_signature_func: decoders[" + i + "] failed: " + (x.message || x) + "\n" + (x.stack || new Error().stack));
-		}
-	}
+	var rc = decode(df);
 	if ( ! rc) { return; }
 	var code = [
 		"/* Not encoded. */",
@@ -1958,149 +1893,6 @@ function refresh_signature_func(ctx)
 }
 
 
-function decode1(df)
-{
-	var rc = {timestamp: -1, calls: []};
-
-	var cp = df.constant_pool;
-	var inst_idx = -1;
-	for (var i = 0, len = df.instances.length; i !== len; ++i) 
-	{
-		var ii = df.instances[i];
-		if (cp.multinames[ii.name].kind !== doabc_CONSTANT_QName) { continue; }
-		if (cp.resolve_multiname(ii.name) === "com.google.youtube.util.SignatureDecipher")
-		{
-			inst_idx = i;
-			break;
-		}
-	}
-	if (inst_idx === -1) { return; }
-	var index_by_name = {"decipher": null, "clone": null, "swap": null, "reverse": null};
-	var name_by_index = {};
-	var cls = df.classes[inst_idx];
-	for (var i = 0, len = cls.traits.length; i !== len; ++i)
-	{
-		var ti = cls.traits[i];
-		if (ti.kind !== doabc_Trait_Method || cp.multinames[ti.name].kind !== doabc_CONSTANT_QName) { continue; }
-		var s_name = cp.resolve_multiname(ti.name);
-		var map_name, map_idx;
-		if (/^(clone|swap|reverse)_(\d+)$/.test(s_name))
-		{
-			map_name = RegExp.$1;
-			map_idx = ti.name;
-			rc.timestamp = parseInt(RegExp.$2);
-		}
-		else if ("decipher" === s_name)
-		{
-			map_name = s_name;
-			map_idx = ti.trait.method;
-		}
-		if (!map_name) { continue; }
-		if (index_by_name[map_name] != null) { return; }
-		index_by_name[map_name] = map_idx;
-		name_by_index[map_idx] = map_name;
-	}
-	var m_idx = index_by_name["decipher"], mb = null;
-	if (!df.method_bodies.some(function(o){return o.method === m_idx && (mb = o);})) { return; }
-	var dar = new doABCReader(mb.code);
-	var state = {states: null, idx: -1};
-	function advance_if(cond) { return cond ? ++state.idx : false; }
-	function switch_if(cond, states, idx /*= 0*/)
-	{
-		if (!cond) { return false; }
-		state.states = states;
-		state.idx = idx || 0;
-		return true;
-	}
-	function done_if(cond) { return cond ? null : false; }
-	var PS_START = [
-		AS3_OP_GETLOCAL_0,
-		AS3_OP_PUSHSCOPE,
-		AS3_OP_GETLOCAL_1,
-		function(op) { return advance_if(op === AS3_OP_PUSHSTRING && cp.resolve_string(dar.read_u30()).length === 0); },
-		function(op) {
-			return switch_if(op === AS3_OP_CALLPROPERTY
-				&& cp.resolve_multiname(dar.read_u30()) === "http://adobe.com/AS3/2006/builtin.split"
-				&& dar.read_u30() === 1, PS_STORE_AND_BRANCH);
-		}
-	];
-	var PS_STORE_AND_BRANCH = [
-		function(op) { return advance_if(op === AS3_OP_COERCE && cp.resolve_multiname(dar.read_u30()) === "Array"); },
-		AS3_OP_SETLOCAL_2,
-		function(op) {
-			if (op === AS3_OP_FINDPROPSTRICT) {
-				var name = name_by_index[dar.read_u30()];
-				return switch_if(name === "swap", PS_SWAP)
-					|| switch_if(name === "clone", PS_CLONE)
-					|| switch_if(name === "reverse", PS_REVERSE);
-			}
-			return advance_if(op === AS3_OP_GETLOCAL_2);
-		},
-		function(op) { return advance_if(op === AS3_OP_PUSHSTRING && cp.resolve_string(dar.read_u30()).length === 0); },
-		function(op) {
-			return advance_if(op === AS3_OP_CALLPROPERTY
-				&& cp.resolve_multiname(dar.read_u30()) === "http://adobe.com/AS3/2006/builtin.join"
-				&& dar.read_u30() === 1);
-		},
-		function(op) { return done_if(op === AS3_OP_RETURNVALUE); }
-	];
-	var PS_SWAP = [
-		AS3_OP_GETLOCAL_2,
-		function(op) { return advance_if(op === AS3_OP_PUSHBYTE && rc.calls.push( {name: "swap", arg: dar.read_u8()} )); },
-		function(op) {
-			return switch_if(op === AS3_OP_CALLPROPERTY
-				&& dar.read_u30() === index_by_name["swap"]
-				&& dar.read_u30() === 2, PS_STORE_AND_BRANCH);
-		}
-	];
-	var PS_CLONE = [
-		AS3_OP_GETLOCAL_2,
-		function(op) { return advance_if(op === AS3_OP_PUSHBYTE && rc.calls.push( {name: "clone", arg: dar.read_u8()} )); },
-		function(op) {
-			return switch_if(op === AS3_OP_CALLPROPERTY
-				&& dar.read_u30() === index_by_name["clone"]
-				&& dar.read_u30() === 2, PS_STORE_AND_BRANCH);
-		}
-	];
-	var PS_REVERSE = [
-		function(op) { return advance_if(op === AS3_OP_GETLOCAL_2 && rc.calls.push( {name: "reverse"} )); },
-		function(op) {
-			return switch_if(op === AS3_OP_CALLPROPERTY
-				&& dar.read_u30() === index_by_name["reverse"]
-				&& dar.read_u30() === 1, PS_STORE_AND_BRANCH);
-		}
-	];
-
-	state.states = PS_START;
-	state.idx = 0;
-	var done = false;
-	while ( ! done && ! dar.eof())
-	{
-		var op = dar.read_u8();
-		var sv = states[idx];
-		var res;
-		switch (typeof(sv))
-		{
-			case "number":
-				res = advance_if(op === sv);
-				break;
-			case "function":
-				res = sv(op);
-				break;
-			default:
-				throw new Error("Invalid state type: " + typeof(sv));
-		}
-		if ( ! res)
-		{
-			done = res === null;
-			break;
-		}
-	}
-	return done ? rc : null;
-}
-
-
-// 2014-07-15.
 function Decoder(file, reader, states, idx /*= 0*/)
 {
 	this.result = {timestamp: -1, calls: []};
@@ -2114,15 +1906,16 @@ Decoder.prototype = {
 		while ( ! done && ! this.reader.eof())
 		{
 			var res;
-			var op = this.reader.read_u8();
+			var o = this.parse_op();
+			if ( ! o) { break; }
 			var sv = this.states[this.idx];
 			switch (typeof(sv))
 			{
 				case "number":
-					res = this.advance_if(op === sv);
+					res = this.advance_if(o.op === sv);
 					break;
 				case "function":
-					res = sv.call(this, op);
+					res = sv.call(this, o.op, o);
 					break;
 				default:
 					throw new Error("Invalid state type: " + typeof(sv));
@@ -2135,6 +1928,58 @@ Decoder.prototype = {
 		}
 		return done ? this.result : null;
 	},
+	parse_op: function()
+	{
+		var o = {};
+		var dar = this.reader;
+		switch (o.op = dar.read_u8())
+		{
+			case AS3_OP_COERCE_S:
+			case AS3_OP_GETLOCAL_0:
+			case AS3_OP_GETLOCAL_1:
+			case AS3_OP_GETLOCAL_2:
+			case AS3_OP_GETLOCAL_3:
+			case AS3_OP_MODULO:
+			case AS3_OP_PUSHSCOPE:
+			case AS3_OP_SETLOCAL_1:
+			case AS3_OP_SETLOCAL_2:
+			case AS3_OP_SETLOCAL_3:
+			case AS3_OP_RETURNVALUE:
+			case AS3_OP_RETURNVOID:
+				break;
+			case AS3_OP_PUSHBYTE:
+				o.value = dar.read_u8();
+				break;
+			case AS3_OP_PUSHSHORT:
+				o.value = dar.read_u30();
+				break;
+			case AS3_OP_COERCE:
+			case AS3_OP_FINDPROPERTY:
+			case AS3_OP_FINDPROPSTRICT:
+			case AS3_OP_GETLEX:
+			case AS3_OP_GETLOCAL:
+			case AS3_OP_GETPROPERTY:
+			case AS3_OP_PUSHINT:
+			case AS3_OP_PUSHSTRING:
+			case AS3_OP_PUSHUINT:
+			case AS3_OP_SETLOCAL:
+			case AS3_OP_SETPROPERTY:
+				o.index = dar.read_u30();
+				break;
+			case AS3_OP_IFTRUE:
+				o.offset = dar.read_s24();
+				break;
+			case AS3_OP_CALLPROPERTY:
+			case AS3_OP_CALLPROPVOID:
+			case AS3_OP_CONSTRUCTPROP:
+				o.index = dar.read_u30();
+				o.arg_count = dar.read_u30();
+				break;
+			default:
+				return null;
+		}
+		return o;
+	},
 	advance_if: function(cond) { return cond ? ++this.idx : false; },
 	switch_if: function(cond, states, idx /*= 0*/)
 	{
@@ -2151,7 +1996,7 @@ Decoder.prototype = {
 	},
 };
 
-function decode2(df)
+function decode(df)
 {
 	var cp = df.constant_pool;
 	var inst_idx = -1;
@@ -2184,19 +2029,20 @@ function decode2(df)
 	}
 	if ( ! mb_decipher) { return; }
 
-	var ctx = {ts_var_idx: -1, inst_var_idx: -1, cls_name_idx: -1, cls_idx: -1, func_name_idx: -1, name_by_index: {}, call_arg: null};
+	var ctx = {cls_name_idx: -1, func_name_idx: -1, name_by_index: {}, call_arg: null};
 	var PS_TIMESTAMP = [
-		AS3_OP_GETLOCAL_0,
-		AS3_OP_PUSHSCOPE,
-		function(op) { return this.advance_if(op === AS3_OP_FINDPROPERTY && (ctx.ts_var_idx = this.reader.read_u30())); },
-		function(op) {
-			return this.advance_if(op === AS3_OP_PUSHSHORT && (this.result.timestamp = this.reader.read_u30()))
-				|| this.advance_if(op === AS3_OP_PUSHINT && (this.result.timestamp = cp.resolve_integer(this.reader.read_u30())))
-				|| this.advance_if(op === AS3_OP_PUSHUINT && (this.result.timestamp = cp.resolve_uinteger(this.reader.read_u30())));
+		function(op, o) {
+			return op !== AS3_OP_FINDPROPERTY
+				|| cp.resolve_multiname(o.index) !== "TIMESTAMP"
+				|| this.advance_if(true);
+		},
+		function(op, o) {
+			return this.advance_if(op === AS3_OP_PUSHSHORT && (this.result.timestamp = o.value, 1))
+				|| this.advance_if(op === AS3_OP_PUSHINT && (this.result.timestamp = cp.resolve_integer(o.index), 1))
+				|| this.advance_if(op === AS3_OP_PUSHUINT && (this.result.timestamp = cp.resolve_uinteger(o.index), 1));
 		},
-		function(op) { return this.advance_if(op === AS3_OP_SETPROPERTY && this.reader.read_u30() === ctx.ts_var_idx); },
 		function(op) {
-			if (op !== AS3_OP_RETURNVOID) { return false; }
+			if (op !== AS3_OP_SETPROPERTY) { return false; }
 			this.reset(new doABCReader(mb_decipher.code), PS_DECIPHER);
 			return true;
 		}
@@ -2204,39 +2050,27 @@ function decode2(df)
 	var PS_DECIPHER = [
 		AS3_OP_GETLOCAL_0,
 		AS3_OP_PUSHSCOPE,
-		function(op) { return this.advance_if(op === AS3_OP_GETLEX && (ctx.inst_var_idx = this.reader.read_u30())); },
-		function(op) { return this.advance_if(op === AS3_OP_IFTRUE && this.reader.read_s24()); },
-		function(op) { return this.advance_if(op === AS3_OP_FINDPROPERTY && this.reader.read_u30() === ctx.inst_var_idx); },
-		function(op) { return this.advance_if(op === AS3_OP_FINDPROPSTRICT && (ctx.cls_name_idx = this.reader.read_u30())); },
-		function(op) {
-			return this.advance_if(op === AS3_OP_CONSTRUCTPROP
-				&& this.reader.read_u30() === ctx.cls_name_idx
-				&& this.reader.read_u30() === 0);
-		},
-		function(op) { return this.advance_if(op === AS3_OP_SETPROPERTY && this.reader.read_u30() === ctx.inst_var_idx); },
-		function(op) { return this.advance_if(op === AS3_OP_GETLEX && this.reader.read_u30() === ctx.inst_var_idx); },
+		AS3_OP_GETLEX,
+		AS3_OP_IFTRUE,
+		AS3_OP_FINDPROPERTY,
+		function(op, o) { return this.advance_if(op === AS3_OP_FINDPROPSTRICT && (ctx.cls_name_idx = o.index)); },
+		AS3_OP_CONSTRUCTPROP,
+		AS3_OP_SETPROPERTY,
+		AS3_OP_GETLEX,
 		AS3_OP_GETLOCAL_1,
-		function(op) { return this.advance_if(op === AS3_OP_PUSHSTRING && cp.resolve_string(this.reader.read_u30()).length === 0); },
-		function(op) {
-			return this.advance_if(op === AS3_OP_CALLPROPERTY
-				&& cp.resolve_multiname(this.reader.read_u30()) === "http://adobe.com/AS3/2006/builtin.split"
-				&& this.reader.read_u30() === 1);
-		},
-		function(op) {
+		function(op, o) { return this.advance_if(op === AS3_OP_PUSHSTRING && cp.resolve_string(o.index).length === 0); },
+		function(op, o) {
 			return this.advance_if(op === AS3_OP_CALLPROPERTY
-				&& (ctx.func_name_idx = this.reader.read_u30())
-				&& this.reader.read_u30() === 1);
+				&& cp.resolve_multiname(o.index) === "http://adobe.com/AS3/2006/builtin.split");
 		},
-		function(op) { return this.advance_if(op === AS3_OP_PUSHSTRING && cp.resolve_string(this.reader.read_u30()).length === 0); },
-		function(op) {
+		function(op, o) { return this.advance_if(op === AS3_OP_CALLPROPERTY && (ctx.func_name_idx = o.index)); },
+		function(op, o) { return this.advance_if(op === AS3_OP_PUSHSTRING && cp.resolve_string(o.index).length === 0); },
+		function(op, o) {
 			return this.advance_if(op === AS3_OP_CALLPROPERTY
-				&& cp.resolve_multiname(this.reader.read_u30()) === "http://adobe.com/AS3/2006/builtin.join"
-				&& this.reader.read_u30() === 1);
+				&& cp.resolve_multiname(o.index) === "http://adobe.com/AS3/2006/builtin.join");
 		},
 		function(op) {
 			if (op !== AS3_OP_RETURNVALUE) { return false; }
-			ctx.cls_idx = this.file.get_instance_index_by_name_index(ctx.cls_name_idx);
-			if (ctx.cls_idx === -1) { return false; }
 			var mb = this.file.get_method_body_by_name_index(ctx.cls_name_idx, ctx.func_name_idx);
 			if ( ! mb) { return false; }
 			this.reset(new doABCReader(mb.code), PS_FUNC);
@@ -2249,94 +2083,41 @@ function decode2(df)
 	];
 	var PS_FUNC_BRANCH = [
 		function(op) {
-			return this.advance_if(op === AS3_OP_GETLOCAL_1)
-				|| this.switch_if(op === AS3_OP_GETLOCAL_0, PS_FUNC_CALL);
+			return this.switch_if(op === AS3_OP_GETLOCAL_0, PS_FUNC_CALL)
+				|| this.advance_if(op === AS3_OP_GETLOCAL_1);
 		},
 		function(op) { return this.done_if(op === AS3_OP_RETURNVALUE); }
 	];
 	var PS_FUNC_CALL = [
 		AS3_OP_GETLOCAL_1,
-		function(op) { return this.advance_if(op === AS3_OP_PUSHBYTE && (ctx.call_arg = this.reader.read_u8(), 1)); },
-		function(op) {
+		function(op, o) { return this.advance_if(op === AS3_OP_PUSHBYTE && (ctx.call_arg = o.value, 1)); },
+		function(op, o) {
 			if (op !== AS3_OP_CALLPROPERTY) { return false; }
-			var func_name_idx = this.reader.read_u30();
-			if (this.reader.read_u30() !== 2) { return false; }
+			var func_name_idx = o.index;
 			var func_name = ctx.name_by_index[func_name_idx];
 			if ( ! func_name)
 			{
 				var mb = this.file.get_method_body_by_name_index(ctx.cls_name_idx, func_name_idx);
 				if ( ! mb) { return false; }
-				var PS_CLONE = [
-					AS3_OP_GETLOCAL_0,
-					AS3_OP_PUSHSCOPE,
-					AS3_OP_GETLOCAL_1,
-					AS3_OP_GETLOCAL_2,
-					function(op) {
-						return this.advance_if(op === AS3_OP_CALLPROPERTY
-							&& cp.resolve_multiname(this.reader.read_u30()) === "http://adobe.com/AS3/2006/builtin.slice"
-							&& this.reader.read_u30() === 1);
-					},
-					function(op) { return this.done_if(op === AS3_OP_RETURNVALUE); }
-				];
-				var PS_REVERSE = [
-					AS3_OP_GETLOCAL_0,
-					AS3_OP_PUSHSCOPE,
-					AS3_OP_GETLOCAL_1,
-					function(op) {
-						return this.advance_if(op === AS3_OP_CALLPROPVOID
-							&& cp.resolve_multiname(this.reader.read_u30()) === "http://adobe.com/AS3/2006/builtin.reverse"
-							&& (this.reader.read_u30(), 1));
-					},
-					AS3_OP_GETLOCAL_1,
-					function(op) { return this.done_if(op === AS3_OP_RETURNVALUE); }
-				];
-				var PS_SWAP = [
+				var PS_TEST = [
 					AS3_OP_GETLOCAL_0,
 					AS3_OP_PUSHSCOPE,
 					AS3_OP_GETLOCAL_1,
-					function(op) { return this.advance_if(op === AS3_OP_PUSHBYTE && (this.reader.read_u8(), 1)); },
-					function(op) { return this.advance_if(op === AS3_OP_GETPROPERTY && this.reader.read_u30()); },
-					function(op) { return op === AS3_OP_COERCE_S || this.advance_if(op === AS3_OP_SETLOCAL_3); },
-					AS3_OP_GETLOCAL_1,
-					AS3_OP_GETLOCAL_2,
-					AS3_OP_GETLOCAL_1,
 					function(op) {
-						return this.advance_if(op === AS3_OP_GETPROPERTY
-							&& cp.resolve_multiname(this.reader.read_u30()) === "length");
-					},
-					AS3_OP_MODULO,
-					function(op) { return this.advance_if(op === AS3_OP_GETPROPERTY && this.reader.read_u30()); },
-					function(op) { return op === AS3_OP_COERCE_S || this.advance_if(op === AS3_OP_SETLOCAL && (this.reader.read_u30(), 1)); },
-					AS3_OP_GETLOCAL_1,
-					function(op) { return this.advance_if(op === AS3_OP_PUSHBYTE && (this.reader.read_u8(), 1)); },
-					function(op) { return this.advance_if(op === AS3_OP_GETLOCAL && (this.reader.read_u30(), 1)); },
-					function(op) { return this.advance_if(op === AS3_OP_SETPROPERTY && this.reader.read_u30()); },
-					AS3_OP_GETLOCAL_1,
-					AS3_OP_GETLOCAL_2,
-					AS3_OP_GETLOCAL_3,
-					function(op) { return this.advance_if(op === AS3_OP_SETPROPERTY && this.reader.read_u30()); },
-					AS3_OP_GETLOCAL_1,
-					function(op) { return this.done_if(op === AS3_OP_RETURNVALUE); }
-				];
-				var map = [
-					{state: PS_CLONE, name: "clone"},
-					{state: PS_REVERSE, name: "reverse"},
-					{state: PS_SWAP, name: "swap"}
+						return this.done_if((op === AS3_OP_GETLOCAL_2 && (this.result = "clone"))
+							|| (op === AS3_OP_CALLPROPVOID && (this.result = "reverse"))
+							|| (op === AS3_OP_PUSHBYTE && (this.result = "swap")));
+					}
 				];
-				map.some(function(o){
-					var d = new Decoder(df, new doABCReader(mb.code), o.state);
-					try { return d.run() && (func_name = o.name); }
-					catch (ignore) {}
-					return false;
-				}, this);
+				var d = new Decoder(df, new doABCReader(mb.code), PS_TEST);
+				if (d.run()) { func_name = d.result; }
 				if ( ! func_name) { return false; }
 				ctx.name_by_index[func_name_idx] = func_name;
 			}
 			this.result.calls.push({name: func_name, arg: ctx.call_arg});
 			return this.advance_if(true);
 		},
-		function(op) { return this.advance_if(op === AS3_OP_COERCE && cp.resolve_multiname(this.reader.read_u30()) === "Array"); },
-		function(op) { return this.switch_if(op === AS3_OP_SETLOCAL_1, PS_FUNC_BRANCH); }
+		function(op) { return op === AS3_OP_COERCE || this.switch_if(op === AS3_OP_SETLOCAL_1, PS_FUNC_BRANCH); }
 	];
 
 	var d = new Decoder(df, new doABCReader(mb_cinit.code), PS_TIMESTAMP);
diff --git a/chrome/flashgot.jar!/content/flashgot/about.xul b/chrome/flashgot.jar!/content/flashgot/about.xul
index 95e8192..9f8a478 100644
--- a/chrome/flashgot.jar!/content/flashgot/about.xul
+++ b/chrome/flashgot.jar!/content/flashgot/about.xul
@@ -64,4 +64,4 @@ function browse(url, features) {
 }
 
 
-</script><stringbundleset id="stringbundleset"><stringbundle id="about-strings" src="chrome://flashgot/locale/about.properties"/><stringbundle id="about-stringsFB" src="chrome://flashgot/content/en-US/about.properties"/></stringbundleset><vbox id="clientBox"><vbox id="clientBoxInternal" flex="1"><hbox align="start"><vbox id="logoBox"><image id="logo" src="chrome://flashgot/skin/icon80.png" class="link" tooltiptext="Visit Extension Home Page" onclick="browse('http://flashgot.net')"/></vbo [...]
\ No newline at end of file
+</script><stringbundleset id="stringbundleset"><stringbundle id="about-strings" src="chrome://flashgot/locale/about.properties"/><stringbundle id="about-stringsFB" src="chrome://flashgot/content/en-US/about.properties"/></stringbundleset><vbox id="clientBox"><vbox id="clientBoxInternal" flex="1"><hbox align="start"><vbox id="logoBox"><image id="logo" src="chrome://flashgot/skin/icon80.png" class="link" tooltiptext="Visit Extension Home Page" onclick="browse('http://flashgot.net')"/></vbo [...]
\ No newline at end of file
diff --git a/chrome/flashgot.jar!/content/flashgot/contents.rdf b/chrome/flashgot.jar!/content/flashgot/contents.rdf
index 86a2189..a0b3491 100644
--- a/chrome/flashgot.jar!/content/flashgot/contents.rdf
+++ b/chrome/flashgot.jar!/content/flashgot/contents.rdf
@@ -8,7 +8,7 @@
     </RDF:Seq>
 
     <RDF:Description about="urn:mozilla:package:flashgot"
-            chrome:displayName="FlashGot 1.5.6.7"
+            chrome:displayName="FlashGot 1.5.6.10"
             chrome:author="Giorgio Maone (InformAction)"
             chrome:authorURL="http://www.informaction.com/g_maone"
             chrome:name="flashgot"
diff --git a/chrome/flashgot.jar!/content/flashgot/flashgotGalleryBuilder.js b/chrome/flashgot.jar!/content/flashgot/flashgotGalleryBuilder.js
index 4be99c1..e0872b8 100644
--- a/chrome/flashgot.jar!/content/flashgot/flashgotGalleryBuilder.js
+++ b/chrome/flashgot.jar!/content/flashgot/flashgotGalleryBuilder.js
@@ -478,7 +478,9 @@ function FlashGotGalleryHTML(builder) {
       // throws "Permission denied to access property '...'".
       // Creating a proxy function doesn't work either - |arguments| is
       // empty:
-      //   function create_proxy_func(expr) { return expr.func.apply(null, arguments); }
+      //   function create_proxy_func(expr) {
+      //     return function(){ return expr.func.apply(null, arguments); };
+      //   }
       //   this.env[name] = expr.func ? create_proxy_func(expr) : ...;
       // So we have 2 options:
       // 1) create a new function in this sandbox.
diff --git a/chrome/flashgot.jar!/content/flashgot/flashgotOverlay.js b/chrome/flashgot.jar!/content/flashgot/flashgotOverlay.js
index f28cae0..f81fa12 100644
--- a/chrome/flashgot.jar!/content/flashgot/flashgotOverlay.js
+++ b/chrome/flashgot.jar!/content/flashgot/flashgotOverlay.js
@@ -243,7 +243,7 @@ var gFlashGot = {
   }
 ,
   browseHomePage: function() {
-    this.browse("http://flashgot.net");
+    this.browse("https://flashgot.net");
   }
 ,
   get hideIcons() {
@@ -676,28 +676,48 @@ var gFlashGot = {
     }
   },
   
-  prepareMediaMenu: function(menu) {
-    var menu_parsed = document.getElementById("flashgot-media-parsed-popup");
-    var menu_parsed_dash = document.getElementById("flashgot-media-parsed-dash-popup");
-    var mi_refresh_decode_signature_func = document.getElementById("flashgot-media-parsed-refresh_signature_func");
-    this._clearMenu(document.getElementById("flashgot-media-parsed-menu").nextSibling);
-    this._clearMenu(mi_refresh_decode_signature_func.nextSibling);
-    this._clearMenu(menu_parsed_dash.firstChild);
-    menu_parsed.parentNode.setAttribute("hidden", "true");
-    menu_parsed_dash.parentNode.setAttribute("hidden", "true");
-    mi_refresh_decode_signature_func.setAttribute("hidden", "true");
-    var m = this.media;
-    if (!(m && m.length)) return false;
-  
-    // YouTube parsed streams. We'll sort them before building the menu.
-    var parsed_items = [], parsed_dash_items = [];
+  prepareMediaMenu: function(menu, evt) {
+    const menu_parsed = document.getElementById("flashgot-media-parsed-popup");
+    const menu_parsed_dash = document.getElementById("flashgot-media-parsed-dash-popup");
+    const mi_refresh_decode_signature_func = document.getElementById("flashgot-media-parsed-refresh_signature_func");
+    mi_refresh_decode_signature_func.hidden = true;
+    const m = this.media;
+    if (!(m && m.length)) {
+      menu_parsed.parentNode.hidden = true;
+      menu_parsed_dash.parentNode.hidden = true;
+      this.clearMediaMenu();
+      return false;
+    }
+
+    // YouTube parsed streams.
+    // Map<string video_id, Group data> groups;
+    // struct Group {
+    //   string id; // Video ID.
+    //   string title; // Video title, goes to the menu label.
+    //   string link; // Video page URL, goes to clipboard along with the video title.
+    //   Array<menuitem> parsed_items;
+    //   Array<menuitem> parsed_dash_items;
+    //   menupopup menu_parsed; // |parsed_items| go here.
+    //   menupopup menu_parsed_dash; // |parsed_dash_items| go here.
+    // }
+    const groups = {};
+    // Dummy group for the non-grouping case.
+    var group = {
+      parsed_items: [],
+      parsed_dash_items: [],
+      menu_parsed: menu_parsed,
+      menu_parsed_dash: menu_parsed_dash
+    };
+    // Actually played (not parsed) streams.
+    const played_items = [];
+    var do_group = gFlashGotService.getPref("media.YouTube.group.enabled", false);
+    if ( ! do_group) { groups[""] = group; }
     for (var j = 0; j < m.length; j++) {
       var mo = m[j];
       // Special menu item, used for refreshing YouTube's signature decoding function.
       if (mo.MediaSniffer && mo.originalURL === mo.MediaSniffer.YOUTUBE_REFRESH_SIGNATURE_FUNC_URL) {
         var mi = mi_refresh_decode_signature_func;
-        mi.setAttribute("hidden", "false");
-        menu_parsed.parentNode.setAttribute("hidden", "false");
+        mi.hidden = false;
         mi["flashgot::Youtube"] = mo.Youtube;
         mi["flashgot::MediaSniffer"] = mo.MediaSniffer;
         mi["flashgot::yt_win"] = mo.yt_win;
@@ -705,54 +725,124 @@ var gFlashGot = {
       }
       var mi = this._createMediaMenuItem(mo);
       if (!mo.parsed) {
-        menu.appendChild(mi);
+        played_items.push(mi);
         continue;
       }
+      if (do_group) {
+        group = groups[mo.video_id];
+        if ( ! group) {
+          group = {
+            id: mo.video_id,
+            title: mo.title != null ? String(mo.title) : "Video " + mo.video_id,
+            link: mo.video_link,
+            parsed_items: [],
+            parsed_dash_items: [],
+            menu_parsed: menu_parsed,
+            menu_parsed_dash: menu_parsed_dash
+          };
+          groups[group.id] = group;
+        }
+      }
       mi["flashgot::sort_key"] = mo.sort_key;
       if (mo.yt_dash) {
         mi["flashgot::yt_dash"] = mo.yt_dash;
-        parsed_dash_items.push(mi);
+        group.parsed_dash_items.push(mi);
       } else {
-        parsed_items.push(mi);
+        group.parsed_items.push(mi);
       }
     }
-    if (parsed_items.length || parsed_dash_items.length) {
-      function mo_cmp(lhs, rhs) { return lhs["flashgot::sort_key"] - rhs["flashgot::sort_key"]; }
+
+    // Sort the groups by video title. Ignore empty groups.
+    const group_ids = Object.keys(groups)
+      .filter(function(id){var o = groups[id]; return o.parsed_items.length || o.parsed_dash_items.length;})
+      .sort(function(lhs, rhs){return groups[lhs].title.toLowerCase().localeCompare(groups[rhs].title.toLowerCase());});
+    do_group &= group_ids.length > 1;
+    if (evt.target !== menu && do_group) { return; }
+
+    menu_parsed.parentNode.hidden = true;
+    menu_parsed_dash.parentNode.hidden = true;
+    this.clearMediaMenu();
+    played_items.forEach(function(mi){menu.appendChild(mi);});
+
+    function mo_cmp(lhs, rhs) { return lhs["flashgot::sort_key"] - rhs["flashgot::sort_key"]; }
+    const group_title_max_length = gFlashGotService.getPref("media.YouTube.group.title_max_length", 40);
+    const dash_menu_label = menu_parsed_dash.parentNode.label;
+    group_ids.forEach(function(gid){
+      var group = groups[gid];
+      var parsed_items = group.parsed_items;
+      var parsed_dash_items = group.parsed_dash_items;
+      menu_parsed.parentNode.hidden = false;
+      if (do_group) {
+        // Non-DASH streams menu.
+        var gmenu = document.createElement("menu");
+        menu_parsed.appendChild(gmenu);
+        gmenu.setAttribute("label", group.title.length > group_title_max_length
+          ? group.title.substr(0, group_title_max_length) + "..." : group.title);
+        gmenu.setAttribute("tooltiptext", group.title + " (" + group.id + ")");
+        gmenu.appendChild(group.menu_parsed = document.createElement("menupopup"));
+        // Right-click to copy the video title and link to clipboard.
+        gmenu.setAttribute("flashgot_media_clipboard_text", group.title + (group.link ? " (" + group.link + ")" : ""));
+        gmenu.addEventListener("click", function(evt){
+          if (evt.button !== 2 || evt.target !== this) { return; }
+          evt.preventDefault();
+          evt.stopPropagation();
+          Components.classes["@mozilla.org/widget/clipboardhelper;1"]
+            .getService(Components.interfaces.nsIClipboardHelper)
+            .copyString(this.getAttribute("flashgot_media_clipboard_text"));
+        }, true);
+      }
+      var gmenu_parsed = group.menu_parsed;
       if (parsed_items.length) {
         parsed_items.sort(mo_cmp);
-        parsed_items.forEach(function(mi){delete mi["flashgot::sort_key"]; menu_parsed.appendChild(mi);});
-        menu_parsed.parentNode.setAttribute("hidden", "false");
+        parsed_items.forEach(function(mi){delete mi["flashgot::sort_key"]; gmenu_parsed.appendChild(mi);});
+        gmenu_parsed.hidden = false;
       }
       if (parsed_dash_items.length) {
+        if (do_group) {
+          // DASH streams menu - child of the non-DASH streams menu.
+          var gmenu = document.createElement("menu");
+          gmenu_parsed.insertBefore(gmenu, gmenu_parsed.firstChild);
+          gmenu.setAttribute("label", dash_menu_label);
+          gmenu.appendChild(group.menu_parsed_dash = document.createElement("menupopup"));
+        }
+        var gmenu_parsed_dash = group.menu_parsed_dash;
         parsed_dash_items.sort(mo_cmp);
         var show_av_separator = gFlashGotService.getPref("media.YouTube.dash.show_av_separator", true);
         var prev_type = parsed_dash_items[0]["flashgot::yt_dash"];
         parsed_dash_items.forEach(function(mi){
           if (show_av_separator && prev_type !== mi["flashgot::yt_dash"]) {
             show_av_separator = false;
-            menu_parsed_dash.appendChild(document.createElement("menuseparator"));
+            gmenu_parsed_dash.appendChild(document.createElement("menuseparator"));
           }
           delete mi["flashgot::sort_key"];
           delete mi["flashgot::yt_dash"];
-          menu_parsed_dash.appendChild(mi);
+          gmenu_parsed_dash.appendChild(mi);
         });
-        menu_parsed_dash.parentNode.setAttribute("hidden", "false");
+        gmenu_parsed_dash.parentNode.hidden = false;
       }
-      this._cb_mediaMenuItem_key_down = false;
-      // https://developer.mozilla.org/en-US/docs/XUL/PopupGuide/PopupKeys:
-      // A key listener added to a <menupopup> will not receive any key events.
-      // Instead, you must add a capturing key listener to the document or window
-      // if you want to listen for keys pressed within a menu.
-      window.addEventListener("keydown", this._cb_mediaMenuItem_keydown, true);
-      window.addEventListener("keyup", this._cb_mediaMenuItem_keyup, true);
-    }
+    });
+
+    this._cb_mediaMenuItem_key_down = false;
+    // https://developer.mozilla.org/en-US/docs/XUL/PopupGuide/PopupKeys:
+    // A key listener added to a <menupopup> will not receive any key events.
+    // Instead, you must add a capturing key listener to the document or window
+    // if you want to listen for keys pressed within a menu.
+    window.addEventListener("keydown", this._cb_mediaMenuItem_keydown, true);
+    window.addEventListener("keyup", this._cb_mediaMenuItem_keyup, true);
+
     return true;
   },
-  unprepareMediaMenu: function() {
+  unprepareMediaMenu: function(menu, evt) {
+    if (evt.target !== menu) { return; }
     this._cb_mediaMenuItem_key_down = false;
     window.removeEventListener("keydown", this._cb_mediaMenuItem_keydown, true);
     window.removeEventListener("keyup", this._cb_mediaMenuItem_keyup, true);
   },
+  clearMediaMenu: function() {
+    this._clearMenu(document.getElementById("flashgot-media-parsed-menu").nextSibling);
+    this._clearMenu(document.getElementById("flashgot-media-parsed-refresh_signature_func").nextSibling);
+    this._clearMenu(document.getElementById("flashgot-media-parsed-dash-popup").firstChild);
+  },
   _clearMenu: function(from) {
     if (!from) { return; }
     var pn = from.parentNode;
diff --git a/chrome/flashgot.jar!/content/flashgot/flashgotOverlayFx.xul b/chrome/flashgot.jar!/content/flashgot/flashgotOverlayFx.xul
index 971f0ea..19f749f 100644
--- a/chrome/flashgot.jar!/content/flashgot/flashgotOverlayFx.xul
+++ b/chrome/flashgot.jar!/content/flashgot/flashgotOverlayFx.xul
@@ -172,7 +172,7 @@
 
   <popupset id="mainPopupSet">
 
-    <menupopup id="flashgot-media-popup" onpopupshowing="return gFlashGot.prepareMediaMenu(this)" onpopuphiding="gFlashGot.unprepareMediaMenu();">
+    <menupopup id="flashgot-media-popup" onpopupshowing="return gFlashGot.prepareMediaMenu(this, event)" onpopuphiding="gFlashGot.unprepareMediaMenu(this, event);">
       <menuitem id="flashgot-media-menuitem-opts"
                 label="&flashgotOptions;"
                 oncommand="gFlashGot.openOptionsDialog(3)"
diff --git a/chrome/flashgot.jar!/content/flashgot/flashgotOverlayMoz.xul b/chrome/flashgot.jar!/content/flashgot/flashgotOverlayMoz.xul
index b46db14..54eaa9d 100644
--- a/chrome/flashgot.jar!/content/flashgot/flashgotOverlayMoz.xul
+++ b/chrome/flashgot.jar!/content/flashgot/flashgotOverlayMoz.xul
@@ -265,7 +265,7 @@
         mousethrough="never"
     />
    
-    <menupopup id="flashgot-media-popup" onpopupshowing="return gFlashGot.prepareMediaMenu(this)" onpopuphiding="gFlashGot.unprepareMediaMenu();">
+    <menupopup id="flashgot-media-popup" onpopupshowing="return gFlashGot.prepareMediaMenu(this, event)" onpopuphiding="gFlashGot.unprepareMediaMenu(this, event);">
       <menuitem id="flashgot-media-clear"
                 label="&flashgotClear.label;"
                 accesskey="&flashgotClear.accesskey;"
diff --git a/chrome/flashgot.jar!/locale/af-ZA/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/af-ZA/flashgot/flashgot.dtd
index 614517f..a47420d 100644
--- a/chrome/flashgot.jar!/locale/af-ZA/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/af-ZA/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Prosesseer skakels in die agtergrond">
 <!ENTITY flashgotShowLog "Vertoon log…">
 <!ENTITY flashgotClearLog "Vee Log uit">
-<!ENTITY flashgotAbout "Rakende FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Rakende FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Gaan Bevestigings Verby">
 <!ENTITY flashgotGetRightQuick "Gebruik togetright.exe wanneer moontlik">
 <!ENTITY flashgotAutostart "Outo-begin aflaai">
diff --git a/chrome/flashgot.jar!/locale/be-BY/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/be-BY/flashgot/flashgot.dtd
index 20d3a60..8d166e1 100644
--- a/chrome/flashgot.jar!/locale/be-BY/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/be-BY/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Апрацоўваць спасылкі ў фоне">
 <!ENTITY flashgotShowLog "Паказаць лог">
 <!ENTITY flashgotClearLog "Ачысціць лог">
-<!ENTITY flashgotAbout "Аб FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Аб FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Прапускаць пацверджанні">
 <!ENTITY flashgotGetRightQuick "Выкарыстаць togetright.exe калі магчыма">
 <!ENTITY flashgotAutostart "Аўтаматычна стартаваць загрузкі">
diff --git a/chrome/flashgot.jar!/locale/bg-BG/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/bg-BG/flashgot/flashgot.dtd
index faabf13..8f46af9 100644
--- a/chrome/flashgot.jar!/locale/bg-BG/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/bg-BG/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Обработи линковете в заден план">
 <!ENTITY flashgotShowLog "Покажи Лог-а">
 <!ENTITY flashgotClearLog "Изчисти Лог-а">
-<!ENTITY flashgotAbout "За FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "За FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Пропусни потвърдителните прозорци">
 <!ENTITY flashgotGetRightQuick "Използвай togetright.exe когато е възможно">
 <!ENTITY flashgotAutostart "Автостарт на Даунлоадите">
diff --git a/chrome/flashgot.jar!/locale/bn-IN/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/bn-IN/flashgot/flashgot.dtd
index 9d6b3f6..6c6f3bb 100644
--- a/chrome/flashgot.jar!/locale/bn-IN/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/bn-IN/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Process links in background">
 <!ENTITY flashgotShowLog "Show Log...">
 <!ENTITY flashgotClearLog "Clear Log">
-<!ENTITY flashgotAbout "About FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "About FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Skip Confirmation Prompts">
 <!ENTITY flashgotGetRightQuick "Use togetright.exe whenever it is possible">
 <!ENTITY flashgotAutostart "Autostart downloads">
diff --git a/chrome/flashgot.jar!/locale/ca-AD/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/ca-AD/flashgot/flashgot.dtd
index 065249c..c785402 100644
--- a/chrome/flashgot.jar!/locale/ca-AD/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/ca-AD/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Processar enllaços en segon pla">
 <!ENTITY flashgotShowLog "Mostrar…">
 <!ENTITY flashgotClearLog "Netejar">
-<!ENTITY flashgotAbout "Sobre FlashGot 1.5.6.7…">
+<!ENTITY flashgotAbout "Sobre FlashGot 1.5.6.10…">
 <!ENTITY flashgotDMQuiet "Saltar avisos de confirmació">
 <!ENTITY flashgotGetRightQuick "Usar togetright.exe sempre que sigui possible">
 <!ENTITY flashgotAutostart "Iniciar descàrregues automàticament">
diff --git a/chrome/flashgot.jar!/locale/cs-CZ/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/cs-CZ/flashgot/flashgot.dtd
index ee05321..83aae3e 100644
--- a/chrome/flashgot.jar!/locale/cs-CZ/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/cs-CZ/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Zpracovávat odkazy na pozadí">
 <!ENTITY flashgotShowLog "Zobrazit záznam">
 <!ENTITY flashgotClearLog "Smazat záznam">
-<!ENTITY flashgotAbout "O rozšíření FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "O rozšíření FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Přeskočit dotazy s potvrzením">
 <!ENTITY flashgotGetRightQuick "Používat togetright.exe vždy, když je to možné">
 <!ENTITY flashgotAutostart "Automatické stahování">
diff --git a/chrome/flashgot.jar!/locale/da-DK/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/da-DK/flashgot/flashgot.dtd
index 01dcc30..8b966d7 100644
--- a/chrome/flashgot.jar!/locale/da-DK/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/da-DK/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Udfør links i baggrunden">
 <!ENTITY flashgotShowLog "Vis log…">
 <!ENTITY flashgotClearLog "Ryd log">
-<!ENTITY flashgotAbout "Om FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Om FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Spring (Confirmation Prompts) over">
 <!ENTITY flashgotGetRightQuick "Brug togetright.exe når det er muligt">
 <!ENTITY flashgotAutostart "Autostart downloads">
diff --git a/chrome/flashgot.jar!/locale/da/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/da/flashgot/flashgot.dtd
index 28a47d0..0a65ed3 100644
--- a/chrome/flashgot.jar!/locale/da/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/da/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Udfør links i baggrunden">
 <!ENTITY flashgotShowLog "Vis log">
 <!ENTITY flashgotClearLog "Ryd log">
-<!ENTITY flashgotAbout "Om FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Om FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Spring bekræftelser over">
 <!ENTITY flashgotGetRightQuick "Brug togetright.exe når det er muligt">
 <!ENTITY flashgotAutostart "Autostart downloads">
diff --git a/chrome/flashgot.jar!/locale/de/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/de/flashgot/flashgot.dtd
index 2524124..8a0b5bf 100644
--- a/chrome/flashgot.jar!/locale/de/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/de/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Links im Hintergrund verarbeiten">
 <!ENTITY flashgotShowLog "Protokoll anzeigen…">
 <!ENTITY flashgotClearLog "Protokoll löschen">
-<!ENTITY flashgotAbout "Über FlashGot 1.5.6.7…">
+<!ENTITY flashgotAbout "Über FlashGot 1.5.6.10…">
 <!ENTITY flashgotDMQuiet "Bestätigungsabfragen überspringen bei">
 <!ENTITY flashgotGetRightQuick "Wann immer möglich togetright.exe verwenden">
 <!ENTITY flashgotAutostart "Downloads automatisch starten">
diff --git a/chrome/flashgot.jar!/locale/el-GR/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/el-GR/flashgot/flashgot.dtd
index 6f37d55..32dbfbd 100644
--- a/chrome/flashgot.jar!/locale/el-GR/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/el-GR/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Διεργασία δεσμών στο παρασκήνιο">
 <!ENTITY flashgotShowLog "Εμφάνιση αρχείου καταγραφής">
 <!ENTITY flashgotClearLog "Εκκαθάριση αρχείου καταγραφής">
-<!ENTITY flashgotAbout "Περί FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Περί FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Παράκαμψη ειδοποιήσεων επιβεβαίωσης">
 <!ENTITY flashgotGetRightQuick "Χρήση togetright.exe όταν είναι δυνατόν">
 <!ENTITY flashgotAutostart "Αυτόματη εκκίνηση μεταφορτώσεων">
diff --git a/chrome/flashgot.jar!/locale/el/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/el/flashgot/flashgot.dtd
index 8b2c7ec..83734a3 100644
--- a/chrome/flashgot.jar!/locale/el/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/el/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Διεργασία δεσμών στο παρασκήνιο">
 <!ENTITY flashgotShowLog "Εμφάνιση αρχείου καταγραφής">
 <!ENTITY flashgotClearLog "Εκκαθάριση αρχείου καταγραφής">
-<!ENTITY flashgotAbout "Περί FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Περί FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Παράκαμψη ειδοποιήσεων επιβεβαίωσης">
 <!ENTITY flashgotGetRightQuick "Χρήση togetright.exe όταν είναι δυνατόν">
 <!ENTITY flashgotAutostart "Αυτόματη εκκίνηση μεταφορτώσεων">
diff --git a/chrome/flashgot.jar!/locale/en-US/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/en-US/flashgot/flashgot.dtd
index 6f49414..59513b9 100644
--- a/chrome/flashgot.jar!/locale/en-US/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/en-US/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Process links in background">
 <!ENTITY flashgotShowLog "Show Log…">
 <!ENTITY flashgotClearLog "Clear Log">
-<!ENTITY flashgotAbout "About FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "About FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Skip Confirmation Prompts">
 <!ENTITY flashgotGetRightQuick "Use togetright.exe whenever it is possible">
 <!ENTITY flashgotAutostart "Autostart downloads">
diff --git a/chrome/flashgot.jar!/locale/es-AR/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/es-AR/flashgot/flashgot.dtd
index d5889b1..44483dd 100644
--- a/chrome/flashgot.jar!/locale/es-AR/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/es-AR/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Procesar enlaces en segundo plano">
 <!ENTITY flashgotShowLog "Mostrar historial de cambio…">
 <!ENTITY flashgotClearLog "Limpiar historial de cambios">
-<!ENTITY flashgotAbout "Acerca de FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Acerca de FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Omitir mensajes de confirmación">
 <!ENTITY flashgotGetRightQuick "Usar togetright.exe siempre que sea posible">
 <!ENTITY flashgotAutostart "Iniciar descargas automáticamente">
diff --git a/chrome/flashgot.jar!/locale/es-CL/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/es-CL/flashgot/flashgot.dtd
index 527ddaa..166918a 100644
--- a/chrome/flashgot.jar!/locale/es-CL/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/es-CL/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Procesar enlaces en segundo plano">
 <!ENTITY flashgotShowLog "Mostrar registro…">
 <!ENTITY flashgotClearLog "Limpiar registro">
-<!ENTITY flashgotAbout "Acerca de FlashGot 1.5.6.7…">
+<!ENTITY flashgotAbout "Acerca de FlashGot 1.5.6.10…">
 <!ENTITY flashgotDMQuiet "No mostrar mensajes de confirmación">
 <!ENTITY flashgotGetRightQuick "Usar togetright.exe siempre que sea posible">
 <!ENTITY flashgotAutostart "Iniciar descargas automáticamente">
diff --git a/chrome/flashgot.jar!/locale/es-ES/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/es-ES/flashgot/flashgot.dtd
index 1b6b5e7..f6f6d09 100644
--- a/chrome/flashgot.jar!/locale/es-ES/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/es-ES/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Procesar enlaces en segundo plano">
 <!ENTITY flashgotShowLog "Mostrar registro…">
 <!ENTITY flashgotClearLog "Limpiar registro">
-<!ENTITY flashgotAbout "Acerca de FlashGot 1.5.6.7…">
+<!ENTITY flashgotAbout "Acerca de FlashGot 1.5.6.10…">
 <!ENTITY flashgotDMQuiet "No mostrar mensajes de confirmación">
 <!ENTITY flashgotGetRightQuick "Usar togetright.exe siempre que sea posible">
 <!ENTITY flashgotAutostart "Iniciar descargas automáticamente">
diff --git a/chrome/flashgot.jar!/locale/et-EE/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/et-EE/flashgot/flashgot.dtd
index f486b48..470d655 100644
--- a/chrome/flashgot.jar!/locale/et-EE/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/et-EE/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Process links in background">
 <!ENTITY flashgotShowLog "Show Log...">
 <!ENTITY flashgotClearLog "Puhasta logi">
-<!ENTITY flashgotAbout "About FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "About FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Skip Confirmation Prompts">
 <!ENTITY flashgotGetRightQuick "Use togetright.exe whenever it is possible">
 <!ENTITY flashgotAutostart "Autostart downloads">
diff --git a/chrome/flashgot.jar!/locale/eu-ES/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/eu-ES/flashgot/flashgot.dtd
index 6b145f7..52eeff4 100644
--- a/chrome/flashgot.jar!/locale/eu-ES/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/eu-ES/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Process links in background">
 <!ENTITY flashgotShowLog "Show Log…">
 <!ENTITY flashgotClearLog "Clear Log">
-<!ENTITY flashgotAbout "About FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "About FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Skip Confirmation Prompts">
 <!ENTITY flashgotGetRightQuick "Use togetright.exe whenever it is possible">
 <!ENTITY flashgotAutostart "Autostart downloads">
diff --git a/chrome/flashgot.jar!/locale/eu/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/eu/flashgot/flashgot.dtd
index 6b145f7..52eeff4 100644
--- a/chrome/flashgot.jar!/locale/eu/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/eu/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Process links in background">
 <!ENTITY flashgotShowLog "Show Log…">
 <!ENTITY flashgotClearLog "Clear Log">
-<!ENTITY flashgotAbout "About FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "About FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Skip Confirmation Prompts">
 <!ENTITY flashgotGetRightQuick "Use togetright.exe whenever it is possible">
 <!ENTITY flashgotAutostart "Autostart downloads">
diff --git a/chrome/flashgot.jar!/locale/fa-IR/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/fa-IR/flashgot/flashgot.dtd
index 54a0522..8ef7b64 100644
--- a/chrome/flashgot.jar!/locale/fa-IR/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/fa-IR/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "انجام عملیات در پس زمینه">
 <!ENTITY flashgotShowLog "نمایش وقایع">
 <!ENTITY flashgotClearLog "پاک کردن وقایع">
-<!ENTITY flashgotAbout "درباره FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "درباره FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "عدم نمایش پیغامهای تایید">
 <!ENTITY flashgotGetRightQuick "استفاده شود togetright.exe در هر زمان ممکن از">
 <!ENTITY flashgotAutostart "شروع خودکار دریافتی‌ها">
diff --git a/chrome/flashgot.jar!/locale/fi-FI/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/fi-FI/flashgot/flashgot.dtd
index df3fe97..a967a42 100644
--- a/chrome/flashgot.jar!/locale/fi-FI/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/fi-FI/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Käsittele linkit tausta-ajona">
 <!ENTITY flashgotShowLog "Näytä loki…">
 <!ENTITY flashgotClearLog "Tyhjennä loki">
-<!ENTITY flashgotAbout "Tietoja FlashGot 1.5.6.7:sta">
+<!ENTITY flashgotAbout "Tietoja FlashGot 1.5.6.10:sta">
 <!ENTITY flashgotDMQuiet "Ohita varmennuskyselyt">
 <!ENTITY flashgotGetRightQuick "Käytä togetright.exe:ä aina kun mahdollista">
 <!ENTITY flashgotAutostart "Aloita tiedostojen siirto automaattisesti">
diff --git a/chrome/flashgot.jar!/locale/fi/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/fi/flashgot/flashgot.dtd
index df3fe97..a967a42 100644
--- a/chrome/flashgot.jar!/locale/fi/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/fi/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Käsittele linkit tausta-ajona">
 <!ENTITY flashgotShowLog "Näytä loki…">
 <!ENTITY flashgotClearLog "Tyhjennä loki">
-<!ENTITY flashgotAbout "Tietoja FlashGot 1.5.6.7:sta">
+<!ENTITY flashgotAbout "Tietoja FlashGot 1.5.6.10:sta">
 <!ENTITY flashgotDMQuiet "Ohita varmennuskyselyt">
 <!ENTITY flashgotGetRightQuick "Käytä togetright.exe:ä aina kun mahdollista">
 <!ENTITY flashgotAutostart "Aloita tiedostojen siirto automaattisesti">
diff --git a/chrome/flashgot.jar!/locale/fr/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/fr/flashgot/flashgot.dtd
index 8985d4c..f5cc16b 100644
--- a/chrome/flashgot.jar!/locale/fr/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/fr/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Traiter les liens en arrière-plan">
 <!ENTITY flashgotShowLog "Montrer le journal…">
 <!ENTITY flashgotClearLog "Effacer le journal">
-<!ENTITY flashgotAbout "À propos de FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "À propos de FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Ignorer la fenêtre de confirmation">
 <!ENTITY flashgotGetRightQuick "Utiliser togetright.exe quand c'est possible">
 <!ENTITY flashgotAutostart "Démarrer les téléchargements automatiquement">
diff --git a/chrome/flashgot.jar!/locale/gl-ES/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/gl-ES/flashgot/flashgot.dtd
index c0a24d1..7195bea 100644
--- a/chrome/flashgot.jar!/locale/gl-ES/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/gl-ES/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Procesar as ligazóns en segundo plano">
 <!ENTITY flashgotShowLog "Amosar o rexistro…">
 <!ENTITY flashgotClearLog "Limpar o rexistro">
-<!ENTITY flashgotAbout "Sobre FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Sobre FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Non amosar avisos de confirmación">
 <!ENTITY flashgotGetRightQuick "Empregar togetright.exe sempre que sexa posible">
 <!ENTITY flashgotAutostart "Comezar automaticamente as descargas">
diff --git a/chrome/flashgot.jar!/locale/he-IL/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/he-IL/flashgot/flashgot.dtd
index 0e6521d..03ff5f0 100644
--- a/chrome/flashgot.jar!/locale/he-IL/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/he-IL/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "עבד קישורים ברקע">
 <!ENTITY flashgotShowLog "הראה תיעוד…">
 <!ENTITY flashgotClearLog "נקה תיעוד">
-<!ENTITY flashgotAbout "אודות FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "אודות FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "דלג על אימות Prompts">
 <!ENTITY flashgotGetRightQuick "השתמש בtogetright.exe כל עוד זה אפשרי">
 <!ENTITY flashgotAutostart "התחל הורדות באופן אוטומטי">
diff --git a/chrome/flashgot.jar!/locale/he/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/he/flashgot/flashgot.dtd
index b735ad7..bc83f9c 100644
--- a/chrome/flashgot.jar!/locale/he/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/he/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "תהליך עיבוד קישורים ברקע">
 <!ENTITY flashgotShowLog "הצג יומן רישום...">
 <!ENTITY flashgotClearLog "נקה את יומן הרישום">
-<!ENTITY flashgotAbout "אודות FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "אודות FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "דלג על בקשות אישור">
 <!ENTITY flashgotGetRightQuick "השתמש ב־ togetright.exe במידת האפשר">
 <!ENTITY flashgotAutostart "הפעלה עצמית של הורדות">
diff --git a/chrome/flashgot.jar!/locale/hi-IN/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/hi-IN/flashgot/flashgot.dtd
index 93e3d95..c8ab2cf 100644
--- a/chrome/flashgot.jar!/locale/hi-IN/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/hi-IN/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Process links in background">
 <!ENTITY flashgotShowLog "Show Log...">
 <!ENTITY flashgotClearLog "Clear Log">
-<!ENTITY flashgotAbout "About FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "About FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Skip Confirmation Prompts">
 <!ENTITY flashgotGetRightQuick "Use togetright.exe whenever it is possible">
 <!ENTITY flashgotAutostart "Autostart downloads">
diff --git a/chrome/flashgot.jar!/locale/hr-HR/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/hr-HR/flashgot/flashgot.dtd
index 2381876..e90c4c1 100644
--- a/chrome/flashgot.jar!/locale/hr-HR/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/hr-HR/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Obradi veze u pozadini">
 <!ENTITY flashgotShowLog "Prikaži zapis…">
 <!ENTITY flashgotClearLog "Očisti zapis">
-<!ENTITY flashgotAbout "O FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "O FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Preskoči obavijesti koje treba potvrđivati">
 <!ENTITY flashgotGetRightQuick "Koristi togetright.exe kad god je to moguće">
 <!ENTITY flashgotAutostart "Automatski pokreni preuzimanje">
diff --git a/chrome/flashgot.jar!/locale/hu/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/hu/flashgot/flashgot.dtd
index 61b0421..8aeed5c 100644
--- a/chrome/flashgot.jar!/locale/hu/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/hu/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Linkek feldolgozása a háttérben">
 <!ENTITY flashgotShowLog "Naplófájl olvasása">
 <!ENTITY flashgotClearLog "Naplófájl törlése">
-<!ENTITY flashgotAbout "FlashGot 1.5.6.7 névjegye">
+<!ENTITY flashgotAbout "FlashGot 1.5.6.10 névjegye">
 <!ENTITY flashgotDMQuiet "Párbeszédablakok átugrása">
 <!ENTITY flashgotGetRightQuick "A togetright.exe használata, ha lehetséges">
 <!ENTITY flashgotAutostart "Letöltések automatikus indítása">
diff --git a/chrome/flashgot.jar!/locale/hy-AM/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/hy-AM/flashgot/flashgot.dtd
index 82efae7..17feaa7 100644
--- a/chrome/flashgot.jar!/locale/hy-AM/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/hy-AM/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Process links in background">
 <!ENTITY flashgotShowLog "Show Log…">
 <!ENTITY flashgotClearLog "Clear Log">
-<!ENTITY flashgotAbout "About FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "About FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Skip Confirmation Prompts">
 <!ENTITY flashgotGetRightQuick "Use togetright.exe whenever it is possible">
 <!ENTITY flashgotAutostart "Autostart downloads">
diff --git a/chrome/flashgot.jar!/locale/id-ID/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/id-ID/flashgot/flashgot.dtd
index a0b695f..469aaba 100644
--- a/chrome/flashgot.jar!/locale/id-ID/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/id-ID/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Proses links di background">
 <!ENTITY flashgotShowLog "Tampilkan Log">
 <!ENTITY flashgotClearLog "Hapus Log">
-<!ENTITY flashgotAbout "Tentang FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Tentang FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Abaikan Dialog Konfirmasi">
 <!ENTITY flashgotGetRightQuick "Gunakan togetright.exe apabila dimungkinkan">
 <!ENTITY flashgotAutostart "Memulai download secara otomatis">
diff --git a/chrome/flashgot.jar!/locale/it-IT/flashgot/about.properties b/chrome/flashgot.jar!/locale/it-IT/flashgot/about.properties
index 4f774fe..096e7e6 100644
--- a/chrome/flashgot.jar!/locale/it-IT/flashgot/about.properties
+++ b/chrome/flashgot.jar!/locale/it-IT/flashgot/about.properties
@@ -1,7 +1,7 @@
 extensions.{19503e42-ca3c-4c27-b1e2-9cdb2170ee34}.description=Gestisce download \
  singoli e di massa ("scarica tutto" e "scarica selezione") attraverso i più \
  popolari download manager esterni per Windows, Mac OS X, Linux e FreeBSD \
- (visita http://flashgot.net per l'elenco). \
+ (visita https://flashgot.net per l'elenco). \
  Inoltre, attraverso il comando "Fabbrica una galleria", FlashGot aiuta a \
  sintetizzare un'unica galleria di filmati o immagini a partire da \
  contenuti sparsi su diverse pagine, facilitando l'operazione "Scarica tutto".
diff --git a/chrome/flashgot.jar!/locale/it-IT/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/it-IT/flashgot/flashgot.dtd
index 9ed21e7..3bbc8c7 100644
--- a/chrome/flashgot.jar!/locale/it-IT/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/it-IT/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Elabora i link in background">
 <!ENTITY flashgotShowLog "Mostra log">
 <!ENTITY flashgotClearLog "Cancella log">
-<!ENTITY flashgotAbout "Informazioni su FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Informazioni su FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Evita le finestre di conferma">
 <!ENTITY flashgotGetRightQuick "Usa togetright.exe quando è possibile">
 <!ENTITY flashgotAutostart "Inizia i download automaticamente">
diff --git a/chrome/flashgot.jar!/locale/it/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/it/flashgot/flashgot.dtd
index 9ed21e7..3bbc8c7 100644
--- a/chrome/flashgot.jar!/locale/it/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/it/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Elabora i link in background">
 <!ENTITY flashgotShowLog "Mostra log">
 <!ENTITY flashgotClearLog "Cancella log">
-<!ENTITY flashgotAbout "Informazioni su FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Informazioni su FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Evita le finestre di conferma">
 <!ENTITY flashgotGetRightQuick "Usa togetright.exe quando è possibile">
 <!ENTITY flashgotAutostart "Inizia i download automaticamente">
diff --git a/chrome/flashgot.jar!/locale/ja-JP/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/ja-JP/flashgot/flashgot.dtd
index 0edf842..6f72f3e 100644
--- a/chrome/flashgot.jar!/locale/ja-JP/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/ja-JP/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "バックグラウンドで処理">
 <!ENTITY flashgotShowLog "ログを表示">
 <!ENTITY flashgotClearLog "ログをクリア">
-<!ENTITY flashgotAbout "FlashGot 1.5.6.7 について">
+<!ENTITY flashgotAbout "FlashGot 1.5.6.10 について">
 <!ENTITY flashgotDMQuiet "確認画面をスキップ">
 <!ENTITY flashgotGetRightQuick "可能であれば togetright.exe を使用">
 <!ENTITY flashgotAutostart "ダウンロードを自動で開始する">
diff --git a/chrome/flashgot.jar!/locale/ka-GE/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/ka-GE/flashgot/flashgot.dtd
index 2d03c22..f286620 100644
--- a/chrome/flashgot.jar!/locale/ka-GE/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/ka-GE/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "ლინკების შესრულება უკანა ფონზე">
 <!ENTITY flashgotShowLog "ლოგის ნახვა…">
 <!ENTITY flashgotClearLog "ლოგის გასუფთავება">
-<!ENTITY flashgotAbout "FlashGot 1.5.6.7_ის შესახებ">
+<!ENTITY flashgotAbout "FlashGot 1.5.6.10_ის შესახებ">
 <!ENTITY flashgotDMQuiet "დამოწმების გამოტოვება">
 <!ENTITY flashgotGetRightQuick "გამოიყენე togetright.exe როცა შესაძლებელია">
 <!ENTITY flashgotAutostart "გადმოწერის ავტომატურად დაწყება">
diff --git a/chrome/flashgot.jar!/locale/kk-KZ/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/kk-KZ/flashgot/flashgot.dtd
index 72331a4..393a12c 100644
--- a/chrome/flashgot.jar!/locale/kk-KZ/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/kk-KZ/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Сілтемелерді білдіртпей-ақ өңдеу">
 <!ENTITY flashgotShowLog "Лог көрсету…">
 <!ENTITY flashgotClearLog "Логты тазалау">
-<!ENTITY flashgotAbout "FlashGot 1.5.6.7 туралы">
+<!ENTITY flashgotAbout "FlashGot 1.5.6.10 туралы">
 <!ENTITY flashgotDMQuiet "Растаулар сұранымдарын өткізіп жіберу">
 <!ENTITY flashgotGetRightQuick "Мүмкін болса togetright.exe қолдану">
 <!ENTITY flashgotAutostart "Жүктемелерді автоматты түрде бастау">
diff --git a/chrome/flashgot.jar!/locale/km-KH/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/km-KH/flashgot/flashgot.dtd
index 93e3d95..c8ab2cf 100644
--- a/chrome/flashgot.jar!/locale/km-KH/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/km-KH/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Process links in background">
 <!ENTITY flashgotShowLog "Show Log...">
 <!ENTITY flashgotClearLog "Clear Log">
-<!ENTITY flashgotAbout "About FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "About FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Skip Confirmation Prompts">
 <!ENTITY flashgotGetRightQuick "Use togetright.exe whenever it is possible">
 <!ENTITY flashgotAutostart "Autostart downloads">
diff --git a/chrome/flashgot.jar!/locale/lt-LT/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/lt-LT/flashgot/flashgot.dtd
index 54d30cf..d24cc1a 100644
--- a/chrome/flashgot.jar!/locale/lt-LT/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/lt-LT/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Process links in background">
 <!ENTITY flashgotShowLog "Show Log...">
 <!ENTITY flashgotClearLog "Clear Log">
-<!ENTITY flashgotAbout "About FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "About FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Skip Confirmation Prompts">
 <!ENTITY flashgotGetRightQuick "Use togetright.exe whenever it is possible">
 <!ENTITY flashgotAutostart "Autostart downloads">
diff --git a/chrome/flashgot.jar!/locale/mk-MK/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/mk-MK/flashgot/flashgot.dtd
index 71f2e38..5a3f103 100644
--- a/chrome/flashgot.jar!/locale/mk-MK/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/mk-MK/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Обработи ги врските во позадина">
 <!ENTITY flashgotShowLog "Покажи го Дневникот…">
 <!ENTITY flashgotClearLog "Исчисти го Дневникот">
-<!ENTITY flashgotAbout "За FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "За FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Прескокни ги Потврдните Прашалници">
 <!ENTITY flashgotGetRightQuick "Користи togetright.exe секогаш кога е возможно">
 <!ENTITY flashgotAutostart "Автоматски стартувај ги симнувањата">
diff --git a/chrome/flashgot.jar!/locale/ml-IN/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/ml-IN/flashgot/flashgot.dtd
index 15108a1..7c8cebf 100644
--- a/chrome/flashgot.jar!/locale/ml-IN/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/ml-IN/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Process links in background">
 <!ENTITY flashgotShowLog "Show Log...">
 <!ENTITY flashgotClearLog "Clear Log">
-<!ENTITY flashgotAbout "About FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "About FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Skip Confirmation Prompts">
 <!ENTITY flashgotGetRightQuick "Use togetright.exe whenever it is possible">
 <!ENTITY flashgotAutostart "Autostart downloads">
diff --git a/chrome/flashgot.jar!/locale/mn-MN/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/mn-MN/flashgot/flashgot.dtd
index 95a3edc..0eb7cb9 100644
--- a/chrome/flashgot.jar!/locale/mn-MN/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/mn-MN/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Холбоосуудыг ар талд ажиллуулах">
 <!ENTITY flashgotShowLog "Бүртгэл харах…">
 <!ENTITY flashgotClearLog "Бүртгэл цэвэрлэх">
-<!ENTITY flashgotAbout "FlashGot 1.5.6.7-ын тухай">
+<!ENTITY flashgotAbout "FlashGot 1.5.6.10-ын тухай">
 <!ENTITY flashgotDMQuiet "Баталгаажуулах асуултыг алгасах">
 <!ENTITY flashgotGetRightQuick "Энэ нь боломжтой бол хэдийд ч togetright.exe хэрэглэх">
 <!ENTITY flashgotAutostart "Татцыг шууд эхлэх">
diff --git a/chrome/flashgot.jar!/locale/ms-MY/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/ms-MY/flashgot/flashgot.dtd
index fa8ca62..5625495 100644
--- a/chrome/flashgot.jar!/locale/ms-MY/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/ms-MY/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Proses rangkaian di latarbelakang">
 <!ENTITY flashgotShowLog "Papar Log…">
 <!ENTITY flashgotClearLog "Padam Log">
-<!ENTITY flashgotAbout "Tentang FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Tentang FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Jangkau Prom Pengesahan">
 <!ENTITY flashgotGetRightQuick "Guna togetright.exe seboleh mungkin">
 <!ENTITY flashgotAutostart "Auto-mula Muat Turun">
diff --git a/chrome/flashgot.jar!/locale/nb-NO/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/nb-NO/flashgot/flashgot.dtd
index 878e996..2fe0798 100644
--- a/chrome/flashgot.jar!/locale/nb-NO/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/nb-NO/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Åpne lenker i bakgrunnen">
 <!ENTITY flashgotShowLog "Vis logg">
 <!ENTITY flashgotClearLog "Tøm logg">
-<!ENTITY flashgotAbout "Om FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Om FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Hopp over bekreftelser">
 <!ENTITY flashgotGetRightQuick "Use togetright.exe whenever it is possible">
 <!ENTITY flashgotAutostart "Autostart downloads">
diff --git a/chrome/flashgot.jar!/locale/nl/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/nl/flashgot/flashgot.dtd
index 9d51474..c286f95 100644
--- a/chrome/flashgot.jar!/locale/nl/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/nl/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Koppelingen op de achtergrond verwerken">
 <!ENTITY flashgotShowLog "Log weergeven…">
 <!ENTITY flashgotClearLog "Log wissen">
-<!ENTITY flashgotAbout "Over FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Over FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Vragen om een bevestiging overslaan">
 <!ENTITY flashgotGetRightQuick "Gebruik togetright.exe wanneer mogelijk">
 <!ENTITY flashgotAutostart "Downloads automatisch starten">
diff --git a/chrome/flashgot.jar!/locale/pl/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/pl/flashgot/flashgot.dtd
index 46fabdb..c24c93f 100644
--- a/chrome/flashgot.jar!/locale/pl/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/pl/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Przetwarzaj odnośniki w tle">
 <!ENTITY flashgotShowLog "Pokaż rejestr…">
 <!ENTITY flashgotClearLog "Wyczyść rejestr">
-<!ENTITY flashgotAbout "O FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "O FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Nie wymagaj potwierdzeń">
 <!ENTITY flashgotGetRightQuick "Użyj togetright.exe, jeśli to możliwe">
 <!ENTITY flashgotAutostart "Automatycznie rozpocznij pobieranie">
diff --git a/chrome/flashgot.jar!/locale/pt-BR/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/pt-BR/flashgot/flashgot.dtd
index 3a1f26c..1373f11 100644
--- a/chrome/flashgot.jar!/locale/pt-BR/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/pt-BR/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Processar links em segundo plano">
 <!ENTITY flashgotShowLog "Exibir log…">
 <!ENTITY flashgotClearLog "Limpar log">
-<!ENTITY flashgotAbout "Sobre o FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Sobre o FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Executar sem confirmações">
 <!ENTITY flashgotGetRightQuick "Usar togetright.exe sempre que possível">
 <!ENTITY flashgotAutostart "Iniciar downloads automaticamente">
diff --git a/chrome/flashgot.jar!/locale/pt-PT/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/pt-PT/flashgot/flashgot.dtd
index e310b69..dcd0d71 100644
--- a/chrome/flashgot.jar!/locale/pt-PT/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/pt-PT/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Processar links em segundo plano">
 <!ENTITY flashgotShowLog "Exibir Log…">
 <!ENTITY flashgotClearLog "Limpar Log">
-<!ENTITY flashgotAbout "Sobre o FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Sobre o FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Executar Sem Confimações">
 <!ENTITY flashgotGetRightQuick "Usar togetright.exe sempre que possível">
 <!ENTITY flashgotAutostart "Iniciar downloads automaticamente">
diff --git a/chrome/flashgot.jar!/locale/ro-RO/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/ro-RO/flashgot/flashgot.dtd
index 360425d..2dfc7dd 100644
--- a/chrome/flashgot.jar!/locale/ro-RO/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/ro-RO/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Proceseaza link-urile in fundal">
 <!ENTITY flashgotShowLog "Arata log-ul">
 <!ENTITY flashgotClearLog "Sterge log-ul">
-<!ENTITY flashgotAbout "Despre FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Despre FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Sari peste ferestrele de confimare">
 <!ENTITY flashgotGetRightQuick "Foloseste togetright.exe cand e posibil">
 <!ENTITY flashgotAutostart "Autostart descarcari">
diff --git a/chrome/flashgot.jar!/locale/ru/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/ru/flashgot/flashgot.dtd
index bfaa221..7129b93 100644
--- a/chrome/flashgot.jar!/locale/ru/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/ru/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Обрабатывать ссылки в фоне">
 <!ENTITY flashgotShowLog "Показать журнал">
 <!ENTITY flashgotClearLog "Очистить журнал">
-<!ENTITY flashgotAbout "О FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "О FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Пропускать подтверждения">
 <!ENTITY flashgotGetRightQuick "Использовать togetright.exe, если возможно">
 <!ENTITY flashgotAutostart "Автоматически стартовать закачки">
diff --git a/chrome/flashgot.jar!/locale/sk-SK/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/sk-SK/flashgot/flashgot.dtd
index cc0682c..82d8e27 100644
--- a/chrome/flashgot.jar!/locale/sk-SK/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/sk-SK/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Spracovávať odkazy na pozadí">
 <!ENTITY flashgotShowLog "Zobraziť záznam">
 <!ENTITY flashgotClearLog "Odstrániť záznam">
-<!ENTITY flashgotAbout "Čo je rozšírenie FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Čo je rozšírenie FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Preskočiť okná s potvrdením">
 <!ENTITY flashgotGetRightQuick "Použiť togetright.exe vždy keď je to možné">
 <!ENTITY flashgotAutostart "Automaticky spustiť sťahovanie">
diff --git a/chrome/flashgot.jar!/locale/sl-SI/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/sl-SI/flashgot/flashgot.dtd
index e8d7871..76cac83 100644
--- a/chrome/flashgot.jar!/locale/sl-SI/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/sl-SI/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Predeluj povezave v ozadju">
 <!ENTITY flashgotShowLog "Pokaži dnevnik …">
 <!ENTITY flashgotClearLog "Počisti dnevnik">
-<!ENTITY flashgotAbout "O razširitvi FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "O razširitvi FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Preskoči potrditvena vprašanja">
 <!ENTITY flashgotGetRightQuick "Uporabi togetright.exe, ko je to mogoče">
 <!ENTITY flashgotAutostart "Samozaženi prenose">
diff --git a/chrome/flashgot.jar!/locale/sq-AL/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/sq-AL/flashgot/flashgot.dtd
index 2daf6c2..002bcf9 100644
--- a/chrome/flashgot.jar!/locale/sq-AL/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/sq-AL/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Proceso linket në sfond">
 <!ENTITY flashgotShowLog "Trego">
 <!ENTITY flashgotClearLog "Pastro">
-<!ENTITY flashgotAbout "Informacion mbi FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Informacion mbi FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Kapërceji Nxitjet për Konfirmim">
 <!ENTITY flashgotGetRightQuick "Përdore togetright.exe sa herë të jetë e mundur">
 <!ENTITY flashgotAutostart "Vetënisi shkarkimet">
diff --git a/chrome/flashgot.jar!/locale/sr/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/sr/flashgot/flashgot.dtd
index c7fbb10..5c3dfc2 100644
--- a/chrome/flashgot.jar!/locale/sr/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/sr/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Обради везе у позадини">
 <!ENTITY flashgotShowLog "Прикажи журнал…">
 <!ENTITY flashgotClearLog "Очисти журнал">
-<!ENTITY flashgotAbout "О FlashGot 1.5.6.7-у">
+<!ENTITY flashgotAbout "О FlashGot 1.5.6.10-у">
 <!ENTITY flashgotDMQuiet "Прескочи упите потврда">
 <!ENTITY flashgotGetRightQuick "Користи togetright.exe увек кад је то могуће">
 <!ENTITY flashgotAutostart "Самопокрени преузимања">
diff --git a/chrome/flashgot.jar!/locale/sv-SE/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/sv-SE/flashgot/flashgot.dtd
index 6673808..afe588b 100644
--- a/chrome/flashgot.jar!/locale/sv-SE/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/sv-SE/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Bearbeta länkar i bakgrunden">
 <!ENTITY flashgotShowLog "Visa logg…">
 <!ENTITY flashgotClearLog "Rensa logg">
-<!ENTITY flashgotAbout "Om FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Om FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Hoppa över bekräftelseförfrågningar">
 <!ENTITY flashgotGetRightQuick "Använd togetright.exe när det är möjligt">
 <!ENTITY flashgotAutostart "Starta nedladdningar automatiskt">
diff --git a/chrome/flashgot.jar!/locale/th-TH/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/th-TH/flashgot/flashgot.dtd
index 8e544bf..9f57ab8 100644
--- a/chrome/flashgot.jar!/locale/th-TH/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/th-TH/flashgot/flashgot.dtd
@@ -33,7 +33,7 @@
 <!ENTITY flashgotBGProcessing "ประมวลผลลิงค์แบบ Background">
 <!ENTITY flashgotShowLog "แสดงล็อก">
 <!ENTITY flashgotClearLog "ล้างล็อก">
-<!ENTITY flashgotAbout "เกี่ยวกับ FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "เกี่ยวกับ FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "ข้ามขั้นตอนการยืนยัน">
 <!ENTITY flashgotGetRightQuick "ใช้ togetright.exe เมื่อเป็นไปได้">
 <!ENTITY flashgotAutostart "เริ่มดาวน์โหลดอัตโนมัติ">
diff --git a/chrome/flashgot.jar!/locale/th/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/th/flashgot/flashgot.dtd
index 8e544bf..9f57ab8 100644
--- a/chrome/flashgot.jar!/locale/th/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/th/flashgot/flashgot.dtd
@@ -33,7 +33,7 @@
 <!ENTITY flashgotBGProcessing "ประมวลผลลิงค์แบบ Background">
 <!ENTITY flashgotShowLog "แสดงล็อก">
 <!ENTITY flashgotClearLog "ล้างล็อก">
-<!ENTITY flashgotAbout "เกี่ยวกับ FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "เกี่ยวกับ FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "ข้ามขั้นตอนการยืนยัน">
 <!ENTITY flashgotGetRightQuick "ใช้ togetright.exe เมื่อเป็นไปได้">
 <!ENTITY flashgotAutostart "เริ่มดาวน์โหลดอัตโนมัติ">
diff --git a/chrome/flashgot.jar!/locale/tr-TR/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/tr-TR/flashgot/flashgot.dtd
index 6219bce..438b148 100644
--- a/chrome/flashgot.jar!/locale/tr-TR/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/tr-TR/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Bağlantıyı arkaplanda işle">
 <!ENTITY flashgotShowLog "Kayıtları Göster…">
 <!ENTITY flashgotClearLog "Kayıtları Temizle">
-<!ENTITY flashgotAbout "FlashGot 1.5.6.7 Hakkında">
+<!ENTITY flashgotAbout "FlashGot 1.5.6.10 Hakkında">
 <!ENTITY flashgotDMQuiet "Onaylama sorgularını atla">
 <!ENTITY flashgotGetRightQuick "Münkün olduğunda togetright.exe dosyasını kullan">
 <!ENTITY flashgotAutostart "İndirmeleri Otomatik Başlat">
diff --git a/chrome/flashgot.jar!/locale/tr/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/tr/flashgot/flashgot.dtd
index 4074590..a003715 100644
--- a/chrome/flashgot.jar!/locale/tr/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/tr/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Bağlantıyı arkaplanda işle">
 <!ENTITY flashgotShowLog "Kayıtları Göster">
 <!ENTITY flashgotClearLog "Kayıtları Temizle">
-<!ENTITY flashgotAbout "FlashGot 1.5.6.7 Hakkında">
+<!ENTITY flashgotAbout "FlashGot 1.5.6.10 Hakkında">
 <!ENTITY flashgotDMQuiet "Onaylama sorgularını atla">
 <!ENTITY flashgotGetRightQuick "Münkün olduğunda togetright.exe dosyasını kullan">
 <!ENTITY flashgotAutostart "İndirmeleri Otomatik Başlat">
diff --git a/chrome/flashgot.jar!/locale/uk-UA/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/uk-UA/flashgot/flashgot.dtd
index cfe0031..dfdd997 100644
--- a/chrome/flashgot.jar!/locale/uk-UA/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/uk-UA/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Обробляти посилання у фоновому режимі">
 <!ENTITY flashgotShowLog "Показати журнал…">
 <!ENTITY flashgotClearLog "Очистити журнал">
-<!ENTITY flashgotAbout "Про FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Про FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Пропускати підтвердження">
 <!ENTITY flashgotGetRightQuick "Використовувати togetright.exe коли це можливо">
 <!ENTITY flashgotAutostart "Автоматично починати завантаження">
diff --git a/chrome/flashgot.jar!/locale/uk/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/uk/flashgot/flashgot.dtd
index 40049ce..2e2b1de 100644
--- a/chrome/flashgot.jar!/locale/uk/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/uk/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Обробляти посилання у фоновому режимі">
 <!ENTITY flashgotShowLog "Показати журнал…">
 <!ENTITY flashgotClearLog "Очистити журнал">
-<!ENTITY flashgotAbout "Про FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Про FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Пропускати підтвердження">
 <!ENTITY flashgotGetRightQuick "Використовувати togetright.exe коли це можливо">
 <!ENTITY flashgotAutostart "Автоматично починати завантаження">
diff --git a/chrome/flashgot.jar!/locale/vi/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/vi/flashgot/flashgot.dtd
index 8cda8e1..3aecc26 100644
--- a/chrome/flashgot.jar!/locale/vi/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/vi/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "Xử lí các liên kết thuộc hậu cảnh">
 <!ENTITY flashgotShowLog "Hiện lưu kí…">
 <!ENTITY flashgotClearLog "Xóa lưu kí">
-<!ENTITY flashgotAbout "Thông tin về FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "Thông tin về FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "Bỏ qua Hộp thoại Xác nhận">
 <!ENTITY flashgotGetRightQuick "Sử dụng togetright.exe bất cứ khi nào có thể">
 <!ENTITY flashgotAutostart "Tự động khởi chạy các tập tin tải xuống">
diff --git a/chrome/flashgot.jar!/locale/zh-CN/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/zh-CN/flashgot/flashgot.dtd
index f77abbf..62ca4b6 100644
--- a/chrome/flashgot.jar!/locale/zh-CN/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/zh-CN/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "在后台处理链接">
 <!ENTITY flashgotShowLog "显示日志">
 <!ENTITY flashgotClearLog "清空日志">
-<!ENTITY flashgotAbout "关于 FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "关于 FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "忽略确认提示">
 <!ENTITY flashgotGetRightQuick "尽可能使用“togetrght.exe”">
 <!ENTITY flashgotAutostart "自动下载已监视的文件">
diff --git a/chrome/flashgot.jar!/locale/zh-TW/flashgot/flashgot.dtd b/chrome/flashgot.jar!/locale/zh-TW/flashgot/flashgot.dtd
index 4fb59f6..3edacec 100644
--- a/chrome/flashgot.jar!/locale/zh-TW/flashgot/flashgot.dtd
+++ b/chrome/flashgot.jar!/locale/zh-TW/flashgot/flashgot.dtd
@@ -35,7 +35,7 @@
 <!ENTITY flashgotBGProcessing "在背景處理鏈結">
 <!ENTITY flashgotShowLog "顯示日誌">
 <!ENTITY flashgotClearLog "清除日誌">
-<!ENTITY flashgotAbout "關於 FlashGot 1.5.6.7">
+<!ENTITY flashgotAbout "關於 FlashGot 1.5.6.10">
 <!ENTITY flashgotDMQuiet "略過確認提示">
 <!ENTITY flashgotGetRightQuick "儘可能使用 togetright.exe">
 <!ENTITY flashgotAutostart "自動下載受監視的檔案類型">
diff --git a/components/flashgotService.js b/components/flashgotService.js
index ca8a496..9346085 100644
--- a/components/flashgotService.js
+++ b/components/flashgotService.js
@@ -28,7 +28,7 @@ const NS_BINDING_ABORTED = 0x804b0002;
 const EXTENSION_ID = "{19503e42-ca3c-4c27-b1e2-9cdb2170ee34}";
 const EXTENSION_NAME = "FlashGot";
 const CHROME_NAME = "flashgot";
-const VERSION = "1.5.6.7";
+const VERSION = "1.5.6.10";
 const SERVICE_NAME = EXTENSION_NAME + " Service";
 const SERVICE_CTRID = "@maone.net/flashgot-service;1";
 const SERVICE_ID = "{2a55fc5c-7b31-4ee1-ab15-5ee2eb428cbe}";
@@ -1347,7 +1347,7 @@ fg = {
   }
 ,
   showDMSReference: function() {
-    this.getWindow().open("http://flashgot.net/dms","_blank");
+    this.getWindow().open("https://flashgot.net/dms","_blank");
   },
   
   getMedia: function(w) {
@@ -1386,14 +1386,14 @@ fg = {
       if (this.getPref("firstRunRedirection", true)) {
         const name = EXTENSION_NAME;
         const domain = name.toLowerCase() + ".net";
-        IOS.newChannel("http://" + domain + "/-", null, null).asyncOpen({ // DNS prefetch
+        IOS.newChannel("https://" + domain + "/-", null, null).asyncOpen({ // DNS prefetch
           onStartRequest: function() {},
           onStopRequest: function() {
             var browser = DOM.mostRecentBrowserWindow.getBrowser();
             if (typeof(browser.addTab) != "function") return;
            
             
-            var url = "http://" + domain + "/?ver=" + ver;
+            var url = "https://" + domain + "/?ver=" + ver;
             var hh = "X-IA-Post-Install: " + name + " " + ver;
             if (prevVer) {
               url += "&prev=" + prevVer;
diff --git a/defaults/preferences/flashgot.js b/defaults/preferences/flashgot.js
index 7c1e9e6..9f3ec15 100644
--- a/defaults/preferences/flashgot.js
+++ b/defaults/preferences/flashgot.js
@@ -49,6 +49,7 @@ pref("flashgot.oldSD", false);
 pref("flashgot.noDesc", false);
 
 pref("flashgot.media.guessName", true);
+pref("flashgot.media.use_iframe_title", false);
 pref("flashgot.media.forceNameHack", false);
 pref("flashgot.media.statusIcon", true);
 pref("flashgot.media.unicode", true);
@@ -64,81 +65,17 @@ pref("flashgot.media.YouTube.seek_pos.show_ms", false);
 pref("flashgot.media.YouTube.seek_pos.compact", true);
 pref("flashgot.media.YouTube.flashvars_element_id", "movie_player");
 pref("flashgot.media.YouTube.flashvars_element_attr", "flashvars");
-pref("flashgot.media.YouTube.decode_signature_func", "/* Not encoded. */ if (params.stream.sig) { return params.stream.sig; } /* 2013-09-20: watch_as3-vflJM6GCe.swf */ var s = params.stream.s; if (!s) { return ''; } var swap = params.swap; var a = s.split(''); a = a.slice(3); a.reverse(); a = a.slice(1); a.reverse(); a = a.slice(3); a.reverse(); a = a.slice(3); swap(a, 59); a = a.slice(2); return a.join('');");
 pref("flashgot.media.YouTube.decode_signature_func.sandbox", true);
-pref("flashgot.media.YouTube.decode_signature_func.timestamp", 15953);
 pref("flashgot.media.YouTube.decode_signature_func.auto", true);
 pref("flashgot.media.YouTube.stream_url.tidy", false);
 pref("flashgot.media.YouTube.stream_url.extra_keep_params", "");
 pref("flashgot.media.YouTube.remap_stream_quality", false);
 pref("flashgot.media.YouTube.remap_stream_type", false);
 pref("flashgot.media.autoCloseDocument", false);
-pref("flashgot.media.YouTube.itag_map.type.vid_mp4", "video/mp4");
-pref("flashgot.media.YouTube.itag_map.type.vid_mp4.itags", "18, 22, 37, 38, 82, 83, 84, 85, 133, 134, 135, 136, 137, 138, 160, 264");
-pref("flashgot.media.YouTube.itag_map.type.vid_flv", "video/x-flv");
-pref("flashgot.media.YouTube.itag_map.type.vid_flv.itags", "5, 6, 34, 35, 120");
-pref("flashgot.media.YouTube.itag_map.type.vid_webm", "video/webm");
-pref("flashgot.media.YouTube.itag_map.type.vid_webm.itags", "43, 44, 45, 46, 100, 101, 102");
-pref("flashgot.media.YouTube.itag_map.type.vid_3gp", "video/3gpp");
-pref("flashgot.media.YouTube.itag_map.type.vid_3gp.itags", "13, 17, 36");
-pref("flashgot.media.YouTube.itag_map.type.aud_mp4", "audio/mp4");
-pref("flashgot.media.YouTube.itag_map.type.aud_mp4.itags", "139, 140, 141");
-pref("flashgot.media.YouTube.itag_map.type.aud_webm", "audio/webm");
-pref("flashgot.media.YouTube.itag_map.type.aud_webm.itags", "171, 172");
-pref("flashgot.media.YouTube.itag_map.quality.small", "small");
-pref("flashgot.media.YouTube.itag_map.quality.small.itags", "5, 6, 17, 36, 83, 133, 139, 160");
-pref("flashgot.media.YouTube.itag_map.quality.medium", "medium");
-pref("flashgot.media.YouTube.itag_map.quality.medium.itags", "18, 34, 43, 82, 100, 101, 134, 140, 171");
-pref("flashgot.media.YouTube.itag_map.quality.large", "large");
-pref("flashgot.media.YouTube.itag_map.quality.large.itags", "35, 44, 85, 135, 141, 172");
-pref("flashgot.media.YouTube.itag_map.quality.hd720", "hd720");
-pref("flashgot.media.YouTube.itag_map.quality.hd720.itags", "22, 45, 84, 102, 120, 136");
-pref("flashgot.media.YouTube.itag_map.quality.hd1080", "hd1080");
-pref("flashgot.media.YouTube.itag_map.quality.hd1080.itags", "37, 46, 137");
-pref("flashgot.media.YouTube.itag_map.quality.hd1440", "hd1440");
-pref("flashgot.media.YouTube.itag_map.quality.hd1440.itags", "264");
-pref("flashgot.media.YouTube.itag_map.quality.highres", "highres");
-pref("flashgot.media.YouTube.itag_map.quality.highres.itags", "38, 138");
-pref("flashgot.media.YouTube.quality_sort_order", "highres, hd1440, hd1080, hd1080 (3D), hd720, hd720 (3D), large, large (3D), medium, medium (3D), small, light, tiny");
-pref("flashgot.media.YouTube.type_sort_order", "video/mp4, video/x-flv, video/webm, video/3gpp, audio/mp4");
-pref("flashgot.media.YouTube.itag_remap.type.vid_mp4", "mp4");
-pref("flashgot.media.YouTube.itag_remap.type.vid_mp4.itags", "18, 22, 37, 38, 82, 83, 84, 85, 133, 134, 135, 136, 137, 138, 160, 264");
-pref("flashgot.media.YouTube.itag_remap.type.vid_flv", "flv");
-pref("flashgot.media.YouTube.itag_remap.type.vid_flv.itags", "5, 6, 34, 35, 120");
-pref("flashgot.media.YouTube.itag_remap.type.vid_webm", "webm");
-pref("flashgot.media.YouTube.itag_remap.type.vid_webm.itags", "43, 44, 45, 46, 100, 101, 102");
-pref("flashgot.media.YouTube.itag_remap.type.vid_3gp", "3gp");
-pref("flashgot.media.YouTube.itag_remap.type.vid_3gp.itags", "13, 17, 36");
-pref("flashgot.media.YouTube.itag_remap.quality.144p", "144p");
-pref("flashgot.media.YouTube.itag_remap.quality.144p.itags", "17, 160");
-pref("flashgot.media.YouTube.itag_remap.quality.180p", "180p");
-pref("flashgot.media.YouTube.itag_remap.quality.180p.itags", "36");
-pref("flashgot.media.YouTube.itag_remap.quality.240p", "240p");
-pref("flashgot.media.YouTube.itag_remap.quality.240p.itags", "5, 83, 133");
-pref("flashgot.media.YouTube.itag_remap.quality.270p", "270p");
-pref("flashgot.media.YouTube.itag_remap.quality.270p.itags", "6");
-pref("flashgot.media.YouTube.itag_remap.quality.360p", "360p");
-pref("flashgot.media.YouTube.itag_remap.quality.360p.itags", "18, 34, 43, 82, 100, 101, 134");
-pref("flashgot.media.YouTube.itag_remap.quality.480p", "480p");
-pref("flashgot.media.YouTube.itag_remap.quality.480p.itags", "35, 44, 135");
-pref("flashgot.media.YouTube.itag_remap.quality.520p", "520p");
-pref("flashgot.media.YouTube.itag_remap.quality.520p.itags", "85");
-pref("flashgot.media.YouTube.itag_remap.quality.720p", "720p");
-pref("flashgot.media.YouTube.itag_remap.quality.720p.itags", "22, 45, 84, 102, 120, 136");
-pref("flashgot.media.YouTube.itag_remap.quality.1080p", "1080p");
-pref("flashgot.media.YouTube.itag_remap.quality.1080p.itags", "37, 46, 137");
-pref("flashgot.media.YouTube.itag_remap.quality.1440p", "1440p");
-pref("flashgot.media.YouTube.itag_remap.quality.1440p.itags", "264");
-pref("flashgot.media.YouTube.itag_remap.quality.highres", "Original");
-pref("flashgot.media.YouTube.itag_remap.quality.highres.itags", "38, 138");
-pref("flashgot.media.YouTube.itag_remap.quality.48k", "48k");
-pref("flashgot.media.YouTube.itag_remap.quality.48k.itags", "139");
-pref("flashgot.media.YouTube.itag_remap.quality.128k", "128k");
-pref("flashgot.media.YouTube.itag_remap.quality.128k.itags", "140, 171");
-pref("flashgot.media.YouTube.itag_remap.quality.256k", "256k");
-pref("flashgot.media.YouTube.itag_remap.quality.256k.itags", "141, 172");
-pref("flashgot.media.YouTube.remap_quality_sort_order", "Original, 1440p, 1080p, 1080p (3D), 720p, 720p (3D), 520p, 480p, 480p (3D), 360p, 360p (3D), 270p, 240p, 180p, 144p, 256k, 128k, 48k");
-pref("flashgot.media.YouTube.remap_type_sort_order", "mp4, flv, webm, 3gp, audio/mp4");
+pref("flashgot.media.YouTube.type_sort_order", "video/mp4, video/x-flv, video/webm, video/3gpp, audio/mp4, audio/webm");
+pref("flashgot.media.YouTube.remap_type_sort_order", "mp4, flv, webm, 3gp, audio/mp4, audio/webm");
+pref("flashgot.media.YouTube.itag_map.quality_sort_key.480", "480");
+pref("flashgot.media.YouTube.itag_map.quality_sort_key.480.itags", "59");
 
 
 
diff --git a/install.js b/install.js
index 768b6e8..0625ec1 100644
--- a/install.js
+++ b/install.js
@@ -1,7 +1,7 @@
 const APP_DISPLAY_NAME = "FlashGot";
 const APP_NAME = "flashgot";
 const APP_PACKAGE = "/informaction/flashgot";
-const APP_VERSION = "1.5.6.7";
+const APP_VERSION = "1.5.6.10";
 
 const APP_PREFS_FILE="defaults/preferences/flashgot.js";
 const APP_XPCOM_SERVICE="components/flashgotService.js";
diff --git a/install.rdf b/install.rdf
index b91be9a..ae69ebc 100644
--- a/install.rdf
+++ b/install.rdf
@@ -5,7 +5,7 @@
  
    <em:id>{19503e42-ca3c-4c27-b1e2-9cdb2170ee34}</em:id>
    <em:name>FlashGot</em:name>
-   <em:version>1.5.6.7</em:version>
+   <em:version>1.5.6.10</em:version>
    <em:description>Enables Firefox, Mozilla Suite, Netscape and Thunderbird to handle single and massive ("all" and "selection") downloads using the most popular external download managers for Windows, Mac OS X, Linux and FreeBSD (dozens currently supported, see Extension's Home Page for details). FlashGot offers also a Build Gallery functionality which helps to synthetize full media galleries in one page, from serial contents originally scattered on several pages, fo [...]
    <em:creator>Giorgio Maone</em:creator>
    <em:type>2</em:type>
@@ -86,7 +86,7 @@
      <Description>
      <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
      <em:minVersion>2.0</em:minVersion>
-     <em:maxVersion>35.0</em:maxVersion>
+     <em:maxVersion>38.0</em:maxVersion>
      </Description>
    </em:targetApplication>
    
@@ -104,7 +104,7 @@
       <Description>
         <em:id>{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}</em:id>
         <em:minVersion>2.0</em:minVersion>
-        <em:maxVersion>2.32</em:maxVersion>
+        <em:maxVersion>2.34</em:maxVersion>
       </Description>
    </em:targetApplication>
    
@@ -113,7 +113,7 @@
       <Description>
         <em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id>
         <em:minVersion>2.0</em:minVersion>
-        <em:maxVersion>35.0</em:maxVersion>
+        <em:maxVersion>38.0</em:maxVersion>
       </Description>
     </em:targetApplication>
    
@@ -131,7 +131,7 @@
     <Description>
       <em:id>toolkit at mozilla.org</em:id>
       <em:minVersion>1.9a3</em:minVersion>
-      <em:maxVersion>28.0</em:maxVersion>
+      <em:maxVersion>38.0</em:maxVersion>
     </Description>
     </em:targetApplication>
     

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



More information about the Pkg-mozext-commits mailing list