Kirka Hack Script
// ==UserScript==
// @name Better-Kirka-Script
// @author Anything tech
// @match *://kirka.io/*
// @icon https://raw.githubusercontent.com/42infi/better-kirka-client/master/src/icon.ico
// @connect raw.githubusercontent.com
// @grant GM_xmlhttpRequest
// @run-at document-start
// @noframes
// @description kirka extra features
// @license MIT
// @version 0.0.1.20221221013132
// @namespace https://greasyfork.org/users/997672
// ==/UserScript==
class Store {
constructor(config) {
this.config = JSON.parse(config);
}
get = (key) => this.config[key];
set = (key, value) => {
this.config[key] = value;
localStorage.saveSettings = JSON.stringify(this.config);
}
}
if (!localStorage.saveSettings) localStorage.saveSettings = JSON.stringify({
permCrosshair: true,
customCss: false,
hideWeaponsAds: false,
hideArms: false,
hideFlagAds: false,
playerHighLight: false,
fullBlack: false,
wireframeWeapons: false,
wireframeArms: false,
rainbow: false,
adspower: false,
autoJoin: false,
inspectKey: "j",
euLobbies: true,
naLobbies: false,
asiaLobbies: false,
ffaLobbies: true,
tdmLobbies: true,
parkourLobbies: false,
preferredFilter: 'Players',
minPlayers: 4,
maxPlayers: 8,
minTimeLeft: 3,
filterMaps: false,
maps: '',
cssLink: '',
menuOpen: true
})
const settings = new Store(localStorage.saveSettings);
let permCrosshair = !!settings.get('permCrosshair');
let noLoadingTimes = true;
let customCss = !!settings.get('customCss');
//let hpNumber = true;
let hideWeaponsAds = !!settings.get('hideWeaponsAds');
let hideArms = !!settings.get('hideArms');
let hideFlagAds = !!settings.get('hideFlagAds');
let playerHighLight = !!settings.get('playerHighLight');
let fullBlack = !!settings.get('fullBlack');
let wireframeWeapons = !!settings.get('wireframeWeapons');
let wireframeArms = !!settings.get('wireframeArms');
let rainbow = !!settings.get('rainbow');
let adspower = !!settings.get('adspower');
let autoJoin = !!settings.get('autoJoin');
let inspecting = false;
let prevInsp = false;
let prevInspectPos;
let prevInspectRot;
let prevWireframeWeapons = false;
let prevWireframeArms = false;
let gui = document.createElement("div");
let menuVisible = false;
let listening = false;
if (!settings.get('inspectKey')) settings.set('inspectKey', "j");
let euLobbies = !!settings.get('euLobbies');
let naLobbies = !!settings.get('naLobbies');
let asiaLobbies = !!settings.get('asiaLobbies');
let ffaLobbies = !!settings.get('ffaLobbies');
let tdmLobbies = !!settings.get('tdmLobbies');
let parkourLobbies = !!settings.get('parkourLobbies');
let preferredFilter = typeof settings.get('preferredFilter') == 'undefined' ? 'Players' : settings.get('preferredFilter');
let minPlayers = typeof settings.get('minPlayers') == 'undefined' ? 4 : settings.get('minPlayers');
let maxPlayers = typeof settings.get('maxPlayers') == 'undefined' ? 8 : settings.get('maxPlayers');
let minTimeLeft = typeof settings.get('minTimeLeft') == 'undefined' ? 3 : settings.get('minTimeLeft');
let filterMaps = !!settings.get('filterMaps');
let avoidSameLobby = true;
let currentURL = window.location.href;
let gameModes = [];
let bestLobby = '';
let allLobbyData = [];
let maps = settings.get('maps') ? settings.get('maps') : [];
let responseCount = 0;
let minPlayerSlider;
let maxPlayerSlider;
let minPlayersLab;
let maxPlayersLab;
let minTimeLeftSlider;
let minTimeLeftLab;
let settingsButtonsAdded = false;
let scene;
let flagMaterial;
WeakMap.prototype.set = new Proxy(WeakMap.prototype.set, {
apply(target, thisArg, argArray) {
if (argArray[0] && argArray[0].type === 'Scene' && argArray[0].children[0].type === 'AmbientLight') {
scene = argArray[0];
}
setTimeout(() => {
scene?.children?.forEach((e) => {
if (e.type === "Sprite" && !e.material.depthTest && e.material.map?.image?.width === 149) {
flagMaterial = e.material;
}
})
}, 1000)
return Reflect.apply(...arguments);
}
});
let crosshair;
new MutationObserver(mutationRecords => {
try {
mutationRecords.forEach(record => {
record.addedNodes.forEach(el => {
if (el.classList?.contains("loading-scene") && noLoadingTimes) el.parentNode.removeChild(el);
if (el.id === "qc-cmp2-container") el.parentNode.removeChild(el);
if (el.id === "cmpPersistentLink" || el.classList?.contains("home") || el.classList?.contains('moneys')) {
let btn = document.createElement("button");
btn.id = "clientJoinButton";
btn.style = "background-color: var(--primary-1);\n" +
" --hover-color: var(--primary-2);\n" +
" --top: var(--primary-2);\n" +
" --bottom: var(--primary-3);" +
" display: flex ;\n" +
" justify-content: center;\n" +
" align-items: center;\n" +
" border: none;\n" +
" position: absolute;\n" +
" color: var(--white);\n" +
" font-size: 1rem;\n" +
" transition: all .3s ease;\n" +
" font-family: Rowdies;\n" +
" padding: .9em 1.4em;\n" +
" transform: skew(-10deg);\n" +
" font-weight: 900;\n" +
" overflow: hidden;\n" +
" text-transform: uppercase;\n" +
" border-radius: .2em;\n" +
" outline: none;\n" +
" text-shadow: 0 0.1em 0 #000;\n" +
" -webkit-text-stroke: 1px var(--black);\n" +
" box-shadow: 0 0.15rem 0 rgba(0,0,0,.315);\n" +
" cursor: pointer;" +
" box-shadow: 0 5.47651px 0 rgba(0,0,0,.5)!important;\n" +
" text-shadow: -1px -1px 0 #000,1px -1px 0 #000,-1px 1px 0 #000,1px 1px 0 #000,0 1px 1px rgba(0,0,0,.486)!important;" +
" width: 150px;" +
" height: 50px;" +
" bottom: 20px;" +
" right: 100%;" +
" margin-right: 10px;" +
" font-size: 20px;";
btn.innerText = "Join Link";
btn.onclick = async () => {
window.location.href = await navigator.clipboard.readText();
}
document.getElementsByClassName('play-content')[0].append(btn);
document.getElementsByClassName('settings-and-socicons')[0].children[0].onclick = () => {
window.location.href = "https://discord.com/invite/cNwzjsFHpg";
};
document.getElementsByClassName('settings-and-socicons')[0].children[1].onclick = () => {
window.location.href = "https://github.com/42infi/better-kirka-client/releases";
};
if (!el.classList?.contains("home") && !el.classList?.contains('moneys')) el.parentNode.removeChild(el);
}
if (el.classList?.contains("game-interface")) {
crosshair = document.getElementById("crosshair-static");
//health number default ingame now
/*let hpElem = document.getElementsByClassName("hp-progress")[0];
document.getElementsByClassName('hp-title')[0].innerText = hpElem.style.width.slice(0, -1);
observer.observe(hpElem, {
attributeFilter: ["style"],
});*/
}
if (el.classList?.contains("settings") && !settingsButtonsAdded) {
let exportBtn = document.createElement('div');
exportBtn.id = "importBtn";
exportBtn.style = "line-height: 1.2;\n" +
"user-select: none;\n" +
"--white: #fff;\n" +
"--secondary-2: #37477c;\n" +
"-webkit-font-smoothing: antialiased;\n" +
"text-align: center;\n" +
"font-family: Exo\\ 2;\n" +
"box-sizing: border-box;\n" +
"text-shadow: -1px -1px 0 #0f0f0f,1px -1px 0 #0f0f0f,-1px 1px 0 #0f0f0f,1px 1px 0 #0f0f0f;\n" +
"font-weight: 100;\n" +
"height: 100%;\n" +
"padding: 0 .8rem;\n" +
"color: var(--white);\n" +
"font-size: 1.5rem;\n" +
"box-shadow: 0 .125rem .25rem rgba(24,28,40,.25);\n" +
"border-radius: 0 .313rem .313rem 0;\n" +
"background-color: var(--secondary-2);\n" +
"display: flex;\n" +
"justify-content: center;\n" +
"align-items: center;"
exportBtn.onmouseover = () => {
exportBtn.style.color = "#ffd500";
}
exportBtn.onmouseout = () => {
exportBtn.style.color = "#ffffff";
}
exportBtn.innerText = "Export to clipboard"
exportBtn.onclick = async () => {
let gameSettingsObj = {};
for (let key in localStorage) {
if (key.startsWith("m")) {
if (localStorage[key].startsWith('"') && localStorage[key].endsWith('"')) {
gameSettingsObj[key] = localStorage[key].slice(1, -1);
} else {
gameSettingsObj[key] = localStorage[key];
}
}
}
try {
navigator.clipboard.writeText(JSON.stringify(gameSettingsObj));
} catch {
throw new Error("Copying to clipboard failed")
}
//clipboard.writeText(JSON.stringify(gameSettingsObj));
}
let importBtn = document.createElement('div');
importBtn.id = "importBtn";
importBtn.style = "line-height: 1.2;\n" +
"user-select: none;\n" +
"--white: #fff;\n" +
"--secondary-2: #37477c;\n" +
"-webkit-font-smoothing: antialiased;\n" +
"text-align: center;\n" +
"font-family: Exo\\ 2;\n" +
"box-sizing: border-box;\n" +
"text-shadow: -1px -1px 0 #0f0f0f,1px -1px 0 #0f0f0f,-1px 1px 0 #0f0f0f,1px 1px 0 #0f0f0f;\n" +
"font-weight: 100;\n" +
"height: 100%;\n" +
"padding: 0 .8rem;\n" +
"color: var(--white);\n" +
"font-size: 1.5rem;\n" +
"box-shadow: 0 .125rem .25rem rgba(24,28,40,.25);\n" +
"border-radius: 0 .313rem .313rem 0;\n" +
"background-color: var(--secondary-2);\n" +
"display: flex;\n" +
"justify-content: center;\n" +
"align-items: center;"
importBtn.onmouseover = () => {
importBtn.style.color = "#ffd500";
}
importBtn.onmouseout = () => {
importBtn.style.color = "#ffffff";
}
importBtn.innerText = "Import from clipboard"
importBtn.onclick = () => {
//Object.assign(localStorage, JSON.parse(clipboard.readText()));
//window.location.reload();
}
document.getElementsByClassName('left')[0].appendChild(exportBtn);
document.getElementsByClassName('left')[0].appendChild(importBtn);
settingsButtonsAdded = true;
}
});
});
} catch {
}
}).observe(document, { childList: true, subtree: true });
let oldLog = console.log;
console.log = (...arguments) => {
if (typeof arguments[0] == "string" && arguments[0].startsWith("window.aiptag.cmd")) {
throw "ad's blocked by overengineered ad block " + Math.random().toString().split(".")[1];
}
oldLog(...arguments);
};
if (customCss) {
let cssLinkElem = document.createElement("link");
cssLinkElem.href = settings.get('cssLink');
cssLinkElem.rel = "stylesheet";
document.head.append(cssLinkElem);
}
gui.id = "gui";
gui.innerHTML += "<style>\n" +
" @import url('https://fonts.googleapis.com/css2?family=Titillium+Web:wght@300&display=swap');\n" +
"\n" +
" #gui {\n" +
" background-color: rgb(24, 25, 28);\n" +
" border: solid rgb(24, 25, 28) 5px;\n" +
" box-shadow: 0 0 8px 2px #000000;\n" +
" position: absolute;\n" +
" left: 200px;\n" +
" top: 100px;\n" +
" z-index: 300;\n" +
" color: rgb(255, 255, 255);\n" +
" padding: 6px;\n" +
" font-family: \"Titillium Web\", serif;\n" +
" line-height: 1.6;\n" +
" border-radius: 3px\n" +
" }\n" +
"\n" +
" input:disabled {\n" +
" background: rgb(255, 255, 255);\n" +
" border: solid rgb(0, 0, 0) 1px;\n" +
" width: 50px;\n" +
" }\n" +
"\n" +
" .heading {\n" +
" width: 300px;\n" +
" height: 40px;\n" +
" display: flex;\n" +
" justify-content: center;\n" +
" align-items: center;\n" +
" background-color: rgb(24, 25, 28);\n" +
" margin: -9px -6px 8px;\n" +
" font-family: \"Titillium Web\", serif;\n" +
" font-weight: bold;\n" +
" text-align: center;\n" +
" font-size: 24px;\n" +
" border-bottom: solid rgb(140, 140, 140) 2px;\n" +
" }\n" +
"\n" +
" .footer {\n" +
" width: 300px;\n" +
" height: 20px;\n" +
" display: flex;\n" +
" justify-content: center;\n" +
" align-items: center;\n" +
" background-color: rgb(24, 25, 28);\n" +
" margin: 6px -6px -10px;\n" +
" font-family: \"Titillium Web\", serif;\n" +
" font-weight: bold;\n" +
" text-align: center;\n" +
" font-size: 11px;\n" +
" position: relative;\n" +
" border-top: solid rgb(140, 140, 140) 2px;\n" +
" }\n" +
"\n" +
" .module:hover {\n" +
" background-color: rgb(0, 0, 0, 0.1)\n" +
" }\n" +
"\n" +
" .autojoin{\n" +
" display: none;\n" +
" }\n" +
"\n" +
" </style>\n" +
" <div id=\"infi\" class=\"heading\">Script Settings</div>\n" +
"\n" +
" <div class=\"module\">\n" +
" <input type=\"checkbox\" id=\"crosshair\" name=\"crosshair\">\n" +
" <label for=\"crosshair\">Perm. Crosshair</label>\n" +
" </div>\n" +
"\n" +
" <div class=\"module\">\n" +
" <input type=\"checkbox\" id=\"customCSS\" name=\"customCSS\">\n" +
" <label for=\"customCSS\">CSS Link: </label>\n" +
" <input type=\"text\" id=\"cssLink\" placeholder=\"Paste CSS Link Here\">\n" +
" </div>\n" +
"\n" +
" <div class=\"module\">\n" +
" <input type=\"checkbox\" id=\"hideweap\" name=\"hideweap\">\n" +
" <label for=\"hideweap\">Hide Weapon ADS</label>\n" +
" </div>\n" +
"\n" +
" <div class=\"module\">\n" +
" <input type=\"checkbox\" id=\"arms\" name=\"arms\">\n" +
" <label for=\"arms\">Hide Arms</label>\n" +
" </div>\n" +
"\n" +
" <div class=\"module\">\n" +
" <input type=\"checkbox\" id=\"hideflag\" name=\"hideflag\">\n" +
" <label for=\"hideflag\">Hide Flag ADS</label>\n" +
" </div>\n" +
"\n" +
" <div class=\"module\">\n" +
" <input type=\"checkbox\" id=\"highlight\" name=\"highlight\">\n" +
" <label for=\"highlight\">Highlight Players</label>\n" +
" </div>\n" +
"\n" +
" <div class=\"module\">\n" +
" <input type=\"checkbox\" id=\"black\" name=\"black\">\n" +
" <label for=\"black\">Black Players</label>\n" +
" </div>\n" +
"\n" +
" <div class=\"module\">\n" +
" <input type=\"checkbox\" id=\"wireframeWeapons\" name=\"wireframeWeapons\">\n" +
" <label for=\"wireframeWeapons\">Wireframe Weapons</label>\n" +
" </div>\n" +
"\n" +
" <div class=\"module\">\n" +
" <input type=\"checkbox\" id=\"wireframeArms\" name=\"wireframeArms\">\n" +
" <label for=\"wireframeArms\">Wireframe Arms</label>\n" +
" </div>\n" +
"\n" +
" <div class=\"module\">\n" +
" <input type=\"checkbox\" id=\"rainbow\" name=\"rainbow\">\n" +
" <label for=\"rainbow\">Rainbow Colors</label>\n" +
" </div>\n" +
"\n" +
" <div class=\"module\">\n" +
" Inspect Key\n" +
" <button id=\"bindButton\" style=\"width: 100px\">click to bind</button>\n" +
" </div>\n" +
"\n" +
" <div class=\"module\">\n" +
" <input type=\"checkbox\" id=\"adspower\" name=\"adspower\">\n" +
" <label for=\"adspower\">0 ADS Power</label>\n" +
" </div>\n" +
"\n" +
" <div class=\"module\">\n" +
" <input type=\"checkbox\" id=\"autoJoin\" name=\"autoJoin\">\n" +
" <label for=\"autoJoin\">Auto-Joiner (Key F8)</label>\n" +
" </div>\n" +
"\n" +
" <hr class=\"autojoin\">\n" +
"\n" +
" <div class=\"module autojoin\">\n" +
" <input type=\"checkbox\" id=\"euLobbies\" name=\"euLobbies\">\n" +
" <label for=\"euLobbies\">EU Lobbies</label>\n" +
" </div>\n" +
"\n" +
" <div class=\"module autojoin\">\n" +
" <input type=\"checkbox\" id=\"naLobbies\" name=\"naLobbies\">\n" +
" <label for=\"naLobbies\">NA Lobbies</label>\n" +
" </div>\n" +
"\n" +
" <div class=\"module autojoin\">\n" +
" <input type=\"checkbox\" id=\"asiaLobbies\" name=\"asiaLobbies\">\n" +
" <label for=\"asiaLobbies\">ASIA Lobbies</label>\n" +
" </div>\n" +
"\n" +
" <div class=\"module autojoin\">\n" +
" <input type=\"checkbox\" id=\"ffaLobbies\" name=\"ffaLobbies\">\n" +
" <label for=\"ffaLobbies\">FFA Lobbies</label>\n" +
" </div>\n" +
"\n" +
" <div class=\"module autojoin\">\n" +
" <input type=\"checkbox\" id=\"tdmLobbies\" name=\"tdmLobbies\">\n" +
" <label for=\"tdmLobbies\">TDM Lobbies</label>\n" +
" </div>\n" +
"\n" +
" <div class=\"module autojoin\">\n" +
" <input type=\"checkbox\" id=\"parkourLobbies\" name=\"parkourLobbies\">\n" +
" <label for=\"parkourLobbies\">PARKOUR Lobbies</label>\n" +
" </div>\n" +
"\n" +
" <div class=\"module autojoin\">\n" +
" <label for=\"preferredFilter\">Prefered Filter:</label>\n" +
" <select id=\"preferredFilter\" name=\"preferredFilter\">\n" +
" <option value=\"Time\">Time</option>\n" +
" <option value=\"Players\">Players</option>\n" +
" </select>\n" +
" </div>\n" +
"\n" +
" <div class=\"module autojoin\">\n" +
" <input type=\"range\" id=\"minPlayers\" name=\"minPlayers\" min=\"0\" max=\"8\" value=\"0\" step=\"1\">\n" +
" <label id=\"minPlayersLab\" for=\"minPlayers\">min. Players</label>\n" +
" </div>\n" +
"\n" +
" <div class=\"module autojoin\">\n" +
" <input type=\"range\" id=\"maxPlayers\" name=\"maxPlayers\" min=\"0\" max=\"8\" value=\"0\" step=\"1\">\n" +
" <label id=\"maxPlayersLab\" for=\"maxPlayers\">max. Players</label>\n" +
" </div>\n" +
"\n" +
" <div class=\"module autojoin\">\n" +
" <input type=\"range\" id=\"minTimeLeft\" name=\"minTimeLeft\" min=\"0\" max=\"8\" value=\"0\" step=\"1\">\n" +
" <label id=\"minTimeLeftLab\" for=\"minTimeLeft\">min. Time Left</label>\n" +
" </div>\n" +
"\n" +
" <div class=\"module autojoin\">\n" +
" <input type=\"checkbox\" id=\"filterMaps\" name=\"filterMaps\">\n" +
" <label for=\"filterMaps\">Map Filter: </label>\n" +
" <input type=\"text\" id=\"mapFilterField\" placeholder=\"Map1, Map2, Map3, etc.\">\n" +
" </div>\n" +
"\n" +
" <hr class=\"autojoin\">\n" +
"\n" +
" <div class=\"footer\">Toggle With \"PageUp\" Key</div>";
gui.onclick = (e) => {
if (e.target.id === "crosshair") {
permCrosshair = e.target.checked;
settings.set('permCrosshair', permCrosshair);
}
if (e.target.id === "customCSS") {
customCss = e.target.checked;
settings.set('customCss', customCss);
}
if (e.target.id === "hideweap") {
hideWeaponsAds = e.target.checked;
settings.set('hideWeaponsAds', hideWeaponsAds);
}
if (e.target.id === "arms") {
hideArms = e.target.checked;
settings.set('hideArms', hideArms);
}
if (e.target.id === "hideflag") {
hideFlagAds = e.target.checked;
settings.set('hideFlagAds', hideFlagAds);
}
if (e.target.id === "highlight") {
playerHighLight = e.target.checked;
settings.set('playerHighLight', playerHighLight);
}
if (e.target.id === "black") {
fullBlack = e.target.checked;
settings.set('fullBlack', fullBlack);
}
if (e.target.id === "wireframeWeapons") {
wireframeWeapons = e.target.checked;
settings.set('wireframeWeapons', wireframeWeapons);
}
if (e.target.id === "wireframeArms") {
wireframeArms = e.target.checked;
settings.set('wireframeArms', wireframeArms);
}
if (e.target.id === "rainbow") {
rainbow = e.target.checked;
settings.set('rainbow', rainbow);
}
if (e.target.id === "adspower") {
adspower = e.target.checked;
settings.set('adspower', adspower);
}
if (e.target.id === "autoJoin") {
autoJoin = e.target.checked;
settings.set('autoJoin', autoJoin);
for (let e of document.getElementsByClassName('autojoin')) {
e.style.display = autoJoin ? 'block' : 'none'
}
}
if (e.target.id === "euLobbies") {
euLobbies = e.target.checked;
settings.set('euLobbies', euLobbies);
}
if (e.target.id === "naLobbies") {
naLobbies = e.target.checked;
settings.set('naLobbies', naLobbies);
}
if (e.target.id === "asiaLobbies") {
asiaLobbies = e.target.checked;
settings.set('asiaLobbies', asiaLobbies);
}
if (e.target.id === "ffaLobbies") {
ffaLobbies = e.target.checked;
settings.set('ffaLobbies', ffaLobbies);
}
if (e.target.id === "tdmLobbies") {
tdmLobbies = e.target.checked;
settings.set('tdmLobbies', tdmLobbies);
}
if (e.target.id === "parkourLobbies") {
parkourLobbies = e.target.checked;
settings.set('parkourLobbies', parkourLobbies);
}
if (e.target.id === "filterMaps") {
filterMaps = e.target.checked;
settings.set('filterMaps', filterMaps);
}
};
gui.style.display = "none";
document.body.appendChild(gui);
if (settings.get('menuOpen') === undefined || settings.get('menuOpen')) {
toggleGui();
}
document.getElementById("crosshair").checked = permCrosshair;
document.getElementById("customCSS").checked = customCss;
document.getElementById("hideweap").checked = hideWeaponsAds;
document.getElementById("arms").checked = hideArms;
document.getElementById("hideflag").checked = hideFlagAds;
document.getElementById("highlight").checked = playerHighLight;
document.getElementById("black").checked = fullBlack;
document.getElementById("wireframeWeapons").checked = wireframeWeapons;
document.getElementById("wireframeArms").checked = wireframeArms;
document.getElementById("rainbow").checked = rainbow;
document.getElementById("adspower").checked = adspower;
maxPlayersLab = document.getElementById('maxPlayersLab');
minPlayersLab = document.getElementById('minPlayersLab');
minTimeLeftLab = document.getElementById('minTimeLeftLab');
maxPlayerSlider = document.getElementById("maxPlayers");
minPlayerSlider = document.getElementById("minPlayers");
minTimeLeftSlider = document.getElementById("minTimeLeft");
maxPlayerSlider.onchange = () => {
settings.set('maxPlayers', Number.parseInt(maxPlayerSlider.value));
}
minPlayerSlider.onchange = () => {
settings.set('minPlayers', Number.parseInt(minPlayerSlider.value));
}
minTimeLeftSlider.onchange = () => {
settings.set('minTimeLeft', Number.parseInt(minTimeLeftSlider.value));
}
minPlayerSlider.value = minPlayers;
maxPlayerSlider.value = maxPlayers;
minTimeLeftSlider.value = minTimeLeft;
if (autoJoin) {
for (let e of document.getElementsByClassName('autojoin')) {
e.style.display = autoJoin ? 'block' : 'none'
}
}
document.getElementById("autoJoin").checked = autoJoin;
document.getElementById("euLobbies").checked = euLobbies;
document.getElementById("naLobbies").checked = naLobbies;
document.getElementById("asiaLobbies").checked = asiaLobbies;
document.getElementById("ffaLobbies").checked = ffaLobbies;
document.getElementById("tdmLobbies").checked = tdmLobbies;
document.getElementById("parkourLobbies").checked = parkourLobbies;
let button = document.getElementById("bindButton");
button.style.fontWeight = "800";
button.onclick = () => {
listening = true;
button.innerText = "Press a Key"
}
button.innerText = settings.get('inspectKey').toUpperCase();
let cssField = document.getElementById('cssLink');
if (settings.get('cssLink') === undefined) settings.set('cssLink', '');
cssField.value = settings.get('cssLink');
cssField.oninput = () => {
settings.set('cssLink', cssField.value);
}
let filter = document.getElementById("preferredFilter");
filter.value = preferredFilter;
filter.onchange = () => {
preferredFilter = filter.value;
settings.set('preferredFilter', filter.value);
}
document.getElementById("filterMaps").checked = filterMaps;
let mapField = document.getElementById("mapFilterField");
let mapString = "";
for (let name of maps) {
mapString += name + ", "
}
mapField.value = mapString.slice(0, -2);
mapField.oninput = () => {
maps = mapField.value.replaceAll(' ', '').toLowerCase().split(',');
settings.set('maps', maps);
}
window.addEventListener("mouseup", (e) => {
if (e.button === 3 || e.button === 4)
e.preventDefault();
});
//hp numbers default ingame now
/*const observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
document.getElementsByClassName('hp-title')[0].innerText = hpNumber ? mutation.target.style.width.slice(0, -1) : "HP";
});
});*/
let scoped = false;
document.addEventListener('mousedown', (e) => {
if (e.button === 2) scoped = true;
});
document.addEventListener('mouseup', (e) => {
if (e.button === 2) scoped = false;
});
let inspectedWeapon;
document.addEventListener('keydown', (e) => {
if (listening) {
settings.set('inspectKey', e.key);
document.getElementById("bindButton").innerText = e.key.toUpperCase();
listening = false;
}
if (e.key === settings.get("inspectKey").toLowerCase()) {
inspecting = true;
setTimeout(() => {
inspecting = false
}, 3000);
}
if (e.code === "PageUp") {
toggleGui();
}
});
let r = 255;
let g = 0;
let b = 0;
function animate() {
window.requestAnimationFrame(animate);
if (rainbow) {
if (r > 0 && b === 0) {
r--;
g++;
}
if (g > 0 && r === 0) {
g--;
b++;
}
if (b > 0 && g === 0) {
r++;
b--;
}
} else {
let color = hexToRgb("#ff0000");
r = color.r;
g = color.g;
b = color.b;
}
if (menuVisible) {
if (minPlayerSlider) {
minPlayers = Number.parseInt(minPlayerSlider.value);
minPlayersLab.innerText = minPlayerSlider.value + " min. Players";
}
if (maxPlayerSlider) {
maxPlayers = Number.parseInt(maxPlayerSlider.value);
maxPlayersLab.innerText = maxPlayerSlider.value + " max. Players";
}
if (minTimeLeftSlider) {
minTimeLeft = Number.parseInt(minTimeLeftSlider.value);
minTimeLeftLab.innerText = minTimeLeftSlider.value + " min. Time Left";
}
}
if (flagMaterial) {
if (hideFlagAds) {
flagMaterial.visible = !scoped;
} else {
flagMaterial.visible = true;
}
}
if (crosshair && permCrosshair) crosshair.style = "visibility: visible !important; opacity: 1 !important; display: block !important;"
try {
let weap = document.getElementsByClassName('list-weapons')[0].children[0].children[0].innerText;
let num = 4;
if (weap === "Weatie" || weap === "MAC-10") num = 5;
if (weap === "AR-9") num = 3;
let arms = true;
if ((scoped && hideWeaponsAds) || hideArms) {
arms = false;
}
const weaponModel = scene["entity"]["_entityManager"]["mWnwM"]["systemManager"]["_systems"]["0"]["_queries"]["player"]["entities"]["0"]["_components"]["35"]["weapons"][weap]["model"];
const armsMaterial = weaponModel["parent"]["children"]["0"]["material"];
const weaponMaterial = weaponModel["children"][num]["material"];
armsMaterial.visible = arms;
if (hideWeaponsAds) weaponMaterial.visible = !scoped;
if (inspecting) {
if (!prevInsp) {
prevInspectPos = weaponModel.position.clone();
prevInspectRot = weaponModel.rotation.clone();
if (weaponModel) inspectedWeapon = weaponModel;
}
weaponModel.rotation.x = 0;
weaponModel.rotation.y = -0.3;
weaponModel.rotation.z = -0.4;
weaponModel.position.y = 0.05;
weaponModel.position.z = -0.08;
} else {
if (prevInsp) {
inspectedWeapon.rotation.x = prevInspectRot.x;
inspectedWeapon.rotation.y = prevInspectRot.y;
inspectedWeapon.rotation.z = prevInspectRot.z;
inspectedWeapon.position.y = prevInspectPos.y;
inspectedWeapon.position.z = prevInspectPos.z;
}
}
prevInsp = inspecting;
if (wireframeArms) {
armsMaterial.wireframe = true;
armsMaterial.color.r = r / 255;
armsMaterial.color.g = g / 255;
armsMaterial.color.b = b / 255;
armsMaterial.emissive.r = r / 255;
armsMaterial.emissive.g = g / 255;
armsMaterial.emissive.b = b / 255;
} else if (prevWireframeArms) {
armsMaterial.wireframe = false;
armsMaterial.color.r = 1;
armsMaterial.color.g = 1;
armsMaterial.color.b = 1;
armsMaterial.emissive.r = 0;
armsMaterial.emissive.g = 0;
armsMaterial.emissive.b = 0;
}
if (wireframeWeapons) {
weaponMaterial.wireframe = true;
weaponMaterial.color.r = r / 255;
weaponMaterial.color.g = g / 255;
weaponMaterial.color.b = b / 255;
weaponMaterial.emissive.r = r / 255;
weaponMaterial.emissive.g = g / 255;
weaponMaterial.emissive.b = b / 255;
} else if (prevWireframeWeapons) {
weaponMaterial.wireframe = false;
weaponMaterial.color.r = 1;
weaponMaterial.color.g = 1;
weaponMaterial.color.b = 1;
weaponMaterial.emissive.r = 0;
weaponMaterial.emissive.g = 0;
weaponMaterial.emissive.b = 0;
}
prevWireframeWeapons = wireframeWeapons;
prevWireframeArms = wireframeArms;
} catch {
}
try {
for (let i = 0; i < scene["entity"]["_entityManager"]["mWnwM"]["systemManager"]["_systems"]["2"]["_queries"]["animationEntities"]["entities"].length; i++) {
let localPlayerClass = scene["children"]["0"]["parent"]["entity"]["_entityManager"]["mWnwM"]["systemManager"]["_systems"]["0"]["_queries"]["player"]["entities"]["0"]["_components"]["38"].wnWmN;
let player = scene["entity"]["_entityManager"]["mWnwM"]["systemManager"]["_systems"]["2"]["_queries"]["animationEntities"]["entities"][i]["_components"];
let mat = scene["entity"]["_entityManager"]["mWnwM"]["systemManager"]["_systems"]["2"]["_queries"]["animationEntities"]["entities"][i]["_components"][0].value.children[0].children[0].children[1].material;
if ((mat.color.r === 1 && mat.color.g < 1 && mat.color.b < 1) || !playerHighLight) continue;
let color = hexToRgb("#0000ff");
if (!localPlayerClass.team || localPlayerClass.team !== player["50"].team) {
color = hexToRgb("#ff0000");
if (fullBlack) color = hexToRgb('#000000')
}
let r = color.r * Number.MAX_SAFE_INTEGER;
let g = color.g * Number.MAX_SAFE_INTEGER;
let b = color.b * Number.MAX_SAFE_INTEGER;
mat.map = null;
mat.color.r = r;
mat.color.g = g;
mat.color.b = b;
mat.needsUpdate = true;
}
} catch {
}
}
animate();
window.XMLHttpRequest = class extends window.XMLHttpRequest {
get responseText() {
if (this.invReq) {
this.invReq = false;
let entries = JSON.parse(this.responseText);
let sortedItems = { legendary: [], epic: [], rare: [], common: [] };
for (let entry of entries) {
sortedItems[entry.item.rarity.toLowerCase()].push(entry);
}
let editEntries = [];
for (let rarity in sortedItems) {
editEntries = [].concat(editEntries, sortedItems[rarity]);
}
return JSON.stringify(editEntries);
}
return super.responseText;
}
open(method, url) {
if (url === "https://api.kirka.io/api/inventory") this.invReq = true;
return super.open(...arguments);
}
}
function minutesLeft(e) {
return Math.ceil((480 - (Date.now() - Date.parse(e)) / 1000));
}
document.onkeydown = event => {
if (event.key === "F8" && autoJoin) {
responseCount = 0;
allLobbyData = [];
fetch('https://eu1.kirka.io/matchmake')
.then(response => response.json())
.then(dataEU => {
for (let i = 0; i < dataEU.length; i++) {
dataEU[i].region = "EU";
}
if (euLobbies) {
for (let i = 0; i < dataEU.length; i++) {
allLobbyData.push(dataEU[i]);
}
}
responseCount++;
checkSearchLobby();
});
fetch('https://na1.kirka.io/matchmake')
.then(response => response.json())
.then(dataNA => {
for (let i = 0; i < dataNA.length; i++) {
dataNA[i].region = "NA";
}
if (naLobbies) {
for (let i = 0; i < dataNA.length; i++) {
allLobbyData.push(dataNA[i]);
}
}
responseCount++;
checkSearchLobby();
});
fetch('https://asia1.kirka.io/matchmake')
.then(response => response.json())
.then(dataASIA => {
for (let i = 0; i < dataASIA.length; i++) {
dataASIA[i].region = "ASIA";
}
if (asiaLobbies) {
for (let i = 0; i < dataASIA.length; i++) {
allLobbyData.push(dataASIA[i]);
}
}
responseCount++;
checkSearchLobby();
});
}
}
function checkSearchLobby() {
if (responseCount < 3) return;
console.log(allLobbyData);
if (parkourLobbies) {
gameModes.push('ParkourRoom');
}
if (ffaLobbies) {
gameModes.push('DeathmatchRoom');
}
if (tdmLobbies) {
gameModes.push('TeamDeathmatchRoom');
}
let fittingLobbies = [];
for (let i = 0; i < allLobbyData.length; i++) {
if (allLobbyData[i].locked === false && allLobbyData[i].clients >= minPlayers && allLobbyData[i].clients <= maxPlayers && gameModes.includes(allLobbyData[i].name) && minutesLeft(allLobbyData[i].createdAt) >= minTimeLeft && (maps.includes(allLobbyData[i].metadata.mapName.toLowerCase()) || !filterMaps)) {
if (avoidSameLobby) {
if (!currentURL.includes(allLobbyData[i].roomId)) {
fittingLobbies.push(allLobbyData[i]);
}
} else {
fittingLobbies.push(allLobbyData[i]);
}
}
}
if (fittingLobbies.length !== 0) {
bestLobby = fittingLobbies[0];
if (fittingLobbies.length > 0) {
for (let i = 0; i < fittingLobbies.length; i++) {
if (bestLobby.clients < fittingLobbies[i].clients) {
bestLobby = fittingLobbies[i];
} else if (bestLobby.clients === fittingLobbies[i].clients) {
if (minutesLeft(bestLobby.createdAt) < minutesLeft(fittingLobbies[i].createdAt)) {
bestLobby = fittingLobbies[i];
}
}
}
}
} else if (preferredFilter === 'Time') {
bestLobby = fittingLobbies[0];
if (fittingLobbies.length > 0) {
for (let i = 0; i < fittingLobbies.length; i++) {
if (minutesLeft(bestLobby.createdAt) < minutesLeft(fittingLobbies[i].createdAt)) {
bestLobby = fittingLobbies[i];
}
}
}
}
if (fittingLobbies.length !== 0 && bestLobby !== '') {
let joinURL = 'https://kirka.io/games/' + bestLobby.region + '~' + bestLobby.roomId;
window.location.href = joinURL;
} else alert('No Lobby found - consider changing your settings'); //popup ohne alert?
}
function toggleGui() {
menuVisible = !menuVisible;
if (menuVisible) {
document.exitPointerLock();
gui.style.display = 'inline-block';
} else {
gui.style.display = 'none';
}
settings.set('menuOpen', menuVisible);
}
function hexToRgb(hex) {
let result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
return result ? {
r: parseInt(result[1], 16),
g: parseInt(result[2], 16),
b: parseInt(result[3], 16)
} : null;
}
let oldDefine = Object.defineProperty;
Object.defineProperty = (...args) => {
if (args[0] && args[1] && args[1] === 'renderer' && args[0].constructor.name.startsWith('_0x')) {
if (args[0].WnNMwm) {
Object.defineProperty(args[0].camera, "fov", {
get() {
return adspower ? args[0].WnNMwm.fov : this.vFov;
},
set(v) {
this.vFov = v;
}
});
}
}
return oldDefine(...args);
}
// ==UserScript==
// @name Kirka.IO Enhanced
// @namespace -
// @version 1.4.1
// @description Wallhack, adblock and more for Kirka.IO.
// @author Anything Tech
// @match *://kirka.io/*
// @run-at document-end
// @license GPL-3.0-or-later
// @grant none
// @icon data:image/png;base64,AAABAAMAEBAAAAEAIABoBAAANgAAACAgAAABACAAKBEAAJ4EAAAwMAAAAQAgAGgmAADGFQAAKAAAABAAAAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQoHTBMMCccUCwrOEwwK0xMMCsYRCgdLFAwL2hMLCt8UDArjEwwKrgAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAABMLC18UHTX/FQ8Q/xUNC/8VDQv/FA0L8RUNC/8VDQv/Nygh/zIkHv8UDAqxAAAACwAAAAAAAAAAAAAAAAAAAAATCwhdFCND/xQnTP8VFBz/FQ0L/zUnIP9CMSj/FQ0L/11HOv/yyKn/gGRS/xYOC6EAAAAAAAAAAAAAAAAAAAAAFAwJWBQjP/8VDg3/FCtS/11HO//uxKb/Z1BB/xUNC/9dSDz//t/I//vWu/8iGBPKAAAAAAAAAAAAAAAAAAAAABUMCVUUJkP/FQ0L/xQuVP+5moX//9/I/2xURv8VDQv/XUtB//7k0v/73sn/JRoVxwAAAAAAAAAAAAAAAAAAAAATDAlSFChE/xUNC/8UM1n/v6WU///l0v5sV0v/FQ0L/11PR///6tz+++bW/yoeGsYAAAAAAAAAAAAAAAAAAAAAEAoKThQtS/8VDQv/FDhe/8Swo///6dr+cF9V/xoRD/+fkor//+/k/u/g1/4iGRbCAAAAAAAAAAAAAAAAAAAAABEKCkwUME3/FQ0L/xQ8Y//Gt6z//+3h/4d5c/+/s6z///Lo/vrs5P9dU0/tFAwIPwAAAAAAAAAAAAAAAAAAAAASCwdIFDVS/xUNC/8UQmj/y762///y6f7h1c3+/vHo///y6v7VycH/IhoXrwAAAAcAAAAAAAAAAAAAAAAAAAAAEwsIRBQ5V/8VDQv/FElx/9DEvP//8+r+eG1p/2xiXv/x5dz+//Pq/ruwqf4bExGEAAAAAAAAAAAAAAAAAAAAABMMCEIUPlz/FQ0L/xRPd//VycH+//Pq/ntybf8VDQv/W1FO///z6v787+b+KiMfogAAAAAAAAAAAAAAAAAAAAATDQYoFTpS9hQ9Vv8UVXz/2c3F/v/y6f6Bd3H/FQ0L/09FQv//8un/++7m/iEZFZsAAAAAAAAAAAAAAAAAAAAAAAAAABUOCkkhVFj1M5GD/93Uxv/46+L/Z15Z/xUNC/9PRUL///Lp//fq4v4cExGTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgdIgZ225HfV5mUv+cJo0/1KFF+AWDwmIOzIw/LOoof+0qaL/GBEPiwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHTFFxZyvR3zaasbj4HcIeh93R9iAAAAABELBi0UDAg/EgsLRxMMBikAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wABfdwgmXvXIH5VqgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDwoHZw8JB4wQCgeSEQoImhIKCJ8RCQikEAoHrBAKCa8QCQdyAAAADBIJCToTCwmzEgsKuxILCb0SCwnCEgwJxhMLCskTCwm8CwUFLwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQUDAnBFQ0L/xUNC/8VDQv/FQ0L/xUNC/8VDQv/FQ0L/xQMC/kRCgiEEAsIYRQNC/0VDQv/FQ0L/xUNC/8VDQv/FQ0L/xUNC/8UDArPBgYGKwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxQMC74VFB//FRAT/xUNC/8VDQv/FQ0L/xUNC/8VDQv/FQ0L/xQNC/sTCwrLFQ0L/hUNC/8VDQv/FQ0L/xUNC/8dFBD/FQ0L/xUNC/8UDArMDAYGLAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEwwKuBQfO/8UMWn/FRUf/xUNC/8VDQv/FQ0L/xUNC/8VDQv/FQ0L/xUNC/8VDQv/FQ0L/xUNC/8VDQv/FQ0L/5V0Xv+AY1D/HhQR/xUNC/8UDArMBgYAKwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTDAq4FCA8/xQsW/8UNXD/FRwx/xUNDP8VDQv/FQ0L/xUNC/8VDQv/Fg4M/y4hG/8VDQv/FQ0L/xUNC/8VDQv/poJq//7Nqf/PpIX/UT0y/xcPDP8UDArMBwcAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhQNCrYUIDr/FCA6/xUWIf8UNm//FCdK/xUODv8VDQv/FQ0L/x4UEP+LbFj/sIpw/xYNC/8VDQv/FQ0L/xUNC/+mgmr//tm9//7Xu//4yKX/oX5m/xsSD/8TCwmRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAwKsBQhPP8UIz//FQ0L/xURFf8UNGj/FCVF/xUNC/80JiD/v5Z6//3Mqf+5kXb/Fg0L/xUNC/8VDQv/FQ0L/6aDa///3sX+/9/I///ex//2yKf/JxsW/xIMCJkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUDAqvFCM+/xQlQ/8VDQv/FQ0L/xQmRf8ULlb/RDMq/+a3lv/+1bb//tvB/7mSd/8WDgv/FQ0L/xUNC/8VDQv/poVu///gyv/+4cz//+PO//fOsf8vIhz/EwwJkwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARUMCq4UJED/FCZF/xUNC/8VDQv/FCpL/xQwWf9xWEf//ti8///exv//3sf+wJl+/xcODP8VDQv/FQ0L/xUNC/+mh3P//uPP//7k0f//5dL/99O5/y8iHP8UCwmOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAwJphQlQP8UKEf/FQ0L/xUNC/8ULU//FDNc/3ZcTP/+3cb//+DK///gy//BnYP/Fw4M/xUNC/8VDQv/FQ0L/6aMev//5tT+/ubV///o1/732cL/LyIc/xILCY8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUDAmkFCU9/xQqSf8VDQv/FQ0L/xQvUf8UNV7/fmVV///izf7+4s7//+TQ/sGfiP8XDgz/FQ0L/xUNC/8VDQv/po+A///p2f7/6dr+/+na//jezP82KCL/FAsJjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQLCaQUJj//FCxM/xUNC/8VDQv/FDFT/xQ4Yf+Aa13//+TR///m1P7/5tT/waOO/xcODP8VDQv/FQ0L/xUNC/+mlIf//+zd/v/r3v/+7N7/+eXX/jgqJP8UCwmOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgsKnRUnQP8UMVT/FQ0L/xUNC/8UM1b/FDpk/4l3bP/+59X//+jY/v/p2f7Hq5j/GA8N/xUNC/8VDQv/GhEQ/7ipn///7uH+/+7j/v/u4//56t/+Nywo/xMLCYkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASDAqaFClC/xQzV/8VDQv/FQ0L/xQ1WP8UPWb/iXpy///p2v//6tz+/+rc/8qzo/4YEA3/FQ0L/ygfHP+vopn//e7j/v/w5f7/8Ob///Ho/sK2r/8eFhP/FAwKgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIMCpkUKkP/FDZZ/xUNC/8VDQv/FDda/xRAaf+KfHT//+ve///s3///7eD/y7is/hkQDv9ANzT/0sa9//7w5v//8ef///Ho///y6f/azsb+LiYj/hUNCscPCAghAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEwwKlhQpP/8UN1r/FQ0L/xUNC/8UOV3/FEJs/5KGfv//7+P+/+7j///w5f7Qwbn/aF5Z/+zf1/7/8uj///Pq/v/y6f7/8un+697W/0I5Nf4WDAu8DAwMFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATCwmQFCpA/xQ8Yv8VDQv/FQ0L/xQ8X/8URW//k4iB///w5v//8ef///Lp/vnt5P787+b+//Lp/v/x6P//8en///Pq/v7x6P95cGr/FAwL5QcHACYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMLCZAULEL/FEFm/xUNC/8VDQv/FD5h/xRIc/+bkIr///Lp///y6v7/8un+28/H/rOnof/87+b///Lp///z6v7/8un+//Lp/uDUy/88NDD+EwsKsgkAABsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAsJjRQtQ/8UQ2n/FQ0L/xUNC/8UQGP/FE98/52SjP//8un///Lp///z6v7Tx7/+HhUT/3JnY//t4Nj///Lp///z6v7/8un+//Pq/tvPx/84Lyz+EwoJsQAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATDAiFFC5E/xRHbv8VDQv/FQ0L/xRDZv8UUn//pZqU/v/y6f//8un///Lp/tbJwv8aEhD/FQ0L/z00Mf/Jvbb+/fDn///y6f//8un///Pq/tnNxf8mHhv9FAoKTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMMCIUULD//FE12/xUNC/8VDQv/FEZp/xRVg/+mm5X///Lp/v/y6f7/8+r+29DI/hoSEP8VDQv/FQ0L/x4WFP+xpqD+//Lp///y6v7/8+r++Ovj/zYtKv0RCgpMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEwwIhBQuQP8UUnz/FQ0L/xUNC/8USWv/FFmF/62im///8un+//Lp///y6f/f08v/GxMR/xUNC/8VDQv/FQ0L/4l+ef//8un///Pq/v/y6f746+P+LyYj/BILB0UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATCwh4FSUx/xR8u/8ULDz/FQ0L/xRLbf8UXIj/sKWe///y6f//8un///Lp/uPXz/8cFBH/FQ0L/xUNC/8VDQv/iX55///y6f//8un///Lp//fr4v4oHhz7EAgIPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMNBigVDQzbFTNH/xSCwv8VOE7/FE5w/xVhjP+1qqP+//Pq/v/y6f7/8un/6dzU/x0VEv8VDQv/FQ0L/xUNC/+Jfnn///Lq/v/y6f//8un/9unh/iIaFvoSCQk4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQNBycVDQvYFTBC/xSLzP8UgLv/FWWP/7mtpv//8un///Lp///x6P/t4Nj+HRUS/xUNC/8VDQv/FQ0L/4l+ef//8un///Lp///y6f/x5dz+HhUT+hUKCjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQNByYaGAzWP3U7/1fEc/9NnFD/vsGh/v/x6P//8un+5NfP/31zbv8XEA3/FQ0L/xUNC/8VDQv/in55/v/y6f//8un///Pq/uve1v8dFRP4DAYGKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH3KHlyD2iH3gdsh/3/cIf+L3jf/z9Cz/oWDbv8+SSD/KDEO+yQtDcAVDwuoFQ0L/BUNC/+Jfnn///Lp/v/y6f//8un/5NjQ/hwUEfgOBwckAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAAnfHHElipxrXUYUY/0dXJ/1HXxv+fMYg/4LWIf9+1yD+fdogyEaLAAsUCwlzFQwL9TgvLP9iWFT/bmRf/3txa/91a2b/GBEN9gkJCRsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdcIfMnjDH+dOdhbyIikLcYDQINSE2yH+gNsh/37eIPR62h5FAAAAAAAAAAETDAhCFAsJdBMLCHkUDAiCFAsJihMMCpIUDAqWFAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByyRsmgdsh94PbIf55yB+tcsMbTIDcINh93CDMfN4hTgD/AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICqAAZ+3CDGf9wh/4DbIfpuvBxIbdskB2bMMwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHzgHyF73SB+fd4hhXraIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEKCgoaCQYGUQgGBlwKBQVjDQgFZQwHBW0OBwdvDQcHdA0GBncMCAZ8DAgGgAwIBoIPCAh7CQQEOQAAAAoAAAADDwcHRg8JCIcPCQeLDgkHkQ4JB5EQCQmTDwgInBAKCJ8QCgigEgsJqBELCaYOCQZYEBAQEAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQDAhAEwwK1BQMCucUDArqFAwK6xQMCu8UDArvFAwL8hQMCvMUDAr1FAwK9hUMCvcUDQr0EwsKuAsIBEMAAAAQEwwKhBUMCvgUDQv7FQ0L/hUNC/8VDQv/FQ0L/xUNC/8VDQv/FQ0L/xUNC/0UDArRDggGWgAAAA8AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAESCwdFFQ0L6hUNC/8VDQv/FQ0L/xUNC/8VDQv/FQ0L/xUNC/8VDQv/FQ0L/xUNC/8VDQv/FQ0L+xMLCcgJBgZREgwJkBQNC/wVDQv/FQ0L/xUNC/8VDQv/FQ0L/xUNC/8VDQv/FQ0L/xUNC/8VDQv9FAwJ2AwGBlQAAAAPAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEPCwhEFQ0L6hUPEP8VERb/FQ0M/xUNC/8VDQv/FQ0L/xUNC/8VDQv/FQ0L/xUNC/8VDQv/FQ0L/xUNC/0TCwrLEgsJvRQNC/0VDQv/FQ0L/xUNC/8VDQv/FQ0L/xUNC/8WDgz/GBAN/xUNC/8VDQv/FQ0L/hQMCtUPCQZWAAAAEAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERDQg9FQ0L6BUUH/8UJ1H/FBkr/xUODf8VDQv/FQ0L/xUNC/8VDQv/FQ0L/xUNC/8VDQv/FQ0L/xUNC/8UDQv8FQwK9xUNC/8VDQv/FQ0L/xUNC/8VDQv/FQ0L/xUNC/8oHBf/Zk9A/zMlH/8XDwz/FQ0L/xUNC/wUDQrLDwkGVgAAAA8AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERCAg8FQ0L5xUVIf8UM3D/EzRx/xQfOv8VDxD/FQ0L/xUNC/8VDQv/FQ0L/xUNC/8VDQv/FQ0L/xUNC/8VDQv/FQ0L/xUNC/8VDQv/FQ0L/xUNC/8VDQv/FQ0L/xUNC/82KCH/0aWF/8ecfv9cRjn/HBMP/xUNC/8VDQv8FAwK1QwGA1MAAAAPAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERCQk7FQ0L5xQVIf8UM2z/FDBl/xQ3d/8UJUj/FREW/xUNC/8VDQv/FQ0L/xUNC/8VDQv/FQ0L/xUNC/8VDQv/Fg4L/x4UEf8ZEA7/FQ0L/xUNC/8VDQv/FQ0L/xUNC/82KCH/2qyL//7Lpf/svJn/l3Zg/zkqIv8bEg//FQ0L/hQMCtUMCQZVAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERCQk7FQ0L5xUVH/8UMGT/FRgn/xQkRP8UNnD/FC1b/xUWIv8VDQz/FQ0L/xUNC/8VDQv/FQ0L/xUNC/8YEA3/QDAn/4tsWP84KSL/FQ0L/xUNC/8VDQv/FQ0L/xUNC/82KCH/2q2M///TtP//1LX/+smm/8+khf95Xkz/LSEb/xUNC/wUCwnIDQkJOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAESCQk4FQ0L5hUVHv8UMmX/FRUe/xUPD/8UHjP/Ezh0/xQ3cf8VHC//FQ4N/xUNC/8VDQv/FQ0L/xsSD/9gSTz/0KSE/+Ozkf9FMyr/FQ0L/xUNC/8VDQv/FQ0L/xUNC/82KCH/2q2N//7YvP/+3MP//tm+//7Rsf/ywJ3/t5B1/yYbFv8UDQrzEgsLYQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQCgoxFQwL5BUVH/8UNGj/FRYg/xUNC/8VDQz/FBcl/xQ3bP8UO3b/FRcl/xUNC/8WDgz/JxsX/35iUP/ltpP//sum/+e3lP9FMyr/FQ0L/xUNC/8VDQv/FQ0L/xUNC/82KCH/2q2N//7bwf//38j+/9/H//7ex///17r/8cCc/zMkHv8UDAr1DwoIYwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQCgoxFQwL5BUVH/8UNmz/FRck/xUNC/8VDQv/FQ0L/xQbLf8UPXv/FB4z/xkQDf9HNSv/rYhu//LBnv//0bD//ta4/+e4lf9FMyr/FQ0L/xUNC/8VDQv/FQ0L/xUNC/82KCH/2q6P///fx/7/4Mn//+DK///hy///3sb/8sKg/zoqI/8UDQr0EAsIYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQCwswFQwL5BUWH/8UOG//FRgl/xUNC/8VDQv/FQ0L/xUYJv8UQH3/FSE4/zAiHP/AmHv/+8uo//7Xuv/+28L//9vC/+i4l/9FNCr/FQ0L/xUNC/8VDQv/FQ0L/xUNC/82KCH/2rGT///gyv//4s3//uLN///jz///4Mr/8sWl/0AwJ/8UDQvxEQsIWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQCwswFQwL5BUWIP8UOnH/FRgm/xUNC/8VDQv/FQ0L/xQbKf8TQoH/FSE4/zssJP/es5X//trA///dxf//3sb//t3F/+m8nP9MOS7/Fg0L/xUNC/8VDQv/FQ0L/xUNC/82KCH/2rSZ//7izf/+48///uPQ///k0f//48//8siq/0AwJ/8UDAvwEQkJWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARCwYuFA0K4BUWIP8UPHP/FRgm/xUNC/8VDQv/FQ0L/xQdLf8URoX/FSI6/0IxKP/huZ3//t3F///fyP//4Mn+/+DJ/uq/oP9OOzD/Fg0L/xUNC/8VDQv/FQ0L/xUNC/82KCH/2rig///l0f7+5dL//+XT///m1P//59T+8syv/0AwJ/8UDAvwEQkJWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASDAYrFQ0L2hUWH/8UPnX/FRon/xUNC/8VDQv/FQ0L/xUdLv8USIn/FSM7/0IyKf/hvaP//t/J///gy///4cz//+HM/+rCpf9OOzD/Fg0L/xUNC/8VDQv/FQ0L/xUNC/82KSL/2rym///m1P/+59X//+jX/v7n1///6Nj+8tC2/0ExKf8UDAvwDgkJWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASDAYrFQwL2RUVHP8UP3X/FRoo/xUNC/8VDQv/FQ0L/xQeL/8TSov/FCQ8/0k4Lv/lw6r//+LM//7hzf/+487//+LP/+rFqv9OOzD/Fg0L/xUNC/8VDQv/FQ0L/xUNC/82KSP/2r+s//7n1//+6Nj//+nZ/v/p2f//6tv/9NW//0s5L/8UDAvwEQkJWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASDAYrFQ0L2hUVHP8UQXf/FRoo/xUNC/8VDQv/FQ0L/xQfMP8UTI7/FCU9/0s7Mf/mx7H//+TQ/v/k0P//5dL+/+bT/urJsf5OOzD/Fg0L/xUNC/8VDQv/FQ0L/xUNC/82KiX/2sOy///q2/7/6tv+/+rc///r3f//693/9dzK/k89M/8UDAvwEQkJWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASBgYqFAwL2RUVHf8UQnr/FRsp/xUNC/8VDQv/FQ0L/xQgMP8UT5H/FSc+/009NP/nzLn//+XS///m0///59X+/+bV/+rLtf9OPDL/Fg0L/xUNC/8VDQv/FQ0L/xUNC/82Kyf/2sa4///r3f//7d/+/+zf//7s3///7OD/9eLT/k8+NP8UDAvwEgkJVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANBgYoEwwL1hUWHf8URn//FR8w/xUNC/8VDQv/FQ0L/xUgMf8UUpP/FSdA/1VGPv/r0sH//+fV///n1v//59f//+nY/uzPuv9TQTb/Fg4M/xUNC/8VDQv/FQ0L/xYODP8+MzD/3cy////t4P7/7eD//+7i/v/u4v//8OT+9OTZ/09BOv8UDAvvDwkJVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBwclFAwL0BUWHf8USYL/FCAx/xUNC/8VDQv/FQ0L/xQhMv8UVZb/FSlB/1VJQ//s1sf+/ujY///p2v7/6tr+/+rb/u3Twf9ZRjz/Fg4M/xUNC/8VDQv/FQ0L/zUsKf+bjof/9OXZ/v/v4/7/7+T+/+/k///v5f//8ef+59rR/0A2Mv8VDArsEAoHTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBwclFAwL0BUXHv8TS4T/FCEy/xUNC/8VDQv/FQ0L/xQiM/8UV5n/FCpB/1VKRP/r18n//+rb///r3P7/697+/+vd/+3XyP5YRz//Fg4M/xUNC/8XDw3/Rjw4/76xqP/259z//+/k///x5v7/8ef+//Hn///y6P7x49v/gXdx/xwUEf8VDArpEgsLRwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBwclFAwL0BUXHv8UTYf/FSIz/xUNC/8VDQv/FQ0L/xUiM/8UWpz/FSpC/1ZKRf/r2Mv//+vd///r3v//7N///+3g/+3bzv5ZSUH/Fg4M/x4WFP9gV1L/18nB//7v5f//8Ob///Hn///x5///8un+//Lp//jr4/6flI7+JBwZ/xUNC/IUDQqYCwsLFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBwckFAwLzxUXHf8UTYX/FSIz/xUNC/8VDQv/FQ0L/xQjNP8UXJ7/FCtE/1pPSv/u3dH+/+3g///t4f//7uL//+/j/u7e0/5aTUf/KyMg/4R4c/7i1cz+/vDm///x6P//8un+//Lp/v/z6v7/8un//fDn/7Wpo/83Lyv/FQ4M7xUMCoQUCgoaAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCAghFA0KyxUWHf8UToT/FCI0/xUNC/8VDQv/FQ0L/xQkNf8TX6H/FS1F/19UT//w4NX///Dk/v/w5f7/7+X///Hm/vDh2f+AdW//rqKb//Pm3v//8un+//Lp///z6v7/8un///Lp/v/y6f7+8un+zcC5/z0zMP8XDgzrFgsLdBQAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQCAggFQwKxhUXHf8TUYj/FCU4/xUNC/8VDQv/FQ0L/xQkNv8UYqT/FC5G/19VUf/w4tf///Dl///w5v//8ej///Lo//zw5/7w5Nv+/O/m///x6f//8un+//Lp///y6f//8ur+//Lp///y6f/j1s7/UklF/xYNC/YRCgiFAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQCAgfFQwKxhUXHf8UVY3/FSk9/xUNC/8VDQv/FQ0L/xQlN/8UZaf/FC9G/2NZVf/x5dv///Ho///x6P//8un+//Lp/vrt5P/p3NT+++/m/v/y6f7/8un///Lp///y6f//8+r+//Lp/v7x6P/p3dT/cmhj/xwTEfoTCwqzDQkEOwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQCAgfFQwKxhUXHf8UWI//FSo+/xUNC/8VDQv/FQ0L/xQmN/8Uaav/FDFK/2heWv/16N////Lp/v/y6f7/8un///Lp/vDj2/6DeXP/raGb//fq4f//8un///Lp/v/z6v7/8un+//Lp/v/y6f7+8ej/6t3U/3FoY/8cFBD4EgwKuQoFBTUAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARCAgeFQwKxhUYHv8TWpH/FCs//xUNC/8VDQv/FQ0L/xQnOP8UbbD/FTZQ/2hfW//16OD///Lp///y6f//8un///Pq/vDk2/5iWVT+IhkX/3pwa//e0sr//fDn/v/y6f//8un///Pq/v/y6f7/8un///Pq/uXZ0f9nXVn/HBMR/BILCrkJBAQ5AAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATCQkbFAwJwBUYHv8UXJP/FCxA/xUNC/8VDQv/FQ0L/xQoOf8UcLP/FTdS/2xiXv/36+L+//Lp///y6f//8un///Pq/vDj2/9iWFT/Fg8M/xwUEv9VS0j/ua6n//fr4v//8+r+//Lp///z6v7/8un///Lp//7x6P/azsb/Z11Z/xoRD/gTCwqhDQ0AFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgAZFAwJvBUYHv8UX5b/FS9G/xUNC/8VDQv/FQ0L/xUpOv8UdLb/FDhT/3JoY//67uX+//Lp///y6f//8un///Lp/vLl3P9oXln/Fw8N/xUNC/8XDw3/LyYj/4uBe//q3tX+//Lp/v/y6f//8un///Lp///z6v7+8un+4dXN/j82Mv4UCwrMEQgIHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgAZFAwJvBUXHP8UX5X/FTNK/xUNC/8VDQv/FQ0L/xQqO/8Udrn/FDlV/3JpZP/57eT///Lp/v/y6f7/8un///Lp/vPn3v5rYl3/Fw8N/xUNC/8VDQv/FQ0L/xwUEf9mXFj/5NjQ/v/y6f//8un///Lp///z6v7/8un/9ejg/k5FQf4UCwrKEgkJHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgAZFAwJvBUYHf8TYZf/FDRL/xUNC/8VDQv/FQ0L/xQrPP8Uerz/FTtW/3RqZf/77uX+//Pq/v/y6f//8un///Lp//Pm3v9sY17/Fw8N/xUNC/8VDQv/FQ0L/xUNC/8qIR//wLSt///y6f//8+r+//Lq/v/y6f7/8+r+9Off/kU8Of4UDAnDEwkJGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgAZFAwKuxUYHf8UZpz/FTpT/xUNC/8VDQv/FQ0L/xUsPf8Ufr//FD1X/3txbP//8un+//Lp/v/y6f//8un///Lp//Xo3/9zaWT/Fw8N/xUNC/8VDQv/FQ0L/xUNC/8oIB3/vrGq///y6f//8un///Lp/v/y6f7/8un/8+be/kA3NP4UDAm/FQsLGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAATFAsKshUXG/8UaJ3/FGqg/xUkMP8VDw7/FQ0L/xQsPf8UgcL/FD5Y/3xzbf//8un///Lp///y6f//8un+//Lp/vbp4f51bGb/Fw8N/xUNC/8VDQv/FQ0L/xUNC/8oIB3/vrGq///y6f//8un///Lp///y6f//8un/8ubd/jMrKP4TCwq5DAwMFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAKFA0LjhUPD/sVN03/FHm2/xR0rv8VMUT/FQ8P/xQuPv8ThMX/FD9a/35zbv7/8un///Lp///y6f7/8un+//Pq/vbq4f93bWj/Fw8N/xUNC/8VDQv/FQ0L/xUNC/8oIB3/vbGq///y6f//8+r+//Lp///y6f//8un/8OPb/zAoJf4UCwq2DAwMFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRAIHxUOC6oWDw75FS08/xR6tf8Uf7z/FTZL/xUwQf8UiMj/FkJb/4Z8d///8un+//Pq/v/y6f//8un///Lp//ns4/5+dG//GBAN/xUNC/8VDQv/FQ0L/xUNC/8oIB3/vbGq///y6f7/8+r+//Lp///y6f//8+r+7+Pa/iYeG/0UDAqwDQ0NEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABISCR0WDAulFQ0L+BUqOP8Ue7X/FI7Q/xRgiv8UjtD/FkRd/4qAev//8un///Lp///y6f//8un///Ho//js4/+AdXD+GBAO/xUNC/8VDQv/FQ0L/xUNC/8oIB3/vrGq///y6f//8+r+//Lp///y6f//8+r+69/W/iQcGv0VDAqtDg4OEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUDQcnFg4LpRUODfgVLz3/GoGq/yKky/8ipMj/HU1Y/4uBe///8un///Ho///z6v7/8+r+/vHo/+ve1v5uZWD/Fw8N/xUNC/8VDQv/FQ0L/xUNC/8oIB3/vbGq///y6f//8un///Lp///z6v7/8+r+4tbO/iMbGP0UDAmmEBAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEwkJGxoXC544ThP6XqQy/2/PR/9uz0T/YKcu/520cv758eD///Lp///y6f/26uH+v7St/2FXU/8lHRv/FQ0L/xUNC/8VDQv/FQ0L/xUNC/8oIB3/vrKr/v/y6f//8un///Lp///y6f//8+r+3NDI/yIZF/0TCwmjEQAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHG2HD9/0CHehNoh/oLaIf+B2yH/f9wh/4bdLv/B5oz+6+LU/sC2rP9xbV7/LCob/xsZDP8aGAz1GRULzxUNC8IVDQrzFQ0L/xUNC/8oIB3/vbGq///y6f7/8un+//Lp///y6f//8ur+08a//iAYFv0TCwqdFAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAInYJw2D2iBngdggzX7ZIPh92SD/d9Ag/3jALf96llD/am1R/lt5Kf9gkxv/Y5wa/12UGf1emxrmZasapy9EEDEVDAqFFQwL6hUNC/8kHBn/m4+K/9XKwv7azsb/3tLK/+PWzv/m2tL/vLGq/h8XFPwSDAqYAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABttiQHYqYWOVSNF6ZDaRT1N1ES/y4zGf4xNxf8Y5gc/4HPIf+E2CH/gtkh/4DZIf9/2yH7e9sfk222AAcQAAAQFA0KZRUNC+YXDw3+Jh4b/y4mI/80Kyj/OzMv/0Q8OP9NRED/RTs4/xcQDfwUDAuPAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABd74dT3jEH9dRexfvLToP7xgXC6hWghihg9Uh9YTbIf6C2yH/gdsh/3/dIP1+3SDNetobMAAAAAAAAAAAAAAAAxQOCksVDQqhFQwKrRQMCrAVDQq2FAwJvRUMC8IVDAnGFAwKzBUMC88TCwt2AAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABecofUoPaIfaC1iH/eMUf8GipGoJkqhtCg9khw4LbIf2A2yH/ftwh/n7dINV73SBZgNQqBgAAAAAAAAAAAAAAAAAAAAIVAAAMEAAAEA8PABENDQAUCwsAGBQKChoSCQkcEAgIIA8ICCINDQ0UAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdskdNIDbIfGD3CH+gtoi/4HWIORnsBtedcYcP3/bILF/3SDPftwgmHvfIDht2yQHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbcgSDoDcIcCA3CH+gNwh/4DcIf15zx+vUo8UGY7jHAl22CcNZswzBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAAn7bIU1+3SHLfdsg7X7dIe9+2yHEd8oeKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGb/AAWA3xoofOEeTH7gH1F73iE2juMcCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
// ==/UserScript==
(function() {
let wallhackEnabled = true
const KEYS = {
CHAT_VISIBILITY_TOGGLE: 'V',
WALLHACK_TOGGLE: 'f'
}
// Nerd Stuff
let players = []
let other = []
// No Logs
;(function() {
console._log = console.log
let props = ['log', 'info', 'warn', 'error']
props.forEach(e => {
let prop = props[e]
window.console[prop] = _
})
})()
// Styling
let css = `
.notification {
position: absolute;
background: var(--secondary-5);
border: 4px solid rgb(62, 77, 124);
border-bottom: 4px solid var(--secondary-6);
border-top: 4px solid rgb(77, 92, 139);
width: 250px;
height: 100px;
right: 15px;
bottom: 15px;
z-index: 100;
color: rgb(255, 255, 255);
transition: .3s;
opacity: 0.85;
pointer-events: none;
}
.notification-title {
font-size: x-large;
text-align: center;
margin: 2px;
}
.notification-body {
margin: 3px;
font-size: medium;
}
.highlight-disabled::after {
content: 'disabled';
color: rgb(210, 50, 50);
}
.highlight-enabled::after {
content: 'enabled';
color: rgb(50, 210, 50);
}
.bloody-screen {
pointer-events: none !important;
width: 100vw;
height: 100vh;
position: absolute;
left: 0;
top: 0;
box-shadow: rgba(255, 0, 0, .8) 0 0 150px inset;
transition: .3s opacity;
}`
// Visibility Change
let visibility = (function() {
function visible(el) {
el.style.opacity = '1'
el.style.pointerEvents = 'auto'
}
function invisible(el) {
el.style.opacity = '0'
el.style.pointerEvents = 'none'
}
return {
toggle(el) {
if(el.style.opacity === '0') {
visible(el)
} else {
invisible(el)
}
},
visible,
invisible,
}
})()
let wallhack = (function() {
function visible(e) {
e.alphaTest = .99
e.fog = false
e.depthTest = false
}
function invisible(e) {
e.alphaTest = 1
e.fog = true
e.depthTest = true
}
return {
visible,
invisible,
}
})()
// Ad Block
let adBlockCss
;(function() {
let ads = ['ad-left', 'ad-right', 'ad-bottom', 'ad-change-weapon']
let adsSelectors = ''
ads.forEach(e => {
let adSelector = ''
let prefixes = ['.', '#']
prefixes.forEach(r => {
adSelector += r + e + ','
})
adsSelectors += adSelector
})
adBlockCss = adsSelectors.slice(0, -1) + '{ display: none !important }'
window.show_rewarded = _
window.show_preroll = _
})()
let keybidings = [
{
// Toggle Chat Visibility
key: KEYS.CHAT_VISIBILITY_TOGGLE,
fn() {
let chat = document.querySelector('.chat')
if(chat) {
chat.style.transition = '.3s opacity'
visibility.toggle(chat)
}
}
},
// Toggle Wallhack
{
key: KEYS.WALLHACK_TOGGLE,
fn() {
wallhackEnabled = !wallhackEnabled
players.forEach(e => {
wallhack[(wallhackEnabled ? '' : 'in') + 'visible'](e)
})
notify('Wallhack', 'Wallhack is ', wallhackEnabled)
}
},
]
keybidings.forEach(e => {
window.addEventListener('keydown', r => {
let focused = document.querySelector(':focus') || document.activeElement
if(focused.matches('.chat .input')) {
return
}
if(r.code === 'Key' + e.key.toUpperCase()) {
r.preventDefault()
e.fn()
}
})
})
// Bloody Screen at low HP
;(function() {
let bloodyScreen = document.createElement('div')
bloodyScreen.className = 'bloody-screen'
visibility.invisible(bloodyScreen)
document.body.appendChild(bloodyScreen)
let obs = new MutationObserver(() => {
let progress = document.querySelector('.hp-progress')
if(progress) {
let hp = currentHealth()
if(hp < 35 && hp > 0) {
visibility.visible(bloodyScreen)
} else {
visibility.invisible(bloodyScreen)
}
}
})
obs.observe(document.body, {
subtree: true,
childList: true,
})
function currentHealth() {
return +document.querySelector('.hp-progress').style.width.slice(0, -1)
}
})()
// Wallhack (Actual)
;(function() {
Object.defineProperty(Object.prototype, 'material', {
set(value) {
this._material = value
if (this._material && this._material.name && this._material.name.indexOf('player') !== -1) {
players.push(value)
if(wallhackEnabled) {
wallhack.visible(value)
}
} else {
other.push(value)
}
},
get() {
return this._material
}
})
})()
// Actual Nerd Stuff
let styleNode = document.createElement('style')
styleNode.appendChild(document.createTextNode(css + adBlockCss))
document.querySelector('head').appendChild(styleNode)
function notify(title, body, highlight) {
let notifClass = 'notification'
let notif = document.createElement('div')
let notifTitle = document.createElement('h3')
let notifBody = document.createElement('p')
notifTitle.className = notifClass + '-title'
notifBody.className = notifClass + '-body'
notif.className = notifClass
notifTitle.textContent = title ?? 'Kirka.IO Enchanced'
notifBody.innerHTML = (body ?? '') + (`<span class="highlight-${highlight ? 'enabled' : highlight === false ? 'disabled' : ''}"></span>`)
notif.style.right = '100vw'
notif.appendChild(notifTitle)
notif.appendChild(notifBody)
document.body.appendChild(notif)
setTimeout(() => {
notif.style.right = ''
}, 300)
setTimeout(() => {
notif.style.right = '100vw'
setTimeout(() => {
notif.remove()
}, 300)
}, 1300)
}
// May be useful
function getUniqueId() {
return btoa(Math.random() * 1e3).replace(/=/g, '').toLowerCase()
}
function getWeapon(query) {
return Array.from(document.querySelectorAll('.gun-name')).find(e => e.textContent.toLowerCase() === query.toLowerCase())
}
function _() {}
})()