diff --git a/.gitignore b/.gitignore
index 87f449d232127ba11e30a2e07fbc588edacd4bfc..ec0501292285cf47b589c219feaea714222e5492 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,2 @@
 audit/node_modules
 audit/report.txt
-*.xpi
-*.crx
-.idea
diff --git a/audit/README.md b/audit/README.md
index b8d5a7b536490510a9fb9a1d5cd10a3219b0721a..c7fdd5a09726efe903b772abed3a9255c9df8cd6 100644
--- a/audit/README.md
+++ b/audit/README.md
@@ -1,29 +1,18 @@
-INTRODUCTION
+Introduction
 ------------
 
-This script (first introduced in Decentraleyes v1.1.5) should make reviewing this extension a lot easier than it used to be. It's open source and open for scrutiny, and it automatically compares the bundled libraries (resources) to their original sources (after removing any source mapping URLs).
+This audit script allows any user and extension reviewer to verify the integrity of the bundled resources. It automatically, and transparently, compares all bundled libraries to their original sources.
 
 
-FOR NON-LINUX USERS
--------------------
-
-This usage guide is tailored to Linux based operating systems. If you're on a different type of system, the easiest direct solution might be to launch a free Linux box with Node.js pre-installed on Red Hat OpenShift. You can then SSH into it (after adding your own machine's public key to your account).
-
-Having said that, every terminal command in the usage guide below comes with a description, so it should not be too hard to get this done on practically any type of configuration.
-
-
-USAGE INSTRUCTIONS
+Usage Instructions (Unix)
 ------------------
 
-1. Make sure you have Node.js installed on your machine (or install it).
+1. Make sure you have Node.js installed on your machine.
 
-2. Open up a terminal and 'cd' into this directory.
-    Description: Navigate to this directory.
+2. Open up a terminal and ```cd``` into this directory.
 
-3. Execute 'npm install' to fetch any dependencies.
+3. Execute ```npm install``` to fetch any dependencies.
 
-4. Run the audit script by executing 'node run'.
-    Description: Run the script through Node.js and view the output.
+4. Run the audit script by executing ```node run```.
 
-Note: If you'd like to store the report, run 'node run > report.txt'.
-    Note description: It's possible to write the console output to a file.
+**Note:** If you'd like to save the report, run ```node run > report.txt```.
\ No newline at end of file
diff --git a/audit/package-lock.json b/audit/package-lock.json
new file mode 100644
index 0000000000000000000000000000000000000000..88ac7d2e0ef25dfff3411b297ee15e50efe0f484
--- /dev/null
+++ b/audit/package-lock.json
@@ -0,0 +1,13 @@
+{
+  "name": "decentraleyes-audit",
+  "version": "1.5.0",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "source-map-url": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+      "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
+    }
+  }
+}
diff --git a/audit/package.json b/audit/package.json
index 25584660a74683b235c3d9d0cd4140d379c5a8d3..534bad98fd9bca1921108ad5f188495ddb3ddf46 100644
--- a/audit/package.json
+++ b/audit/package.json
@@ -1,6 +1,6 @@
 {
   "name": "decentraleyes-audit",
-  "version": "1.4.0",
+  "version": "1.5.0",
   "author": "Thomas Rientjes",
   "license": "MPL-2.0",
   "description": "Library audit tool for Decentraleyes.",
diff --git a/audit/run.js b/audit/run.js
index 3b2ebbe92066b81e7d3c7e85240afb7e0810b5a4..b20a4280a98084a830686c7e93dc0ce6f788ad3d 100644
--- a/audit/run.js
+++ b/audit/run.js
@@ -31,6 +31,7 @@ sourceMappingURL = require('source-map-url');
 var localResourceLocation = '../resources';
 var localResourceLocationLength = localResourceLocation.length;
 var localResourcePaths = [];
+var comparedResourceAmount = 0;
 var resourceAmount = 0;
 
 /**
@@ -41,10 +42,6 @@ function _fetchLocalResourcePaths(folderPath) {
 
     fileSystem.readdirSync(folderPath).forEach(function (resourceName) {
 
-        if (resourceName === '_audit') {
-            return localResourcePaths;
-        }
-
         var resourcePath = folderPath + '/' + resourceName;
         var resourceStatistics = fileSystem.statSync(resourcePath);
 
@@ -75,7 +72,7 @@ function _getLocalResourceContents(fileLocation, callback) {
 
                         var localFileContents = buffer.toString('utf8', 0, buffer.length);
 
-                        fileSystem.close(fileDescriptor);
+                        fileSystem.close(fileDescriptor, function () {});
                         callback(localFileContents);
                     });
                 });
@@ -149,10 +146,11 @@ function _hashFileContents(fileContents) {
 function _compareResources(localResourceContents, remoteResourceContents, URL) {
 
     var hasSourceMappingURL = sourceMappingURL.existsIn(remoteResourceContents);
-    var sourceMappingNotice = '[ ] RESOURCE CONTAINS A SOURCE MAPPING URL';
+    var sourceMappingNotice = '[ ] REMOTE RESOURCE HAD SOURCE MAPPING URL';
 
     if (hasSourceMappingURL) {
-        sourceMappingNotice = '[X] RESOURCE CONTAINS A SOURCE MAPPING URL';
+        remoteResourceContents = sourceMappingURL.removeFrom(remoteResourceContents);
+        sourceMappingNotice = '[X] REMOTE RESOURCE HAD SOURCE MAPPING URL';
     }
 
     var localResourceHash = _hashFileContents(localResourceContents);
@@ -172,6 +170,8 @@ function _compareResources(localResourceContents, remoteResourceContents, URL) {
     console.log();
     console.log('[X] LOCAL AND REMOTE RESOURCE HASHES MATCH');
     console.log(sourceMappingNotice);
+
+    _incrementComparedResourceAmount();
 }
 
 function _showCompletedMessage() {
@@ -182,6 +182,18 @@ function _showCompletedMessage() {
     console.log();
 }
 
+function _incrementComparedResourceAmount() {
+
+    comparedResourceAmount++;
+
+    if (comparedResourceAmount === resourceAmount) {
+
+        setTimeout(function () {
+            _showCompletedMessage();
+        }, 500);
+    }
+}
+
 /**
  * Initializations
  */
@@ -211,13 +223,6 @@ localResourcePaths.forEach(function (resourcePath, index) {
 
             console.log();
             console.log('------------------------------------------');
-
-            if (index === resourceAmount - 1) {
-
-                setTimeout(function () {
-                    _showCompletedMessage();
-                }, 500);
-            }
         });
     });
 
diff --git a/core/interceptor.js b/core/interceptor.js
index 78cb9aedde064060516264e197d23ec74ed16432..57ce92afef9f200343eb3595c07a34af20b3b0bc 100644
--- a/core/interceptor.js
+++ b/core/interceptor.js
@@ -31,7 +31,7 @@ const HTTP_EXPRESSION = /^http?:\/\//;
 
 interceptor.handleRequest = function (requestDetails, tabIdentifier, tab) {
 
-    let validCandidate, targetDetails, targetPath;
+    let validCandidate, tabDomain, targetDetails, targetPath;
 
     validCandidate = requestAnalyzer.isValidCandidate(requestDetails, tab);
 
@@ -42,6 +42,31 @@ interceptor.handleRequest = function (requestDetails, tabIdentifier, tab) {
         };
     }
 
+    try {
+        tabDomain = tab.url.match(WEB_DOMAIN_EXPRESSION)[1];
+        tabDomain = requestAnalyzer._normalizeDomain(tabDomain);
+    } catch (exception) {
+        tabDomain = 'example.org';
+    }
+
+    // Temporary list of undetectable tainted domains.
+    let undetectableTaintedDomains = {
+        'cdnjs.com': true,
+        'dropbox.com': true,
+        'minigames.mail.ru': true,
+        'report-uri.io': true,
+        'securityheaders.io': true,
+        'stefansundin.github.io': true,
+        'udacity.com': true
+    };
+
+    if (undetectableTaintedDomains[tabDomain] || /yandex\./.test(tabDomain)) {
+
+        if (tabDomain !== 'yandex.ru') {
+            return interceptor._handleMissingCandidate(requestDetails.url);
+        }
+    }
+
     targetDetails = requestAnalyzer.getLocalTarget(requestDetails);
     targetPath = targetDetails.path;
 
diff --git a/core/main.js b/core/main.js
index 863d03e32e9f37d859b028b970d2f8b0eb1c8449..f1d49bc6f2c4b6c5110ce37917814881e29b79f2 100644
--- a/core/main.js
+++ b/core/main.js
@@ -13,11 +13,73 @@
 
 'use strict';
 
+/**
+ * Main
+ */
+
+var main = {};
+
+/**
+ * Private Methods
+ */
+
+main._initializeOptions = function () {
+
+    let optionDefaults = {
+        'showIconBadge': true,
+        'blockMissing': false,
+        'disablePrefetch': true,
+        'stripMetadata': true,
+        'whitelistedDomains': {}
+    };
+
+    chrome.storage.local.get(optionDefaults, function (options) {
+
+        if (options === null) {
+            options = optionDefaults;
+        }
+
+        if (options.disablePrefetch !== false) {
+
+            chrome.privacy.network.networkPredictionEnabled.set({
+                'value': false
+            });
+        }
+
+        chrome.storage.local.set(options);
+    });
+};
+
+main._showReleaseNotes = function (details) {
+
+    let location = chrome.extension.getURL('pages/welcome/welcome.html');
+
+    if (details.reason === 'install' || details.reason === 'update') {
+
+        if (details.temporary !== true) {
+
+            chrome.storage.local.get({
+                'showReleaseNotes': true
+            }, function (options) {
+
+                if (options.showReleaseNotes === true) {
+
+                    chrome.tabs.create({
+                        'url': location,
+                        'active': false
+                    });
+                }
+            });
+        }
+    }
+};
+
 /**
  * Initializations
  */
 
-chrome.privacy.network.networkPredictionEnabled.set({'value': false});
+chrome.runtime.onInstalled.addListener(main._showReleaseNotes);
+main._initializeOptions();
 
 chrome.browserAction.setBadgeBackgroundColor({
     'color': [74, 130, 108, 255]
diff --git a/core/request-analyzer.js b/core/request-analyzer.js
index c4e53604fe1553e83fce55c804952d13ccf58db0..513a0991c11c28c2855b470e0a3e67eaa9969714 100644
--- a/core/request-analyzer.js
+++ b/core/request-analyzer.js
@@ -29,7 +29,6 @@ const VERSION_PLACEHOLDER = '{version}';
 const WEB_DOMAIN_EXPRESSION = /:\/\/(.[^\/]+)(.*)/;
 const WEB_PREFIX_VALUE = 'www.';
 const WEB_PREFIX_LENGTH = WEB_PREFIX_VALUE.length;
-const VALUE_SEPARATOR = ';';
 
 /**
  * Public Methods
@@ -37,7 +36,7 @@ const VALUE_SEPARATOR = ';';
 
 requestAnalyzer.isValidCandidate = function (requestDetails, tabDetails) {
 
-    let destinationHost, initiatorHost;
+    let initiatorHost;
 
     try {
         initiatorHost = tabDetails.url.match(WEB_DOMAIN_EXPRESSION)[1];
@@ -108,15 +107,17 @@ requestAnalyzer._findLocalTarget = function (resourceMappings, basePath, channel
 
         if (resourcePattern.startsWith(resourceMold)) {
 
-            let targetPath, localPath;
+            let targetPath, version;
 
             targetPath = resourceMappings[resourceMold].path;
             targetPath = targetPath.replace(VERSION_PLACEHOLDER, versionNumber);
 
+            version = versionNumber && versionNumber[0] || targetPath.match(VERSION_EXPRESSION);
+
             // Prepare and return a local target.
             return {
                 source: channelHost,
-                version: versionNumber[0],
+                version: version,
                 path: targetPath
             };
         }
diff --git a/core/state-manager.js b/core/state-manager.js
index 58bddafe1d841252bf7d88dc3bb69c69560ce9ff..2f1d80cc98f4e7ceade28e7945a46913557bddeb 100644
--- a/core/state-manager.js
+++ b/core/state-manager.js
@@ -23,13 +23,10 @@ var stateManager = {};
  * Constants
  */
 
-const BLOCKED_BY_CLIENT = 'net::ERR_BLOCKED_BY_CLIENT';
 const BLOCKING_ACTION = 'blocking';
 const HOST_PREFIX = '*://';
 const HOST_SUFFIX = '/*';
-const JAVASCRIPT_REQUEST_TYPE = 'script';
 const REQUEST_HEADERS = 'requestHeaders';
-const XML_HTTP_REQUEST_TYPE = 'xmlhttprequest';
 
 /**
  * Public Methods
@@ -45,19 +42,22 @@ stateManager.registerInjection = function (tabIdentifier, injection) {
     registeredTab.injections[injectionIdentifier] = injection;
     injectionCount = Object.keys(registeredTab.injections).length || 0;
 
-    if (injectionCount > 0) {
+    if (stateManager.showIconBadge === true) {
 
-        chrome.browserAction.setBadgeText({
-            tabId: tabIdentifier,
-            text: injectionCount.toString()
-        });
+        if (injectionCount > 0) {
 
-    } else {
+            chrome.browserAction.setBadgeText({
+                tabId: tabIdentifier,
+                text: injectionCount.toString()
+            });
 
-        chrome.browserAction.setBadgeText({
-            tabId: tabIdentifier,
-            text: ''
-        });
+        } else {
+
+            chrome.browserAction.setBadgeText({
+                tabId: tabIdentifier,
+                text: ''
+            });
+        }
     }
 
     if (isNaN(interceptor.amountInjected)) {
@@ -79,6 +79,28 @@ stateManager.registerInjection = function (tabIdentifier, injection) {
     }
 };
 
+stateManager.addDomainToWhitelist = function (domain) {
+
+    return new Promise((resolve) => {
+
+        let whitelistedDomains = requestAnalyzer.whitelistedDomains;
+        whitelistedDomains[domain] = true;
+
+        chrome.storage.local.set({whitelistedDomains}, resolve);
+    });
+};
+
+stateManager.deleteDomainFromWhitelist = function (domain) {
+
+    return new Promise((resolve) => {
+
+        let whitelistedDomains = requestAnalyzer.whitelistedDomains;
+        delete whitelistedDomains[domain];
+
+        chrome.storage.local.set({whitelistedDomains}, resolve);
+    });
+};
+
 /**
  * Private Methods
  */
@@ -96,7 +118,6 @@ stateManager._createTab = function (tab) {
     requestFilters = {
 
         'tabId': tabIdentifier,
-        'types': stateManager.validTypes,
         'urls': stateManager.validHosts
     };
 
@@ -120,29 +141,82 @@ stateManager._updateTab = function (details) {
         return;
     }
 
-    chrome.browserAction.setBadgeText({
-        tabId: tabIdentifier,
-        text: ''
-    });
+    if (stateManager.showIconBadge === true) {
+
+        chrome.browserAction.setBadgeText({
+            tabId: tabIdentifier,
+            text: ''
+        });
+    }
 
     if (stateManager.tabs[tabIdentifier]) {
         stateManager.tabs[tabIdentifier].injections = {};
     }
 };
 
+stateManager._stripMetadata = function (requestDetails) {
+
+    for (let i = 0; i < requestDetails.requestHeaders.length; ++i) {
+
+        if (requestDetails.requestHeaders[i].name === 'Origin') {
+            requestDetails.requestHeaders.splice(i--, 1);
+        } else if (requestDetails.requestHeaders[i].name === 'Referer') {
+            requestDetails.requestHeaders.splice(i--, 1);
+        }
+    }
+
+    return {
+        'requestHeaders': requestDetails.requestHeaders
+    };
+};
+
+stateManager._handleStorageChanged = function (changes) {
+
+    if ('showIconBadge' in changes) {
+        
+        stateManager.showIconBadge = changes.showIconBadge.newValue;
+
+        if (changes.showIconBadge.newValue !== true) {
+
+            chrome.tabs.query({}, function (tabs) {
+                tabs.forEach(stateManager._removeIconBadgeFromTab);
+            });
+        }
+    }
+
+    if ('stripMetadata' in changes) {
+
+        let onBeforeSendHeaders;
+
+        onBeforeSendHeaders = chrome.webRequest.onBeforeSendHeaders;
+
+        onBeforeSendHeaders.removeListener(stateManager._stripMetadata, {
+            'urls': stateManager.validHosts
+        }, [BLOCKING_ACTION, REQUEST_HEADERS]);
+
+        if (changes.stripMetadata.newValue !== false) {
+            
+            onBeforeSendHeaders.addListener(stateManager._stripMetadata, {
+                'urls': stateManager.validHosts
+            }, [BLOCKING_ACTION, REQUEST_HEADERS]);
+        }
+    }
+};
+
+stateManager._removeIconBadgeFromTab = function (tab) {
+
+    chrome.browserAction.setBadgeText({
+        tabId: tab.id,
+        text: ''
+    });
+};
+
 /**
  * Initializations
  */
 
 stateManager.requests = {};
 stateManager.tabs = {};
-
-stateManager.validTypes = [
-
-    JAVASCRIPT_REQUEST_TYPE,
-    XML_HTTP_REQUEST_TYPE
-];
-
 stateManager.validHosts = [];
 
 for (let mapping in mappings) {
@@ -159,6 +233,10 @@ chrome.tabs.query({}, function (tabs) {
     tabs.forEach(stateManager._createTab);
 });
 
+chrome.storage.local.get('showIconBadge', function (items) {
+    stateManager.showIconBadge = items.showIconBadge || true;
+});
+
 /**
  * Event Handlers
  */
@@ -190,17 +268,8 @@ chrome.webRequest.onBeforeRedirect.addListener(function (requestDetails) {
 
 }, {'urls': ['*://*/*']});
 
-chrome.webRequest.onBeforeSendHeaders.addListener(function (requestDetails) {
-
-    for (let i = 0; i < requestDetails.requestHeaders.length; ++i) {
-
-        if (requestDetails.requestHeaders[i].name === 'Origin') {
-            requestDetails.requestHeaders.splice(i, 1);
-        } else if (requestDetails.requestHeaders[i].name === 'Referer') {
-            requestDetails.requestHeaders.splice(i, 1);
-        }
-    }
-
-    return {requestHeaders: requestDetails.requestHeaders};
+chrome.webRequest.onBeforeSendHeaders.addListener(stateManager._stripMetadata, {
+    'urls': stateManager.validHosts
+}, [BLOCKING_ACTION, REQUEST_HEADERS]);
 
-}, {urls: stateManager.validHosts}, [BLOCKING_ACTION, REQUEST_HEADERS]);
+chrome.storage.onChanged.addListener(stateManager._handleStorageChanged);
diff --git a/crowdin.yaml b/crowdin.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..92d78e1873a21fd70c075b9adbe0edad9137bef0
--- /dev/null
+++ b/crowdin.yaml
@@ -0,0 +1,30 @@
+"project_identifier": "decentraleyes"
+"preserve_hierarchy": true
+"files":
+  -
+    "source": "/_locales/en_US/messages.json"
+    "translation": "/_locales/%locale_with_underscore%/messages.json"
+    "languages_mapping":
+      "locale_with_underscore":
+        "ar": "ar"
+        "bg": "bg"
+        "da": "da"
+        "de": "de"
+        "el": "el"
+        "et": "et"
+        "eo": "eo"
+        "es-ES": "es"
+        "fi": "fi"
+        "fr": "fr"
+        "he": "he"
+        "hu": "hu"
+        "id": "id"
+        "is": "is"
+        "it": "it"
+        "ja": "ja"
+        "nl": "nl"
+        "pl": "pl"
+        "ro": "ro"
+        "ru": "ru"
+        "sv-SE": "sv"
+        "tr": "tr"
diff --git a/manifest.json b/manifest.json
index c5387e288a8bf08cf571e5e25f98b969a4134af1..79295d05c83d3c880fc01425d4a1ed4546539eb6 100644
--- a/manifest.json
+++ b/manifest.json
@@ -19,6 +19,7 @@
     "*://*/*",
     "privacy",
     "storage",
+    "unlimitedStorage",
     "tabs",
     "webNavigation",
     "webRequest",
@@ -38,12 +39,12 @@
       "38": "icons/action/icon38.png",
       "64": "icons/action/icon64.png"
     },
-    "default_popup": "pages/popup/popup.html"
+      "default_popup": "pages/popup/popup.html",
+      "browser_style": false
   },
 
   "options_ui": {
-    "page": "pages/options/options.html",
-    "chrome_style": true
+    "page": "pages/options/options.html"
   },
 
   "web_accessible_resources": [
diff --git a/modules/fontawesome/fontawesome.js b/modules/fontawesome/fontawesome.js
new file mode 100644
index 0000000000000000000000000000000000000000..67714be7fb473da6bee46788fd5fcb7c44cb08a3
--- /dev/null
+++ b/modules/fontawesome/fontawesome.js
@@ -0,0 +1 @@
+!function(){"use strict";function t(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function n(t){return~en.indexOf(t)}function e(t){for(var n=[],e=t.length>>>0;e--;)n[e]=t[e];return n}function r(t,e){var r=e.split("-"),i=r[0],o=r.slice(1).join("-");return i!==t||""===o||n(o)?null:o}function i(t){return t.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function o(t){return Object.keys(t).reduce(function(n,e){return n+(e+'="')+t[e]+'" '},"")}function a(t){return Object.keys(t).reduce(function(n,e){return n+(e+": ")+t[e]+";"},"")}function f(t){return 16!==t.size||0!==t.x||0!==t.y||0!==t.rotate||t.flipX||t.flipY}function c(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e=n.startCentered,r=void 0!==e&&e,i=n.width,o=void 0===i?16:i,a=n.height,f=void 0===a?16:a,c="";return c+=r&&tn?"translate("+(t.x/16-o/2)+"em, "+(t.y/16-f/2)+"em) ":r?"translate(calc(-50% + "+t.x/16+"em), calc(-50% + "+t.y/16+"em)) ":"translate("+t.x/16+"em, "+t.y/16+"em) ",c+="scale("+t.size/16*(t.flipX?-1:1)+", "+t.size/16*(t.flipY?-1:1)+") ",c+="rotate("+t.rotate+"deg) "}function u(t){var n=t.prefix,e=t.iconName,r=t.width,u=t.height,s=t.layers,l=t.transform,p=t.title,h=t.extra,d="fa-w-"+Math.ceil(r/u*16),m=Gt({},h.attributes,{"data-prefix":n,"data-icon":e,class:[Jt.replacementClass,Jt.familyPrefix+"-"+e,d].concat(h.classes).join(" "),role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 "+r+" "+u}),g=Gt({},h.styles);f(l)&&(g.transform=c(l),g["-webkit-transform"]=g.transform);var v=a(g);v.length>0&&(m.style=v);var b=p?'<title id="'+m["aria-labelledby"]+'">'+i(p)+"</title>":"";return"<svg "+o(m)+">"+b+'<path d="'+s[0]+'" /></svg>'}function s(t){var n=t.content,e=t.width,r=t.height,i=t.transform,u=t.title,s=t.extra,l=Gt({},s.attributes,{title:u,class:s.classes.join(" ")}),p=Gt({},s.styles);f(i)&&(p.transform=c(i,{startCentered:!0,width:e,height:r}),p["-webkit-transform"]=p.transform);var h=a(p);return h.length>0&&(l.style=h),"<span "+o(l)+">"+n+"</span>"}function l(t){var n=t.getAttribute?t.getAttribute("class"):null;return!!n&&(~n.toString().indexOf(Jt.replacementClass)||~n.toString().indexOf("fa-layers-text"))}function p(t,n){window.requestAnimationFrame(function(){var e=un.begin("mutate");t.map(function(t){var n=sn(t,2),e=n[0],r=n[1];e.parentNode&&(e.outerHTML=r+(Jt.keepOriginalSource&&"svg"!==e.tagName.toLowerCase()?"\x3c!-- "+e.outerHTML+" --\x3e":""))}),"function"==typeof n&&n(),e()})}function h(t){var n=t.treeCallback,r=t.nodeCallback;new MutationObserver(function(t){e(t).forEach(function(t){"childList"===t.type&&t.addedNodes.length>0&&!l(t.addedNodes[0])&&n(t.target),"attributes"===t.type&&l(t.target)&&~nn.indexOf(t.attributeName)&&r(t.target)})}).observe(document.getElementsByTagName("body")[0],{childList:!0,attributes:!0,characterData:!0,subtree:!0})}function d(t,n,e,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(e=t[++i]);++i<o;)e=n(e,t[i],i,t);return e}function m(t,n){for(var e=-1,r=Array(t);++e<t;)r[e]=n(e);return r}function g(t){var n=yn.call(t,_n),e=t[_n];try{t[_n]=void 0;var r=!0}catch(t){}var i=wn.call(t);return r&&(n?t[_n]=e:delete t[_n]),i}function v(t){return jn.call(t)}function b(t){return null==t?void 0===t?kn:xn:On&&On in Object(t)?g(t):v(t)}function y(t){return null!=t&&"object"==typeof t}function w(t){return y(t)&&b(t)==An}function _(t,n){return!!(n=null==n?Ln:n)&&("number"==typeof t||Fn.test(t))&&t>-1&&t%1==0&&t<n}function j(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=Bn}function x(t,n){var e=Mn(t),r=!e&&Cn(t),i=!e&&!r&&In(t),o=!e&&!r&&!i&&Vn(t),a=e||r||i||o,f=a?m(t.length,String):[],c=f.length;for(var u in t)!n&&!Wn.call(t,u)||a&&("length"==u||i&&("offset"==u||"parent"==u)||o&&("buffer"==u||"byteLength"==u||"byteOffset"==u)||_(u,c))||f.push(u);return f}function k(t){var n=t&&t.constructor;return t===("function"==typeof n&&n.prototype||Hn)}function O(t){if(!k(t))return Yn(t);var n=[];for(var e in Object(t))Gn.call(t,e)&&"constructor"!=e&&n.push(e);return n}function A(t){var n=typeof t;return null!=t&&("object"==n||"function"==n)}function z(t){if(!A(t))return!1;var n=b(t);return n==Kn||n==Qn||n==Jn||n==Zn}function S(t){return null!=t&&j(t.length)&&!z(t)}function T(t){return S(t)?x(t):O(t)}function C(t,n){return t&&hn(t,n,T)}function M(t,n){return t===n||t!==t&&n!==n}function P(t,n){for(var e=t.length;e--;)if(M(t[e][0],n))return e;return-1}function E(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function N(t){return!!re&&re in t}function I(t){if(null!=t){try{return ie.call(t)}catch(t){}try{return t+""}catch(t){}}return""}function L(t){return!(!A(t)||N(t))&&(z(t)?le:ae).test(I(t))}function F(t,n){return null==t?void 0:t[n]}function B(t,n){var e=F(t,n);return L(e)?e:void 0}function D(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function $(t){var n=typeof t;return"string"==n||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==t:null===t}function X(t,n){var e=t.__data__;return $(n)?e["string"==typeof n?"string":"hash"]:e.map}function R(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function U(t){var n=this.__data__=new E(t);this.size=n.size}function q(t){var n=-1,e=null==t?0:t.length;for(this.__data__=new R;++n<e;)this.add(t[n])}function V(t,n){for(var e=-1,r=null==t?0:t.length;++e<r;)if(n(t[e],e,t))return!0;return!1}function W(t,n){return t.has(n)}function H(t,n,e,r,i,o){var a=e&we,f=t.length,c=n.length;if(f!=c&&!(a&&c>f))return!1;var u=o.get(t);if(u&&o.get(n))return u==n;var s=-1,l=!0,p=e&_e?new q:void 0;for(o.set(t,n),o.set(n,t);++s<f;){var h=t[s],d=n[s];if(r)var m=a?r(d,h,s,n,t,o):r(h,d,s,t,n,o);if(void 0!==m){if(m)continue;l=!1;break}if(p){if(!V(n,function(t,n){if(!W(p,n)&&(h===t||i(h,t,e,r,o)))return p.push(n)})){l=!1;break}}else if(h!==d&&!i(h,d,e,r,o)){l=!1;break}}return o.delete(t),o.delete(n),l}function Y(t){var n=-1,e=Array(t.size);return t.forEach(function(t,r){e[++n]=[r,t]}),e}function G(t){var n=-1,e=Array(t.size);return t.forEach(function(t){e[++n]=t}),e}function J(t,n,e,r,i,o,a){switch(e){case Ie:if(t.byteLength!=n.byteLength||t.byteOffset!=n.byteOffset)return!1;t=t.buffer,n=n.buffer;case Ne:return!(t.byteLength!=n.byteLength||!o(new je(t),new je(n)));case Oe:case Ae:case Te:return M(+t,+n);case ze:return t.name==n.name&&t.message==n.message;case Ce:case Pe:return t==n+"";case Se:var f=Y;case Me:var c=r&xe;if(f||(f=G),t.size!=n.size&&!c)return!1;var u=a.get(t);if(u)return u==n;r|=ke,a.set(t,n);var s=H(f(t),f(n),r,i,o,a);return a.delete(t),s;case Ee:if(Fe)return Fe.call(t)==Fe.call(n)}return!1}function K(t,n){for(var e=-1,r=n.length,i=t.length;++e<r;)t[i+e]=n[e];return t}function Q(t,n,e){var r=n(t);return Mn(t)?r:K(r,e(t))}function Z(t,n){for(var e=-1,r=null==t?0:t.length,i=0,o=[];++e<r;){var a=t[e];n(a,e,t)&&(o[i++]=a)}return o}function tt(t){return Q(t,T,$e)}function nt(t,n,e,r,i,o){var a=e&Xe,f=tt(t),c=f.length;if(c!=tt(n).length&&!a)return!1;for(var u=c;u--;){var s=f[u];if(!(a?s in n:Re.call(n,s)))return!1}var l=o.get(t);if(l&&o.get(n))return l==n;var p=!0;o.set(t,n),o.set(n,t);for(var h=a;++u<c;){var d=t[s=f[u]],m=n[s];if(r)var g=a?r(m,d,s,n,t,o):r(d,m,s,t,n,o);if(!(void 0===g?d===m||i(d,m,e,r,o):g)){p=!1;break}h||(h="constructor"==s)}if(p&&!h){var v=t.constructor,b=n.constructor;v!=b&&"constructor"in t&&"constructor"in n&&!("function"==typeof v&&v instanceof v&&"function"==typeof b&&b instanceof b)&&(p=!1)}return o.delete(t),o.delete(n),p}function et(t,n,e,r,i,o){var a=Mn(t),f=Mn(n),c=a?er:Ze(t),u=f?er:Ze(n),s=(c=c==nr?rr:c)==rr,l=(u=u==nr?rr:u)==rr,p=c==u;if(p&&In(t)){if(!In(n))return!1;a=!0,s=!1}if(p&&!s)return o||(o=new U),a||Vn(t)?H(t,n,e,r,i,o):J(t,n,c,e,r,i,o);if(!(e&tr)){var h=s&&ir.call(t,"__wrapped__"),d=l&&ir.call(n,"__wrapped__");if(h||d){var m=h?t.value():t,g=d?n.value():n;return o||(o=new U),i(m,g,e,r,o)}}return!!p&&(o||(o=new U),nt(t,n,e,r,i,o))}function rt(t,n,e,r,i){return t===n||(null==t||null==n||!y(t)&&!y(n)?t!==t&&n!==n:et(t,n,e,r,rt,i))}function it(t,n,e,r){var i=e.length,o=i,a=!r;if(null==t)return!o;for(t=Object(t);i--;){var f=e[i];if(a&&f[2]?f[1]!==t[f[0]]:!(f[0]in t))return!1}for(;++i<o;){var c=(f=e[i])[0],u=t[c],s=f[1];if(a&&f[2]){if(void 0===u&&!(c in t))return!1}else{var l=new U;if(r)var p=r(u,s,c,t,n,l);if(!(void 0===p?rt(s,u,or|ar,r,l):p))return!1}}return!0}function ot(t){return t===t&&!A(t)}function at(t){for(var n=T(t),e=n.length;e--;){var r=n[e],i=t[r];n[e]=[r,i,ot(i)]}return n}function ft(t,n){return function(e){return null!=e&&(e[t]===n&&(void 0!==n||t in Object(e)))}}function ct(t){var n=at(t);return 1==n.length&&n[0][2]?ft(n[0][0],n[0][1]):function(e){return e===t||it(e,t,n)}}function ut(t){return"symbol"==typeof t||y(t)&&b(t)==fr}function st(t,n){if(Mn(t))return!1;var e=typeof t;return!("number"!=e&&"symbol"!=e&&"boolean"!=e&&null!=t&&!ut(t))||(ur.test(t)||!cr.test(t)||null!=n&&t in Object(n))}function lt(t,n){if("function"!=typeof t||null!=n&&"function"!=typeof n)throw new TypeError(sr);var e=function(){var r=arguments,i=n?n.apply(this,r):r[0],o=e.cache;if(o.has(i))return o.get(i);var a=t.apply(this,r);return e.cache=o.set(i,a)||o,a};return e.cache=new(lt.Cache||R),e}function pt(t,n){for(var e=-1,r=null==t?0:t.length,i=Array(r);++e<r;)i[e]=n(t[e],e,t);return i}function ht(t){if("string"==typeof t)return t;if(Mn(t))return pt(t,ht)+"";if(ut(t))return br?br.call(t):"";var n=t+"";return"0"==n&&1/t==-gr?"-0":n}function dt(t){return null==t?"":ht(t)}function mt(t,n){return Mn(t)?t:st(t,n)?[t]:mr(dt(t))}function gt(t){if("string"==typeof t||ut(t))return t;var n=t+"";return"0"==n&&1/t==-yr?"-0":n}function vt(t,n){for(var e=0,r=(n=mt(n,t)).length;null!=t&&e<r;)t=t[gt(n[e++])];return e&&e==r?t:void 0}function bt(t,n,e){var r=null==t?void 0:vt(t,n);return void 0===r?e:r}function yt(t,n){return null!=t&&n in Object(t)}function wt(t,n,e){for(var r=-1,i=(n=mt(n,t)).length,o=!1;++r<i;){var a=gt(n[r]);if(!(o=null!=t&&e(t,a)))break;t=t[a]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&j(i)&&_(a,i)&&(Mn(t)||Cn(t))}function _t(t,n){return null!=t&&wt(t,n,yt)}function jt(t,n){return st(t)&&ot(n)?ft(gt(t),n):function(e){var r=bt(e,t);return void 0===r&&r===n?_t(e,t):rt(n,r,wr|_r)}}function xt(t){return t}function kt(t){return function(n){return null==n?void 0:n[t]}}function Ot(t){return function(n){return vt(n,t)}}function At(t){return st(t)?kt(gt(t)):Ot(t)}function zt(t){return"function"==typeof t?t:null==t?xt:"object"==typeof t?Mn(t)?jt(t[0],t[1]):ct(t):At(t)}function St(t,n,e,r,i){return i(t,function(t,i,o){e=r?(r=!1,t):n(e,t,i,o)}),e}function Tt(t,n,e){var r=Mn(t)?d:St,i=arguments.length<3;return r(t,zt(n,4),e,i,te)}function Ct(t,n,e){"__proto__"==n&&jr?jr(t,n,{configurable:!0,enumerable:!0,value:e,writable:!0}):t[n]=e}function Mt(t,n){var e={};return n=zt(n,3),C(t,function(t,r,i){Ct(e,r,n(t,r,i))}),e}function Pt(t,n){return Or[t][n]}function Et(t,n){return Ar[t][n]}function Nt(t){return zr[t]||{prefix:null,iconName:null}}function It(t){for(var n="",e=0;e<t.length;e++)n+=("000"+t.charCodeAt(e).toString(16)).slice(-4);return n}function Lt(){return++Cr}function Ft(t){var n=t.getAttribute("data-prefix"),i=t.getAttribute("data-icon"),o=e(t.classList).reduce(function(t,n){var e=r(Jt.familyPrefix,n);if(Tr[n])t.prefix=n;else if(e){var i=Nt(e);t.iconName=i.iconName||e,t.prefix=i.prefix||t.prefix}else n!==Jt.replacementClass&&0!==n.indexOf("fa-w-")&&t.rest.push(n);return t},{prefix:"",iconName:"",rest:[]});return n&&i&&(o.prefix=n,o.iconName=i),o}function Bt(t){var n=t.getAttribute("style"),e=[];return n&&(e=n.split(";").reduce(function(t,n){var e=n.split(":"),r=ln(e),i=r[0],o=r.slice(1);return i&&o.length>0&&(t[i]=o.join(":").trim()),t},{})),e}function Dt(t){var n={size:16,x:0,y:0,flipX:!1,flipY:!1,rotate:0};return t?t.toLowerCase().split(" ").reduce(function(t,n){var e=n.toLowerCase().split("-"),r=e[0],i=e.slice(1).join("-");if(r&&"h"===i)return t.flipX=!0,t;if(r&&"v"===i)return t.flipY=!0,t;if(i=parseFloat(i),isNaN(i))return t;switch(r){case"grow":t.size=t.size+i;break;case"shrink":t.size=t.size-i;break;case"left":t.x=t.x-i;break;case"right":t.x=t.x+i;break;case"up":t.y=t.y-i;break;case"down":t.y=t.y+i;break;case"rotate":t.rotate=t.rotate+i}return t},n):n}function $t(t){var n=Ft(t),r=n.iconName,i=n.prefix,o=n.rest,a=Bt(t),f=Dt(t.getAttribute("data-fa-transform")),c=r;i&&void 0!==t.innerText&&t.innerText.length>1?c=Et(i,t.innerText):i&&void 0!==t.innerText&&1===t.innerText.length&&(c=Pt(i,It(t.innerText)));var u=e(t.attributes).reduce(function(t,n){return"class"!==t.name&&"style"!==t.name&&(t[n.name]=n.value),t},{}),s=t.getAttribute("title");return Jt.autoA11y&&!s&&(u["aria-hidden"]="true"),Jt.autoA11y&&s&&(u["aria-labelledby"]=Jt.replacementClass+"-"+r+"-title-"+Lt()),{iconName:c,title:s,prefix:i,transform:f,extra:{classes:o,styles:a,attributes:u}}}function Xt(t,n){var e=n.iconName,r=n.title,i=n.prefix,o=n.transform,a=n.extra,f=null;if(e&&i&&Mr[i]&&Mr[i][e]){var c=Mr[i][e],s=ln(c),l=s[0],p=s[1];s[2],s[3];f=[t,u({prefix:i,iconName:e,width:l,height:p,layers:s.slice(4),transform:o,title:r,extra:a})]}return f}function Rt(t,n){var e=n.title,r=n.transform,i=n.extra,o=null,a=null;if(tn){var f=parseInt(getComputedStyle(t).fontSize,10),c=t.getBoundingClientRect();o=c.width/f,a=c.height/f}return[t,s({content:t.innerHTML,width:o,height:a,transform:r,title:e,extra:i})]}function Ut(t){var n=$t(t);return~n.extra.classes.indexOf(Pr)?Rt(t,n):Xt(t,n)}function qt(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=Object.keys(Mr),i=["."+Pr].concat(r.map(function(t){return"."+t})).join(", ");if(0!==i.length){var o=un.begin("onTree"),a=e(t.querySelectorAll(i)).reduce(function(t,n){var e=Ut(n);return e&&t.push(e),t},[]);o(),p(a,n)}}function Vt(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,e=Ut(t);e&&p([e],n)}var Wt=Object.getOwnPropertySymbols,Ht=Object.prototype.hasOwnProperty,Yt=Object.prototype.propertyIsEnumerable,Gt=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var n={},e=0;e<10;e++)n["_"+String.fromCharCode(e)]=e;if("0123456789"!==Object.getOwnPropertyNames(n).map(function(t){return n[t]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(t){r[t]=t}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(t){return!1}}()?Object.assign:function(n,e){for(var r,i,o=t(n),a=1;a<arguments.length;a++){r=Object(arguments[a]);for(var f in r)Ht.call(r,f)&&(o[f]=r[f]);if(Wt){i=Wt(r);for(var c=0;c<i.length;c++)Yt.call(r,i[c])&&(o[i[c]]=r[i[c]])}}return o},Jt=Gt({},{namespace:"___FONT_AWESOME___",familyPrefix:"fa",replacementClass:"svg-inline--fa",autoReplaceSvg:!0,autoA11y:!0,observeMutations:!0,keepOriginalSource:!0,measurePerformance:!1},window.FontAwesomeConfig||{});Jt.autoReplaceSvg||(Jt.observeMutations=!1);var Kt=window.navigator.userAgent,Qt=void 0===Kt?"":Kt,Zt=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],tn=~Qt.indexOf("MSIE")||~Qt.indexOf("Trident/"),nn=["data-prefix","data-icon","data-fa-transform"],en=["lg","2x","3x","4x","5x","fw","ul","li","border","pull-left","pull-right","spin","pulse","rotate-90","rotate-180","rotate-270","flip-horizontal","flip-vertical","stack","stack-1x","stack-2x","inverse","layers","layers-text","layers-counter"].concat(Zt.map(function(t){return"w-"+t}));window[Jt.namespace]||(window[Jt.namespace]={}),window[Jt.namespace].packs||(window[Jt.namespace].packs={}),window[Jt.namespace].hooks||(window[Jt.namespace].hooks={}),window[Jt.namespace].shims||(window[Jt.namespace].shims=[]);var rn=window[Jt.namespace],on=function(){},an=Jt.measurePerformance&&performance&&performance.mark&&performance.measure?performance:{mark:on,measure:on},fn='FA "5.0.0-alpha7"',cn=function(t){an.mark(fn+" "+t+" ends"),an.measure(fn+" "+t,fn+" "+t+" begins",fn+" "+t+" ends")},un={begin:function(t){return an.mark(fn+" "+t+" begins"),function(){return cn(t)}},end:cn},sn=function(){function t(t,n){var e=[],r=!0,i=!1,o=void 0;try{for(var a,f=t[Symbol.iterator]();!(r=(a=f.next()).done)&&(e.push(a.value),!n||e.length!==n);r=!0);}catch(t){i=!0,o=t}finally{try{!r&&f.return&&f.return()}finally{if(i)throw o}}return e}return function(n,e){if(Array.isArray(n))return n;if(Symbol.iterator in Object(n))return t(n,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),ln=function(t){return Array.isArray(t)?t:Array.from(t)},pn=function(t){if(Array.isArray(t)){for(var n=0,e=Array(t.length);n<t.length;n++)e[n]=t[n];return e}return Array.from(t)},hn=function(t){return function(n,e,r){for(var i=-1,o=Object(n),a=r(n),f=a.length;f--;){var c=a[t?f:++i];if(!1===e(o[c],c,o))break}return n}}(),dn="object"==typeof global&&global&&global.Object===Object&&global,mn="object"==typeof self&&self&&self.Object===Object&&self,gn=dn||mn||Function("return this")(),vn=gn.Symbol,bn=Object.prototype,yn=bn.hasOwnProperty,wn=bn.toString,_n=vn?vn.toStringTag:void 0,jn=Object.prototype.toString,xn="[object Null]",kn="[object Undefined]",On=vn?vn.toStringTag:void 0,An="[object Arguments]",zn=Object.prototype,Sn=zn.hasOwnProperty,Tn=zn.propertyIsEnumerable,Cn=w(function(){return arguments}())?w:function(t){return y(t)&&Sn.call(t,"callee")&&!Tn.call(t,"callee")},Mn=Array.isArray,Pn="object"==typeof exports&&exports&&!exports.nodeType&&exports,En=Pn&&"object"==typeof module&&module&&!module.nodeType&&module,Nn=En&&En.exports===Pn?gn.Buffer:void 0,In=(Nn?Nn.isBuffer:void 0)||function(){return!1},Ln=9007199254740991,Fn=/^(?:0|[1-9]\d*)$/,Bn=9007199254740991,Dn={};Dn["[object Float32Array]"]=Dn["[object Float64Array]"]=Dn["[object Int8Array]"]=Dn["[object Int16Array]"]=Dn["[object Int32Array]"]=Dn["[object Uint8Array]"]=Dn["[object Uint8ClampedArray]"]=Dn["[object Uint16Array]"]=Dn["[object Uint32Array]"]=!0,Dn["[object Arguments]"]=Dn["[object Array]"]=Dn["[object ArrayBuffer]"]=Dn["[object Boolean]"]=Dn["[object DataView]"]=Dn["[object Date]"]=Dn["[object Error]"]=Dn["[object Function]"]=Dn["[object Map]"]=Dn["[object Number]"]=Dn["[object Object]"]=Dn["[object RegExp]"]=Dn["[object Set]"]=Dn["[object String]"]=Dn["[object WeakMap]"]=!1;var $n="object"==typeof exports&&exports&&!exports.nodeType&&exports,Xn=$n&&"object"==typeof module&&module&&!module.nodeType&&module,Rn=Xn&&Xn.exports===$n&&dn.process,Un=function(){try{return Rn&&Rn.binding&&Rn.binding("util")}catch(t){}}(),qn=Un&&Un.isTypedArray,Vn=qn?function(t){return function(n){return t(n)}}(qn):function(t){return y(t)&&j(t.length)&&!!Dn[b(t)]},Wn=Object.prototype.hasOwnProperty,Hn=Object.prototype,Yn=function(t,n){return function(e){return t(n(e))}}(Object.keys,Object),Gn=Object.prototype.hasOwnProperty,Jn="[object AsyncFunction]",Kn="[object Function]",Qn="[object GeneratorFunction]",Zn="[object Proxy]",te=function(t,n){return function(e,r){if(null==e)return e;if(!S(e))return t(e,r);for(var i=e.length,o=n?i:-1,a=Object(e);(n?o--:++o<i)&&!1!==r(a[o],o,a););return e}}(C),ne=Array.prototype.splice;E.prototype.clear=function(){this.__data__=[],this.size=0},E.prototype.delete=function(t){var n=this.__data__,e=P(n,t);return!(e<0||(e==n.length-1?n.pop():ne.call(n,e,1),--this.size,0))},E.prototype.get=function(t){var n=this.__data__,e=P(n,t);return e<0?void 0:n[e][1]},E.prototype.has=function(t){return P(this.__data__,t)>-1},E.prototype.set=function(t,n){var e=this.__data__,r=P(e,t);return r<0?(++this.size,e.push([t,n])):e[r][1]=n,this};var ee=gn["__core-js_shared__"],re=function(){var t=/[^.]+$/.exec(ee&&ee.keys&&ee.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),ie=Function.prototype.toString,oe=/[\\^$.*+?()[\]{}|]/g,ae=/^\[object .+?Constructor\]$/,fe=Function.prototype,ce=Object.prototype,ue=fe.toString,se=ce.hasOwnProperty,le=RegExp("^"+ue.call(se).replace(oe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),pe=B(gn,"Map"),he=B(Object,"create"),de="__lodash_hash_undefined__",me=Object.prototype.hasOwnProperty,ge=Object.prototype.hasOwnProperty,ve="__lodash_hash_undefined__";D.prototype.clear=function(){this.__data__=he?he(null):{},this.size=0},D.prototype.delete=function(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=n?1:0,n},D.prototype.get=function(t){var n=this.__data__;if(he){var e=n[t];return e===de?void 0:e}return me.call(n,t)?n[t]:void 0},D.prototype.has=function(t){var n=this.__data__;return he?void 0!==n[t]:ge.call(n,t)},D.prototype.set=function(t,n){var e=this.__data__;return this.size+=this.has(t)?0:1,e[t]=he&&void 0===n?ve:n,this},R.prototype.clear=function(){this.size=0,this.__data__={hash:new D,map:new(pe||E),string:new D}},R.prototype.delete=function(t){var n=X(this,t).delete(t);return this.size-=n?1:0,n},R.prototype.get=function(t){return X(this,t).get(t)},R.prototype.has=function(t){return X(this,t).has(t)},R.prototype.set=function(t,n){var e=X(this,t),r=e.size;return e.set(t,n),this.size+=e.size==r?0:1,this};var be=200;U.prototype.clear=function(){this.__data__=new E,this.size=0},U.prototype.delete=function(t){var n=this.__data__,e=n.delete(t);return this.size=n.size,e},U.prototype.get=function(t){return this.__data__.get(t)},U.prototype.has=function(t){return this.__data__.has(t)},U.prototype.set=function(t,n){var e=this.__data__;if(e instanceof E){var r=e.__data__;if(!pe||r.length<be-1)return r.push([t,n]),this.size=++e.size,this;e=this.__data__=new R(r)}return e.set(t,n),this.size=e.size,this};var ye="__lodash_hash_undefined__";q.prototype.add=q.prototype.push=function(t){return this.__data__.set(t,ye),this},q.prototype.has=function(t){return this.__data__.has(t)};var we=1,_e=2,je=gn.Uint8Array,xe=1,ke=2,Oe="[object Boolean]",Ae="[object Date]",ze="[object Error]",Se="[object Map]",Te="[object Number]",Ce="[object RegExp]",Me="[object Set]",Pe="[object String]",Ee="[object Symbol]",Ne="[object ArrayBuffer]",Ie="[object DataView]",Le=vn?vn.prototype:void 0,Fe=Le?Le.valueOf:void 0,Be=Object.prototype.propertyIsEnumerable,De=Object.getOwnPropertySymbols,$e=De?function(t){return null==t?[]:(t=Object(t),Z(De(t),function(n){return Be.call(t,n)}))}:function(){return[]},Xe=1,Re=Object.prototype.hasOwnProperty,Ue=B(gn,"DataView"),qe=B(gn,"Promise"),Ve=B(gn,"Set"),We=B(gn,"WeakMap"),He=I(Ue),Ye=I(pe),Ge=I(qe),Je=I(Ve),Ke=I(We),Qe=b;(Ue&&"[object DataView]"!=Qe(new Ue(new ArrayBuffer(1)))||pe&&"[object Map]"!=Qe(new pe)||qe&&"[object Promise]"!=Qe(qe.resolve())||Ve&&"[object Set]"!=Qe(new Ve)||We&&"[object WeakMap]"!=Qe(new We))&&(Qe=function(t){var n=b(t),e="[object Object]"==n?t.constructor:void 0,r=e?I(e):"";if(r)switch(r){case He:return"[object DataView]";case Ye:return"[object Map]";case Ge:return"[object Promise]";case Je:return"[object Set]";case Ke:return"[object WeakMap]"}return n});var Ze=Qe,tr=1,nr="[object Arguments]",er="[object Array]",rr="[object Object]",ir=Object.prototype.hasOwnProperty,or=1,ar=2,fr="[object Symbol]",cr=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ur=/^\w*$/,sr="Expected a function";lt.Cache=R;var lr=500,pr=/^\./,hr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,dr=/\\(\\)?/g,mr=function(t){var n=lt(t,function(t){return e.size===lr&&e.clear(),t}),e=n.cache;return n}(function(t){var n=[];return pr.test(t)&&n.push(""),t.replace(hr,function(t,e,r,i){n.push(r?i.replace(dr,"$1"):e||t)}),n}),gr=1/0,vr=vn?vn.prototype:void 0,br=vr?vr.toString:void 0,yr=1/0,wr=1,_r=2,jr=function(){try{var t=B(Object,"defineProperty");return t({},"",{}),t}catch(t){}}(),xr=rn.packs,kr=rn.shims,Or={},Ar={},zr={},Sr=function(){Or=Mt(xr,function(t){return Tt(t,function(t,n,e){return t[n[3]]=e,t},{})}),Ar=Mt(xr,function(t){return Tt(t,function(t,n,e){var r=n[2];return t[e]=e,r.forEach(function(n){t[n]=e}),t},{})});var t="far"in xr;zr=Tt(kr,function(n,e){var r=e[0],i=e[1],o=e[2];return"far"!==i||t||(i="fa"),n[r]={prefix:i,iconName:o},n},{})};Sr();var Tr=rn.packs,Cr=0,Mr=rn.packs,Pr="fa-layers-text",Er=[],Nr=(document.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(document.readyState);Nr||document.addEventListener("DOMContentLoaded",function t(){document.removeEventListener("DOMContentLoaded",t),Nr=1,Er.map(function(t){return t()})});var Ir={dom:{i2svg:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.node,e=void 0===n?document:n,r=t.callback;qt(e,void 0===r?function(){}:r)}}};!function(t){if(t&&"undefined"!=typeof window){var n=document.createElement("style");n.setAttribute("type","text/css"),n.innerHTML=t,document.head.appendChild(n)}}('.svg-inline--fa {\n  display: inline-block;\n  font-size: inherit;\n  height: 1em;\n  vertical-align: -12.5%;\n  overflow: visible; }\n  .svg-inline--fa path {\n    fill: currentColor; }\n  .svg-inline--fa.fa-lg {\n    vertical-align: -25%; }\n  .svg-inline--fa.fa-pull-left {\n    margin-right: .3em; }\n  .svg-inline--fa.fa-pull-right {\n    margin-left: .3em; }\n  .svg-inline--fa.fa-w-1 {\n    width: 0.0625em; }\n  .svg-inline--fa.fa-w-2 {\n    width: 0.125em; }\n  .svg-inline--fa.fa-w-3 {\n    width: 0.1875em; }\n  .svg-inline--fa.fa-w-4 {\n    width: 0.25em; }\n  .svg-inline--fa.fa-w-5 {\n    width: 0.3125em; }\n  .svg-inline--fa.fa-w-6 {\n    width: 0.375em; }\n  .svg-inline--fa.fa-w-7 {\n    width: 0.4375em; }\n  .svg-inline--fa.fa-w-8 {\n    width: 0.5em; }\n  .svg-inline--fa.fa-w-9 {\n    width: 0.5625em; }\n  .svg-inline--fa.fa-w-10 {\n    width: 0.625em; }\n  .svg-inline--fa.fa-w-11 {\n    width: 0.6875em; }\n  .svg-inline--fa.fa-w-12 {\n    width: 0.75em; }\n  .svg-inline--fa.fa-w-13 {\n    width: 0.8125em; }\n  .svg-inline--fa.fa-w-14 {\n    width: 0.875em; }\n  .svg-inline--fa.fa-w-15 {\n    width: 0.9375em; }\n  .svg-inline--fa.fa-w-16 {\n    width: 1em; }\n  .svg-inline--fa.fa-w-17 {\n    width: 1.0625em; }\n  .svg-inline--fa.fa-w-18 {\n    width: 1.125em; }\n  .svg-inline--fa.fa-w-19 {\n    width: 1.1875em; }\n  .svg-inline--fa.fa-w-20 {\n    width: 1.25em; }\n  .svg-inline--fa.fa-fw {\n    width: 1.25em; }\n\n.fa-layers svg.svg-inline--fa {\n  bottom: 0;\n  left: 0;\n  margin: auto;\n  position: absolute;\n  right: 0;\n  top: 0; }\n\n.fa-layers {\n  display: inline-block;\n  height: 1em;\n  position: relative;\n  text-align: center;\n  vertical-align: -12.5%;\n  width: 1em; }\n  .fa-layers svg.svg-inline--fa {\n    -webkit-transform-origin: center center;\n            transform-origin: center center; }\n\n.fa-layers-text, .fa-layers-counter {\n  display: inline-block;\n  position: absolute;\n  text-align: center; }\n\n.fa-layers-text {\n  left: 50%;\n  top: 50%;\n  -webkit-transform: translate(-50%, -50%);\n          transform: translate(-50%, -50%);\n  -webkit-transform-origin: center center;\n          transform-origin: center center; }\n\n.fa-layers-counter {\n  background-color: #ff253a;\n  border-radius: 1em;\n  color: #fff;\n  height: 1.5em;\n  line-height: 1;\n  max-width: 5em;\n  min-width: 1.5em;\n  overflow: hidden;\n  padding: .25em;\n  text-overflow: ellipsis;\n  right: 0;\n  top: 0;\n  -webkit-transform: scale(0.25);\n          transform: scale(0.25);\n  -webkit-transform-origin: top right;\n          transform-origin: top right; }\n\n.fa-layers-bottom-right {\n  top: auto;\n  bottom: 0;\n  right: 0;\n  -webkit-transform: scale(0.25);\n          transform: scale(0.25);\n  -webkit-transform-origin: bottom right;\n          transform-origin: bottom right; }\n\n.fa-layers-bottom-left {\n  right: auto;\n  top: auto;\n  bottom: 0;\n  left: 0;\n  -webkit-transform: scale(0.25);\n          transform: scale(0.25);\n  -webkit-transform-origin: bottom left;\n          transform-origin: bottom left; }\n\n.fa-layers-top-right {\n  right: 0;\n  top: 0;\n  -webkit-transform: scale(0.25);\n          transform: scale(0.25);\n  -webkit-transform-origin: top right;\n          transform-origin: top right; }\n\n.fa-layers-top-left {\n  right: auto;\n  left: 0;\n  top: 0;\n  -webkit-transform: scale(0.25);\n          transform: scale(0.25);\n  -webkit-transform-origin: top left;\n          transform-origin: top left; }\n\n/* makes the font 33% larger relative to the icon container */\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -15%; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  padding-left: 0;\n  margin-left: 1.875em;\n  list-style-type: none; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  position: absolute;\n  left: -1.875em;\n  width: 1.875em;\n  top: 0.14286em;\n  text-align: center; }\n  .fa-li.fa-lg {\n    left: -1.625em; }\n\n.fa-border {\n  padding: .2em .25em .15em;\n  border: solid 0.08em #eee;\n  border-radius: .1em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left {\n  margin-right: .3em; }\n\n.fa.fa-pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  -webkit-filter: none;\n          filter: none; }\n\n.fa-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em; }\n\n.fa-stack-1x, .fa-stack-2x {\n  position: absolute;\n  margin: auto;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0; }\n\n.fa-stack-1x {\n  width: 1em;\n  height: 1em; }\n\n.fa-stack-2x {\n  width: 2em;\n  height: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto; }\n');var Lr=function(){Jt.autoReplaceSvg&&qt(document)};rn.hooks=Gt({},rn.hooks,{addPack:function(t,n){rn.packs[t]=Gt({},rn.packs[t]||{},n),Sr(),Lr()},addShims:function(t){var n;(n=rn.shims).push.apply(n,pn(t)),Sr(),Lr()}}),window&&!window.FontAwesome&&(window.FontAwesome=Ir),function(t){Nr?setTimeout(t,0):Er.push(t)}(function(){Object.keys(rn.packs).length>0&&Lr(),Jt.observeMutations&&"function"==typeof MutationObserver&&h({treeCallback:qt,nodeCallback:Vt})})}();
diff --git a/modules/fontawesome/packs/solid.js b/modules/fontawesome/packs/solid.js
new file mode 100644
index 0000000000000000000000000000000000000000..e14761156a998f65eb57ab7bc2f2eb017790c9fa
--- /dev/null
+++ b/modules/fontawesome/packs/solid.js
@@ -0,0 +1 @@
+!function(){"use strict";function c(c){if(null===c||void 0===c)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(c)}function l(c){"function"==typeof V.hooks.addPack?V.hooks.addPack(c,h):V.packs[c]=a({},V.packs[c]||{},h)}var h={browser:[512,512,[],"f37e","M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM128 148c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm320 0c0 6.6-5.4 12-12 12H188c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h248c6.6 0 12 5.4 12 12v40z"],btc:[384,512,[],"f15a","M310.204 242.638c27.73-14.18 45.377-39.39 41.28-81.3-5.358-57.351-52.458-76.573-114.85-81.929V0h-48.528v77.203c-12.605 0-25.525.315-38.444.63V0h-48.528v79.409c-17.842.539-38.622.276-97.37 0v51.678c38.314-.678 58.417-3.14 63.023 21.427v217.429c-2.925 19.492-18.524 16.685-53.255 16.071L3.765 443.68c88.481 0 97.37.315 97.37.315V512h48.528v-67.06c13.234.315 26.154.315 38.444.315V512h48.528v-68.005c81.299-4.412 135.647-24.894 142.895-101.467 5.671-61.446-23.32-88.862-69.326-99.89zM150.608 134.553c27.415 0 113.126-8.507 113.126 48.528 0 54.515-85.71 48.212-113.126 48.212v-96.74zm0 251.776V279.821c32.772 0 133.127-9.138 133.127 53.255-.001 60.186-100.355 53.253-133.127 53.253z"],cog:[512,512,[],"f013","M444.788 291.1l42.616 24.599c4.867 2.809 7.126 8.618 5.459 13.985-11.07 35.642-29.97 67.842-54.689 94.586a12.016 12.016 0 0 1-14.832 2.254l-42.584-24.595a191.577 191.577 0 0 1-60.759 35.13v49.182a12.01 12.01 0 0 1-9.377 11.718c-34.956 7.85-72.499 8.256-109.219.007-5.49-1.233-9.403-6.096-9.403-11.723v-49.184a191.555 191.555 0 0 1-60.759-35.13l-42.584 24.595a12.016 12.016 0 0 1-14.832-2.254c-24.718-26.744-43.619-58.944-54.689-94.586-1.667-5.366.592-11.175 5.459-13.985L67.212 291.1a193.48 193.48 0 0 1 0-70.199l-42.616-24.599c-4.867-2.809-7.126-8.618-5.459-13.985 11.07-35.642 29.97-67.842 54.689-94.586a12.016 12.016 0 0 1 14.832-2.254l42.584 24.595a191.577 191.577 0 0 1 60.759-35.13V25.759a12.01 12.01 0 0 1 9.377-11.718c34.956-7.85 72.499-8.256 109.219-.007 5.49 1.233 9.403 6.096 9.403 11.723v49.184a191.555 191.555 0 0 1 60.759 35.13l42.584-24.595a12.016 12.016 0 0 1 14.832 2.254c24.718 26.744 43.619 58.944 54.689 94.586 1.667 5.366-.592 11.175-5.459 13.985L444.788 220.9a193.485 193.485 0 0 1 0 70.2zM336 256c0-44.112-35.888-80-80-80s-80 35.888-80 80 35.888 80 80 80 80-35.888 80-80z"],cube:[512,512,[],"f1b2","M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z"],"exclamation-triangle":[576,512,[],"f071","M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"],"github-alt":[480,512,[],"f113","M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z"],monero:[496,512,[],"f3d0","M352 384h108.4C417 455.9 338.1 504 248 504S79 455.9 35.6 384H144V256.2L248 361l104-105v128zM88 336V128l159.4 159.4L408 128v208h74.8c8.5-25.1 13.2-52 13.2-80C496 119 385 8 248 8S0 119 0 256c0 28 4.6 54.9 13.2 80H88z"],"power-off":[512,512,[],"f011","M400 54.1c63 45 104 118.6 104 201.9 0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 173.1 48.9 99.3 111.8 54.2c11.7-8.3 28-4.8 35 7.7L162.6 90c5.9 10.5 3.1 23.8-6.6 31-41.5 30.8-68 79.6-68 134.9-.1 92.3 74.5 168.1 168 168.1 91.6 0 168.6-74.2 168-169.1-.3-51.8-24.7-101.8-68.1-134-9.7-7.2-12.4-20.5-6.5-30.9l15.8-28.1c7-12.4 23.2-16.1 34.8-7.8zM296 264V24c0-13.3-10.7-24-24-24h-32c-13.3 0-24 10.7-24 24v240c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24z"],globe:[512,512,[],"f0ac","M364.215 192h131.43c5.439 20.419 8.354 41.868 8.354 64s-2.915 43.581-8.354 64h-131.43c5.154-43.049 4.939-86.746 0-128zM185.214 352c10.678 53.68 33.173 112.514 70.125 151.992.221.001.44.008.661.008s.44-.008.661-.008c37.012-39.543 59.467-98.414 70.125-151.992H185.214zm174.13-192h125.385C452.802 84.024 384.128 27.305 300.95 12.075c30.238 43.12 48.821 96.332 58.394 147.925zm-27.35 32H180.006c-5.339 41.914-5.345 86.037 0 128h151.989c5.339-41.915 5.345-86.037-.001-128zM152.656 352H27.271c31.926 75.976 100.6 132.695 183.778 147.925-30.246-43.136-48.823-96.35-58.393-147.925zm206.688 0c-9.575 51.605-28.163 104.814-58.394 147.925 83.178-15.23 151.852-71.949 183.778-147.925H359.344zm-32.558-192c-10.678-53.68-33.174-112.514-70.125-151.992-.221 0-.44-.008-.661-.008s-.44.008-.661.008C218.327 47.551 195.872 106.422 185.214 160h141.572zM16.355 192C10.915 212.419 8 233.868 8 256s2.915 43.581 8.355 64h131.43c-4.939-41.254-5.154-84.951 0-128H16.355zm136.301-32c9.575-51.602 28.161-104.81 58.394-147.925C127.872 27.305 59.198 84.024 27.271 160h125.385z"],"shield-alt":[512,512,[],"f3ca","M496 128c0 221.282-135.934 344.645-221.539 380.308a48 48 0 0 1-36.923 0C130.495 463.713 16 326.487 16 128a48 48 0 0 1 29.539-44.308l192-80a48 48 0 0 1 36.923 0l192 80A48 48 0 0 1 496 128zM256 446.313l.066.034c93.735-46.689 172.497-156.308 175.817-307.729L256 65.333v380.98z"]},v=Object.getOwnPropertySymbols,z=Object.prototype.hasOwnProperty,H=Object.prototype.propertyIsEnumerable,a=function(){try{if(!Object.assign)return!1;var c=new String("abc");if(c[5]="de","5"===Object.getOwnPropertyNames(c)[0])return!1;for(var l={},h=0;h<10;h++)l["_"+String.fromCharCode(h)]=h;if("0123456789"!==Object.getOwnPropertyNames(l).map(function(c){return l[c]}).join(""))return!1;var v={};return"abcdefghijklmnopqrst".split("").forEach(function(c){v[c]=c}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},v)).join("")}catch(c){return!1}}()?Object.assign:function(l,h){for(var a,M,V=c(l),f=1;f<arguments.length;f++){a=Object(arguments[f]);for(var e in a)z.call(a,e)&&(V[e]=a[e]);if(v){M=v(a);for(var m=0;m<M.length;m++)H.call(a,M[m])&&(V[M[m]]=a[M[m]])}}return V},M=a({},{namespace:"___FONT_AWESOME___",familyPrefix:"fa",replacementClass:"svg-inline--fa",autoReplaceSvg:!0,autoA11y:!0,observeMutations:!0,keepOriginalSource:!0,measurePerformance:!1},window.FontAwesomeConfig||{});M.autoReplaceSvg||(M.observeMutations=!1),window[M.namespace]||(window[M.namespace]={}),window[M.namespace].packs||(window[M.namespace].packs={}),window[M.namespace].hooks||(window[M.namespace].hooks={}),window[M.namespace].shims||(window[M.namespace].shims=[]);var V=window[M.namespace];l("fas"),l("fa")}();
diff --git a/modules/internal/.gitkeep b/modules/internal/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/modules/noto-sans/noto-sans-bold.woff2 b/modules/noto-sans/noto-sans-bold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..c996b6906b5aa0a8f7d4e4a05ce05affaacfc853
Binary files /dev/null and b/modules/noto-sans/noto-sans-bold.woff2 differ
diff --git a/modules/noto-sans/noto-sans-italic.woff2 b/modules/noto-sans/noto-sans-italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..0434423cdbc33d449a2b451935a1140314e73a94
Binary files /dev/null and b/modules/noto-sans/noto-sans-italic.woff2 differ
diff --git a/modules/noto-sans/noto-sans.woff2 b/modules/noto-sans/noto-sans.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..110e80e831a4de957a08e740e483ea6a4fdb1b71
Binary files /dev/null and b/modules/noto-sans/noto-sans.woff2 differ
diff --git a/pages/background/background.html b/pages/background/background.html
index c87530d5ff6d2636c1559c61fbc1314c673bc7b2..06238b3f338c77c97d8bcba5dbcfa8a6c281bda5 100644
--- a/pages/background/background.html
+++ b/pages/background/background.html
@@ -4,6 +4,7 @@
     <head>
 
         <title>Decentraleyes Background</title>
+        <meta charset="utf-8" />
 
     </head>
 
diff --git a/pages/options/options.css b/pages/options/options.css
index c0bfa82f4896a3ad61b21321cb903eabc768a8e3..5498098c2f626d2151c2e56c45eece362a57d4b0 100644
--- a/pages/options/options.css
+++ b/pages/options/options.css
@@ -1,17 +1,152 @@
-section {
-    padding-left: 32px;
+/**
+ * Sections
+ */
+
+body {
+    color: #555;
+    cursor: default;
+    font-family: 'Noto Sans', Arial, sans-serif !important;
+    font-size: 12px;
+    padding: 10px !important;
+}
+
+.option {
+    margin-bottom: 22px;
 }
 
-section .title {
-    -webkit-margin-start: -32px;
-    font-weight: bold;
+.notice {
+    margin-top: 12px;
+}
+
+/**
+ * Fonts
+ */
+
+@font-face {
+    font-family: 'Noto Sans';
+    font-style: normal;
+    font-weight: 400;
+    src: url('../../modules/noto-sans/noto-sans.woff2')
+         format('woff2');
 }
 
-section .description {
+@font-face {
+    font-family: 'Noto Sans';
+    font-style: normal;
+    font-weight: 600;
+    src: url('../../modules/noto-sans/noto-sans-bold.woff2')
+         format('woff2');
+}
+
+@font-face {
+    font-family: 'Noto Sans';
     font-style: italic;
-    margin-bottom: 16px;
+    font-weight: 400;
+    src: url('../../modules/noto-sans/noto-sans-italic.woff2')
+         format('woff2');
+}
+
+/**
+ * Titles
+ */
+
+.title-option {
+    align-items: center;
+    display: flex;
+    font-weight: 600;
+}
+
+/**
+ * Controls
+ */
+
+.input-checkbox {
+    margin: 0 4px 0 0;
+    outline: 0;
+}
+
+.input-text {
+    margin-left: 29px;
+}
+
+/**
+ * Icons
+ */
+
+.icon {
+    color: #777;
+    margin-right: 3px;
+}
+
+/**
+* Links
+*/
+
+.link-text {
+    color: #999;
+}
+
+/**
+ * Miscellaneous
+ */
+
+.description-option {
+    color: #777;
+    font-style: italic;
+    padding-left: 29px;
+}
+
+.badge {
+    border-radius: 3px;
+    color: #fff;
+    font-size: 8px;
+    margin-left: 6px;
+    padding: 3px 5px;
+    text-transform: uppercase;
+}
+
+.badge-warning {
+    background-color: #ffa500;
+}
+
+.hidden {
+    display: none !important;
+}
+
+.label-checkbox {
+    align-items: center;
+    display: flex;
+}
+
+.notice-body {
+    background-color: #fbfbfb;
+    border-radius: 3px;
+    border: 1px solid #e7e7e7;
+    color: #595959;
+    display: inline-block;
+    font-size: 11px;
+    padding: 8px 10px;
+}
+
+/**
+ * Right to Left
+ */
+
+body[dir="rtl"] .badge {
+    margin-left: 0;
+    margin-right: 6px;
+}
+
+body[dir="rtl"] .description-option {
+    margin-left: 0;
+    margin-right: 29px;
+}
+
+body[dir="rtl"] .input-checkbox {
+    margin: 0 0 0 4px;
 }
 
-.button-panel {
-    text-align: right;
+body[dir="rtl"] .input-text {
+    margin-left: 0;
+    margin-right: 29px;
 }
diff --git a/pages/options/options.html b/pages/options/options.html
index fad1d47fc4b52091cc9ea276b39ac2439ebd30f7..f75f177404b126873bb93b46c8bd1bf8d276c830 100644
--- a/pages/options/options.html
+++ b/pages/options/options.html
@@ -6,30 +6,113 @@
 
         <title>Decentraleyes Options</title>
 
+        <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0">
+        <meta charset="utf-8" />
+
         <link rel="stylesheet" type="text/css" href="options.css">
 
+        <script defer src="../../modules/fontawesome/packs/solid.js"></script>
+        <script defer src="../../modules/fontawesome/fontawesome.js"></script>
+
     </head>
 
     <body>
 
         <script src="options.js"></script>
 
-        <section>
+        <section class="option">
+
+            <div class="title-option">
+
+                <label class="label-checkbox">
+
+                    <input class="input-checkbox" data-option="showIconBadge" type="checkbox">
+                    <span data-i18n-content="showIconBadgeTitle"></span>
+
+                </label>
+
+            </div>
+
+            <div class="description-option" data-i18n-content="showIconBadgeDescription"></div>
+
+        </section>
+
+        <section class="option">
+
+            <div class="title-option">
+
+                <label class="label-checkbox">
+
+                    <input class="input-checkbox" data-option="blockMissing" type="checkbox">
+                    <span data-i18n-content="blockMissingTitle"></span>
+
+                </label>
+
+                <span class="badge badge-warning" data-i18n-content="advancedLabel"></span>
+
+            </div>
+
+            <div class="description-option" data-i18n-content="blockMissingDescription"></div>
+
+        </section>
+
+        <section class="option">
 
-            <label class="title">
-                <input data-option="blockMissing" type="checkbox">
-                <span data-i18n-content="blockMissingTitle"></span>
-            </label>
+            <div class="title-option">
 
-            <div class="description" data-i18n-content="blockMissingDescription"></div>
+                <label class="label-checkbox">
+
+                    <input class="input-checkbox" data-option="disablePrefetch" type="checkbox">
+                    <span data-i18n-content="disablePrefetchTitle"></span>
+
+                </label>
+
+                <span class="badge badge-warning" data-i18n-content="advancedLabel"></span>
+
+            </div>
+
+            <div class="description-option" data-i18n-content="disablePrefetchDescription"></div>
 
         </section>
 
-        <section>
+        <section class="option">
+
+            <div class="title-option">
+
+                <label class="label-checkbox">
+
+                    <input class="input-checkbox" data-option="stripMetadata" type="checkbox">
+                    <span data-i18n-content="stripMetadataTitle"></span>
+
+                </label>
+
+                <span class="badge badge-warning" data-i18n-content="advancedLabel"></span>
+
+            </div>
+
+            <div class="description-option" data-i18n-content="stripMetadataDescription"></div>
+
+        </section>
+
+        <section class="option">
+
+            <div class="title-option" data-i18n-content="whitelistedDomainsTitle"></div>
+            <input class="input-text" data-option="whitelistedDomains" type="text">
+            <div class="description-option" data-i18n-content="whitelistedDomainsDescription"></div>
+
+        </section>
+
+        <section class="notice hidden" id="notice-locale">
+
+            <div class="notice-body" dir="ltr">
+
+                <i class="fas fa-exclamation-triangle icon"></i>
+                Your preferred language is not yet fully supported.
+                <a class="link-text" href="https://crowdin.com/project/decentraleyes" target="_blank">
+                    Help Translate
+                </a>
 
-            <div class="title" data-i18n-content="domainWhitelistTitle"></div>
-            <input data-option="domainWhitelist" type="text">
-            <div class="description" data-i18n-content="domainWhitelistDescription"></div>
+            </div>
 
         </section>
 
diff --git a/pages/options/options.js b/pages/options/options.js
index b4ab713b0d7c18103c6fe010508a1ceae7895c21..85988c12a054ad31a357b5317315a701d5d907d2 100644
--- a/pages/options/options.js
+++ b/pages/options/options.js
@@ -13,6 +13,12 @@
 
 'use strict';
 
+/**
+ * Options
+ */
+
+var options = {};
+
 /**
  * Constants
  */
@@ -21,16 +27,67 @@ const WEB_PREFIX_VALUE = 'www.';
 const WEB_PREFIX_LENGTH = WEB_PREFIX_VALUE.length;
 const VALUE_SEPARATOR = ';';
 
+/**
+ * Private Methods
+ */
+
+options._determineScriptDirection = function (language) {
+
+    let rightToLeftLanguages, scriptDirection;
+
+    rightToLeftLanguages = ['ar', 'he'];
+
+    if (rightToLeftLanguages.indexOf(language) !== -1) {
+        scriptDirection = 'rtl';
+    } else {
+        scriptDirection = 'ltr';
+    }
+
+    return scriptDirection;
+};
+
+options._languageIsFullySupported = function (language) {
+
+    let languageSupported, supportedLanguages;
+
+    languageSupported = false;
+
+    supportedLanguages = ['ar', 'bg', 'zh-CN', 'zh-TW', 'nl', 'en', 'et', 'fi',
+        'fr', 'de', 'he', 'hu', 'is', 'id', 'pl', 'pt-PT', 'ro', 'es', 'tr'];
+
+    for (let supportedLanguage of supportedLanguages) {
+
+        if (language.search(supportedLanguage) !== -1) {
+            languageSupported = true;
+        }
+    }
+
+    return languageSupported;
+};
+
+options._getOptionElement = function (optionKey) {
+    return document.querySelector('[data-option=' + optionKey + ']');
+};
+
 /**
  * Initializations
  */
 
 document.addEventListener('DOMContentLoaded', function () {
 
-    let i18nElements, saveButtonElement, blockMissingElement, domainWhitelistElement;
+    let i18nElements, scriptDirection, languageSupported, optionElements;
 
     i18nElements = document.querySelectorAll('[data-i18n-content]');
-    saveButtonElement = document.getElementById('save-button');
+    scriptDirection = options._determineScriptDirection(navigator.language);
+    document.body.setAttribute('dir', scriptDirection);
+
+    languageSupported = options._languageIsFullySupported(navigator.language);
+
+    if (languageSupported === false) {
+
+        let localeNoticeElement = document.getElementById('notice-locale');
+        localeNoticeElement.setAttribute('class', 'notice');
+    }
 
     i18nElements.forEach(function (i18nElement) {
 
@@ -38,41 +95,86 @@ document.addEventListener('DOMContentLoaded', function () {
         i18nElement.innerText = chrome.i18n.getMessage(i18nMessageName);
     });
 
-    blockMissingElement = document.querySelector('[data-option=blockMissing]');
-    domainWhitelistElement = document.querySelector('[data-option=domainWhitelist]');
+    optionElements = {
+        'showIconBadge': options._getOptionElement('showIconBadge'),
+        'blockMissing': options._getOptionElement('blockMissing'),
+        'disablePrefetch': options._getOptionElement('disablePrefetch'),
+        'stripMetadata': options._getOptionElement('stripMetadata'),
+        'whitelistedDomains': options._getOptionElement('whitelistedDomains')
+    };
 
-    chrome.storage.local.get(['blockMissing', 'whitelistedDomains'], function (items) {
+    chrome.storage.local.get(Object.keys(optionElements), function (items) {
 
-        let whitelistedDomains = items.whitelistedDomains || {};
-        let domainWhitelist = '';
+        let whitelistedDomains, domainWhitelist;
+
+        whitelistedDomains = items.whitelistedDomains;
+        domainWhitelist = '';
 
         Object.keys(whitelistedDomains).forEach(function (domain) {
             domainWhitelist = domainWhitelist + domain + ';';
         });
 
         domainWhitelist = domainWhitelist.slice(0, -1);
+        domainWhitelist = domainWhitelist.replace(/^;+|;+$/g, '');
 
-        blockMissingElement.checked = items.blockMissing || false;
-        domainWhitelistElement.value = domainWhitelist || '';
+        optionElements.showIconBadge.checked = items.showIconBadge;
+        optionElements.blockMissing.checked = items.blockMissing;
+        optionElements.disablePrefetch.checked = items.disablePrefetch;
+        optionElements.stripMetadata.checked = items.stripMetadata;
+        optionElements.whitelistedDomains.value = domainWhitelist;
     });
 
-    let optionChangedHandler = function () {
+    let optionChangedHandler = function ({target}) {
 
-        let whitelistedDomains = {};
+        let optionKey, optionType, optionValue;
 
-        domainWhitelistElement.value.split(VALUE_SEPARATOR).forEach(function (domain) {
-            whitelistedDomains[_normalizeDomain(domain)] = true;
-        });
+        optionKey = target.getAttribute('data-option');
+        optionType = target.getAttribute('type');
 
-        chrome.storage.local.set({
+        switch (optionType) {
+            case 'checkbox':
+                optionValue = target.checked;
+                break;
+            default:
+                optionValue = target.value;
+        }
+
+        if (optionKey === 'disablePrefetch') {
+
+            if (optionValue === false) {
+
+                // Restore default values of related preference values.
+                chrome.privacy.network.networkPredictionEnabled.clear({});
+            
+            } else {
+
+                chrome.privacy.network.networkPredictionEnabled.set({
+                    'value': false
+                });
+            }
+        }
 
-            'blockMissing': blockMissingElement.checked,
-            'whitelistedDomains': whitelistedDomains
+        if (optionKey === 'whitelistedDomains') {
+
+            let domainWhitelist = optionValue;
+            
+            optionValue = {};
+
+            domainWhitelist.split(VALUE_SEPARATOR).forEach(function (domain) {
+                optionValue[_normalizeDomain(domain)] = true;
+            });
+        }
+
+        chrome.storage.local.set({
+            [optionKey]: optionValue
         });
     };
 
-    blockMissingElement.addEventListener('change', optionChangedHandler);
-    domainWhitelistElement.addEventListener('keyup', optionChangedHandler);
+    optionElements.showIconBadge.addEventListener('change', optionChangedHandler);
+    optionElements.blockMissing.addEventListener('change', optionChangedHandler);
+    optionElements.disablePrefetch.addEventListener('change', optionChangedHandler);
+    optionElements.stripMetadata.addEventListener('change', optionChangedHandler);
+    optionElements.whitelistedDomains.addEventListener('keyup', optionChangedHandler);
 });
 
 /**
diff --git a/pages/popup/icon.png b/pages/popup/icon.png
deleted file mode 100644
index 7f06704e4b5229f0a71df8f9883d5711e03e406c..0000000000000000000000000000000000000000
Binary files a/pages/popup/icon.png and /dev/null differ
diff --git a/pages/popup/icon.svg b/pages/popup/icon.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2c85d6a04bc603f119452c30c76a717d94bd824c
--- /dev/null
+++ b/pages/popup/icon.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="7.1673mm" width="7.2061mm" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 25.5334 25.395792">
+ <g transform="translate(177.77 -519.66)">
+  <path d="m-165 519.66c-2.6196 0-4.9735 0.71508-7.2323 2.1971-0.9279 0.60864-2.7283 2.4092-3.337 3.337-1.4712 2.2424-2.1972 4.6154-2.1972 7.1819 0 2.5788 0.7141 4.9223 2.1797 7.1552 0.6309 0.96123 2.4192 2.7501 3.3802 3.3808 1.4791 0.97083 3.2841 1.71 4.9268 2.0176 1.0838 0.20297 3.9457 0.15209 5.0159-0.0894 2.4596-0.55481 4.4742-1.6723 6.29-3.4887 2.4847-2.4856 3.7408-5.4989 3.7408-8.9756 0-3.4682-1.2629-6.498-3.7405-8.9756-2.4919-2.4919-5.5045-3.7404-9.0264-3.7404z" fill="#7db69f"/>
+  <path d="m-165.02 528.24c-0.8699 0-1.6514 0.23746-2.4016 0.72959-0.3081 0.20212-0.9061 0.80004-1.1081 1.1081-0.4886 0.74466-0.7298 1.5326-0.7298 2.3849 0 0.85636 0.2371 1.6346 0.724 2.3761 0.2094 0.3192 0.8033 0.91326 1.1224 1.1227 0.4911 0.32239 1.0906 0.56785 1.6361 0.67001 0.3598 0.0673 1.3102 0.0504 1.6658-0.0297 0.8167-0.18424 1.4856-0.55532 2.0886-1.1585 0.8251-0.8254 1.2423-1.826 1.2423-2.9806 0-1.1517-0.4195-2.1578-1.2421-2.9806-0.8277-0.82751-1.8279-1.2421-2.9976-1.2421z" fill="#4a826c"/>
+  <path d="m-2404.4 671.18c-3.2399-0.0194-6.3107 1.2365-8.6289 3.5547 0 0.002 0 0.004-0.01 0.006-1.9541 1.9569-3.1473 4.4242-3.4687 7.1758-0.1336 1.143-0.1324 1.8177 0.2265 2.3984 0.3941 0.63745 0.9181 0.94336 1.6758 0.94336 0.2981 0 0.6535-0.10695 0.916-0.24414 0.2434-0.12713 0.6126-0.46272 0.7539-0.69141 0.065-0.10555 0.202-0.39493 0.2403-0.56641 0.053-0.23546 0.061-0.41065 0.084-0.74218 0.088-1.2626 0.2865-2.0912 0.7089-3.0312 0.4385-0.97557 0.9254-1.6871 1.6778-2.4395 1.2078-1.2078 2.6659-1.965 4.3828-2.2754 0.3293-0.0595 0.7416-0.0624 1.2617-0.0684s1.0247-0.004 1.3828 0.0469c0.3661 0.0518 0.6053 0.0832 0.9219 0.0391 0.2645-0.0368 0.6003-0.19398 0.791-0.32031 0.8224-0.54467 1.1248-1.5151 0.707-2.4219a0.6513 0.6513 0 0 1 0 -0.002c-0.1439-0.31257-0.5075-0.75154-0.8496-0.92969-0.4136-0.21541-0.8031-0.27857-1.3769-0.3457-0.4667-0.0546-0.9332-0.0832-1.3985-0.0859zm9.3692 6.3516c-1.074-0.004-1.9883 0.87522-1.9883 1.957 0 1.3647 1.5564 2.3925 2.7988 1.8066 0.3338-0.1574 0.8593-0.69555 0.9922-1.0137 0.5288-1.2658-0.423-2.7422-1.8008-2.75zm-1.291 9.6602c-0.5015 0.009-1.1313 0.39448-1.4707 0.78906-0.7801 0.90716-0.9293 1.0694-1.2911 1.3887-1.0664 0.94113-2.4514 1.6118-3.957 1.9062-0.394 0.0771-0.8958 0.072-1.4824 0.0664-0.5866-0.006-1.0998-0.0118-1.4941-0.0957l0.1328 0.0137a0.6513 0.6513 0 0 1 -0.1328 -0.0137c-1.5797-0.33594-2.8091-0.96601-4.0195-2.0606-0.3529-0.31903-0.5674-0.50965-0.8692-0.67969-0.2288-0.12895-0.689-0.22851-0.8945-0.22851-1.03 0-1.951 0.94359-1.9551 1.9688v0.002a0.6513 0.6513 0 0 1 0 0.002c0 0.26313 0.1216 0.80286 0.3028 1.0781 0.2346 0.35637 0.5009 0.59192 0.957 0.99805 1.8218 1.622 4.2177 2.6942 6.6543 2.9746 0.7641 0.0879 1.9155 0.0871 2.6895 0.002 2.1894-0.23969 4.2945-1.0791 6.0489-2.4082 0.7055-0.53445 1.6855-1.491 2.2129-2.1816 0.2682-0.35126 0.4557-0.64063 0.5664-1.0176 0.098-0.33319 0.076-0.788-0.01-1.0938-0.1165-0.42605-0.279-0.59899-0.5546-0.85157-0.2646-0.24237-0.4858-0.39738-0.8809-0.49218-0.1798-0.0432-0.3602-0.0694-0.5527-0.0664z" fill-rule="evenodd" transform="matrix(.82404 0 0 .82404 1816.1 -30.489)" fill="#f1f7f5"/>
+ </g>
+</svg>
diff --git a/pages/popup/popup.css b/pages/popup/popup.css
index 207b1bca4654ce519b542d7f9338cded530cf41a..3c1c5c79b40aacd2b833e80e95a8691ee7460db9 100644
--- a/pages/popup/popup.css
+++ b/pages/popup/popup.css
@@ -1,47 +1,99 @@
+/**
+* Sections
+*/
+
 body {
     background-color: #f0f0f0;
     color: #555;
     cursor: default;
-    font-family: Noto Sans, Arial, sans-serif !important;
+    font-family: 'Noto Sans', Arial, sans-serif !important;
     font-size: 75%;
-    margin: 0;
+    margin: 0 auto;
+    overflow: hidden;
     padding: 0;
-    user-select: none;
-    width: 350px;
+    width: 348px;
 }
 
-h1 {
-    font-size: 36px;
-    margin: 0;
-    text-align: center;
+header {
+    align-items: center;
+    border-bottom: solid #d3d3d3 1px;
+    display: flex;
+    position: relative;
 }
 
-.title {
-    font-weight: bold;
-    margin-bottom: 2px;
-    text-align: center;
+.panel {
+    overflow: hidden;
+    padding: 10px 8px;
 }
 
-.description {
-    color: #777;
-    font-style: italic;
-    margin-bottom: 18px;
-    text-align: center;
+.panel:not(:last-child) {
+    border-bottom: 1px solid #d8d8d8;
 }
 
-.popup-content {
-    padding: 0;
+.subpanel {
+    overflow: hidden;
+}
+
+footer {
+    overflow: hidden;
+    padding: 8px;
+}
+
+/**
+ * Fonts
+ */
+
+@font-face {
+  font-family: 'Noto Sans';
+  font-style: normal;
+  font-weight: 400;
+  src: url('../../modules/noto-sans/noto-sans.woff2')
+       format('woff2');
 }
 
+@font-face {
+  font-family: 'Noto Sans';
+  font-style: normal;
+  font-weight: 600;
+  src: url('../../modules/noto-sans/noto-sans-bold.woff2')
+       format('woff2');
+}
+
+@font-face {
+  font-family: 'Noto Sans';
+  font-style: italic;
+  font-weight: 400;
+  src: url('../../modules/noto-sans/noto-sans-italic.woff2')
+       format('woff2');
+}
+
+/**
+ * Headings
+ */
+
+.heading {
+    font-size: 14px;
+    font-weight: 600;
+    padding-left: 0;
+}
+
+.subheading {
+    font-weight: 600;
+    margin-bottom: 2px;
+    text-align: center;
+}
+
+/**
+ * Lists
+ */
+
 .list {
-    border-bottom: 1px solid #d8d8d8;
     margin: 0;
-    padding: 10px 8px;
+    padding: 8px 0 0;
 }
 
 .list-item {
     background-color: #f7f7f7;
-    border-bottom: none !important;
     border: 1px solid #e4e4e4;
     color: #737373;
     font-weight: 600;
@@ -50,10 +102,9 @@ h1 {
     padding: 10px;
 }
 
-.sub-list {
+.sublist {
     align-items: center;
     background-color: #ececec;
-    border-bottom: none !important;
     border: 1px solid #e0e0e0;
     box-shadow: inset 0px 2px 10px #e2e2e2;
     list-style: none;
@@ -61,172 +112,138 @@ h1 {
     padding: 0;
 }
 
-.sub-list:last-child {
-    border-bottom: 1px solid #e0e0e0 !important;
+.sublist:last-child {
+    border-bottom: 1px solid #e0e0e0;
 }
 
-.sub-list-item {
+.sublist-item {
     border-bottom: 1px solid #e0e0e0;
     color: #737373;
-    font-weight: bold;
+    font-weight: 600;
     padding: 10px;
 }
 
-.sub-list-item:last-child {
+.sublist-item:last-child {
     border-bottom: none;
 }
 
-.side-note {
-    color: #a5a5a5;
-    font-style: italic;
-    font-weight: normal;
+/**
+ * Icons
+ */
+
+.icon {
+    margin-right: 6px;
 }
 
-.badge {
-    background-color: #6bb798;
-    border-radius: 10px;
-    color: #fff;
-    font-family: monospace;
-    font-size: 13px;
-    font-weight: bold;
-    margin-right: 8px;
-    padding: 3px 15px;
+.icon-logo {
+    height: 26px;
+    padding: 14px 6px 14px 8px;
+    width: 26px;
+}
+
+/**
+ * Buttons
+ */
+
+.button {
+    -moz-user-select: none;
+    background-color: #f5f5f5;
+    border-radius: 2px;
+    border: 1px solid #cfcfcf;
+    color: #5f5f5f;
+    cursor: pointer;
+    float: right;
+    font-size: 12px;
+    padding: 5px 22px;
+    user-select: none;
 }
 
-.button-panel {
-    padding: 6px;
-    text-align: right;
+.button:hover {
+    background-color: #fff;
 }
 
-.btn-sm {
-    font-size: 12px !important;
+.button:active {
+    background-color: #dedede;
 }
 
-.text-link {
+.button-toggle {
+    border-color: #d8d8d8;
+    color: #bbb;
+}
+
+.button-toggle.active {
+    border-color: #cfcfcf;
+    color: #339a6f;
+}
+
+/**
+* Links
+*/
+
+.link-text {
     color: #bdbdbd;
+    cursor: pointer;
     float: left;
     font-size: 13px;
     padding-left: 4px;
-    padding-top: 2px;
+    padding-top: 5px;
     text-decoration: none;
 }
 
-.text-link:hover {
+.link-text:hover {
     color: #777;
     text-decoration: underline;
 }
 
-#injection-counter {
-    padding-top: 14px;
+/**
+ * Miscellaneous
+ */
+
+.badge {
+    background-color: #6bb798;
+    border-radius: 10px;
+    color: #fff;
+    font-family: monospace;
+    font-size: 13px;
+    font-weight: 600;
+    margin-right: 8px;
+    padding: 3px 15px;
+}
+
+.counter {
+    font-size: 36px;
+    font-weight: 600;
+    margin-top: 4px;
+    text-align: center;
 }
 
-#extension-options-overlay-header {
-    align-items: center;
-    border-bottom: solid lightgray 1px;
-    display: flex;
-    padding: 4px 0;
-    position: relative;
+.description {
+    color: #777;
+    font-style: italic;
+    margin: 0 6px;
+    text-align: center;
 }
 
-#extension-options-overlay-icon {
-    padding: 8px;
+.hidden {
+    display: none;
 }
 
-#extension-options-overlay-icon {
-    height: 32px;
-    width: 32px;
+.label-version {
+    color: #6aac91;
+    font-size: 9px;
 }
 
-#extension-options-overlay-title {
-    font-size: 14px;
-    font-weight: bold;
-    padding-left: 0;
+.label-domain {
+    color: #bbb;
+    display: flex;
+    font-style: italic;
+    overflow: hidden;
+    padding: 6px 0 0 4px;
+    white-space: nowrap;
 }
 
-:enabled:hover:-webkit-any(
-    select,
-    input[type='checkbox'],
-    input[type='radio'],
-    :-webkit-any(
-        button,
-        input[type='button'],
-        input[type='submit']):not(.custom-appearance)) {
-    background-image: -webkit-linear-gradient(#f0f0f0, #f0f0f0 38%, #e0e0e0);
-    border-color: rgba(0, 0, 0, 0.3);
-    box-shadow: 0 1px 0 rgba(0, 0, 0, 0.12),
-    inset 0 1px 2px rgba(255, 255, 255, 0.95);
-    color: black;
-}
-
-:enabled:active:-webkit-any(
-    select,
-    input[type='checkbox'],
-    input[type='radio'],
-    :-webkit-any(
-        button,
-        input[type='button'],
-        input[type='submit']):not(.custom-appearance)) {
-    background-image: -webkit-linear-gradient(#e7e7e7, #e7e7e7 38%, #d7d7d7);
-    box-shadow: none;
-    text-shadow: none;
-}
-
-:enabled:focus:-webkit-any(
-    select,
-    input[type='checkbox'],
-    input[type='number'],
-    input[type='password'],
-    input[type='radio'],
-    input[type='search'],
-    input[type='text'],
-    input[type='url'],
-    input:not([type]),
-    :-webkit-any(
-        button,
-        input[type='button'],
-        input[type='submit']):not(.custom-appearance)) {
-    /* OVERRIDE */
-    -webkit-transition: border-color 200ms;
-    /* We use border color because it follows the border radius (unlike outline).
-     * This is particularly noticeable on mac. */
-    border-color: rgb(77, 144, 254);
-    outline: none;
-}
-
-:-webkit-any(button,
-             input[type='button'],
-             input[type='submit']):not(.custom-appearance),
-select,
-input[type='checkbox'],
-input[type='radio'] {
-    -webkit-appearance: none;
-    -webkit-user-select: none;
-    background-image: -webkit-linear-gradient(#ededed, #ededed 38%, #dedede);
-    border: 1px solid rgba(0, 0, 0, 0.25);
-    border-radius: 2px;
-    box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08),
-    inset 0 1px 2px rgba(255, 255, 255, 0.75);
-    color: #444;
-    font: inherit;
-    margin: 0 1px 0 0;
-    outline: none;
-    text-shadow: 0 1px 0 rgb(240, 240, 240);
-}
-
-:-webkit-any(button,
-             input[type='button'],
-             input[type='submit']):not(.custom-appearance),
-select {
-    min-height: 2em;
-    min-width: 4em;
-    padding-top: 1px;
-    padding-bottom: 1px;
-
-}
-
-:-webkit-any(button,
-             input[type='button'],
-             input[type='submit']):not(.custom-appearance) {
-    -webkit-padding-end: 10px;
-    -webkit-padding-start: 10px;
+.side-note {
+    color: #a5a5a5;
+    font-style: italic;
+    font-weight: 400;
 }
diff --git a/pages/popup/popup.html b/pages/popup/popup.html
index 97b84b5ba652bbd120bf98ec3af28aa7a8cced66..53dab5808455c4fb98027736be521a7eb3b12856 100644
--- a/pages/popup/popup.html
+++ b/pages/popup/popup.html
@@ -6,33 +6,67 @@
 
     <title>Decentraleyes Popup</title>
 
+    <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0">
+    <meta charset="utf-8" />
+
     <link rel="stylesheet" type="text/css" href="popup.css">
 
+    <script defer src="../../modules/fontawesome/packs/solid.js"></script>
+    <script defer src="../../modules/fontawesome/fontawesome.js"></script>
+
 </head>
 
 <body>
 
     <script src="popup.js"></script>
 
-    <div id="extension-options-overlay-header">
-        <img id="extension-options-overlay-icon" src="icon.png">
-        <div id="extension-options-overlay-title">Decentraleyes</div>
-    </div>
+    <header>
 
-    <section id="popup-content" class="popup-content">
+        <img class="icon-logo" src="icon.svg" alt="Extension Icon">
+        <div class="heading">Decentraleyes <sup id="version-label" class="label-version"></sup></div>
 
-        <h1 id="injection-counter">3</h1>
+    </header>
 
-        <div class="title" data-i18n-content="amountInjectedTitle"></div>
-        <div class="description" data-i18n-content="amountInjectedDescription"></div>
+    <section class="content">
 
-    </section>
+        <div id="website-context" class="panel hidden">
+
+            <div class="subpanel">
+
+                <div id="protection-toggle-button" class="button button-toggle active">
+                    <i class="fas fa-power-off" data-fa-transform="grow-2"></i>
+                </div>
+
+                <div class="label-domain">
+                    <i class="icon fas fa-globe fa-lg" data-fa-transform="down-1"></i>
+                    <span id="domain-indicator"></span>
+                </div>
+
+            </div>
+
+        </div>
+
+        <div id="extension-context" class="panel">
+
+            <div id="injection-counter" class="counter">0</div>
+
+            <div class="subheading" data-i18n-content="amountInjectedTitle"></div>
+            <div class="description" data-i18n-content="amountInjectedDescription"></div>
+
+        </div>
 
-    <section class="button-panel">
-        <a href="https://decentraleyes.org/test" target="_blank" class="text-link">decentraleyes.org/test</a>
-        <button id="options-button" class="btn-sm">Options</button>
     </section>
 
+    <footer>
+
+        <span id="testing-utility-link" class="link-text">decentraleyes.org/test</span>
+
+        <div id="options-button" class="button">
+            <i class="fas fa-cog" data-fa-transform="grow-2"></i>
+        </div>
+
+    </footer>
+
 </body>
 
 </html>
diff --git a/pages/popup/popup.js b/pages/popup/popup.js
index f023644c80beea798b35e45d85a78bc5b97d3559..1b92f9e823e0863a7382c9c2c62ca1dc576a89f7 100644
--- a/pages/popup/popup.js
+++ b/pages/popup/popup.js
@@ -13,20 +13,71 @@
 
 'use strict';
 
+/**
+ * Popup
+ */
+
+var popup = {};
+
+/**
+ * Constants
+ */
+
+const WEB_DOMAIN_EXPRESSION = /:\/\/(.[^\/]+)(.*)/;
+const WEB_PREFIX_VALUE = 'www.';
+const WEB_PREFIX_LENGTH = WEB_PREFIX_VALUE.length;
+
+/**
+ * Private Methods
+ */
+
+popup._determineScriptDirection = function (language) {
+
+    let rightToLeftLanguages, scriptDirection;
+
+    rightToLeftLanguages = ['ar', 'he'];
+
+    if (rightToLeftLanguages.indexOf(language) !== -1) {
+        scriptDirection = 'rtl';
+    } else {
+        scriptDirection = 'ltr';
+    }
+
+    return scriptDirection;
+};
+
 /**
  * Initializations
  */
 
 document.addEventListener('DOMContentLoaded', function () {
 
-    let i18nElements, saveButtonElement, blockMissingElement, domainWhitelistElement;
+    let version, optionsButtonElement, optionsTitle, scriptDirection, i18nElements;
+
+    version = chrome.runtime.getManifest().version;
+
+    if (version.indexOf('beta') !== -1) {
+        version = 'BETA';
+    }
+
+    document.getElementById('version-label').innerText = version;
+
+    optionsButtonElement = document.getElementById('options-button');
+    optionsTitle = chrome.i18n.getMessage('optionsTitle');
+
+    scriptDirection = popup._determineScriptDirection(navigator.language);
+
+    optionsButtonElement.setAttribute('title', optionsTitle);
+    optionsButtonElement.setAttribute('dir', scriptDirection);
 
     i18nElements = document.querySelectorAll('[data-i18n-content]');
 
     i18nElements.forEach(function (i18nElement) {
 
         let i18nMessageName = i18nElement.getAttribute('data-i18n-content');
+
         i18nElement.innerText = chrome.i18n.getMessage(i18nMessageName);
+        i18nElement.setAttribute('dir', scriptDirection);
     });
 
     chrome.storage.local.get('amountInjected', function (items) {
@@ -38,18 +89,86 @@ document.addEventListener('DOMContentLoaded', function () {
 
             chrome.runtime.getBackgroundPage(function (backgroundPage) {
 
-                let injections, injectionOverview;
+                if (backgroundPage === null) {
+                    return;
+                }
+
+                popup.backgroundPage = backgroundPage;
+
+                let injections, injectionOverview, domain;
 
                 injections = backgroundPage.stateManager.tabs[tabs[0].id].injections;
                 injectionOverview = {};
 
-                for (let injection in injections) {
+                try {
+                    domain = tabs[0].url.match(WEB_DOMAIN_EXPRESSION)[1];
+                } catch (exception) {
+                    domain = null;
+                }
 
-                    let injectionSource, libraryName;
+                if (domain !== null) {
+
+                    let websiteContextElement, protectionToggleElement, domainIndicatorElement;
+
+                    websiteContextElement = document.getElementById('website-context');
+                    protectionToggleElement = document.getElementById('protection-toggle-button');
+                    domainIndicatorElement = document.getElementById('domain-indicator');
+
+                    if (domain.startsWith(WEB_PREFIX_VALUE)) {
+                        domain = domain.slice(WEB_PREFIX_LENGTH);
+                    }
+
+                    domainIndicatorElement.innerText = domain;
+
+                    if (!backgroundPage.requestAnalyzer.whitelistedDomains[domain]) {
+
+                        protectionToggleElement.setAttribute('class', 'button button-toggle active');
+
+                        let disableProtectionTitle = chrome.i18n.getMessage('disableProtectionTitle');
+                        
+                        protectionToggleElement.setAttribute('title', disableProtectionTitle);
+                        protectionToggleElement.setAttribute('dir', scriptDirection);
+
+                        protectionToggleElement.addEventListener('click', function () {
+
+                            backgroundPage.stateManager.addDomainToWhitelist(domain).then(function () {
+
+                                chrome.tabs.reload(tabs[0].id, {
+                                    'bypassCache': true
+                                });
+
+                                return window.close();
+                            });
+                        });
+
+                    } else {
+
+                        protectionToggleElement.setAttribute('class', 'button button-toggle');
+
+                        let enableProtectionTitle = chrome.i18n.getMessage('enableProtectionTitle');
+                        protectionToggleElement.setAttribute('title', enableProtectionTitle);
+
+                        protectionToggleElement.addEventListener('click', function () {
+
+                            backgroundPage.stateManager.deleteDomainFromWhitelist(domain).then(function () {
+
+                                chrome.tabs.reload(tabs[0].id, {
+                                    'bypassCache': true
+                                });
+
+                                return window.close();
+                            });
+                        });
+                    }
+
+                    websiteContextElement.setAttribute('class', 'panel');
+                }
+
+                for (let injection in injections) {
 
                     injection = injections[injection];
-                    injectionSource = injection.source;
 
+                    let injectionSource = injection.source;
                     injectionOverview[injectionSource] = injectionOverview[injectionSource] || [];
 
                     injectionOverview[injectionSource].push({
@@ -122,17 +241,17 @@ document.addEventListener('DOMContentLoaded', function () {
                     listElement.appendChild(listItemElement);
 
                     subListElement = document.createElement('ul');
-                    subListElement.setAttribute('class', 'sub-list');
+                    subListElement.setAttribute('class', 'sublist');
 
                     listElement.appendChild(subListElement);
 
-                    cdn.forEach(function (injection) {
+                    for (let injection of cdn) {
 
                         let subListItemElement, resourcePathDetails, resourceFilename, resourceName,
                             resourceNameTextNode, sideNoteElement, sideNoteTextNode;
 
                         subListItemElement = document.createElement('li');
-                        subListItemElement.setAttribute('class', 'sub-list-item');
+                        subListItemElement.setAttribute('class', 'sublist-item');
 
                         resourcePathDetails = injection.path.split('/');
                         resourceFilename = resourcePathDetails[resourcePathDetails.length - 1];
@@ -195,15 +314,13 @@ document.addEventListener('DOMContentLoaded', function () {
                         subListItemElement.appendChild(sideNoteElement);
 
                         subListElement.appendChild(subListItemElement);
-                    });
+                    }
                 }
 
                 if (Object.keys(injectionOverview).length > 0) {
 
-                    let popupContentElement = document.getElementById('popup-content');
-                    let injectionCounterElement = document.getElementById('injection-counter');
-
-                    popupContentElement.insertBefore(listElement, injectionCounterElement);
+                    let websiteContextElement = document.getElementById('website-context');
+                    websiteContextElement.append(listElement);
                 }
             });
         });
@@ -211,5 +328,21 @@ document.addEventListener('DOMContentLoaded', function () {
 
     document.getElementById('options-button').addEventListener('click', function () {
         chrome.runtime.openOptionsPage();
+        return window.close();
+    });
+
+    document.getElementById('testing-utility-link').addEventListener('mouseup', function (event) {
+
+        if (event.button === 0 || event.button === 1) {
+
+            chrome.tabs.create({
+                'url': 'https://decentraleyes.org/test',
+                'active': (event.button === 0)
+            });
+        }
+
+        if (event.button === 0) {
+            window.close();
+        }
     });
 });
diff --git a/pages/welcome/favicon.ico b/pages/welcome/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..42dd00aad945bcee1723740e1c3e7359803daea2
Binary files /dev/null and b/pages/welcome/favicon.ico differ
diff --git a/pages/welcome/logo.svg b/pages/welcome/logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..8f6d67769a259e526976cc3d1e1d3607a9201a0f
--- /dev/null
+++ b/pages/welcome/logo.svg
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="139.98mm" width="213.68mm" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 757.14843 495.97448" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="a" y2="-1041.7" gradientUnits="userSpaceOnUse" x2="-2153.9" gradientTransform="matrix(.73610 0 0 1.1184 971.67 1120)" y1="-1983.7" x1="-2153.9">
+   <stop stop-color="#7c9437" offset="0"/>
+   <stop stop-color="#eff4e2" offset="1"/>
+  </linearGradient>
+ </defs>
+ <g transform="translate(1012.9 489.91)">
+  <path d="m-633.52-289.08c-4.2555-0.0136-8.5155 0-12.777 0.0312-127.91 0.89658-252.53 19.355-365.63 52.92a378.57 378.57 0 0 0 -0.9259 18.506 378.57 378.57 0 0 0 0.9472 26.779 378.57 378.57 0 0 0 4.5606 37.566 378.57 378.57 0 0 0 8.2871 36.924 378.57 378.57 0 0 0 11.934 35.91 378.57 378.57 0 0 0 15.457 34.541 378.57 378.57 0 0 0 18.83 32.824 378.57 378.57 0 0 0 13.689 19.143h609.77a378.57 378.57 0 0 0 7.5468 -9.9279 378.57 378.57 0 0 0 19.779 -32.262 378.57 378.57 0 0 0 16.459 -34.074 378.57 378.57 0 0 0 12.977 -35.547 378.57 378.57 0 0 0 9.3634 -36.666 378.57 378.57 0 0 0 5.6543 -37.416 378.57 378.57 0 0 0 1.8905 -37.795 378.57 378.57 0 0 0 -0.60143 -17.018c-116.53-35.116-245.29-54.153-377.21-54.44z" fill-rule="evenodd" fill="url(#a)"/>
+  <g transform="translate(-3065.9 1490.7)">
+   <path d="m-8140.9-2348.7a274.29 274.29 0 0 0 -266.58 211.04c7.1369-1.3966 14.205-2.9209 21.4-4.2051 15.036-2.6835 30.198-5.1201 45.469-7.3067 15.271-2.1865 30.653-4.1238 46.129-5.8046 15.476-1.6809 31.048-3.1051 46.699-4.2715 15.651-1.1665 31.383-2.0735 47.18-2.7168 15.797-0.6434 31.658-1.0233 47.57-1.1348 16.954-0.1188 33.863 0.067 50.707 0.5527 16.844 0.4858 33.623 1.2711 50.32 2.3516s33.313 2.4557 49.826 4.1211 32.926 3.6208 49.219 5.8613c16.293 2.2406 32.467 4.7664 48.504 7.5723 10.201 1.7849 20.245 3.8763 30.33 5.8867a274.29 274.29 0 0 0 -266.77 -211.94z" transform="translate(10572 368.09)" fill="#69ab90"/>
+   <path d="m-8140.5-2258.2a184.16 184.16 0 0 0 -165.9 104.74c3.9985-0.4699 7.9455-1.0683 11.957-1.5039 15.476-1.6809 31.048-3.1051 46.699-4.2715 15.651-1.1665 31.383-2.0735 47.18-2.7168 15.797-0.6434 31.658-1.0233 47.57-1.1348 16.954-0.1188 33.863 0.067 50.707 0.5527 16.844 0.4858 33.623 1.2711 50.32 2.3516s33.313 2.4557 49.826 4.1211c9.3701 0.945 18.626 2.1953 27.928 3.3262a184.16 184.16 0 0 0 -166.29 -105.46z" transform="translate(10572 368.09)" fill="#4a856d"/>
+   <path d="m-8140.9-2237c-57.78 0.068-111.19 30.788-140.3 80.699 42.151-4.1659 84.969-6.4492 128.16-6.752 51.484-0.3609 102.54 2.0951 152.66 7.2168-29.034-50.162-82.569-81.082-140.53-81.164z" transform="translate(10572 368.09)" fill="#d9ccb5"/>
+   <path d="m-8139.6-2326.4c-68.213-0.4078-132.43 25.777-181.27 74.619-31.322 31.322-53.165 68.409-64.869 109.85 21.087-3.7573 42.424-7.0203 63.961-9.7968 0.1062-0.2386 0.2051-0.474 0.3125-0.7129 10.523-23.415 22.717-41.107 40.772-59.162 29.234-29.234 64.842-47.747 106.23-55.229 14.678-2.6535 47.206-2.9306 64.086-0.5429 14.755 2.0871 19.279 1.4609 27.205-3.7891 11.038-7.311 15.491-22.356 10.088-34.086-5.7671-12.52-13.568-16.585-37.066-19.334-9.8746-1.1551-19.702-1.7562-29.447-1.8145zm209.14 141.75c-15.595-0.072-28.373 12.42-28.373 27.73 0 2.0809 0.2081 4.0855 0.5879 6.0059 17.56 2.3451 34.986 5.0152 52.252 8.0156 0.3927-0.7733 0.7686-1.5899 1.1309-2.457 7.6967-18.421-5.8421-39.204-25.598-39.295z" fill-rule="evenodd" transform="translate(10572 368.09)" fill="#e1eee9"/>
+   <path d="m2566.6-1883.9c-3.0097 3.1329-6.9452 2.2975-14.708-2.4482-4.0467-2.2446-5.5995-3.6343-9.6847-5.7832l-6.0229-3.1961-2.0305 3.9932-2.0327 3.9906-3.4678-4.969c-8.9934-12.89-18.056-26.474-17.742-26.592 4.2273-0.3503 19.763-1.3532 37.471-2.7026 0 0-1.0853 2.1672-2.2943 4.5888l-2.0055 4.2775 6.5539 3.5215c3.6047 1.9372 9.4209 5.7407 12.927 8.4524 1.0018 0.7747 1.7262 1.4006 2.4531 2.0301 4.5629 4.4076 4.9708 7.6508 2.557 12.032-0.6314 1.1465-1.2782 2.081-1.9728 2.8041z" fill="#fff"/>
+   <path d="m-432.68-16.955c-0.92625 0.11186-1.7636 0.61843-2.5957 1.4668-2.5338 2.583-1.7893 5.0501 3.1855 10.545 2.4906 2.751 6.0466 6.7358 7.9004 8.8555 3.7538 4.2926 5.5909 4.8261 8.1582 2.3672 2.8579-2.737 2.1581-5.0574-3.6914-12.246-6.6046-8.1165-10.178-11.324-12.957-10.988z" transform="matrix(1.9024 0 0 1.9024 3412 -1843.7)" fill="#fff"/>
+  </g>
+  <path style="color-rendering:auto;text-decoration-color:#000000;color:#000000;isolation:auto;mix-blend-mode:normal;shape-rendering:auto;solid-color:#000000;block-progression:tb;text-decoration-line:none;text-decoration-style:solid;image-rendering:auto;white-space:normal;text-indent:0;text-transform:none" d="m-1011-254.39a378.57 378.57 0 0 0 -0.9141 18.264c113.1-33.564 237.73-52.023 365.63-52.92 136.38-0.95605 269.7 18.16 389.99 54.408a378.57 378.57 0 0 0 -0.34565 -9.7598 378.57 378.57 0 0 0 -1.0644 -8.7656c-120.38-35.545-253.06-54.097-388.7-53.147-127.3 0.89224-251.38 18.941-364.6 51.92z" fill="#4a856d"/>
+  <g fill="#69ab90">
+   <path d="m-596.16-130.58h-14.32v72.537h14.32v-30.165h14.789v30.165h14.32v-72.537h-14.32v29.93h-14.789v-29.93z"/>
+   <path d="m-556.38-130.58v72.537h39.203v-12.442h-24.883v-17.723h19.719v-12.442h-19.719v-17.489h24.883v-12.442h-39.203z"/>
+   <path d="m-472.89-58.044v-12.442h-21.714v-60.095h-14.32v72.537h36.034z"/>
+   <path d="m-430.48-58.044v-12.442h-21.714v-60.095h-14.32v72.537h36.034z"/>
+   <path d="m-403.8-69.781c-2.2301 0-3.9907-0.93899-4.9297-2.3475-1.2911-1.878-1.6432-4.8123-1.6432-7.2772v-29.696c0-2.5822 0.23475-5.2818 1.5259-7.2772 0.93899-1.4085 2.817-2.4648 5.0471-2.4648h1.4085c2.3475 0 4.2254 0.93899 5.1644 2.3475 1.2911 1.9954 1.4085 4.8123 1.4085 7.3946v29.696c0 2.4648-0.23475 5.3992-1.5259 7.2772-0.93899 1.4085-2.6996 2.3475-5.0471 2.3475h-1.4085zm-20.893-11.385c0 5.7513 0.58687 12.089 4.1081 16.784 3.4038 4.5776 9.1552 7.0424 17.489 7.0424 8.3335 0 14.085-2.6996 17.489-7.2772 3.5212-4.695 4.2255-11.033 4.2255-16.667v-26.174c0-5.7513-0.70425-12.089-4.2255-16.784-3.4038-4.5776-9.1552-6.925-17.489-6.925-8.3335 0-13.967 2.6996-17.371 7.2772-3.5212 4.695-4.2254 10.916-4.2254 16.667v26.057z"/>
+  </g>
+  <g fill="#69ab90">
+   <path d="m-613.41-201.17c0 5.7513 1.1737 9.8594 3.8733 13.498 4.1081 5.2818 11.268 8.3335 16.902 11.62 1.7606 0.93899 3.1691 1.878 4.2254 3.0517 0.93899 1.2911 1.6432 2.6996 1.6432 4.5776 0.11738 2.5822-0.58686 4.8123-1.9954 6.2208-1.4085 1.5259-3.5212 2.3475-6.3382 2.3475h-1.4085c-4.5776 0-8.6856-1.0564-13.967-2.6996l-2.1127 11.855c4.4602 1.878 11.503 3.5212 17.606 3.5212 7.5119-0.11737 14.789-2.1127 18.545-7.3945 3.1691-4.3428 3.9907-9.5073 3.9907-14.554 0-5.7513-1.4085-9.6246-3.8733-12.559-1.1737-1.4085-2.5822-2.5822-4.3428-3.6386-4.695-3.0517-10.564-4.9297-14.906-7.9814-2.3475-1.7606-3.8733-3.8733-3.8733-6.925 0-2.6996 0.58687-4.5776 1.7606-5.8687 1.2911-1.4085 3.1691-1.9954 5.8687-1.9954 4.695 0 8.6857 0.93899 13.146 2.1127l2.1127-11.62c-5.1644-1.9954-10.798-3.0517-16.432-2.9343-6.925 0.11737-12.442 2.2301-15.963 6.3382-2.6996 3.0517-4.4602 7.7467-4.4602 13.028z"/>
+   <path d="m-536-160.79 2.3475 13.146h14.202v-3.0517l-15.141-69.485h-18.076l-15.024 68.898v3.6386h13.85l2.3475-13.146h15.493zm-7.7467-43.663 5.5166 31.221h-11.033l5.5166-31.221z"/>
+   <path d="m-474.6-216.55v-3.6386h-12.676l-9.8594 31.574-9.9768-31.574h-13.381v3.756l16.198 44.367v24.414h14.437v-25.118l15.259-43.78z"/>
+   <path d="m-471.74-201.17c0 5.7513 1.1737 9.8594 3.8733 13.498 4.1081 5.2818 11.268 8.3335 16.902 11.62 1.7606 0.93899 3.1691 1.878 4.2255 3.0517 0.93899 1.2911 1.6432 2.6996 1.6432 4.5776 0.11737 2.5822-0.58687 4.8123-1.9954 6.2208-1.4085 1.5259-3.5212 2.3475-6.3382 2.3475h-1.4085c-4.5776 0-8.6856-1.0564-13.967-2.6996l-2.1127 11.855c4.4602 1.878 11.503 3.5212 17.606 3.5212 7.5119-0.11737 14.789-2.1127 18.545-7.3945 3.1691-4.3428 3.9907-9.5073 3.9907-14.554 0-5.7513-1.4085-9.6246-3.8733-12.559-1.1737-1.4085-2.5822-2.5822-4.3428-3.6386-4.695-3.0517-10.564-4.9297-14.906-7.9814-2.3475-1.7606-3.8733-3.8733-3.8733-6.925 0-2.6996 0.58687-4.5776 1.7606-5.8687 1.2911-1.4085 3.1691-1.9954 5.8687-1.9954 4.695 0 8.6857 0.93899 13.146 2.1127l2.1127-11.62c-5.1644-1.9954-10.798-3.0517-16.432-2.9343-6.925 0.11737-12.442 2.2301-15.963 6.3382-2.6996 3.0517-4.4602 7.7467-4.4602 13.028z"/>
+  </g>
+  <path d="m-642.99-219.72h8.3121v161.84h-8.3121z" fill="#4a856d"/>
+  <g fill="#4a856d">
+   <path d="m-887.97-91.967v12.157h70.466v-23.864h-34.895l21.162-34.895c8.5549-13.958 16.209-27.466 16.209-44.351 0-13.283-4.2775-22.963-11.932-28.817-6.5288-5.178-15.759-7.6544-27.241-7.8795-10.356-0.22513-18.01 1.801-27.916 5.8534l4.0523 22.063c8.5549-2.2513 12.382-4.0523 21.387-4.0523 5.178 0 10.131 1.801 12.832 6.7539 1.5759 2.7016 2.2513 6.0785 2.0262 9.9057-0.22513 10.581-5.8534 22.288-11.482 31.068l-34.67 56.057z"/>
+   <path d="m-770.65-107.05h-26.34v27.241h26.34v-27.241z"/>
+   <path d="m-750.43-124.39c0 11.031 1.3508 23.188 8.1047 32.194 6.5288 8.7801 16.434 13.508 32.419 13.508 15.984 0 25.89-5.178 32.419-13.958 6.7539-9.0052 8.1047-21.162 8.1047-31.968v-49.754c0-11.031-1.3508-23.188-8.1047-32.194-6.5288-8.7801-16.434-13.283-32.419-13.283-15.984 0-25.89 4.9529-32.419 13.733-6.7539 9.0052-8.1047 21.162-8.1047 32.194v49.529zm39.848 21.838c-4.2775 0-7.4293-1.801-9.2303-4.5026-2.4764-3.6021-3.1518-9.2303-3.1518-13.958v-56.508c0-4.9529 0.67539-10.356 3.1518-14.183 1.801-2.7016 4.9528-4.5026 9.2303-4.5026h1.3508c4.2775 0 7.4293 1.801 9.2303 4.5026 2.4764 3.8272 3.1518 9.2303 3.1518 14.183v56.508c0 4.7277-0.67539 10.356-3.1518 13.958-1.801 2.7016-4.9529 4.5026-9.2303 4.5026h-1.3508z"/>
+  </g>
+ </g>
+</svg>
diff --git a/pages/welcome/welcome.css b/pages/welcome/welcome.css
new file mode 100644
index 0000000000000000000000000000000000000000..edfe6a6c8340cc29dba7dc6e108afe3f8cd59011
--- /dev/null
+++ b/pages/welcome/welcome.css
@@ -0,0 +1,180 @@
+/**
+* Sections
+*/
+
+body {
+    background-color: #eff4e2;
+    color: #777;
+    font-size: 14px;
+    min-width: 256px;
+    padding: 25px 10px;
+}
+
+h1 {
+    font-family: 'Noto Sans', Arial, sans-serif;
+    font-size: 24px;
+    font-weight: 400;
+    margin: 15px auto 20px;
+    max-width: 750px;
+}
+
+a {
+    color: #777;
+}
+
+.btn-panel {
+    font-family: 'Noto Sans', Arial, sans-serif;
+    margin: 35px auto;
+    max-width: 750px;
+}
+
+.topic-badge {
+    background-color: #fcfcfc;
+    border-radius: 100px;
+    border: 4px solid #e6e6e6;
+    color: #5a8f79;
+    display: inline-block;
+    font-size: 48px;
+    line-height: 0;
+    margin: 0 20px 20px;
+    padding: 16px;
+}
+
+.topic-badge:first-child {
+    margin-left: 0;
+}
+
+.topic-badge:last-child {
+    margin-right: 0;
+}
+
+/**
+ * Fonts
+ */
+
+@font-face {
+  font-family: 'Noto Sans';
+  font-style: normal;
+  font-weight: 400;
+  src: url('../../modules/noto-sans/noto-sans.woff2')
+       format('woff2');
+}
+
+@font-face {
+  font-family: 'Noto Sans';
+  font-style: normal;
+  font-weight: 600;
+  src: url('../../modules/noto-sans/noto-sans-bold.woff2')
+       format('woff2');
+}
+
+@font-face {
+  font-family: 'Noto Sans';
+  font-style: italic;
+  font-weight: 400;
+  src: url('../../modules/noto-sans/noto-sans-italic.woff2')
+       format('woff2');
+}
+
+/**
+ * Buttons
+ */
+
+.btn {
+    color: #fff;
+    font-weight: 600;
+    margin-right: 15px;
+    padding: 11px 17px;
+    text-decoration: none;
+}
+
+.btn-text {
+    margin-left: 10px;
+}
+
+.btn-github {
+    background-color: #24292e;
+}
+
+.btn-github:hover {
+    background-color: #42474c;
+}
+
+.btn-website {
+    background-color: #169cff;
+}
+
+.btn-website:hover {
+    background-color: #008ff5;
+}
+
+.btn-bitcoin {
+    background-color: #f7931a;
+}
+
+.btn-bitcoin:hover {
+    background-color: #f58700;
+}
+
+.btn-monero {
+    background-color: #f26822;
+}
+
+.btn-monero:hover {
+    background-color: #ed5407;
+}
+
+/**
+ * Miscellaneous
+ */
+
+.notice {
+    align-items: center;
+    display: flex;
+    font-family: 'Noto Sans', Arial, sans-serif;
+    margin-left: auto;
+    margin-right: auto;
+    max-width: 750px;
+    text-align: left;
+}
+
+.logo {
+    display: block;
+    height: 145px;
+    margin: 15px auto 50px;
+}
+
+.subtle-hint {
+    background-color: #fcfcfc;
+    border-radius: 4px;
+    border: 1px solid #e6e6e6;
+    color: #777;
+    font-size: 14px;
+    margin-bottom: 20px;
+    padding: 8px 11px;
+}
+
+.topic-label {
+    color: #5a8f79;
+    font-style: normal;
+    font-weight: bold;
+}
+
+.color-purple {
+    color: #9e608e;
+}
+
+/**
+ * Media Queries
+ */
+
+@media screen and (max-width: 550px) {
+    
+    .btn {
+        padding: 13px 18px 12px
+    }
+    
+    .btn-text {
+        display: none
+    }
+}
diff --git a/pages/welcome/welcome.html b/pages/welcome/welcome.html
new file mode 100644
index 0000000000000000000000000000000000000000..c2f06ad3e265b412abcc1d3a66334bafc3e73419
--- /dev/null
+++ b/pages/welcome/welcome.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+
+<html>
+
+<head>
+
+    <title>2.0 Says Hello - Decentraleyes</title>
+
+    <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0">
+    <meta charset="utf-8">
+
+    <link rel="stylesheet" type="text/css" href="welcome.css">
+
+    <script defer src="../../modules/fontawesome/packs/solid.js"></script>
+    <script defer src="../../modules/fontawesome/fontawesome.js"></script>
+
+    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
+    <link rel="icon" href="favicon.ico" type="image/x-icon">
+
+</head>
+
+<body>
+
+    <img src="logo.svg" alt="Decentraleyes" class="logo"/>
+
+    <div class="container">
+
+        <h1>For a smoother experience</h1>
+
+        <div class="notice">
+
+            <span class="subtle-hint"><span class="topic-label">Configure HTTPS Everywhere</span><br>There's no need to read any further, unless you actually use Decentraleyes in combination with the HTTPS Everywhere extension. If you do, please follow this <a href="https://decentraleyes.org/configure-https-everywhere/" target="_blank">short guide</a> to prevent, or resolve, any conflicts.</span>
+
+        </div>
+
+        <h1>What's new in version 2.0?</h1>
+
+        <div class="notice">
+
+            <span class="subtle-hint"><span class="topic-label">Improved Configurability</span><br>The options screen has been updated to give you more control over the extension. Settings that impact privacy, or website functionality, are now explicitly labeled as advanced.</span>
+
+            <div class="topic-badge"><i class="fas fa-cog"></i></div>
+
+        </div>
+
+        <div class="notice">
+
+            <div class="topic-badge color-purple"><i class="fas fa-power-off"></i></div>
+
+            <span class="subtle-hint"><span class="topic-label color-purple">Simplified Whitelist Management</span><br>Excluding the domain you're visiting from inspections is now easier than ever. Just open up the popup panel, and use the dedicated button, to disable protection for said site.</span>
+
+        </div>
+
+        <h1>Learn more, or contribute</h1>
+
+        <div class="btn-panel">
+
+            <a class="btn btn-website" href="https://decentraleyes.org" target="_blank"><i class="btn-icon fas fa-globe" data-fa-transform="grow-2"></i><span class="btn-text">Website</span></a>
+
+            <a class="btn btn-github" href="https://github.com/Synzvato/decentraleyes" target="_blank"><i class="btn-icon fas fa-github-alt" data-fa-transform="grow-2"></i><span class="btn-text">GitHub</span></a>
+
+            <a class="btn btn-bitcoin" href="https://decentraleyes.org/donate/bitcoin/" target="_blank"><i class="btn-icon fas fa-btc" data-fa-transform="grow-2"></i><span class="btn-text">Bitcoin</span></a>
+
+            <a class="btn btn-monero" href="https://decentraleyes.org/donate/monero/" target="_blank"><i class="btn-icon fas fa-monero" data-fa-transform="grow-2"></i><span class="btn-text">Monero</span></a>
+
+        </div>
+
+    </div>
+
+</body>
+
+</html>