Skip to content

Instantly share code, notes, and snippets.

@ussy
Created August 20, 2011 19:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ussy/1159506 to your computer and use it in GitHub Desktop.
Save ussy/1159506 to your computer and use it in GitHub Desktop.
SBMCounter for KeySnail
var PLUGIN_INFO =
<KeySnailPlugin>
<name>SBMCounter</name>
<name lang="ja">SBMCounter</name>
<description>Social Bookmark Counter</description>
<description lang="ja">ソーシャルブックマークカウンタ</description>
<version>0.1.0</version>
<!--<iconURL></iconURL>-->
<!--<updateURL></updateURL>-->
<author mail="ussy00@gmail.com" homepage="http://www.pshared.net/">ussy</author>
<license>The MIT License</license>
<license lang="ja">MIT ライセンス</license>
<minVersion>1.8.0</minVersion>
<include>main</include>
<provides>
<ext>sbmCounter</ext>
</provides>
</KeySnailPlugin>;
// ================ Options ====================== //
let pOptions = plugins.setupOptions("sbm_counter", {
"enable": { preset: [
"hatebu",
"delicious"
]},
"cache_size": { preset: 50 },
"cache_time": { preset: 5 * 60 * 1000 },
"ignores": { preset: [
/^about:/,
/^chrome:/,
/^file:/,
/^https:/,
/^http:\/\/(?:127\.|10\.|172\.16\.|192\.168\.).*/,
/^http:\/\/[^\.]+\//,
/^http:\/\/www\.google\.(com|co\.jp)\/search/
]},
"rescues": { preset: [
/^https:\/\/developer\.mozilla\.org\//,
/^https:\/\/.+?\.github\.com\//
]}
});
// ============================================================ //
// $U
// ============================================================ //
const $U = {
createElement: function (name, attrs, childs) {
let elem = document.createElement(name);
if (attrs)
for (let [k, v] in Iterator(attrs))
elem.setAttribute(k, v);
if (childs)
for (let [, v] in Iterator(childs))
elem.appendChild(v);
return elem;
},
insertAfter:
function insertAfter(parent, node, referenceNode) {
parent.insertBefore(node, referenceNode.nextSibling);
}
};
var sbmCounter =
(function () {
const Cc = Components.classes;
const Ci = Components.interfaces;
function toHexString(charCode) {
return ("0" + charCode.toString(16)).slice(-2);
}
function md5(s) {
let converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance(Ci.nsIScriptableUnicodeConverter);
converter.charset = "UTF-8";
let result = {};
let data = converter.convertToByteArray(s, result);
let ch = Cc["@mozilla.org/security/hash;1"].createInstance(Ci.nsICryptoHash);
ch.init(ch.MD5);
ch.update(data, data.length);
let hash = ch.finish(false);
return [toHexString(hash.charCodeAt(i)) for (i in hash)].join("");
}
function CacheItem(key, value, seq) {
this.key = key;
this.value = value;
this.seq = seq;
}
function LRUCache(maxSize) {
this.items = {};
this.count = 0;
this.seq = 0;
this.maxSize = maxSize || -1;
this.purgeSize = Math.round(this.maxSize * 0.75);
}
LRUCache.prototype = {
get: function get(key) {
let item = this.items[key];
return item ? item.value : null;
},
set: function set(key, value) {
let item = this.items[key];
if (!item) {
this.count++;
if (this.count > this.maxSize) {
this.purge();
}
}
this.items[key] = new CacheItem(key, value, this.seq++);
},
merge: function merge(key, dest) {
let src = this.get(key);
for (let prop in dest) {
let value = dest[prop];
if (value === null) {
delete src[prop];
} else {
src[prop] = value;
}
}
this.set(key, src);
},
purge: function purge() {
let temps = [];
for (let key in this.items) {
let item = this.items[key];
temps.push(item);
}
temps = temps.sort(function(a, b) {
return a.seq < b.seq;
});
while (temps.length > this.purgeSize) {
let item = temps.pop();
delete this.items[item.key];
this.count--;
}
}
};
function Counter(params) {
var cacheSize = pOptions["cache_size"];
this.cache = new LRUCache(cacheSize);
this.label = params.label;
this.requestCountUrl = params.requestCountUrl;
this.requestCommentUrl = params.requestCommentUrl;
this.getLinkUrl = params.getLinkUrl;
this.handleRequestCount = params.handleRequestCount;
this.handleRequestComment = params.handleRequestComment;
}
Counter.prototype = {
isValidCache: function isValidCache(value) {
if (!value) {
return false;
}
let cacheTime = pOptions["cache_time"];
return value.requestTime > +new Date - cacheTime;
},
hasCountCache: function hasCountCache(url) {
let info = this.cache.get(url);
return this.isValidCache(info) && info["count"] !== undefined;
},
hasCommentCache: function hasCommentCache(url) {
let info = this.cache.get(url);
return this.isValidCache(info) && info["comments"] !== undefined;
},
showCount: function request(url) {
this.abort();
if (this.hasCountCache(url)) {
this.refreshStatusBar(this.cache.get(url).count);
return;
}
this.refreshStatusBar("*");
this.xhr = new XMLHttpRequest();
this.xhr.open("GET", this.requestCountUrl(url), true);
var self = this;
this.xhr.onreadystatechange = function(aEvt) {
if (self.xhr.readyState == 4) {
if (self.xhr.status == 200) {
let count = self.handleRequestCount(self.xhr.responseText);
self.refreshStatusBar(count);
self.cache.set(url, {
requestTime: +new Date,
count: count
});
}
self.abort();
}
};
this.xhr.send(null);
},
abort: function abort() {
if (this.xhr != null) {
this.xhr.abort();
this.xhr = null;
}
},
refreshStatusBar: function(count) {
this.label.value = count;
}
};
const CONTAINER_ID = "keysnail-sbmcounter-container";
const HATEBU_STATUS_ID = "keysnail-sbmcounter-hatebu-status";
const DELICIOUS_STATUS_ID = "keysnail-sbmCounter-delicious-status";
var statusbar = document.getElementById("status-bar");
var statusbarPanel = document.getElementById("keysnail-status");
var container = document.getElementById(CONTAINER_ID);
var hatebuStatusLabel = document.getElementById(HATEBU_STATUS_ID);
var deliciousStatusLabel = document.getElementById(DELICIOUS_STATUS_ID);
var counters = [];
if (container) {
while(container.firstChild) {
container.removeChild(element.firstChild);
}
container.parentNode.removeChild(container);
}
container = $U.createElement("statusbarpanel", {
align: "center",
id: CONTAINER_ID
});
let box, icon;
if (pOptions["enable"].indexOf("hatebu") != -1) {
// ================
// Hatebu
// ================
box = $U.createElement("hbox", {
align: "center",
flex: 1
}, [
icon = $U.createElement("image", {
src: 'data:image/vnd.microsoft.icon;base64,' +
'AAABAAQAEBAQAAAAAAAoAQAARgAAABgYAAAAAAAAiAkAAG4BAAAgIAAAAAAAAKgQAAD2CgAAQEAA' +
'AAAAAAAoQgAAnhsAACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAA' +
'53lSAP///wDJXyoA+qWFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAABMzMzMzMzMAQREREREREwBBERERERETAEERIiIiERMAQREiERIhEwBBESIREi' +
'ETAEERIhESIRMAQREiIiIREwBBESIRIhETAEERIhEiERMAQREiIiEREwBBERERERETAEERERERER' +
'MAREREREREQQAAAAAAAAAAD//wAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAA' +
'gAEAAIABAACAAQAAgAEAAIABAAD//wAAKAAAABgAAAAwAAAAAQAgAAAAAAAACQAAAAAAAAAAAAAA' +
'AAAAAAAAAKlkK1+pZCvvqWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCvvqWQrX6lkK++pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr76lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/++imD////////////////////////////59fH/' +
'6djK/86nh/+pZCv/qWQr/7N3Rf/06+T/+fXx/8meev+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/++imD////////////////////////////////////////////Zu6L/qWQr/9Sx' +
'lf///////////+nYyv+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/++imD/////' +
'////////////6djK/+nYyv/59fH/////////////////rm04/76KYP///////////9m7ov+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/++imD/////////////////qWQr/6lkK/+5' +
'gVL/////////////////vopg/6lkK/+zd0X/vopg/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/++imD/////////////////qWQr/6lkK//UsZX/////////////////rm04' +
'/76KYP///////////+nYyv+pZCv/qWQr/6lkK/+pZCv/qWQr/7V3RP+5fk3/uX5N/7l+Tf/Knnn/' +
'///////////////////////////////////////////hyLP/uX5N/8qeef///////////+3e0v+5' +
'fk3/uX5N/7l+Tf+5fk3/tXdE/7l+Tf+/h1n/v4dZ/7+HWf/PpYL/////////////////////////' +
'/////////////+fSwP+/h1n/v4dZ/8+lgv///////////+/h1f+/h1n/v4dZ/7+HWf+/h1n/uX5N' +
'/7l+Tf+/h1n/v4dZ/7+HWf/PpYL/////////////////z6WC/9u7of/79/T////////////TrIz/' +
'v4dZ/8+lgv///////////+/h1f+/h1n/v4dZ/7+HWf+/h1n/uX5N/7l+Tf+/h1n/v4dZ/7+HWf/P' +
'pYL/////////////////v4dZ/7+HWf/r2cv////////////n0sD/v4dZ/8+lgv///////////+/h' +
'1f+/h1n/v4dZ/7+HWf+/h1n/uX5N/7l+Tf+/h1n/v4dZ/7+HWf/PpYL/////////////////38Os' +
'/+vZy//////////////////jyrb/v4dZ/8+lgv///////////+/h1f+/h1n/v4dZ/7+HWf+/h1n/' +
'uX5N/7l+Tf+/h1n/v4dZ/7+HWf/PpYL////////////////////////////////////////////P' +
'pYL/v4dZ/8+lgv///////////+/h1f+/h1n/v4dZ/7+HWf+/h1n/uX5N/7l+Tf+/h1n/v4dZ/7+H' +
'Wf/PpYL////////////////////////////79/T/69nL/8+lgv+/h1n/v4dZ/8udeP/v4dX/7+HV' +
'/+PKtv+/h1n/v4dZ/7+HWf+/h1n/uX5N/7l+Tf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/uX5N/7l+Tf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/uX5N/7l+Tf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/uX5N/7l+Tf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/uX5N/7N0QO+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/s3RA76lkK1+zdEDv' +
'uX5N/7l+Tf+5fk3/uX5N/7l+Tf+5fk3/uX5N/7l+Tf+5fk3/uX5N/7l+Tf+5fk3/uX5N/7l+Tf+5' +
'fk3/uX5N/7l+Tf+5fk3/uX5N/7l+Tf+zdEDvqWQrX4AAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAgAABACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAACpZCsP' +
'qWQrv6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCu/qWQrD6lkK7+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCu/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/6djK/////////////////////////////////+7h1//p2Mr/3sSv' +
'/76KYP+pZCv/qWQr/6lkK/+pZCv/yZ56//n18f/06+T/yZ56/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK//p2Mr/////////////////////////////' +
'/////////////////////////97Er/+pZCv/qWQr/7N3Rf/////////////////59fH/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/+nYyv//////////' +
'/////////////////////////////////////////////////8meev+pZCv/vopg////////////' +
'//////////+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/6djK/////////////////+nYyv/UsZX/1LGV/+TOvP//////////////////////6djK/6lk' +
'K/+pZCv/7uHX////////////3sSv/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK//p2Mr/////////////////1LGV/6lkK/+pZCv/qWQr/9m7ov//////' +
'///////////p2Mr/qWQr/6lkK/+pZCv/vopg/76KYP+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/+nYyv/////////////////UsZX/qWQr/6lk' +
'K/+pZCv/2bui/////////////////+nYyv+pZCv/qWQr/+nYyv/p2Mr/6djK/+nYyv+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/6djK////////////' +
'/////97Er/++imD/w5Rt/9m7ov/59fH/////////////////2bui/6lkK/+pZCv/////////////' +
'/////////6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+0dUL/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf/v4dX///////////////////////////////////////////////////////Po3//DjmP/v4dZ' +
'/7+HWf//////////////////////v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/tHVC/7R1Qv+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/+/h1f/////////////////////////////////////////////////j' +
'yrb/w45j/7+HWf+/h1n/v4dZ//////////////////////+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+0dUL/tHVC/7+HWf+/h1n/v4dZ/7+HWf+/h1n/7+HV//////////////////fw6v/v4dX/8+jf' +
'//////////////////v39P/XtJf/v4dZ/7+HWf+/h1n//////////////////////7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7R1Qv+0dUL/v4dZ/7+HWf+/h1n/v4dZ/7+HWf/v4dX/////////////' +
'////38Os/7+HWf+/h1n/06yM//////////////////v39P+/h1n/v4dZ/7+HWf//////////////' +
'////////v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/tHVC/7R1Qv+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/+/h1f/////////////////fw6z/v4dZ/7+HWf/LnXj//////////////////////8udeP+/h1n/' +
'v4dZ//////////////////////+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+0dUL/tHVC/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/7+HV/////////////////+/h1f/fw6z/38Os//fw6v//////////////' +
'////////x5Zt/7+HWf+/h1n//////////////////////7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7R1Qv+0dUL/v4dZ/7+HWf+/h1n/v4dZ/7+HWf/v4dX/////////////////////////////////' +
'//////////////////////fw6v+/h1n/v4dZ/7+HWf//////////////////////v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/tHVC/7R1Qv+/h1n/v4dZ/7+HWf+/h1n/v4dZ/+/h1f//////////////' +
'///////////////////////////////////79/T/y514/7+HWf+/h1n/v4dZ////////////////' +
'//////+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+0dUL/tHVC/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'7+HV//////////////////////////////////Po3//v4dX/48q2/8eWbf+/h1n/v4dZ/7+HWf+/' +
'h1n/7+HV/+/h1f/v4dX/7+HV/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7R1Qv+0dUL/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'tHVC/7R1Qv+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+0dUL/tHVC/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7R1Qv+0dUL/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/tHVC/7R1Qv+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+0' +
'dUL/snM//7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7JzP/+qZi6/uoBQ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+6gFD/qmYuv6lkKw+qZi6/snM//7R1Qv+0dUL/tHVC/7R1' +
'Qv+0dUL/tHVC/7R1Qv+0dUL/tHVC/7R1Qv+0dUL/tHVC/7R1Qv+0dUL/tHVC/7R1Qv+0dUL/tHVC' +
'/7R1Qv+0dUL/tHVC/7R1Qv+0dUL/tHVC/7R1Qv+0dUL/snM//6pmLr+pZCsPgAAAAQAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA' +
'AAEoAAAAQAAAAIAAAAABACAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACpZCsPqWQr' +
'f6lkK9+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCvfqWQr' +
'f6lkKw8AAAAAAAAAAAAAAACpZCsPqWQrz6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCvPqWQrDwAAAACpZCsPqWQrz6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK8+pZCsPqWQrf6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQrf6lkK9+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK9+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/7mBUv/p2Mr/6djK/+nYyv/p2Mr/6djK/+nYyv/p2Mr/' +
'6djK/+nYyv/p2Mr/6djK/+nYyv/p2Mr/3sSv/9Sxlf/UsZX/yZ56/7mBUv+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+zd0X/2bui/+nYyv/kzrz/zqeH/65t' +
'OP+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/++imD/' +
'////////////////////////////////////////////////////////////////////////////' +
'////////////////////+fXx/97Er/+zd0X/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+5gVL/+fXx///////////////////////u4df/rm04/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/vopg////////////////////////////////////////' +
'/////////////////////////////////////////////////////////////////////////9Sx' +
'lf+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/9Ovk////////////////////////////////' +
'/97Er/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/76KYP//' +
'////////////////////////////////////////////////////////////////////////////' +
'////////////////////////////////////////3sSv/6lkK/+pZCv/qWQr/6lkK/+pZCv/vopg' +
'////////////////////////////////////////////qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/++imD/////////////////////////////////////////' +
'////////////////////////////////////////////////////////////////////////////' +
'///////DlG3/qWQr/6lkK/+pZCv/qWQr/76KYP//////////////////////////////////////' +
'/////6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/vopg////' +
'////////////////////////////////////////////////////////////////////////////' +
'////////////////////////////////////////////9Ovk/6lkK/+pZCv/qWQr/6lkK/+5gVL/' +
'//////////////////////////////////////n18f+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/76KYP//////////////////////////////////////////' +
'////////////////////////////////////////////////////////////////////////////' +
'//////////+5gVL/qWQr/6lkK/+pZCv/qWQr/+7h1//////////////////////////////////Z' +
'u6L/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/++imD/////' +
'//////////////////////////////////////+pZCv/qWQr/6lkK/+pZCv/qWQr/7N3Rf/Jnnr/' +
'+fXx////////////////////////////////////////////zqeH/6lkK/+pZCv/qWQr/6lkK/+z' +
'd0X/7uHX///////////////////////exK//qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/vopg////////////////////////////////////////////' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/7mBUv//////////////////////////////////' +
'/////////9Sxlf+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK//DlG3/1LGV/9Sxlf+5gVL/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/76KYP//////' +
'/////////////////////////////////////6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/7uHX///////////////////////////////////////UsZX/qWQr/6lkK/+pZCv/qWQr/6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/++imD///////////////////////////////////////////+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/+nYyv//////////////////////////////' +
'////////1LGV/6lkK/+pZCv/qWQr/6lkK//UsZX/1LGV/9Sxlf/UsZX/1LGV/9Sxlf/UsZX/yZ56' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/vopg////////' +
'////////////////////////////////////qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/65t' +
'OP/59fH//////////////////////////////////////8meev+pZCv/qWQr/6lkK/+pZCv/////' +
'/////////////////////////////////+nYyv+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/76KYP///////////////////////////////////////////6lk' +
'K/+pZCv/qWQr/6lkK/+pZCv/qWQr/65tOP/exK//////////////////////////////////////' +
'//////+zd0X/qWQr/6lkK/+pZCv/qWQr///////////////////////////////////////p2Mr/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/++imD/////////' +
'///////////////////////////////////UsZX/1LGV/9Sxlf/UsZX/2bui/+nYyv//////////' +
'///////////////////////////////////////p2Mr/qWQr/6lkK/+pZCv/qWQr/6lkK///////' +
'////////////////////////////////6djK/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/7l+Tf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/z6WC////////////////////////////////////////////////' +
'///////////////////////////////////////////////////////////////////////79/T/' +
'x5Zt/7+HWf+/h1n/v4dZ/7+HWf+/h1n//////////////////////////////////////+/h1f+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+5fk3/qWQr/6lk' +
'K/+5fk3/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/8+lgv//////////' +
'////////////////////////////////////////////////////////////////////////////' +
'///////////////////////////79/T/y514/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ////////' +
'///////////////////////////////v4dX/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/uX5N/6lkK/+pZCv/uX5N/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf/PpYL/////////////////////////////////////////////////' +
'//////////////////////////////////////////////////////v39P/n0sD/x5Zt/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf//////////////////////////////////////7+HV/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7l+Tf+pZCv/qWQr' +
'/7l+Tf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/z6WC////////////' +
'////////////////////////////////////////////////////////////////////////////' +
'//////////fw6v/LnXj/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/////////' +
'/////////////////////////////+/h1f+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+5fk3/qWQr/6lkK/+5fk3/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/8+lgv//////////////////////////////////////////////////' +
'/////////////////////////////////////////////////////////+fSwP/DjmP/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ///////////////////////////////////////v4dX/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/uX5N/6lkK/+pZCv/' +
'uX5N/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf/PpYL/////////////' +
'///////////////////////////////PpYL/z6WC/8+lgv/XtJf/48q2//fw6v//////////////' +
'////////////////////////8+jf/8OOY/+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf//////////' +
'////////////////////////////7+HV/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7l+Tf+pZCv/qWQr/7l+Tf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/z6WC////////////////////////////////////////////v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/69nL///////////////////////////////////////fw6z/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n//////////////////////////////////////+/h1f+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+5fk3/qWQr/6lkK/+5' +
'fk3/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/8+lgv//////////////' +
'/////////////////////////////7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/8udeP//////////' +
'////////////////////////////9/Dq/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ////////////' +
'///////////////////////////v4dX/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/uX5N/6lkK/+pZCv/uX5N/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf/PpYL///////////////////////////////////////////+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n////////////////////////////////////////////DjmP/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf//////////////////////////////////////7+HV/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7l+Tf+pZCv/qWQr/7l+' +
'Tf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/z6WC////////////////' +
'////////////////////////////v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/06yM////////////' +
'////////////////////////////////z6WC/7+HWf+/h1n/v4dZ/7+HWf+/h1n/////////////' +
'/////////////////////////+/h1f+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+5fk3/qWQr/6lkK/+5fk3/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/8+lgv///////////////////////////////////////////7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/z6WC//v39P///////////////////////////////////////////8udeP+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ///////////////////////////////////////v4dX/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/uX5N/6lkK/+pZCv/uX5N' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf/PpYL/////////////////' +
'///////////////////////////v4dX/7+HV/+/h1f/v4dX/+/f0////////////////////////' +
'//////////////////////////////+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf//////////////' +
'////////////////////////7+HV/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7l+Tf+pZCv/qWQr/7l+Tf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/z6WC////////////////////////////////////////////////////////' +
'///////////////////////////////////////////////////////////////z6N//v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n//////////////////////////////////////+/h1f+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+5fk3/qWQr/6lkK/+5fk3/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/8+lgv//////////////////' +
'////////////////////////////////////////////////////////////////////////////' +
'////////////////////////17SX/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ////////////////' +
'///////////////////////v4dX/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/uX5N/6lkK/+pZCv/uX5N/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf/PpYL/////////////////////////////////////////////////////////' +
'////////////////////////////////////////////////////////59LA/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf//////////////////////////////////////7+HV/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7l+Tf+pZCv/qWQr/7l+Tf+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/z6WC////////////////////' +
'////////////////////////////////////////////////////////////////////////////' +
'////////////59LA/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/////////////////' +
'/////////////////////+/h1f+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf+5fk3/qWQr/6lkK/+5fk3/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/8+lgv//////////////////////////////////////////////////////////' +
'///////////////////////////////////////r2cv/z6WC/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ///////////////////////////////////////v4dX/v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/uX5N/6lkK/+pZCv/uX5N/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf/LnXj/7+HV/+/h1f/v4dX/7+HV' +
'/+/h1f/v4dX/7+HV/+/h1f/v4dX/7+HV/+/h1f/v4dX/7+HV/+PKtv/fw6z/38Os/8+lgv/DjmP/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf/PpYL/z6WC/8+lgv/P' +
'pYL/z6WC/8+lgv/PpYL/y514/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7l+Tf+pZCv/qWQr/7l+Tf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+5fk3/qWQr/6lkK/+5fk3/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/uX5N/6lkK/+pZCv/uX5N/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7l+Tf+pZCv/qWQr/7l+Tf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+5fk3/qWQr/6lkK/+5fk3/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/uX5N/6lkK/+pZCv/uX5N/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/v4dZ/7l+Tf+pZCv/qWQr/7l+Tf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+5fk3/qWQr/6lkK/+5fk3/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/uX5N/6lkK/+pZCv/uX5N/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7l+Tf+pZCv/qWQr/7l+Tf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+5fk3/qWQr/6lkK/+5fk3/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/uX5N/6lkK/+pZCvftHVC/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7R1Qv+pZCvfqWQrf6pmLf+9hFb/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/72EVv+qZi3/qWQrf6lkKw+pZCvPrWoz/72EVv+/' +
'h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+H' +
'Wf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ' +
'/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/' +
'v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/7+HWf+/h1n/v4dZ/72EVv+t' +
'ajP/qWQrz6lkKw8AAAAAqWQrH6lkK8+qZi3/tHVC/7l+Tf+5fk3/uX5N/7l+Tf+5fk3/uX5N/7l+' +
'Tf+5fk3/uX5N/7l+Tf+5fk3/uX5N/7l+Tf+5fk3/uX5N/7l+Tf+5fk3/uX5N/7l+Tf+5fk3/uX5N' +
'/7l+Tf+5fk3/uX5N/7l+Tf+5fk3/uX5N/7l+Tf+5fk3/uX5N/7l+Tf+5fk3/uX5N/7l+Tf+5fk3/' +
'uX5N/7l+Tf+5fk3/uX5N/7l+Tf+5fk3/uX5N/7l+Tf+5fk3/uX5N/7l+Tf+5fk3/uX5N/7l+Tf+5' +
'fk3/uX5N/7l+Tf+5fk3/uX5N/7R1Qv+qZi3/qWQrz6lkKw8AAAAAAAAAAAAAAACpZCsPqWQrf6lk' +
'K9+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr' +
'/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/' +
'qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+p' +
'ZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCv/qWQr/6lkK/+pZCvfqWQrf6lk' +
'Kw8AAAAAAAAAAPAAAAAAAAAPwAAAAAAAAAOAAAAAAAAAAYAAAAAAAAABAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAABgAAAAAAAAAHAAAAAAAAA' +
'A/AAAAAAAAAP'
}),
hatebuStatusLabel = $U.createElement("label", {
id: HATEBU_STATUS_ID,
flex: 1,
value: "N"
})
]);
let gHatebu = new Counter({
label: hatebuStatusLabel,
requestCountUrl: function(url) {
return util.format("http://api.b.st-hatena.com/entry.count?url=%s", encodeURIComponent(url));
},
requestCommentUrl: function(url) {
return util.format("http://b.hatena.ne.jp/entry/jsonlite/?url=%s", encodeURIComponent(url));
},
getLinkUrl: function(url) {
return util.format("http://b.hatena.ne.jp/entry/%s", url);
},
handleRequestCount: function(responseText) {
if (responseText == "") {
return 0;
}
try {
return parseInt(responseText);
} catch (e) {
return 0;
}
},
handleRequestComment: function(responseText) {
if (responseText == "null") {
return [];
}
let json = JSON.parse(responseText);
return json.bookmarks.map(function(bookmark) {
return {
"user": bookmark["user"],
"tags": bookmark["tags"],
"comment": bookmark["comment"]
};
});
}
});
counters.push(gHatebu);
container.appendChild(box);
}
// ================
// Delicious
// ================
if (pOptions["enable"].indexOf("delicious") != -1) {
box = $U.createElement("hbox", {
align: "center",
flex: 1
}, [
icon = $U.createElement("image", {
src: 'data:image/x-icon;base64,' +
'AAABAAIAEBAAAAEAGABoAwAAJgAAABAQAAABACAAaAQAAI4DAAAoAAAAEAAAACAAAAABABgAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0tLT0tLT0tLT0tLT' +
'0tLT0tLT0tLT0tLTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0tLT0tLT0tLT0tLT0tLT0tLT0tLT' +
'0tLTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0tLT0tLT0tLT0tLT0tLT0tLT0tLT0tLTAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAA0tLT0tLT0tLT0tLT0tLT0tLT0tLT0tLTAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAA0tLT0tLT0tLT0tLT0tLT0tLT0tLT0tLTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'0tLT0tLT0tLT0tLT0tLT0tLT0tLT0tLTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0tLT0tLT0tLT' +
'0tLT0tLT0tLT0tLT0tLTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0tLT0tLT0tLT0tLT0tLT0tLT' +
'0tLT0tLT////////////////////////////////0HQy0HQy0HQy0HQy0HQy0HQy0HQy0HQy////' +
'////////////////////////////0HQy0HQy0HQy0HQy0HQy0HQy0HQy0HQy////////////////' +
'////////////////0HQy0HQy0HQy0HQy0HQy0HQy0HQy0HQy////////////////////////////' +
'////0HQy0HQy0HQy0HQy0HQy0HQy0HQy0HQy////////////////////////////////0HQy0HQy' +
'0HQy0HQy0HQy0HQy0HQy0HQy////////////////////////////////0HQy0HQy0HQy0HQy0HQy' +
'0HQy0HQy0HQy////////////////////////////////0HQy0HQy0HQy0HQy0HQy0HQy0HQy0HQy' +
'////////////////////////////////0HQy0HQy0HQy0HQy0HQy0HQy0HQy0HQyAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA' +
'AAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA' +
'/wAAAP8AAAD/AAAA/9LS0//S0tP/0tLT/9LS0//S0tP/0tLT/9LS0//S0tP/AAAA/wAAAP8AAAD/' +
'AAAA/wAAAP8AAAD/AAAA/wAAAP/S0tP/0tLT/9LS0//S0tP/0tLT/9LS0//S0tP/0tLT/wAAAP8A' +
'AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/0tLT/9LS0//S0tP/0tLT/9LS0//S0tP/0tLT/9LS' +
'0/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/9LS0//S0tP/0tLT/9LS0//S0tP/0tLT' +
'/9LS0//S0tP/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/S0tP/0tLT/9LS0//S0tP/' +
'0tLT/9LS0//S0tP/0tLT/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/0tLT/9LS0//S' +
'0tP/0tLT/9LS0//S0tP/0tLT/9LS0/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/9LS' +
'0//S0tP/0tLT/9LS0//S0tP/0tLT/9LS0//S0tP/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA' +
'/wAAAP/S0tP/0tLT/9LS0//S0tP/0tLT/9LS0//S0tP/0tLT////////////////////////////' +
'////////////////0HQy/9B0Mv/QdDL/0HQy/9B0Mv/QdDL/0HQy/9B0Mv//////////////////' +
'/////////////////////////9B0Mv/QdDL/0HQy/9B0Mv/QdDL/0HQy/9B0Mv/QdDL/////////' +
'///////////////////////////////////QdDL/0HQy/9B0Mv/QdDL/0HQy/9B0Mv/QdDL/0HQy' +
'////////////////////////////////////////////0HQy/9B0Mv/QdDL/0HQy/9B0Mv/QdDL/' +
'0HQy/9B0Mv///////////////////////////////////////////9B0Mv/QdDL/0HQy/9B0Mv/Q' +
'dDL/0HQy/9B0Mv/QdDL////////////////////////////////////////////QdDL/0HQy/9B0' +
'Mv/QdDL/0HQy/9B0Mv/QdDL/0HQy////////////////////////////////////////////0HQy' +
'/9B0Mv/QdDL/0HQy/9B0Mv/QdDL/0HQy/9B0Mv//////////////////////////////////////' +
'/////9B0Mv/QdDL/0HQy/9B0Mv/QdDL/0HQy/9B0Mv/QdDL/AAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
}),
deliciousStatusLabel = $U.createElement("label", {
id: DELICIOUS_STATUS_ID,
flex: 1,
value: "N"
})
]);
let gDelicious = new Counter({
label: deliciousStatusLabel,
requestCountUrl: function(url) {
return util.format("http://feeds.delicious.com/v2/json/urlinfo/blogbadge?url=%s", encodeURIComponent(url));
},
requestCommentUrl: function(url) {
return util.format("http://feeds.delicious.com/v2/json/url/%s", md5(url));
},
getLinkUrl: function(url) {
return util.format("http://www.delicious.com/url/%s", md5(url));
},
handleRequestCount: function(responseText) {
if (!responseText) {
return 0;
}
let json = JSON.parse(responseText);
if (json.length == 0) {
return 0;
}
return json[0]["total_posts"];
},
handleRequestComment: function(responseText) {
if (!responseText) {
return [];
}
let json = JSON.parse(responseText);
if (json.length == 0) {
return [];
}
return json.map(function(bookmark) {
return {
"user": bookmark["a"],
"tags": bookmark["t"],
"comment": bookmark["n"]
};
});
}
});
counters.push(gDelicious);
container.appendChild(box);
}
$U.insertAfter(statusbar, container, statusbarPanel);
counters.forEach(function(counter) {
counter.label.parentNode.onclick = function(event) {
let url = counter.getLinkUrl(gBrowser.selectedBrowser.contentDocument.location.href);
openUILinkIn(url, "tab");
};
});
var self = {
ignore: function ignore(url) {
let ignores = pOptions["ignores"];
let ignore = ignores.some(function(ignore) {
return ignore.test(url);
});
if (!ignore) {
return false;
}
let rescues = pOptions["rescues"];
return !rescues.some(function(rescue) {
return rescue.test(url);
});
},
showCount: function request(url) {
if (self.ignore(url)) {
self.disable();
return;
}
counters.forEach(function(counter) {
counter.showCount(url);
});
},
disable: function disable() {
counters.forEach(function(counter) {
counter.label.value = "N";
});
}
};
return self;
})();
if (my.handleLocationChange) {
hook.removeHook("LocationChange", my.handleLocationChange);
};
my.handleLocationChange = function handleLocationChange(aNsURI) {
if (aNsURI || aNsURI.spec) {
var pbs = Cc["@mozilla.org/privatebrowsing;1"]
.getService(Components.interfaces.nsIPrivateBrowsingService);
if (pbs.privateBrowsingEnabled) {
sbmCounter.disable();
} else {
var url = aNsURI.spec;
sbmCounter.showCount(url);
}
}
};
hook.addToHook("LocationChange", my.handleLocationChange);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment