| Index: lib/synchronizer.js | 
| =================================================================== | 
| --- a/lib/synchronizer.js | 
| +++ b/lib/synchronizer.js | 
| @@ -25,17 +25,16 @@ | 
| MILLIS_IN_SECOND, MILLIS_IN_MINUTE, | 
| MILLIS_IN_HOUR, MILLIS_IN_DAY} = require("./downloader"); | 
| const {Filter} = require("./filterClasses"); | 
| const {FilterStorage} = require("./filterStorage"); | 
| const {FilterNotifier} = require("./filterNotifier"); | 
| const {Prefs} = require("prefs"); | 
| const {Subscription, | 
| DownloadableSubscription} = require("./subscriptionClasses"); | 
| -const {Utils} = require("utils"); | 
|  | 
| const INITIAL_DELAY = 1 * MILLIS_IN_MINUTE; | 
| const CHECK_INTERVAL = 1 * MILLIS_IN_HOUR; | 
| const DEFAULT_EXPIRATION_INTERVAL = 5 * MILLIS_IN_DAY; | 
|  | 
| /** | 
| * The object providing actual downloading functionality. | 
| * @type {Downloader} | 
| @@ -149,19 +148,16 @@ | 
| redirectCallback) | 
| { | 
| let lines = responseText.split(/[\r\n]+/); | 
| let headerMatch = /\[Adblock(?:\s*Plus\s*([\d.]+)?)?\]/i.exec(lines[0]); | 
| if (!headerMatch) | 
| return errorCallback("synchronize_invalid_data"); | 
| let minVersion = headerMatch[1]; | 
|  | 
| -    // Don't remove parameter comments immediately but add them to a list first, | 
| -    // they need to be considered in the checksum calculation. | 
| -    let remove = []; | 
| let params = { | 
| redirect: null, | 
| homepage: null, | 
| title: null, | 
| version: null, | 
| expires: null | 
| }; | 
| for (let i = 0; i < lines.length; i++) | 
| @@ -169,24 +165,17 @@ | 
| let match = /^\s*!\s*(\w+)\s*:\s*(.*)/.exec(lines[i]); | 
| if (match) | 
| { | 
| let keyword = match[1].toLowerCase(); | 
| let value = match[2]; | 
| if (keyword in params) | 
| { | 
| params[keyword] = value; | 
| -          remove.push(i); | 
| -        } | 
| -        else if (keyword == "checksum") | 
| -        { | 
| lines.splice(i--, 1); | 
| -          let checksum = Utils.generateChecksum(lines); | 
| -          if (checksum && checksum != value.replace(/=+$/, "")) | 
| -            return errorCallback("synchronize_checksum_mismatch"); | 
| } | 
| } | 
| } | 
|  | 
| if (params.redirect) | 
| return redirectCallback(params.redirect); | 
|  | 
| // Handle redirects | 
| @@ -213,20 +202,16 @@ | 
| // The download actually succeeded | 
| subscription.lastSuccess = subscription.lastDownload = Math.round( | 
| Date.now() / MILLIS_IN_SECOND | 
| ); | 
| subscription.downloadStatus = "synchronize_ok"; | 
| subscription.downloadCount = downloadable.downloadCount; | 
| subscription.errors = 0; | 
|  | 
| -    // Remove lines containing parameters | 
| -    for (let i = remove.length - 1; i >= 0; i--) | 
| -      lines.splice(remove[i], 1); | 
| - | 
| // Process parameters | 
| if (params.homepage) | 
| { | 
| let url; | 
| try | 
| { | 
| url = new URL(params.homepage); | 
| } | 
|  |