Run wappalyzer build

main
Elbert Alias 8 years ago
commit bb4956a2b8

@ -587,6 +587,25 @@
"implies": "Java",
"website": "http://wicket.apache.org"
},
"ApexPages": {
"cats": [
"51"
],
"headers": {
"X-Powered-By": "Salesforce.com ApexPages"
},
"icon": "ApexPages.png",
"website": "https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_intro.htm"
},
"Apostrophe CMS": {
"cats": [
"1"
],
"html": "<[^>]+data-apos-refreshable[^>]",
"icon": "apostrophecms.svg",
"implies": "Node.js",
"website": "http://apostrophecms.org"
},
"AppNexus": {
"cats": [
"36"
@ -942,6 +961,14 @@
"script": "boba(?:\\.min)?\\.js",
"website": "http://boba.space150.com"
},
"Bold Chat": {
"cats": [
"52"
],
"icon": "BoldChat.png",
"script": "^https?://vmss\\.boldchat\\.com/aid/\\d{18}/bc\\.vms4/vms\\.js",
"website": "https://www.boldchat.com/"
},
"Bolt": {
"cats": [
"1"
@ -2003,6 +2030,9 @@
"cats": [
"1"
],
"headers": {
"X-Dotclear-Static-Cache": ""
},
"icon": "Dotclear.png",
"implies": "PHP",
"website": "http://dotclear.org"
@ -2466,7 +2496,7 @@
],
"icon": "FancyBox.png",
"implies": "jQuery",
"script": "jquery\\.fancybox\\.pack\\.js$",
"script": "jquery\\.fancybox\\.pack\\.js(?:\\?v=([\\d.]+))?$\\;version:\\1",
"website": "http://fancyapps.com/fancybox"
},
"Fat-Free Framework": {
@ -2545,6 +2575,18 @@
},
"website": "http://www.flexcmp.com/cms/home"
},
"FlexSlider": {
"cats": [
"5",
"7"
],
"icon": "FlexSlider.png",
"implies": "jQuery",
"script": [
"jquery\\.flexslider(?:\\.min)?\\.js$"
],
"website": "https://woocommerce.com/flexslider/"
},
"FluxBB": {
"cats": [
"2"
@ -2577,6 +2619,17 @@
"icon": "Font Awesome.png",
"website": "http://fontawesome.io"
},
"Fork CMS": {
"cats": [
"1"
],
"icon": "ForkCMS.png",
"implies": "Symfony",
"meta": {
"generator": "^Fork CMS$"
},
"website": "http://www.fork-cms.com/"
},
"Fortune3": {
"cats": [
"6"
@ -2724,7 +2777,10 @@
"47"
],
"env": "^gerrit_",
"html": "<(?:div|style) id=\"gerrit_",
"html": [
">Gerrit Code Review</a>\\s*\"\\s*\\(([0-9.]+)\\)\\;version:\\1",
"<(?:div|style) id=\"gerrit_"
],
"icon": "gerrit.svg",
"implies": [
"Java",
@ -4129,6 +4185,14 @@
},
"website": "http://www.komodocms.com"
},
"Kontaktify": {
"cats": [
"5"
],
"icon": "Kontaktify.png",
"script": "//(?:www\\.)?kontaktify\\.com/embed.js",
"website": "https://www.kontaktify.com"
},
"Koobi": {
"cats": [
"1"
@ -4372,6 +4436,14 @@
"url": "\\.livejournal\\.com",
"website": "http://www.livejournal.com"
},
"LivePerson": {
"cats": [
"52"
],
"icon": "LivePerson.png",
"script": "^https?://lptag\\.liveperson\\.net/tag/tag\\.js",
"website": "https://www.liveperson.com/"
},
"LiveStreet CMS": {
"cats": [
"1"
@ -4746,6 +4818,18 @@
},
"website": "http://www.mediawiki.org"
},
"Medium": {
"cats": [
"1"
],
"headers": {
"X-Powered-By": "Medium"
},
"icon": "Medium.svg",
"script": "medium\\.com",
"url": "^(?:www\\.)?medium\\.com",
"website": "https://medium.com"
},
"Meebo": {
"cats": [
"5"
@ -4770,9 +4854,17 @@
"cats": [
"12"
],
"env": "^Meteor$",
"env": [
"^Meteor$",
"^METEOR_VERSION$"
],
"html": "<link[^>]+__meteor-css__",
"icon": "Meteor.png",
"implies": [
"MongoDB",
"Node.js",
"jQuery"
],
"website": "http://meteor.com"
},
"Methode": {
@ -5326,6 +5418,18 @@
"icon": "node.js.png",
"website": "http://nodejs.org"
},
"NodeBB": {
"cats": [
"2"
],
"headers": {
"X-Powered-By": "^NodeBB$"
},
"icon": "NodeBB.png",
"implies": "Node.js",
"script": "^/nodebb\\.min\\.js\\?",
"website": "https://nodebb.org"
},
"OWL Carousel": {
"cats": [
"5",
@ -5389,6 +5493,14 @@
"script": "/web/js/(?:web\\.assets_common/|website\\.assets_frontend/)\\;confidence:25",
"website": "http://odoo.com"
},
"Olark": {
"cats": [
"52"
],
"icon": "Olark.png",
"script": "^https?:\\/\\/static\\.olark\\.com\\/jsclient\\/loader1\\.js",
"website": "https://www.olark.com/"
},
"OmniTouch 8660 My Teamwork": {
"cats": [
"19"
@ -7287,6 +7399,17 @@
},
"website": "http://spidercontrol.net/ininet"
},
"SpinCMS": {
"cats": [
"1"
],
"headers": {
"Set-Cookie": "spincms_session"
},
"icon": "SpinCMS.png",
"implies": "PHP",
"website": "http://www.spin.cw"
},
"Splunk": {
"cats": [
"19"
@ -7629,7 +7752,10 @@
],
"env": "^TEALIUMENABLED$",
"icon": "Tealium.png",
"script": "//tags\\.tiqcdn\\.com/",
"script": [
"^//tags\\.tiqcdn\\.com/",
"/tealium/utag\\.js$"
],
"website": "http://tealium.com"
},
"TeamCity": {
@ -7651,9 +7777,12 @@
"cats": [
"1"
],
"env": "Telescope",
"env": "^Telescope$",
"icon": "Telescope.png",
"implies": "Meteor",
"implies": [
"Meteor",
"React"
],
"website": "http://telescopeapp.org"
},
"Tengine": {
@ -9918,6 +10047,22 @@
"icon": "webpack.svg",
"website": "http://webpack.github.io"
},
"wpCache": {
"cats": [
"23"
],
"headers": {
"X-Powered-By": "wpCache(?:/([\\d.]+))?\\;version:\\1"
},
"html": "<!--[^>]+wpCache",
"icon": "wpCache.png",
"implies": "PHP",
"meta": {
"generator": "wpCache",
"keywords": "wpCache"
},
"website": "http://wpcache.co"
},
"xCharts": {
"cats": [
"25"

@ -1,524 +0,0 @@
/**
* Wappalyzer v2
*
* Created by Elbert Alias <elbert@alias.io>
*
* License: GPLv3 http://www.gnu.org/licenses/gpl-3.0.txt
*/
var wappalyzer = (function() {
//'use strict';
/**
* Application class
*/
var Application = function(app, detected) {
this.app = app;
this.confidence = {};
this.confidenceTotal = 0;
this.detected = Boolean(detected);
this.excludes = [];
this.version = '';
this.versions = [];
};
Application.prototype = {
/**
* Calculate confidence total
*/
getConfidence: function() {
var total = 0, id;
for ( id in this.confidence ) {
total += this.confidence[id];
}
return this.confidenceTotal = Math.min(total, 100);
},
/**
* Resolve version number (find the longest version number that contains all shorter detected version numbers)
*/
getVersion: function() {
var i, resolved;
if ( !this.versions.length ) {
return;
}
this.versions.sort(function(a, b) {
return a.length - b.length;
});
resolved = this.versions[0];
for ( i = 1; i < this.versions.length; i++ ) {
if ( this.versions[i].indexOf(resolved) === -1 ) {
break;
}
resolved = this.versions[i];
}
return this.version = resolved;
},
setDetected: function(pattern, type, value, key) {
this.detected = true;
// Set confidence level
this.confidence[type + ' ' + ( key ? key + ' ' : '' ) + pattern.regex] = pattern.confidence ? pattern.confidence : 100;
// Detect version number
if ( pattern.version ) {
var
version = pattern.version,
matches = pattern.regex.exec(value);
if ( matches ) {
matches.forEach(function(match, i) {
// Parse ternary operator
var ternary = new RegExp('\\\\' + i + '\\?([^:]+):(.*)$').exec(version);
if ( ternary && ternary.length === 3 ) {
w.log({ match: match, i: i, ternary: ternary });
version = version.replace(ternary[0], match ? ternary[1] : ternary[2]);
w.log({ version: version });
}
// Replace back references
version = version.replace(new RegExp('\\\\' + i, 'g'), match ? match : '');
});
if ( version && this.versions.indexOf(version) < 0 ) {
this.versions.push(version);
}
this.getVersion();
}
}
}
};
var Profiler = function() {
this.regexCount = 0;
this.startTime = new Date().getTime();
this.lastTime = new Date().getTime();
this.slowest = { duration: null, app: '', type: '', pattern: '' };
this.timedOut = false;
};
Profiler.prototype = {
checkPoint: function(app, type, regex) {
var duration = new Date().getTime() - this.lastTime;
if ( !this.slowest.duration || duration > this.slowest.duration ) {
this.slowest.duration = duration;
this.slowest.app = app;
this.slowest.type = type;
this.slowest.regex = regex;
}
this.regexCount++;
this.lastTime = new Date().getTime();
this.timedOut = this.lastTime - this.startTime > w.driver.timeout;
}
};
/**
* Call driver functions
*/
var driver = function(func, args) {
if ( typeof w.driver[func] !== 'function' ) {
w.log('not implemented: w.driver.' + func, 'warn');
return;
}
if ( func !== 'log' ) {
w.log('w.driver.' + func);
}
return w.driver[func](args);
};
/**
* Parse apps.json patterns
*/
var parse = function(patterns) {
var
attrs,
parsed = [];
// Convert single patterns to an array
if ( typeof patterns === 'string' ) {
patterns = [ patterns ];
}
patterns.forEach(function(pattern) {
attrs = {};
pattern.split('\\;').forEach(function(attr, i) {
if ( i ) {
// Key value pairs
attr = attr.split(':');
if ( attr.length > 1 ) {
attrs[attr.shift()] = attr.join(':');
}
} else {
attrs.string = attr;
try {
attrs.regex = new RegExp(attr.replace('/', '\/'), 'i'); // Escape slashes in regular expression
} catch (e) {
attrs.regex = new RegExp();
w.log(e + ': ' + attr, 'error');
}
}
});
parsed.push(attrs);
});
return parsed;
};
/**
* Main script
*/
var w = {
apps: {},
cats: null,
ping: { hostnames: {} },
adCache: [],
detected: {},
config: {
websiteURL: 'https://wappalyzer.com/',
twitterURL: 'https://twitter.com/Wappalyzer',
githubURL: 'https://github.com/AliasIO/Wappalyzer',
},
/**
* Log messages to console
*/
log: function(message, type) {
if ( type === undefined ) {
type = 'debug';
}
if ( typeof message === 'object' ) {
message = JSON.stringify(message);
}
driver('log', { message: message, type: type });
},
/**
* Initialize
*/
init: function() {
w.log('w.init');
// Checks
if ( w.driver === undefined ) {
w.log('no driver, exiting');
return;
}
// Initialize driver
driver('init');
},
/**
* Analyze the request
*/
analyze: function(hostname, url, data) {
var
i, app, confidence, type, regexMeta, regexScript, match, content, meta, header, version, id,
profiler = new Profiler(),
apps = {},
excludes = [],
checkImplies = true;
w.log('w.analyze');
// Remove hash from URL
data.url = url = url.split('#')[0];
if ( w.apps === undefined || w.categories === undefined ) {
w.log('apps.json not loaded, check for syntax errors');
return;
}
if ( w.detected[url] === undefined ) {
w.detected[url] = {};
}
for ( app in w.apps ) {
// Exit loop after one second to prevent CPU hogging
// Remaining patterns will not be evaluated
if ( profiler.timedOut ) {
w.log('Timeout, exiting loop');
break;
}
apps[app] = w.detected[url] && w.detected[url][app] ? w.detected[url][app] : new Application(app);
for ( type in w.apps[app] ) {
switch ( type ) {
case 'url':
parse(w.apps[app][type]).forEach(function(pattern) {
if ( pattern.regex.test(url) ) {
apps[app].setDetected(pattern, type, url);
}
profiler.checkPoint(app, type, pattern.regex);
});
break;
case 'html':
if ( typeof data[type] !== 'string' || !data.html ) {
break;
}
parse(w.apps[app][type]).forEach(function(pattern) {
if ( pattern.regex.test(data[type]) ) {
apps[app].setDetected(pattern, type, data[type]);
}
profiler.checkPoint(app, type, pattern.regex);
});
break;
case 'script':
if ( typeof data.html !== 'string' || !data.html ) {
break;
}
regexScript = new RegExp('<script[^>]+src=("|\')([^"\']+)', 'ig');
parse(w.apps[app][type]).forEach(function(pattern) {
while ( match = regexScript.exec(data.html) ) {
if ( pattern.regex.test(match[2]) ) {
apps[app].setDetected(pattern, type, match[2]);
}
}
profiler.checkPoint(app, type, pattern.regex);
});
break;
case 'meta':
if ( typeof data.html !== 'string' || !data.html ) {
break;
}
regexMeta = /<meta[^>]+>/ig;
while ( match = regexMeta.exec(data.html) ) {
for ( meta in w.apps[app][type] ) {
profiler.checkPoint(app, type, regexMeta);
if ( new RegExp('(name|property)=["\']' + meta + '["\']', 'i').test(match) ) {
content = match.toString().match(/content=("|')([^"']+)("|')/i);
parse(w.apps[app].meta[meta]).forEach(function(pattern) {
if ( content && content.length === 4 && pattern.regex.test(content[2]) ) {
apps[app].setDetected(pattern, type, content[2], meta);
}
profiler.checkPoint(app, type, pattern.regex);
});
}
}
}
break;
case 'headers':
if ( typeof data[type] !== 'object' || !data[type] ) {
break;
}
for ( header in w.apps[app].headers ) {
parse(w.apps[app][type][header]).forEach(function(pattern) {
if ( data[type][header.toLowerCase()] instanceof Array ) {
data[type][header.toLowerCase()].forEach(function(el) {
if ( typeof el === 'string' && pattern.regex.test(el) ) {
apps[app].setDetected(pattern, type, data[type][header.toLowerCase()], header);
}
});
} else {
if ( typeof data[type][header.toLowerCase()] === 'string' && pattern.regex.test(data[type][header.toLowerCase()]) ) {
apps[app].setDetected(pattern, type, data[type][header.toLowerCase()], header);
}
}
profiler.checkPoint(app, type, pattern.regex);
});
}
break;
case 'env':
if ( typeof data[type] !== 'object' || !data[type] ) {
break;
}
parse(w.apps[app][type]).forEach(function(pattern) {
for ( i in data[type] ) {
if ( pattern.regex.test(data[type][i]) ) {
apps[app].setDetected(pattern, type, data[type][i]);
}
}
profiler.checkPoint(app, type, pattern.regex);
});
break;
}
}
}
w.log('[ profiler ] Tested ' + profiler.regexCount + ' regular expressions in ' + ( (new Date().getTime() - profiler.startTime) / 1000 ) + 's');
w.log('[ profiler ] Slowest pattern took ' + ( profiler.slowest.duration / 1000 ) + 's: ' + profiler.slowest.app + ' | ' + profiler.slowest.type + ' | ' + profiler.slowest.regex);
for ( app in apps ) {
if ( !apps[app].detected ) {
delete apps[app];
}
}
// Exclude app in detected apps only
for ( app in apps ) {
if (w.apps[app].excludes ) {
if ( typeof w.apps[app].excludes === 'string' ) {
w.apps[app].excludes = [ w.apps[app].excludes ];
}
w.apps[app].excludes.forEach(function(excluded) {
excludes.push(excluded);
});
}
}
// Remove excluded applications
for ( app in apps ) {
if ( excludes.indexOf(app) !== -1 ) {
delete apps[app];
}
}
// Implied applications
// Run several passes as implied apps may imply other apps
while ( checkImplies ) {
checkImplies = false;
for ( app in apps ) {
confidence = apps[app].confidence;
if ( w.apps[app] && w.apps[app].implies ) {
// Cast strings to an array
if ( typeof w.apps[app].implies === 'string' ) {
w.apps[app].implies = [ w.apps[app].implies ];
}
w.apps[app].implies.forEach(function(implied) {
implied = parse(implied)[0];
if ( !w.apps[implied.string] ) {
w.log('Implied application ' + implied.string + ' does not exist', 'warn');
return;
}
if ( !apps.hasOwnProperty(implied.string) ) {
apps[implied.string] = w.detected[url] && w.detected[url][implied.string] ? w.detected[url][implied.string] : new Application(implied.string, true);
checkImplies = true;
}
// Apply app confidence to implied app
for ( id in confidence ) {
apps[implied.string].confidence[id + ' implied by ' + app] = confidence[id] * ( implied.confidence ? implied.confidence / 100 : 1 );
}
});
}
}
}
w.log(Object.keys(apps).length + ' apps detected: ' + Object.keys(apps).join(', ') + ' on ' + url);
// Keep history of detected apps
for ( app in apps ) {
confidence = apps[app].confidence;
version = apps[app].version;
// Per URL
w.detected[url][app] = apps[app];
for ( id in confidence ) {
w.detected[url][app].confidence[id] = confidence[id];
}
if ( w.detected[url][app].getConfidence() >= 100 ) {
// Per hostname
if ( /(www.)?((.+?)\.(([a-z]{2,3}\.)?[a-z]{2,6}))$/.test(hostname) && !/((local|dev(elopment)?|stag(e|ing)?|test(ing)?|demo(shop)?|admin|google|cache)\.|\/admin|\.local)/.test(url) ) {
if ( !w.ping.hostnames.hasOwnProperty(hostname) ) {
w.ping.hostnames[hostname] = { applications: {}, meta: {} };
}
if ( !w.ping.hostnames[hostname].applications.hasOwnProperty(app) ) {
w.ping.hostnames[hostname].applications[app] = { hits: 0 };
}
w.ping.hostnames[hostname].applications[app].hits ++;
if ( version ) {
w.ping.hostnames[hostname].applications[app].version = version;
}
} else {
w.log('Ignoring hostname "' + hostname + '"');
}
}
}
// Additional information
if ( w.ping.hostnames.hasOwnProperty(hostname) ) {
if ( typeof data.html === 'string' && data.html ) {
match = data.html.match(/<html[^>]*[: ]lang="([a-z]{2}((-|_)[A-Z]{2})?)"/i);
if ( match && match.length ) {
w.ping.hostnames[hostname].meta['language'] = match[1];
}
}
}
if ( Object.keys(w.ping.hostnames).length >= 50 || w.adCache.length >= 50 ) {
driver('ping');
}
apps = null;
data = null;
driver('displayApps');
}
};
return w;
})();
// CommonJS package
// See http://wiki.commonjs.org/wiki/CommonJS
if ( typeof exports === 'object' ) {
exports.wappalyzer = wappalyzer;
}

@ -91,6 +91,7 @@
confidence: wappalyzer.detected[url][app].confidenceTotal.toString(),
version: wappalyzer.detected[url][app].version,
icon: wappalyzer.apps[app].icon,
website: wappalyzer.apps[app].website,
categories: cats
});
}

@ -6,7 +6,7 @@ const
phantomjs = require('phantomjs-prebuilt');
exports.run = function(args, callback) {
args.unshift.apply(args, ['driver.js', '--web-security=false', '--load-images=false', '--ignore-ssl-errors=yes', '--ssl-protocol=any']);
args.unshift.apply(args, [path.join(__dirname, 'driver.js'), '--web-security=false', '--load-images=false', '--ignore-ssl-errors=yes', '--ssl-protocol=any']);
var driver = phantomjs.exec.apply(this, args);

@ -10,7 +10,7 @@ document.addEventListener('DOMContentLoaded', function() {
popup = {
init: function() {
browser.tabs.query({ active: true, windowId: browser.windows.WINDOW_ID_CURRENT }).then(function(tabs) {
browser.tabs.query({ active: true, currentWindow: true }).then(function(tabs) {
if ( tabs[0].url.match(/https?:\/\//) ) {
detectedApps.innerHTML = '<div class="empty">' + browser.i18n.getMessage('noAppsDetected') + '</div>';
} else {
@ -24,7 +24,7 @@ document.addEventListener('DOMContentLoaded', function() {
displayApps: function() {
var appName, confidence, version;
browser.tabs.query({ active: true, windowId: browser.windows.WINDOW_ID_CURRENT }).then(function(tabs) {
browser.tabs.query({ active: true, currentWindow: true }).then(function(tabs) {
function sendGetApps(response) {
if ( response.tabCache && response.tabCache.count > 0 ) {
detectedApps.innerHTML = '';

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 754 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="256px" height="208px" viewBox="0 0 256 208" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid">
<g>
<path d="M177.735242,1.67620228 C173.837865,-0.18165739 170.650604,1.69271659 170.650604,5.85432226 L170.650604,171.360719 L241.794244,205.322394 C249.622026,209.120685 255.971777,206.478396 255.971777,199.542386 L255.971777,40.1793119 C255.971777,39.5187396 255.55892,38.9407388 254.94789,38.6104526 L177.743499,1.78354529 L177.743499,1.70097375 L177.735242,1.67620228 L177.735242,1.67620228 Z" fill="#32FC8D"></path>
<path d="M85.3211734,130.636435 L166.488998,4.73960646 C168.784487,1.18903019 173.837865,-0.214686007 177.718728,1.6018879 L255.038719,38.5113668 C255.534148,38.7590814 255.715806,39.3370822 255.426805,39.7499399 L170.642347,171.377233 L85.3211734,130.652949 L85.3211734,130.636435 L85.3211734,130.636435 Z" fill="#0BE370"></path>
<path d="M11.8077304,3.9221482 C5.31760724,0.825715411 3.1129471,3.12946141 6.91949514,9.04158375 L85.3211734,130.636435 L170.642347,171.360719 L85.5110879,39.3040535 C85.3872306,39.114139 85.2138304,38.9572531 85.0156587,38.8581672 L11.8077304,3.93040535 L11.8077304,3.9221482 L11.8077304,3.9221482 Z" fill="#14C767"></path>
<path d="M85.3211734,199.476329 C85.3211734,206.412338 80.0118233,209.550057 73.513443,206.445367 L7.08463822,174.737895 C3.18726149,172.888293 0,167.967029 0,163.797166 L0,8.38101142 C0,2.83220386 4.25243436,0.32202901 9.45444145,2.8074324 L84.8670299,38.8086243 C85.1477731,38.9324816 85.3211734,39.2049677 85.3211734,39.5022252 L85.3211734,199.4433 L85.3211734,199.476329 L85.3211734,199.476329 Z" fill="#00AB6C"></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 641 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 869 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="256px" height="256px" viewBox="0 0 256 256" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 41.2 (35397) - http://www.bohemiancoding.com/sketch -->
<title>256</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="256" fill="#00BF9A">
<path d="M140.193354,69.1040859 C137.79248,68.5490638 135.323592,69.7160334 134.239024,71.9292095 L111.690359,117.752486 C110.888845,119.393156 110.986998,121.33919 111.950199,122.885933 C112.911363,124.432675 114.627204,125.380482 116.448528,125.380482 L138.994343,125.380482 C140.391289,125.380482 141.757689,124.814889 142.742068,123.833333 C143.727261,122.844865 144.297851,121.47947 144.297851,120.093338 L144.297851,74.2598958 C144.297851,71.797468 142.598708,69.6611411 140.193354,69.1040859 Z M181.388195,15.2998758 L181.388195,120.093338 C181.388195,121.47947 181.949825,122.844865 182.938276,123.833333 C183.924284,124.814889 185.291499,125.380482 186.68478,125.380482 L252.460579,125.380482 C251.553174,76.7841283 222.763866,34.9976718 181.388195,15.2998758 Z M247.585929,162.416112 L186.68478,162.416112 C185.291499,162.416112 183.924284,162.973167 182.938276,163.959196 C181.949825,164.943598 181.388195,166.314685 181.388195,167.704477 L181.388195,240.186706 C213.233273,225.0283 237.623626,196.78113 247.585929,162.416112 Z M138.994343,162.416112 L93.0262624,162.416112 C90.9968215,162.416112 89.1600206,163.55096 88.2644274,165.364439 L56.5073214,229.91778 C76.7113165,243.991759 101.277612,252.25 127.780897,252.25 C133.382122,252.25 138.895375,251.876326 144.297851,251.162726 L144.297851,167.704477 C144.297851,166.314685 143.727261,164.943598 142.742068,163.959196 C141.757689,162.973167 140.391289,162.416112 138.994343,162.416112 Z M39.8893643,162.416112 L7.97464365,162.416112 C12.2827766,177.277694 19.2911291,190.991009 28.4307407,203.001037 L44.6503848,170.035976 C45.449047,168.39612 45.3537451,166.451713 44.3897301,164.90619 C43.4273442,163.360666 41.713947,162.416112 39.8893643,162.416112 Z M3.09958678,125.380482 L63.3148882,125.380482 C65.3418856,125.380482 67.1778719,124.23669 68.0710214,122.420365 L126.699588,3.25 C59.1118317,3.8253526 4.35724556,58.0682945 3.09958678,125.380482 Z" id="Logo"></path>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

@ -2,7 +2,7 @@
<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="500px" height="500px" viewBox="0 0 500 500" enable-background="new 0 0 500 500" xml:space="preserve">
width="32px" height="32px" viewBox="0 0 500 500">
<g>
<g>
<path fill="#2C4052" d="M500,470.837C500,486.949,486.94,500,470.837,500H29.164C13.056,500,0,486.949,0,470.837V29.164

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB