! God Laffer

best...

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(Tôi đã có Trình quản lý tập lệnh người dùng, hãy cài đặt nó!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         ! God Laffer
// @author       God
// @description  best...
// @version      v8.6
// @match        *://*.moomoo.io/*
// @grant        none
// @namespace https://greasyfork.org/users/1624422
// ==/UserScript==

var t = document.createElement('button');

t.setAttribute('class', 'menuButton');

var e = document.createElement('span');

e.innerText = "Cyan skin", e.style.color = '#fff', t.appendChild(e), document.getElementById('setupCard').appendChild(document.createElement('br')),
document.getElementById('setupCard').appendChild(t), t.style.backgroundColor = '#333',
t.style.border = '#333', t.addEventListener('click', function() {
    window.selectSkinColor('constructor');
});

let n = !1;

function i() {
    const t = (new Date).getHours();
    return t < 12 ? "Welcome !" : t < 18 ? "Wsp God" : "Go to sleep God";
}

window.addEventListener("load", () => {
    const t = document.querySelector("#altcha_checkbox");
    null !== t && t.click();
    const e = document.querySelector("#bottomContainer");
    null !== e && (e.style.bottom = "10px");
}), function() {
    if (!n) {
        n = !0;
        const t = Object.assign(document.createElement("div"), {
            innerHTML: `${i()}`,
            style: "\n                    position: fixed;\n                    top: -100px;\n                    left: 50%;\n                    transform: translateX(-50%);\n                    font-size: 2rem;\n                    color: white;\n                    z-index: 9999;\n                    opacity: 3;\n                    transition: top 0.5s ease-in-out, opacity 0.5s ease-in-out;\n                    padding: 10px;\n                    background-color: rgba(0, 0, 0, 0.2);\n                    border: 2px solid #0000;\n                    border-radius: 5px;\n                    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n                "
        });
        document.body.appendChild(t), setTimeout(function() {
            t.style.top = "7%", t.style.opacity = "1";
        }, 100), setTimeout(function() {
            t.style.top = "-100px", t.style.opacity = "0", setTimeout(function() {
                t && t.remove(), n = !1;
            }, 500);
        }, 3e3);
    }
}();

let r = !1;

let s = !1;

let c = !1;

let l = 0;

let u = !1;

let f = 0;

let d = 0;

let h = !1;

let m = null;

let p = 0;

let v;

let g = !1;

let b;

let k = null;

let y = 0;

new Set;

let w = new Map;

let _ = {
    tick: -1,
    withSpikes: null,
    withoutSpikes: null
};

let x;

let M = [];

let j;

let S = 0;

let A = !1;

let T = 0;

let D = 0;

hitturret1 = !1, hitturret2 = !1, hitPrim = !1;

let P = !1;

let B;

let I = 83;

let O;

let H = 0;

let E = 0;

let C = !1;

let z = !1;

let R = !1;

let U = !1;

let F = !1;

let L = !1;

let N = !1;

let q = !1;

let G = !1;

let W = !1;

let K = [];

let Y = !1;

let X = !1;

let V = !1;

let J = !1;

let Z = {
    stealAnim: !0,
    gamezoom: 100,
    x18ksync: !0,
    renderGrid: !0,
    TrapKnockback: !0,
    getSpikeMidpointTarget: !0,
    evadeKnockback: !0,
    chatlog: !1,
    preplacer: !0,
    autoPlace: !0,
    autoplace_activation_distance: 300,
    combat_acc_dist: 400,
    preplacer_activation_distance: 300,
    preplacer_mode: 'Predictive',
    preplacer_debug: !1,
    FirstAutoPlacePriority: !0,
    SecondAutoPlacePriority: !0,
    ThirdAutoPlacePriority: !0,
    FourthAutoPlacePriority: !0,
    FirstPrePlacePriority: !0,
    SecondPrePlacePriority: !0,
    ThirdPrePlacePriority: !0,
    FourthPrePlacePriority: !0,
    autoplacer_debug: !1,
    autostop_before_collision: !1,
    autostop_distance: 200,
    autostop_buffer: 150,
    visual_spike_overlay: !0,
    visual_veltick_radius: !0,
    myplayer_stats: !1,
    label_place_enabled: !0,
    label_place_color: "#ffd54d",
    label_autoplace_enabled: !0,
    label_autoplace_color: "#ffd54d",
    label_preplace_enabled: !0,
    label_preplace_color: "#4fc3ff",
    label_replace_enabled: !0,
    label_replace_color: "#ff8a80",
    label_autostop_enabled: !0,
    label_autostop_color: "#ff5252",
    label_size: 15,
    label_speed: .11,
    label_life: 300,
    killchat: !1,
    killchat_message: "ez",
    autobuy: !0,
    autoVelocityTick: !1,
    unifiedSpikeTick: !0,
    unifiedSpikeTick_breakTrap: !0,
    unifiedSpikeTick_placeSpike: !0,
    unifiedSpikeTick_retrapBreak: !0,
    unifiedSpikeTick_cooldown: 300,
    unifiedSpikeTick_adaptiveTiming: !0,
    autoInstaCounter: !0,
    smartDodge: !0,
    autoBullOnDamage: !0,
    predictiveKnockback: !0,
    smartTrapPriority: !0,
    deathMarker: !0,
    bannedAngles: !0,
    filteredCache: !0,
    spikeAvoidance: !0,
    spikeAvoidance_dist: 70,
    smartAutoBull: !0
};

Z.console_log_speed = !1, Z.label_tickbreak_enabled = !0, Z.label_tickbreak_color = "#ff4444",
void 0 === Z.chatPinned && (Z.chatPinned = !1), void 0 === Z.chatLeft && (Z.chatLeft = null),
void 0 === Z.chatTop && (Z.chatTop = null);

let Q = 0;

let tt;

let et = 0;

let nt = !1;

function it(t) {
    return `<input type="checkbox" class="menu_checkbox" id="${t}" ${Z[t] ? "checked" : ""}>`;
}

function rt(t, e) {
    return `<input type="text" class="menu_input" placeholder="NONE" id="${t}" value="${Z[t]}" maxlength="${e}">`;
}

function at(t) {
    return `<input type="color" class="menu_color" id="${t}" value="${Z[t] || '#ffffff'}">`;
}

function ot(t, e, n) {
    let i = `<select id="${t}" class="menu_select">`;
    for (let t = 0; t < e.length; t++) {
        let r = e[t];
        let a = n && n == r ? ' selected' : '';
        let o;
        o = 'number' == typeof r ? 'x' + r : 'string' == typeof r ? r.charAt(0).toUpperCase() + r.slice(1) : String(r),
        i += `<option value="${r}"${a}>${o}</option>`;
    }
    return i += "</select>", i;
}

function st() {
    for (let n in Z) {
        const i = document.getElementById(n);
        if (i) {
            'checkbox' === i.type ? Z[n] = i.checked : Z[n] = "" !== i.value ? parseFloat(i.value) || i.value : Z[n];
            try {
                if ('string' == typeof n) {
                    if (0 === n.indexOf('preplacer_')) if ('preplacer_debug' === n) Z[n]; else {
                        var t = document.getElementById('preplacer_debug');
                        t && 'checkbox' === t.type ? t.checked : Z.preplacer_debug;
                    }
                    if (0 === n.indexOf('autoplacer_') || 'autoplacer_debug' === n) if ('autoplacer_debug' === n) {
                        if (Z[n]) try {
                            [ 'spiketrick_distance', 'spiketrick_linelength', 'spiketrick_areascale', 'trap_detection_range', 'player_enemy_maxdist', 'spike_min_distance', 'max_spike_count', 'anglesvalue' ].forEach(t => {});
                        } catch (t) {}
                    } else {
                        var e = document.getElementById('autoplacer_debug');
                        e && 'checkbox' === e.type ? e.checked : Z.autoplacer_debug;
                    }
                }
            } catch (t) {}
        }
    }
    localStorage.setItem('modSettings', JSON.stringify(Z));
    try {
        r = !!Z.autoVelocityTick;
    } catch (t) {}
    gt();
}

!function(t) {
    var e = {};
    function n(i) {
        if (e[i]) return e[i].exports;
        var r = e[i] = {
            i: i,
            l: !1,
            exports: {}
        };
        return t[i].call(r.exports, r, r.exports, n), r.l = !0, r.exports;
    }
    n.m = t, n.c = e, n.d = function(t, e, i) {
        n.o(t, e) || Object.defineProperty(t, e, {
            enumerable: !0,
            get: i
        });
    }, n.r = function(t) {
        'undefined' != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, {
            value: 'Module'
        }), Object.defineProperty(t, '__esModule', {
            value: !0
        });
    }, n.t = function(t, e) {
        if (1 & e && (t = n(t)), 8 & e) return t;
        if (4 & e && 'object' == typeof t && t && t.__esModule) return t;
        var i = Object.create(null);
        if (n.r(i), Object.defineProperty(i, 'default', {
            enumerable: !0,
            value: t
        }), 2 & e && 'string' != typeof t) for (var r in t) n.d(i, r, function(e) {
            return t[e];
        }.bind(null, r));
        return i;
    }, n.n = function(t) {
        var e = t && t.__esModule ? function() {
            return t.default;
        } : function() {
            return t;
        };
        return n.d(e, 'a', e), e;
    }, n.o = function(t, e) {
        return {}.hasOwnProperty.call(t, e);
    }, n.p = "", n(n.s = "./src/js/app.js");
}({
    "./node_modules/bad-words/lib/badwords.js": function(t, e, n) {
        const i = n("./node_modules/bad-words/lib/lang.json").words;
        const r = n("./node_modules/badwords-list/lib/index.js").array;
        t.exports = class {
            constructor(t = {}) {
                Object.assign(this, {
                    list: t.emptyList && [] || [].concat.apply(i, [ r, t.list || [] ]),
                    exclude: t.exclude || [],
                    placeHolder: t.placeHolder || '*',
                    regex: t.regex || /[^a-zA-Z0-9|\$|\@]|\^/g,
                    replaceRegex: t.replaceRegex || /\w/g
                });
            }
            isProfane(t) {
                return this.list.filter(e => {
                    const n = new RegExp(`\\b${e.replace(/(\W)/g, '\\$1')}\\b`, 'gi');
                    return !this.exclude.includes(e.toLowerCase()) && n.test(t);
                }).length > 0 || !1;
            }
            replaceWord(t) {
                return t.replace(this.regex, '').replace(this.replaceRegex, this.placeHolder);
            }
            clean(t) {
                return t.split(/\b/).map(t => this.isProfane(t) ? this.replaceWord(t) : t).join('');
            }
            addWords() {
                let t = Array.from(arguments);
                this.list.push(...t), t.map(t => t.toLowerCase()).forEach(t => {
                    this.exclude.includes(t) && this.exclude.splice(this.exclude.indexOf(t), 1);
                });
            }
            removeWords() {
                this.exclude.push(...Array.from(arguments).map(t => t.toLowerCase()));
            }
        };
    },
    "./node_modules/bad-words/lib/lang.json": function(t) {
        t.exports = {
            words: [ "ahole", "anus", "ash0le", "ash0les", "asholes", "ass", "Ass Monkey", "Assface", "assh0le", "assh0lez", "asshole", "assholes", "assholz", "asswipe", "azzhole", "bassterds", "bastard", "bastards", "bastardz", "basterds", "basterdz", "Biatch", "bitch", "bitches", "Blow Job", "boffing", "butthole", "buttwipe", "c0ck", "c0cks", "c0k", "Carpet Muncher", "cawk", "cawks", "Clit", "cnts", "cntz", "cock", "cockhead", "cock-head", "cocks", "CockSucker", "cock-sucker", "crap", "cum", "cunt", "cunts", "cuntz", "dick", "dild0", "dild0s", "dildo", "dildos", "dilld0", "dilld0s", "dominatricks", "dominatrics", "dominatrix", "dyke", "enema", "f u c k", "f u c k e r", "fag", "fag1t", "faget", "fagg1t", "faggit", "faggot", "fagg0t", "fagit", "fags", "fagz", "faig", "faigs", "fart", "flipping the bird", "fuck", "fucker", "fuckin", "fucking", "fucks", "Fudge Packer", "fuk", "Fukah", "Fuken", "fuker", "Fukin", "Fukk", "Fukkah", "Fukken", "Fukker", "Fukkin", "g00k", "God-damned", "h00r", "h0ar", "h0re", "hells", "hoar", "hoor", "hoore", "jackoff", "jap", "japs", "jerk-off", "jisim", "jiss", "jizm", "jizz", "knob", "knobs", "knobz", "kunt", "kunts", "kuntz", "Lezzian", "Lipshits", "Lipshitz", "masochist", "masokist", "massterbait", "masstrbait", "masstrbate", "masterbaiter", "masterbate", "masterbates", "Motha Fucker", "Motha Fuker", "Motha Fukkah", "Motha Fukker", "Mother Fucker", "Mother Fukah", "Mother Fuker", "Mother Fukkah", "Mother Fukker", "mother-fucker", "Mutha Fucker", "Mutha Fukah", "Mutha Fuker", "Mutha Fukkah", "Mutha Fukker", "n1gr", "nastt", "nigger;", "nigur;", "niiger;", "niigr;", "orafis", "orgasim;", "orgasm", "orgasum", "oriface", "orifice", "orifiss", "packi", "packie", "packy", "paki", "pakie", "paky", "pecker", "peeenus", "peeenusss", "peenus", "peinus", "pen1s", "penas", "penis", "penis-breath", "penus", "penuus", "Phuc", "Phuck", "Phuk", "Phuker", "Phukker", "polac", "polack", "polak", "Poonani", "pr1c", "pr1ck", "pr1k", "pusse", "pussee", "pussy", "puuke", "puuker", "queer", "queers", "queerz", "qweers", "qweerz", "qweir", "recktum", "rectum", "retard", "sadist", "scank", "schlong", "screwing", "semen", "sex", "sexy", "Sh!t", "sh1t", "sh1ter", "sh1ts", "sh1tter", "sh1tz", "shit", "shits", "shitter", "Shitty", "Shity", "shitz", "Shyt", "Shyte", "Shytty", "Shyty", "skanck", "skank", "skankee", "skankey", "skanks", "Skanky", "slag", "slut", "sluts", "Slutty", "slutz", "son-of-a-bitch", "tit", "turd", "va1jina", "vag1na", "vagiina", "vagina", "vaj1na", "vajina", "vullva", "vulva", "w0p", "wh00r", "wh0re", "whore", "xrated", "xxx", "b!+ch", "bitch", "blowjob", "clit", "arschloch", "fuck", "shit", "ass", "asshole", "b!tch", "b17ch", "b1tch", "bastard", "bi+ch", "boiolas", "buceta", "c0ck", "cawk", "chink", "cipa", "clits", "cock", "cum", "cunt", "dildo", "dirsa", "ejakulate", "fatass", "fcuk", "fuk", "fux0r", "hoer", "hore", "jism", "kawk", "l3itch", "l3i+ch", "lesbian", "masturbate", "masterbat*", "masterbat3", "motherfucker", "s.o.b.", "mofo", "nazi", "nigga", "nigger", "nutsack", "phuck", "pimpis", "pusse", "pussy", "scrotum", "sh!t", "shemale", "shi+", "sh!+", "slut", "smut", "teets", "tits", "boobs", "b00bs", "teez", "testical", "testicle", "titt", "w00se", "jackoff", "wank", "whoar", "whore", "*damn", "*dyke", "*fuck*", "*shit*", "@$$", "amcik", "andskota", "arse*", "assrammer", "ayir", "bi7ch", "bitch*", "bollock*", "breasts", "butt-pirate", "cabron", "cazzo", "chraa", "chuj", "Cock*", "cunt*", "d4mn", "daygo", "dego", "dick*", "dike*", "dupa", "dziwka", "ejackulate", "Ekrem*", "Ekto", "enculer", "faen", "fag*", "fanculo", "fanny", "feces", "feg", "Felcher", "ficken", "fitt*", "Flikker", "foreskin", "Fotze", "Fu(*", "fuk*", "futkretzn", "gook", "guiena", "h0r", "h4x0r", "hell", "helvete", "hoer*", "honkey", "Huevon", "hui", "injun", "jizz", "kanker*", "kike", "klootzak", "kraut", "knulle", "kuk", "kuksuger", "Kurac", "kurwa", "kusi*", "kyrpa*", "lesbo", "mamhoon", "masturbat*", "merd*", "mibun", "monkleigh", "mouliewop", "muie", "mulkku", "muschi", "nazis", "nepesaurio", "nigger*", "orospu", "paska*", "perse", "picka", "pierdol*", "pillu*", "pimmel", "piss*", "pizda", "poontsee", "poop", "porn", "p0rn", "pr0n", "preteen", "pula", "pule", "puta", "puto", "qahbeh", "queef*", "rautenberg", "schaffer", "scheiss*", "schlampe", "schmuck", "screw", "sh!t*", "sharmuta", "sharmute", "shipal", "shiz", "skribz", "skurwysyn", "sphencter", "spic", "spierdalaj", "splooge", "suka", "b00b*", "testicle*", "titt*", "twat", "vittu", "wank*", "wetback*", "wichser", "wop*", "yed", "zabourah" ]
        };
    },
    "./node_modules/badwords-list/lib/array.js": function(t, e) {
        t.exports = [ "4r5e", "5h1t", "5hit", "a55", "anal", "anus", "ar5e", "arrse", "arse", "ass", "ass-fucker", "asses", "assfucker", "assfukka", "asshole", "assholes", "asswhole", "a_s_s", "b!tch", "b00bs", "b17ch", "b1tch", "ballbag", "balls", "ballsack", "bastard", "beastial", "beastiality", "bellend", "bestial", "bestiality", "bi+ch", "biatch", "bitch", "bitcher", "bitchers", "bitches", "bitchin", "bitching", "bloody", "blow job", "blowjob", "blowjobs", "boiolas", "bollock", "bollok", "boner", "boob", "boobs", "booobs", "boooobs", "booooobs", "booooooobs", "breasts", "buceta", "bugger", "bum", "bunny fucker", "butt", "butthole", "buttmuch", "buttplug", "c0ck", "c0cksucker", "carpet muncher", "cawk", "chink", "cipa", "cl1t", "clit", "clitoris", "clits", "cnut", "cock", "cock-sucker", "cockface", "cockhead", "cockmunch", "cockmuncher", "cocks", "cocksuck", "cocksucked", "cocksucker", "cocksucking", "cocksucks", "cocksuka", "cocksukka", "cok", "cokmuncher", "coksucka", "coon", "cox", "crap", "cum", "cummer", "cumming", "cums", "cumshot", "cunilingus", "cunillingus", "cunnilingus", "cunt", "cuntlick", "cuntlicker", "cuntlicking", "cunts", "cyalis", "cyberfuc", "cyberfuck", "cyberfucked", "cyberfucker", "cyberfuckers", "cyberfucking", "d1ck", "damn", "dick", "dickhead", "dildo", "dildos", "dink", "dinks", "dirsa", "dlck", "dog-fucker", "doggin", "dogging", "donkeyribber", "doosh", "duche", "dyke", "ejaculate", "ejaculated", "ejaculates", "ejaculating", "ejaculatings", "ejaculation", "ejakulate", "f u c k", "f u c k e r", "f4nny", "fag", "fagging", "faggitt", "faggot", "faggs", "fagot", "fagots", "fags", "fanny", "fannyflaps", "fannyfucker", "fanyy", "fatass", "fcuk", "fcuker", "fcuking", "feck", "fecker", "felching", "fellate", "fellatio", "fingerfuck", "fingerfucked", "fingerfucker", "fingerfuckers", "fingerfucking", "fingerfucks", "fistfuck", "fistfucked", "fistfucker", "fistfuckers", "fistfucking", "fistfuckings", "fistfucks", "flange", "fook", "fooker", "fuck", "fucka", "fucked", "fucker", "fuckers", "fuckhead", "fuckheads", "fuckin", "fucking", "fuckings", "fuckingshitmotherfucker", "fuckme", "fucks", "fuckwhit", "fuckwit", "fudge packer", "fudgepacker", "fuk", "fuker", "fukker", "fukkin", "fuks", "fukwhit", "fukwit", "fux", "fux0r", "f_u_c_k", "gangbang", "gangbanged", "gangbangs", "gaylord", "gaysex", "goatse", "God", "god-dam", "god-damned", "goddamn", "goddamned", "hardcoresex", "hell", "heshe", "hoar", "hoare", "hoer", "homo", "hore", "horniest", "horny", "hotsex", "jack-off", "jackoff", "jap", "jerk-off", "jism", "jiz", "jizm", "jizz", "kawk", "knob", "knobead", "knobed", "knobend", "knobhead", "knobjocky", "knobjokey", "kock", "kondum", "kondums", "kum", "kummer", "kumming", "kums", "kunilingus", "l3i+ch", "l3itch", "labia", "lust", "lusting", "m0f0", "m0fo", "m45terbate", "ma5terb8", "ma5terbate", "masochist", "master-bate", "masterb8", "masterbat*", "masterbat3", "masterbate", "masterbation", "masterbations", "masturbate", "mo-fo", "mof0", "mofo", "mothafuck", "mothafucka", "mothafuckas", "mothafuckaz", "mothafucked", "mothafucker", "mothafuckers", "mothafuckin", "mothafucking", "mothafuckings", "mothafucks", "mother fucker", "motherfuck", "motherfucked", "motherfucker", "motherfuckers", "motherfuckin", "motherfucking", "motherfuckings", "motherfuckka", "motherfucks", "muff", "mutha", "muthafecker", "muthafuckker", "muther", "mutherfucker", "n1gga", "n1gger", "nazi", "nigg3r", "nigg4h", "nigga", "niggah", "niggas", "niggaz", "nigger", "niggers", "nob", "nob jokey", "nobhead", "nobjocky", "nobjokey", "numbnuts", "nutsack", "orgasim", "orgasims", "orgasm", "orgasms", "p0rn", "pawn", "pecker", "penis", "penisfucker", "phonesex", "phuck", "phuk", "phuked", "phuking", "phukked", "phukking", "phuks", "phuq", "pigfucker", "pimpis", "piss", "pissed", "pisser", "pissers", "pisses", "pissflaps", "pissin", "pissing", "pissoff", "poop", "porn", "porno", "pornography", "pornos", "prick", "pricks", "pron", "pube", "pusse", "pussi", "pussies", "pussy", "pussys", "rectum", "retard", "rimjaw", "rimming", "s hit", "s.o.b.", "sadist", "schlong", "screwing", "scroat", "scrote", "scrotum", "semen", "sex", "sh!+", "sh!t", "sh1t", "shag", "shagger", "shaggin", "shagging", "shemale", "shi+", "shit", "shitdick", "shite", "shited", "shitey", "shitfuck", "shitfull", "shithead", "shiting", "shitings", "shits", "shitted", "shitter", "shitters", "shitting", "shittings", "shitty", "skank", "slut", "sluts", "smegma", "smut", "snatch", "son-of-a-bitch", "spac", "spunk", "s_h_i_t", "t1tt1e5", "t1tties", "teets", "teez", "testical", "testicle", "tit", "titfuck", "tits", "titt", "tittie5", "tittiefucker", "titties", "tittyfuck", "tittywank", "titwank", "tosser", "turd", "tw4t", "twat", "twathead", "twatty", "twunt", "twunter", "v14gra", "v1gra", "vagina", "viagra", "vulva", "w00se", "wang", "wank", "wanker", "wanky", "whoar", "whore", "willies", "willy", "xrated", "xxx" ];
    },
    "./node_modules/badwords-list/lib/index.js": function(t, e, n) {
        t.exports = {
            object: n("./node_modules/badwords-list/lib/object.js"),
            array: n("./node_modules/badwords-list/lib/array.js"),
            regex: n("./node_modules/badwords-list/lib/regexp.js")
        };
    },
    "./node_modules/badwords-list/lib/object.js": function(t, e) {
        t.exports = {
            "4r5e": 1,
            "5h1t": 1,
            "5hit": 1,
            a55: 1,
            anal: 1,
            anus: 1,
            ar5e: 1,
            arrse: 1,
            arse: 1,
            ass: 1,
            "ass-fucker": 1,
            asses: 1,
            assfucker: 1,
            assfukka: 1,
            asshole: 1,
            assholes: 1,
            asswhole: 1,
            a_s_s: 1,
            "b!tch": 1,
            b00bs: 1,
            b17ch: 1,
            b1tch: 1,
            ballbag: 1,
            balls: 1,
            ballsack: 1,
            bastard: 1,
            beastial: 1,
            beastiality: 1,
            bellend: 1,
            bestial: 1,
            bestiality: 1,
            "bi+ch": 1,
            biatch: 1,
            bitch: 1,
            bitcher: 1,
            bitchers: 1,
            bitches: 1,
            bitchin: 1,
            bitching: 1,
            bloody: 1,
            "blow job": 1,
            blowjob: 1,
            blowjobs: 1,
            boiolas: 1,
            bollock: 1,
            bollok: 1,
            boner: 1,
            boob: 1,
            boobs: 1,
            booobs: 1,
            boooobs: 1,
            booooobs: 1,
            booooooobs: 1,
            breasts: 1,
            buceta: 1,
            bugger: 1,
            bum: 1,
            "bunny fucker": 1,
            butt: 1,
            butthole: 1,
            buttmuch: 1,
            buttplug: 1,
            c0ck: 1,
            c0cksucker: 1,
            "carpet muncher": 1,
            cawk: 1,
            chink: 1,
            cipa: 1,
            cl1t: 1,
            clit: 1,
            clitoris: 1,
            clits: 1,
            cnut: 1,
            cock: 1,
            "cock-sucker": 1,
            cockface: 1,
            cockhead: 1,
            cockmunch: 1,
            cockmuncher: 1,
            cocks: 1,
            cocksuck: 1,
            cocksucked: 1,
            cocksucker: 1,
            cocksucking: 1,
            cocksucks: 1,
            cocksuka: 1,
            cocksukka: 1,
            cok: 1,
            cokmuncher: 1,
            coksucka: 1,
            coon: 1,
            cox: 1,
            crap: 1,
            cum: 1,
            cummer: 1,
            cumming: 1,
            cums: 1,
            cumshot: 1,
            cunilingus: 1,
            cunillingus: 1,
            cunnilingus: 1,
            cunt: 1,
            cuntlick: 1,
            cuntlicker: 1,
            cuntlicking: 1,
            cunts: 1,
            cyalis: 1,
            cyberfuc: 1,
            cyberfuck: 1,
            cyberfucked: 1,
            cyberfucker: 1,
            cyberfuckers: 1,
            cyberfucking: 1,
            d1ck: 1,
            damn: 1,
            dick: 1,
            dickhead: 1,
            dildo: 1,
            dildos: 1,
            dink: 1,
            dinks: 1,
            dirsa: 1,
            dlck: 1,
            "dog-fucker": 1,
            doggin: 1,
            dogging: 1,
            donkeyribber: 1,
            doosh: 1,
            duche: 1,
            dyke: 1,
            ejaculate: 1,
            ejaculated: 1,
            ejaculates: 1,
            ejaculating: 1,
            ejaculatings: 1,
            ejaculation: 1,
            ejakulate: 1,
            "f u c k": 1,
            "f u c k e r": 1,
            f4nny: 1,
            fag: 1,
            fagging: 1,
            faggitt: 1,
            faggot: 1,
            faggs: 1,
            fagot: 1,
            fagots: 1,
            fags: 1,
            fanny: 1,
            fannyflaps: 1,
            fannyfucker: 1,
            fanyy: 1,
            fatass: 1,
            fcuk: 1,
            fcuker: 1,
            fcuking: 1,
            feck: 1,
            fecker: 1,
            felching: 1,
            fellate: 1,
            fellatio: 1,
            fingerfuck: 1,
            fingerfucked: 1,
            fingerfucker: 1,
            fingerfuckers: 1,
            fingerfucking: 1,
            fingerfucks: 1,
            fistfuck: 1,
            fistfucked: 1,
            fistfucker: 1,
            fistfuckers: 1,
            fistfucking: 1,
            fistfuckings: 1,
            fistfucks: 1,
            flange: 1,
            fook: 1,
            fooker: 1,
            fuck: 1,
            fucka: 1,
            fucked: 1,
            fucker: 1,
            fuckers: 1,
            fuckhead: 1,
            fuckheads: 1,
            fuckin: 1,
            fucking: 1,
            fuckings: 1,
            fuckingshitmotherfucker: 1,
            fuckme: 1,
            fucks: 1,
            fuckwhit: 1,
            fuckwit: 1,
            "fudge packer": 1,
            fudgepacker: 1,
            fuk: 1,
            fuker: 1,
            fukker: 1,
            fukkin: 1,
            fuks: 1,
            fukwhit: 1,
            fukwit: 1,
            fux: 1,
            fux0r: 1,
            f_u_c_k: 1,
            gangbang: 1,
            gangbanged: 1,
            gangbangs: 1,
            gaylord: 1,
            gaysex: 1,
            goatse: 1,
            God: 1,
            "god-dam": 1,
            "god-damned": 1,
            goddamn: 1,
            goddamned: 1,
            hardcoresex: 1,
            hell: 1,
            heshe: 1,
            hoar: 1,
            hoare: 1,
            hoer: 1,
            homo: 1,
            hore: 1,
            horniest: 1,
            horny: 1,
            hotsex: 1,
            "jack-off": 1,
            jackoff: 1,
            jap: 1,
            "jerk-off": 1,
            jism: 1,
            jiz: 1,
            jizm: 1,
            jizz: 1,
            kawk: 1,
            knob: 1,
            knobead: 1,
            knobed: 1,
            knobend: 1,
            knobhead: 1,
            knobjocky: 1,
            knobjokey: 1,
            kock: 1,
            kondum: 1,
            kondums: 1,
            kum: 1,
            kummer: 1,
            kumming: 1,
            kums: 1,
            kunilingus: 1,
            "l3i+ch": 1,
            l3itch: 1,
            labia: 1,
            lust: 1,
            lusting: 1,
            m0f0: 1,
            m0fo: 1,
            m45terbate: 1,
            ma5terb8: 1,
            ma5terbate: 1,
            masochist: 1,
            "master-bate": 1,
            masterb8: 1,
            "masterbat*": 1,
            masterbat3: 1,
            masterbate: 1,
            masterbation: 1,
            masterbations: 1,
            masturbate: 1,
            "mo-fo": 1,
            mof0: 1,
            mofo: 1,
            mothafuck: 1,
            mothafucka: 1,
            mothafuckas: 1,
            mothafuckaz: 1,
            mothafucked: 1,
            mothafucker: 1,
            mothafuckers: 1,
            mothafuckin: 1,
            mothafucking: 1,
            mothafuckings: 1,
            mothafucks: 1,
            "mother fucker": 1,
            motherfuck: 1,
            motherfucked: 1,
            motherfucker: 1,
            motherfuckers: 1,
            motherfuckin: 1,
            motherfucking: 1,
            motherfuckings: 1,
            motherfuckka: 1,
            motherfucks: 1,
            muff: 1,
            mutha: 1,
            muthafecker: 1,
            muthafuckker: 1,
            muther: 1,
            mutherfucker: 1,
            n1gga: 1,
            n1gger: 1,
            nazi: 1,
            nigg3r: 1,
            nigg4h: 1,
            nigga: 1,
            niggah: 1,
            niggas: 1,
            niggaz: 1,
            nigger: 1,
            niggers: 1,
            nob: 1,
            "nob jokey": 1,
            nobhead: 1,
            nobjocky: 1,
            nobjokey: 1,
            numbnuts: 1,
            nutsack: 1,
            orgasim: 1,
            orgasims: 1,
            orgasm: 1,
            orgasms: 1,
            p0rn: 1,
            pawn: 1,
            pecker: 1,
            penis: 1,
            penisfucker: 1,
            phonesex: 1,
            phuck: 1,
            phuk: 1,
            phuked: 1,
            phuking: 1,
            phukked: 1,
            phukking: 1,
            phuks: 1,
            phuq: 1,
            pigfucker: 1,
            pimpis: 1,
            piss: 1,
            pissed: 1,
            pisser: 1,
            pissers: 1,
            pisses: 1,
            pissflaps: 1,
            pissin: 1,
            pissing: 1,
            pissoff: 1,
            poop: 1,
            porn: 1,
            porno: 1,
            pornography: 1,
            pornos: 1,
            prick: 1,
            pricks: 1,
            pron: 1,
            pube: 1,
            pusse: 1,
            pussi: 1,
            pussies: 1,
            pussy: 1,
            pussys: 1,
            rectum: 1,
            retard: 1,
            rimjaw: 1,
            rimming: 1,
            "s hit": 1,
            "s.o.b.": 1,
            sadist: 1,
            schlong: 1,
            screwing: 1,
            scroat: 1,
            scrote: 1,
            scrotum: 1,
            semen: 1,
            sex: 1,
            "sh!+": 1,
            "sh!t": 1,
            sh1t: 1,
            shag: 1,
            shagger: 1,
            shaggin: 1,
            shagging: 1,
            shemale: 1,
            "shi+": 1,
            shit: 1,
            shitdick: 1,
            shite: 1,
            shited: 1,
            shitey: 1,
            shitfuck: 1,
            shitfull: 1,
            shithead: 1,
            shiting: 1,
            shitings: 1,
            shits: 1,
            shitted: 1,
            shitter: 1,
            shitters: 1,
            shitting: 1,
            shittings: 1,
            shitty: 1,
            skank: 1,
            slut: 1,
            sluts: 1,
            smegma: 1,
            smut: 1,
            snatch: 1,
            "son-of-a-bitch": 1,
            spac: 1,
            spunk: 1,
            s_h_i_t: 1,
            t1tt1e5: 1,
            t1tties: 1,
            teets: 1,
            teez: 1,
            testical: 1,
            testicle: 1,
            tit: 1,
            titfuck: 1,
            tits: 1,
            titt: 1,
            tittie5: 1,
            tittiefucker: 1,
            titties: 1,
            tittyfuck: 1,
            tittywank: 1,
            titwank: 1,
            tosser: 1,
            turd: 1,
            tw4t: 1,
            twat: 1,
            twathead: 1,
            twatty: 1,
            twunt: 1,
            twunter: 1,
            v14gra: 1,
            v1gra: 1,
            vagina: 1,
            viagra: 1,
            vulva: 1,
            w00se: 1,
            wang: 1,
            wank: 1,
            wanker: 1,
            wanky: 1,
            whoar: 1,
            whore: 1,
            willies: 1,
            willy: 1,
            xrated: 1,
            xxx: 1
        };
    },
    "./node_modules/badwords-list/lib/regexp.js": function(t, e) {
        t.exports = /\b(4r5e|5h1t|5hit|a55|anal|anus|ar5e|arrse|arse|ass|ass-fucker|asses|assfucker|assfukka|asshole|assholes|asswhole|a_s_s|b!tch|b00bs|b17ch|b1tch|ballbag|balls|ballsack|bastard|beastial|beastiality|bellend|bestial|bestiality|bi\+ch|biatch|bitch|bitcher|bitchers|bitches|bitchin|bitching|bloody|blow job|blowjob|blowjobs|boiolas|bollock|bollok|boner|boob|boobs|booobs|boooobs|booooobs|booooooobs|breasts|buceta|bugger|bum|bunny fucker|butt|butthole|buttmuch|buttplug|c0ck|c0cksucker|carpet muncher|cawk|chink|cipa|cl1t|clit|clitoris|clits|cnut|cock|cock-sucker|cockface|cockhead|cockmunch|cockmuncher|cocks|cocksuck|cocksucked|cocksucker|cocksucking|cocksucks|cocksuka|cocksukka|cok|cokmuncher|coksucka|coon|cox|crap|cum|cummer|cumming|cums|cumshot|cunilingus|cunillingus|cunnilingus|cunt|cuntlick|cuntlicker|cuntlicking|cunts|cyalis|cyberfuc|cyberfuck|cyberfucked|cyberfucker|cyberfuckers|cyberfucking|d1ck|damn|dick|dickhead|dildo|dildos|dink|dinks|dirsa|dlck|dog-fucker|doggin|dogging|donkeyribber|doosh|duche|dyke|ejaculate|ejaculated|ejaculates|ejaculating|ejaculatings|ejaculation|ejakulate|f u c k|f u c k e r|f4nny|fag|fagging|faggitt|faggot|faggs|fagot|fagots|fags|fanny|fannyflaps|fannyfucker|fanyy|fatass|fcuk|fcuker|fcuking|feck|fecker|felching|fellate|fellatio|fingerfuck|fingerfucked|fingerfucker|fingerfuckers|fingerfucking|fingerfucks|fistfuck|fistfucked|fistfucker|fistfuckers|fistfucking|fistfuckings|fistfucks|flange|fook|fooker|fuck|fucka|fucked|fucker|fuckers|fuckhead|fuckheads|fuckin|fucking|fuckings|fuckingshitmotherfucker|fuckme|fucks|fuckwhit|fuckwit|fudge packer|fudgepacker|fuk|fuker|fukker|fukkin|fuks|fukwhit|fukwit|fux|fux0r|f_u_c_k|gangbang|gangbanged|gangbangs|gaylord|gaysex|goatse|God|god-dam|god-damned|goddamn|goddamned|hardcoresex|hell|heshe|hoar|hoare|hoer|homo|hore|horniest|horny|hotsex|jack-off|jackoff|jap|jerk-off|jism|jiz|jizm|jizz|kawk|knob|knobead|knobed|knobend|knobhead|knobjocky|knobjokey|kock|kondum|kondums|kum|kummer|kumming|kums|kunilingus|l3i\+ch|l3itch|labia|lust|lusting|m0f0|m0fo|m45terbate|ma5terb8|ma5terbate|masochist|master-bate|masterb8|masterbat*|masterbat3|masterbate|masterbation|masterbations|masturbate|mo-fo|mof0|mofo|mothafuck|mothafucka|mothafuckas|mothafuckaz|mothafucked|mothafucker|mothafuckers|mothafuckin|mothafucking|mothafuckings|mothafucks|mother fucker|motherfuck|motherfucked|motherfucker|motherfuckers|motherfuckin|motherfucking|motherfuckings|motherfuckka|motherfucks|muff|mutha|muthafecker|muthafuckker|muther|mutherfucker|n1gga|n1gger|nazi|nigg3r|nigg4h|nigga|niggah|niggas|niggaz|nigger|niggers|nob|nob jokey|nobhead|nobjocky|nobjokey|numbnuts|nutsack|orgasim|orgasims|orgasm|orgasms|p0rn|pawn|pecker|penis|penisfucker|phonesex|phuck|phuk|phuked|phuking|phukked|phukking|phuks|phuq|pigfucker|pimpis|piss|pissed|pisser|pissers|pisses|pissflaps|pissin|pissing|pissoff|poop|porn|porno|pornography|pornos|prick|pricks|pron|pube|pusse|pussi|pussies|pussy|pussys|rectum|retard|rimjaw|rimming|s hit|s.o.b.|sadist|schlong|screwing|scroat|scrote|scrotum|semen|sex|sh!\+|sh!t|sh1t|shag|shagger|shaggin|shagging|shemale|shi\+|shit|shitdick|shite|shited|shitey|shitfuck|shitfull|shithead|shiting|shitings|shits|shitted|shitter|shitters|shitting|shittings|shitty|skank|slut|sluts|smegma|smut|snatch|son-of-a-bitch|spac|spunk|s_h_i_t|t1tt1e5|t1tties|teets|teez|testical|testicle|tit|titfuck|tits|titt|tittie5|tittiefucker|titties|tittyfuck|tittywank|titwank|tosser|turd|tw4t|twat|twathead|twatty|twunt|twunter|v14gra|v1gra|vagina|viagra|vulva|w00se|wang|wank|wanker|wanky|whoar|whore|willies|willy|xrated|xxx)\b/gi;
    },
    "./node_modules/base64-js/index.js": function(t, e, n) {
        "use strict";
        e.byteLength = function(t) {
            var e = c(t);
            var n = e[0];
            var i = e[1];
            return 3 * (n + i) / 4 - i;
        }, e.toByteArray = function(t) {
            var e;
            var n = c(t);
            var i = n[0];
            var o = n[1];
            var s = new a(function(t, e, n) {
                return 3 * (e + n) / 4 - n;
            }(0, i, o));
            var l = 0;
            var u = o > 0 ? i - 4 : i;
            var f;
            for (f = 0; f < u; f += 4) e = r[t.charCodeAt(f)] << 18 | r[t.charCodeAt(f + 1)] << 12 | r[t.charCodeAt(f + 2)] << 6 | r[t.charCodeAt(f + 3)],
            s[l++] = e >> 16 & 255, s[l++] = e >> 8 & 255, s[l++] = 255 & e;
            2 === o && (e = r[t.charCodeAt(f)] << 2 | r[t.charCodeAt(f + 1)] >> 4, s[l++] = 255 & e);
            1 === o && (e = r[t.charCodeAt(f)] << 10 | r[t.charCodeAt(f + 1)] << 4 | r[t.charCodeAt(f + 2)] >> 2,
            s[l++] = e >> 8 & 255, s[l++] = 255 & e);
            return s;
        }, e.fromByteArray = function(t) {
            var e;
            var n = t.length;
            var r = n % 3;
            var a = [];
            var o = 16383;
            for (var s = 0, c = n - r; s < c; s += o) a.push(u(t, s, s + o > c ? c : s + o));
            1 === r ? (e = t[n - 1], a.push(i[e >> 2] + i[e << 4 & 63] + '==')) : 2 === r && (e = (t[n - 2] << 8) + t[n - 1],
            a.push(i[e >> 10] + i[e >> 4 & 63] + i[e << 2 & 63] + '='));
            return a.join('');
        };
        var i = [];
        var r = [];
        var a = 'undefined' != typeof Uint8Array ? Uint8Array : Array;
        var o = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
        for (var s = 0; s < 64; ++s) i[s] = o[s], r[o.charCodeAt(s)] = s;
        function c(t) {
            var e = t.length;
            if (e % 4 > 0) throw new Error('Invalid string. Length must be a multiple of 4');
            var n = t.indexOf('=');
            return -1 === n && (n = e), [ n, n === e ? 0 : 4 - n % 4 ];
        }
        function l(t) {
            return i[t >> 18 & 63] + i[t >> 12 & 63] + i[t >> 6 & 63] + i[63 & t];
        }
        function u(t, e, n) {
            var i;
            var r = [];
            for (var a = e; a < n; a += 3) i = (t[a] << 16 & 16711680) + (t[a + 1] << 8 & 65280) + (255 & t[a + 2]),
            r.push(l(i));
            return r.join('');
        }
        r['-'.charCodeAt(0)] = 62, r['_'.charCodeAt(0)] = 63;
    },
    "./node_modules/buffer/index.js": function(t, e, n) {
        "use strict";
        (function(t) {
            var i = n("./node_modules/base64-js/index.js");
            var r = n("./node_modules/ieee754/index.js");
            var a = n("./node_modules/buffer/node_modules/isarray/index.js");
            function o() {
                return c.TYPED_ARRAY_SUPPORT ? 2147483647 : 1073741823;
            }
            function s(t, e) {
                if (o() < e) throw new RangeError('Invalid typed array length');
                return c.TYPED_ARRAY_SUPPORT ? (t = new Uint8Array(e)).__proto__ = c.prototype : (null === t && (t = new c(e)),
                t.length = e), t;
            }
            function c(t, e, n) {
                if (!(c.TYPED_ARRAY_SUPPORT || this instanceof c)) return new c(t, e, n);
                if ('number' == typeof t) {
                    if ('string' == typeof e) throw new Error('If encoding is specified then the first argument must be a string');
                    return f(this, t);
                }
                return l(this, t, e, n);
            }
            function l(t, e, n, i) {
                if ('number' == typeof e) throw new TypeError('"value" argument must not be a number');
                return 'undefined' != typeof ArrayBuffer && e instanceof ArrayBuffer ? function(t, e, n, i) {
                    if (e.byteLength, n < 0 || e.byteLength < n) throw new RangeError('\'offset\' is out of bounds');
                    if (e.byteLength < n + (i || 0)) throw new RangeError('\'length\' is out of bounds');
                    e = void 0 === n && void 0 === i ? new Uint8Array(e) : void 0 === i ? new Uint8Array(e, n) : new Uint8Array(e, n, i);
                    c.TYPED_ARRAY_SUPPORT ? (t = e).__proto__ = c.prototype : t = d(t, e);
                    return t;
                }(t, e, n, i) : 'string' == typeof e ? function(t, e, n) {
                    'string' == typeof n && '' !== n || (n = 'utf8');
                    if (!c.isEncoding(n)) throw new TypeError('"encoding" must be a valid string encoding');
                    var i = 0 | m(e, n);
                    t = s(t, i);
                    var r = t.write(e, n);
                    r !== i && (t = t.slice(0, r));
                    return t;
                }(t, e, n) : function(t, e) {
                    if (c.isBuffer(e)) {
                        var n = 0 | h(e.length);
                        return 0 === (t = s(t, n)).length || e.copy(t, 0, 0, n), t;
                    }
                    if (e) {
                        if ('undefined' != typeof ArrayBuffer && e.buffer instanceof ArrayBuffer || 'length' in e) return 'number' != typeof e.length || (i = e.length) != i ? s(t, 0) : d(t, e);
                        if ('Buffer' === e.type && a(e.data)) return d(t, e.data);
                    }
                    var i;
                    throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.');
                }(t, e);
            }
            function u(t) {
                if ('number' != typeof t) throw new TypeError('"size" argument must be a number');
                if (t < 0) throw new RangeError('"size" argument must not be negative');
            }
            function f(t, e) {
                if (u(e), t = s(t, e < 0 ? 0 : 0 | h(e)), !c.TYPED_ARRAY_SUPPORT) for (var n = 0; n < e; ++n) t[n] = 0;
                return t;
            }
            function d(t, e) {
                var n = e.length < 0 ? 0 : 0 | h(e.length);
                t = s(t, n);
                for (var i = 0; i < n; i += 1) t[i] = 255 & e[i];
                return t;
            }
            function h(t) {
                if (t >= o()) throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x" + o().toString(16) + ' bytes');
                return 0 | t;
            }
            function m(t, e) {
                if (c.isBuffer(t)) return t.length;
                if ('undefined' != typeof ArrayBuffer && 'function' == typeof ArrayBuffer.isView && (ArrayBuffer.isView(t) || t instanceof ArrayBuffer)) return t.byteLength;
                'string' != typeof t && (t = '' + t);
                var n = t.length;
                if (0 === n) return 0;
                var i = !1;
                for (;;) switch (e) {
                  case 'ascii':
                  case 'latin1':
                  case 'binary':
                    return n;

                  case 'utf8':
                  case 'utf-8':
                  case void 0:
                    return F(t).length;

                  case 'ucs2':
                  case 'ucs-2':
                  case 'utf16le':
                  case 'utf-16le':
                    return 2 * n;

                  case 'hex':
                    return n >>> 1;

                  case 'base64':
                    return L(t).length;

                  default:
                    if (i) return F(t).length;
                    e = ('' + e).toLowerCase(), i = !0;
                }
            }
            function p(t, e, n) {
                var i = !1;
                if ((void 0 === e || e < 0) && (e = 0), e > this.length) return '';
                if ((void 0 === n || n > this.length) && (n = this.length), n <= 0) return '';
                if ((n >>>= 0) <= (e >>>= 0)) return '';
                for (t || (t = 'utf8'); ;) switch (t) {
                  case 'hex':
                    return P(this, e, n);

                  case 'utf8':
                  case 'utf-8':
                    return S(this, e, n);

                  case 'ascii':
                    return T(this, e, n);

                  case 'latin1':
                  case 'binary':
                    return D(this, e, n);

                  case 'base64':
                    return j(this, e, n);

                  case 'ucs2':
                  case 'ucs-2':
                  case 'utf16le':
                  case 'utf-16le':
                    return B(this, e, n);

                  default:
                    if (i) throw new TypeError('Unknown encoding: ' + t);
                    t = (t + '').toLowerCase(), i = !0;
                }
            }
            function v(t, e, n) {
                var i = t[e];
                t[e] = t[n], t[n] = i;
            }
            function g(t, e, n, i, r) {
                if (0 === t.length) return -1;
                if ('string' == typeof n ? (i = n, n = 0) : n > 2147483647 ? n = 2147483647 : n < -2147483648 && (n = -2147483648),
                n = +n, isNaN(n) && (n = r ? 0 : t.length - 1), n < 0 && (n = t.length + n), n >= t.length) {
                    if (r) return -1;
                    n = t.length - 1;
                } else if (n < 0) {
                    if (!r) return -1;
                    n = 0;
                }
                if ('string' == typeof e && (e = c.from(e, i)), c.isBuffer(e)) return 0 === e.length ? -1 : b(t, e, n, i, r);
                if ('number' == typeof e) return e &= 255, c.TYPED_ARRAY_SUPPORT && 'function' == typeof Uint8Array.prototype.indexOf ? r ? Uint8Array.prototype.indexOf.call(t, e, n) : Uint8Array.prototype.lastIndexOf.call(t, e, n) : b(t, [ e ], n, i, r);
                throw new TypeError('val must be string, number or Buffer');
            }
            function b(t, e, n, i, r) {
                var a = 1;
                var o = t.length;
                var s = e.length;
                if (void 0 !== i && ('ucs2' === (i = String(i).toLowerCase()) || 'ucs-2' === i || 'utf16le' === i || 'utf-16le' === i)) {
                    if (t.length < 2 || e.length < 2) return -1;
                    a = 2, o /= 2, s /= 2, n /= 2;
                }
                function c(t, e) {
                    return 1 === a ? t[e] : t.readUInt16BE(e * a);
                }
                var l;
                if (r) {
                    var u = -1;
                    for (l = n; l < o; l++) if (c(t, l) === c(e, -1 === u ? 0 : l - u)) {
                        if (-1 === u && (u = l), l - u + 1 === s) return u * a;
                    } else -1 !== u && (l -= l - u), u = -1;
                } else for (n + s > o && (n = o - s), l = n; l >= 0; l--) {
                    var f = !0;
                    for (var d = 0; d < s; d++) if (c(t, l + d) !== c(e, d)) {
                        f = !1;
                        break;
                    }
                    if (f) return l;
                }
                return -1;
            }
            function k(t, e, n, i) {
                n = Number(n) || 0;
                var r = t.length - n;
                i ? (i = Number(i)) > r && (i = r) : i = r;
                var a = e.length;
                if (a % 2 != 0) throw new TypeError('Invalid hex string');
                i > a / 2 && (i = a / 2);
                for (var o = 0; o < i; ++o) {
                    var s = parseInt(e.substr(2 * o, 2), 16);
                    if (isNaN(s)) return o;
                    t[n + o] = s;
                }
                return o;
            }
            function y(t, e, n, i) {
                return N(F(e, t.length - n), t, n, i);
            }
            function w(t, e, n, i) {
                return N(function(t) {
                    var e = [];
                    for (var n = 0; n < t.length; ++n) e.push(255 & t.charCodeAt(n));
                    return e;
                }(e), t, n, i);
            }
            function _(t, e, n, i) {
                return w(t, e, n, i);
            }
            function x(t, e, n, i) {
                return N(L(e), t, n, i);
            }
            function M(t, e, n, i) {
                return N(function(t, e) {
                    var n, i, r;
                    var a = [];
                    for (var o = 0; o < t.length && !((e -= 2) < 0); ++o) i = (n = t.charCodeAt(o)) >> 8,
                    r = n % 256, a.push(r), a.push(i);
                    return a;
                }(e, t.length - n), t, n, i);
            }
            function j(t, e, n) {
                return 0 === e && n === t.length ? i.fromByteArray(t) : i.fromByteArray(t.slice(e, n));
            }
            function S(t, e, n) {
                n = Math.min(t.length, n);
                var i = [];
                var r = e;
                for (;r < n; ) {
                    var a = t[r];
                    var o = null;
                    var s = a > 239 ? 4 : a > 223 ? 3 : a > 191 ? 2 : 1;
                    var c, l, u, f;
                    if (r + s <= n) switch (s) {
                      case 1:
                        a < 128 && (o = a);
                        break;

                      case 2:
                        128 == (192 & (c = t[r + 1])) && (f = (31 & a) << 6 | 63 & c) > 127 && (o = f);
                        break;

                      case 3:
                        c = t[r + 1], l = t[r + 2], 128 == (192 & c) && 128 == (192 & l) && (f = (15 & a) << 12 | (63 & c) << 6 | 63 & l) > 2047 && (f < 55296 || f > 57343) && (o = f);
                        break;

                      case 4:
                        c = t[r + 1], l = t[r + 2], u = t[r + 3], 128 == (192 & c) && 128 == (192 & l) && 128 == (192 & u) && (f = (15 & a) << 18 | (63 & c) << 12 | (63 & l) << 6 | 63 & u) > 65535 && f < 1114112 && (o = f);
                    }
                    null === o ? (o = 65533, s = 1) : o > 65535 && (o -= 65536, i.push(o >>> 10 & 1023 | 55296),
                    o = 56320 | 1023 & o), i.push(o), r += s;
                }
                return function(t) {
                    var e = t.length;
                    if (e <= A) return String.fromCharCode.apply(String, t);
                    var n = '';
                    var i = 0;
                    for (;i < e; ) n += String.fromCharCode.apply(String, t.slice(i, i += A));
                    return n;
                }(i);
            }
            e.Buffer = c, e.SlowBuffer = function(t) {
                +t != t && (t = 0);
                return c.alloc(+t);
            }, e.INSPECT_MAX_BYTES = 50, c.TYPED_ARRAY_SUPPORT = void 0 !== t.TYPED_ARRAY_SUPPORT ? t.TYPED_ARRAY_SUPPORT : function() {
                try {
                    var t = new Uint8Array(1);
                    return t.__proto__ = {
                        __proto__: Uint8Array.prototype,
                        foo: function() {
                            return 42;
                        }
                    }, 42 === t.foo() && 'function' == typeof t.subarray && 0 === t.subarray(1, 1).byteLength;
                } catch (t) {
                    return !1;
                }
            }(), e.kMaxLength = o(), c.poolSize = 8192, c.u = function(t) {
                return t.__proto__ = c.prototype, t;
            }, c.from = function(t, e, n) {
                return l(null, t, e, n);
            }, c.TYPED_ARRAY_SUPPORT && (c.prototype.__proto__ = Uint8Array.prototype, c.__proto__ = Uint8Array,
            'undefined' != typeof Symbol && Symbol.species && c[Symbol.species] === c && Object.defineProperty(c, Symbol.species, {
                value: null,
                configurable: !0
            })), c.alloc = function(t, e, n) {
                return function(t, e, n, i) {
                    return u(e), e <= 0 ? s(t, e) : void 0 !== n ? 'string' == typeof i ? s(t, e).fill(n, i) : s(t, e).fill(n) : s(t, e);
                }(null, t, e, n);
            }, c.allocUnsafe = function(t) {
                return f(null, t);
            }, c.allocUnsafeSlow = function(t) {
                return f(null, t);
            }, c.isBuffer = function(t) {
                return !(null == t || !t.h);
            }, c.compare = function(t, e) {
                if (!c.isBuffer(t) || !c.isBuffer(e)) throw new TypeError('Arguments must be Buffers');
                if (t === e) return 0;
                var n = t.length;
                var i = e.length;
                for (var r = 0, a = Math.min(n, i); r < a; ++r) if (t[r] !== e[r]) {
                    n = t[r], i = e[r];
                    break;
                }
                return n < i ? -1 : i < n ? 1 : 0;
            }, c.isEncoding = function(t) {
                switch (String(t).toLowerCase()) {
                  case 'hex':
                  case 'utf8':
                  case 'utf-8':
                  case 'ascii':
                  case 'latin1':
                  case 'binary':
                  case 'base64':
                  case 'ucs2':
                  case 'ucs-2':
                  case 'utf16le':
                  case 'utf-16le':
                    return !0;

                  default:
                    return !1;
                }
            }, c.concat = function(t, e) {
                if (!a(t)) throw new TypeError('"list" argument must be an Array of Buffers');
                if (0 === t.length) return c.alloc(0);
                var n;
                if (void 0 === e) for (e = 0, n = 0; n < t.length; ++n) e += t[n].length;
                var i = c.allocUnsafe(e);
                var r = 0;
                for (n = 0; n < t.length; ++n) {
                    var o = t[n];
                    if (!c.isBuffer(o)) throw new TypeError('"list" argument must be an Array of Buffers');
                    o.copy(i, r), r += o.length;
                }
                return i;
            }, c.byteLength = m, c.prototype.h = !0, c.prototype.swap16 = function() {
                var t = this.length;
                if (t % 2 != 0) throw new RangeError('Buffer size must be a multiple of 16-bits');
                for (var e = 0; e < t; e += 2) v(this, e, e + 1);
                return this;
            }, c.prototype.swap32 = function() {
                var t = this.length;
                if (t % 4 != 0) throw new RangeError('Buffer size must be a multiple of 32-bits');
                for (var e = 0; e < t; e += 4) v(this, e, e + 3), v(this, e + 1, e + 2);
                return this;
            }, c.prototype.swap64 = function() {
                var t = this.length;
                if (t % 8 != 0) throw new RangeError('Buffer size must be a multiple of 64-bits');
                for (var e = 0; e < t; e += 8) v(this, e, e + 7), v(this, e + 1, e + 6), v(this, e + 2, e + 5),
                v(this, e + 3, e + 4);
                return this;
            }, c.prototype.toString = function() {
                var t = 0 | this.length;
                return 0 === t ? '' : 0 === arguments.length ? S(this, 0, t) : p.apply(this, arguments);
            }, c.prototype.equals = function(t) {
                if (!c.isBuffer(t)) throw new TypeError('Argument must be a Buffer');
                return this === t || 0 === c.compare(this, t);
            }, c.prototype.inspect = function() {
                var t = '';
                var n = e.INSPECT_MAX_BYTES;
                return this.length > 0 && (t = this.toString('hex', 0, n).match(/.{2}/g).join(' '),
                this.length > n && (t += ' ... ')), '<Buffer ' + t + '>';
            }, c.prototype.compare = function(t, e, n, i, r) {
                if (!c.isBuffer(t)) throw new TypeError('Argument must be a Buffer');
                if (void 0 === e && (e = 0), void 0 === n && (n = t ? t.length : 0), void 0 === i && (i = 0),
                void 0 === r && (r = this.length), e < 0 || n > t.length || i < 0 || r > this.length) throw new RangeError('out of range index');
                if (i >= r && e >= n) return 0;
                if (i >= r) return -1;
                if (e >= n) return 1;
                if (this === t) return 0;
                var a = (r >>>= 0) - (i >>>= 0);
                var o = (n >>>= 0) - (e >>>= 0);
                var s = Math.min(a, o);
                var l = this.slice(i, r);
                var u = t.slice(e, n);
                for (var f = 0; f < s; ++f) if (l[f] !== u[f]) {
                    a = l[f], o = u[f];
                    break;
                }
                return a < o ? -1 : o < a ? 1 : 0;
            }, c.prototype.includes = function(t, e, n) {
                return -1 !== this.indexOf(t, e, n);
            }, c.prototype.indexOf = function(t, e, n) {
                return g(this, t, e, n, !0);
            }, c.prototype.lastIndexOf = function(t, e, n) {
                return g(this, t, e, n, !1);
            }, c.prototype.write = function(t, e, n, i) {
                if (void 0 === e) i = 'utf8', n = this.length, e = 0; else if (void 0 === n && 'string' == typeof e) i = e,
                n = this.length, e = 0; else {
                    if (!isFinite(e)) throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported');
                    e |= 0, isFinite(n) ? (n |= 0, void 0 === i && (i = 'utf8')) : (i = n, n = void 0);
                }
                var r = this.length - e;
                if ((void 0 === n || n > r) && (n = r), t.length > 0 && (n < 0 || e < 0) || e > this.length) throw new RangeError('Attempt to write outside buffer bounds');
                i || (i = 'utf8');
                var a = !1;
                for (;;) switch (i) {
                  case 'hex':
                    return k(this, t, e, n);

                  case 'utf8':
                  case 'utf-8':
                    return y(this, t, e, n);

                  case 'ascii':
                    return w(this, t, e, n);

                  case 'latin1':
                  case 'binary':
                    return _(this, t, e, n);

                  case 'base64':
                    return x(this, t, e, n);

                  case 'ucs2':
                  case 'ucs-2':
                  case 'utf16le':
                  case 'utf-16le':
                    return M(this, t, e, n);

                  default:
                    if (a) throw new TypeError('Unknown encoding: ' + i);
                    i = ('' + i).toLowerCase(), a = !0;
                }
            }, c.prototype.toJSON = function() {
                return {
                    type: 'Buffer',
                    data: [].slice.call(this.v || this, 0)
                };
            };
            var A = 4096;
            function T(t, e, n) {
                var i = '';
                n = Math.min(t.length, n);
                for (var r = e; r < n; ++r) i += String.fromCharCode(127 & t[r]);
                return i;
            }
            function D(t, e, n) {
                var i = '';
                n = Math.min(t.length, n);
                for (var r = e; r < n; ++r) i += String.fromCharCode(t[r]);
                return i;
            }
            function P(t, e, n) {
                var i = t.length;
                (!e || e < 0) && (e = 0), (!n || n < 0 || n > i) && (n = i);
                var r = '';
                for (var a = e; a < n; ++a) r += U(t[a]);
                return r;
            }
            function B(t, e, n) {
                var i = t.slice(e, n);
                var r = '';
                for (var a = 0; a < i.length; a += 2) r += String.fromCharCode(i[a] + 256 * i[a + 1]);
                return r;
            }
            function I(t, e, n) {
                if (t % 1 != 0 || t < 0) throw new RangeError('offset is not uint');
                if (t + e > n) throw new RangeError('Trying to access beyond buffer length');
            }
            function O(t, e, n, i, r, a) {
                if (!c.isBuffer(t)) throw new TypeError('"buffer" argument must be a Buffer instance');
                if (e > r || e < a) throw new RangeError('"value" argument is out of bounds');
                if (n + i > t.length) throw new RangeError('Index out of range');
            }
            function H(t, e, n, i) {
                e < 0 && (e = 65535 + e + 1);
                for (var r = 0, a = Math.min(t.length - n, 2); r < a; ++r) t[n + r] = (e & 255 << 8 * (i ? r : 1 - r)) >>> 8 * (i ? r : 1 - r);
            }
            function E(t, e, n, i) {
                e < 0 && (e = 4294967295 + e + 1);
                for (var r = 0, a = Math.min(t.length - n, 4); r < a; ++r) t[n + r] = e >>> 8 * (i ? r : 3 - r) & 255;
            }
            function C(t, e, n, i, r, a) {
                if (n + i > t.length) throw new RangeError('Index out of range');
                if (n < 0) throw new RangeError('Index out of range');
            }
            function z(t, e, n, i, a) {
                return a || C(t, 0, n, 4), r.write(t, e, n, i, 23, 4), n + 4;
            }
            function R(t, e, n, i, a) {
                return a || C(t, 0, n, 8), r.write(t, e, n, i, 52, 8), n + 8;
            }
            c.prototype.slice = function(t, e) {
                var n = this.length;
                var i;
                if ((t = ~~t) < 0 ? (t += n) < 0 && (t = 0) : t > n && (t = n), (e = void 0 === e ? n : ~~e) < 0 ? (e += n) < 0 && (e = 0) : e > n && (e = n),
                e < t && (e = t), c.TYPED_ARRAY_SUPPORT) (i = this.subarray(t, e)).__proto__ = c.prototype; else {
                    var r = e - t;
                    i = new c(r, void 0);
                    for (var a = 0; a < r; ++a) i[a] = this[a + t];
                }
                return i;
            }, c.prototype.readUIntLE = function(t, e, n) {
                t |= 0, e |= 0, n || I(t, e, this.length);
                var i = this[t];
                var r = 1;
                var a = 0;
                for (;++a < e && (r *= 256); ) i += this[t + a] * r;
                return i;
            }, c.prototype.readUIntBE = function(t, e, n) {
                t |= 0, e |= 0, n || I(t, e, this.length);
                var i = this[t + --e];
                var r = 1;
                for (;e > 0 && (r *= 256); ) i += this[t + --e] * r;
                return i;
            }, c.prototype.readUInt8 = function(t, e) {
                return e || I(t, 1, this.length), this[t];
            }, c.prototype.readUInt16LE = function(t, e) {
                return e || I(t, 2, this.length), this[t] | this[t + 1] << 8;
            }, c.prototype.readUInt16BE = function(t, e) {
                return e || I(t, 2, this.length), this[t] << 8 | this[t + 1];
            }, c.prototype.readUInt32LE = function(t, e) {
                return e || I(t, 4, this.length), (this[t] | this[t + 1] << 8 | this[t + 2] << 16) + 16777216 * this[t + 3];
            }, c.prototype.readUInt32BE = function(t, e) {
                return e || I(t, 4, this.length), 16777216 * this[t] + (this[t + 1] << 16 | this[t + 2] << 8 | this[t + 3]);
            }, c.prototype.readIntLE = function(t, e, n) {
                t |= 0, e |= 0, n || I(t, e, this.length);
                var i = this[t];
                var r = 1;
                var a = 0;
                for (;++a < e && (r *= 256); ) i += this[t + a] * r;
                return i >= (r *= 128) && (i -= Math.pow(2, 8 * e)), i;
            }, c.prototype.readIntBE = function(t, e, n) {
                t |= 0, e |= 0, n || I(t, e, this.length);
                var i = e;
                var r = 1;
                var a = this[t + --i];
                for (;i > 0 && (r *= 256); ) a += this[t + --i] * r;
                return a >= (r *= 128) && (a -= Math.pow(2, 8 * e)), a;
            }, c.prototype.readInt8 = function(t, e) {
                return e || I(t, 1, this.length), 128 & this[t] ? -1 * (255 - this[t] + 1) : this[t];
            }, c.prototype.readInt16LE = function(t, e) {
                e || I(t, 2, this.length);
                var n = this[t] | this[t + 1] << 8;
                return 32768 & n ? 4294901760 | n : n;
            }, c.prototype.readInt16BE = function(t, e) {
                e || I(t, 2, this.length);
                var n = this[t + 1] | this[t] << 8;
                return 32768 & n ? 4294901760 | n : n;
            }, c.prototype.readInt32LE = function(t, e) {
                return e || I(t, 4, this.length), this[t] | this[t + 1] << 8 | this[t + 2] << 16 | this[t + 3] << 24;
            }, c.prototype.readInt32BE = function(t, e) {
                return e || I(t, 4, this.length), this[t] << 24 | this[t + 1] << 16 | this[t + 2] << 8 | this[t + 3];
            }, c.prototype.readFloatLE = function(t, e) {
                return e || I(t, 4, this.length), r.read(this, t, !0, 23, 4);
            }, c.prototype.readFloatBE = function(t, e) {
                return e || I(t, 4, this.length), r.read(this, t, !1, 23, 4);
            }, c.prototype.readDoubleLE = function(t, e) {
                return e || I(t, 8, this.length), r.read(this, t, !0, 52, 8);
            }, c.prototype.readDoubleBE = function(t, e) {
                return e || I(t, 8, this.length), r.read(this, t, !1, 52, 8);
            }, c.prototype.writeUIntLE = function(t, e, n, i) {
                (t = +t, e |= 0, n |= 0, i) || O(this, t, e, n, Math.pow(2, 8 * n) - 1, 0);
                var r = 1;
                var a = 0;
                for (this[e] = 255 & t; ++a < n && (r *= 256); ) this[e + a] = t / r & 255;
                return e + n;
            }, c.prototype.writeUIntBE = function(t, e, n, i) {
                (t = +t, e |= 0, n |= 0, i) || O(this, t, e, n, Math.pow(2, 8 * n) - 1, 0);
                var r = n - 1;
                var a = 1;
                for (this[e + r] = 255 & t; --r >= 0 && (a *= 256); ) this[e + r] = t / a & 255;
                return e + n;
            }, c.prototype.writeUInt8 = function(t, e, n) {
                return t = +t, e |= 0, n || O(this, t, e, 1, 255, 0), c.TYPED_ARRAY_SUPPORT || (t = Math.floor(t)),
                this[e] = 255 & t, e + 1;
            }, c.prototype.writeUInt16LE = function(t, e, n) {
                return t = +t, e |= 0, n || O(this, t, e, 2, 65535, 0), c.TYPED_ARRAY_SUPPORT ? (this[e] = 255 & t,
                this[e + 1] = t >>> 8) : H(this, t, e, !0), e + 2;
            }, c.prototype.writeUInt16BE = function(t, e, n) {
                return t = +t, e |= 0, n || O(this, t, e, 2, 65535, 0), c.TYPED_ARRAY_SUPPORT ? (this[e] = t >>> 8,
                this[e + 1] = 255 & t) : H(this, t, e, !1), e + 2;
            }, c.prototype.writeUInt32LE = function(t, e, n) {
                return t = +t, e |= 0, n || O(this, t, e, 4, 4294967295, 0), c.TYPED_ARRAY_SUPPORT ? (this[e + 3] = t >>> 24,
                this[e + 2] = t >>> 16, this[e + 1] = t >>> 8, this[e] = 255 & t) : E(this, t, e, !0),
                e + 4;
            }, c.prototype.writeUInt32BE = function(t, e, n) {
                return t = +t, e |= 0, n || O(this, t, e, 4, 4294967295, 0), c.TYPED_ARRAY_SUPPORT ? (this[e] = t >>> 24,
                this[e + 1] = t >>> 16, this[e + 2] = t >>> 8, this[e + 3] = 255 & t) : E(this, t, e, !1),
                e + 4;
            }, c.prototype.writeIntLE = function(t, e, n, i) {
                if (t = +t, e |= 0, !i) {
                    var r = Math.pow(2, 8 * n - 1);
                    O(this, t, e, n, r - 1, -r);
                }
                var a = 0;
                var o = 1;
                var s = 0;
                for (this[e] = 255 & t; ++a < n && (o *= 256); ) t < 0 && 0 === s && 0 !== this[e + a - 1] && (s = 1),
                this[e + a] = (t / o | 0) - s & 255;
                return e + n;
            }, c.prototype.writeIntBE = function(t, e, n, i) {
                if (t = +t, e |= 0, !i) {
                    var r = Math.pow(2, 8 * n - 1);
                    O(this, t, e, n, r - 1, -r);
                }
                var a = n - 1;
                var o = 1;
                var s = 0;
                for (this[e + a] = 255 & t; --a >= 0 && (o *= 256); ) t < 0 && 0 === s && 0 !== this[e + a + 1] && (s = 1),
                this[e + a] = (t / o | 0) - s & 255;
                return e + n;
            }, c.prototype.writeInt8 = function(t, e, n) {
                return t = +t, e |= 0, n || O(this, t, e, 1, 127, -128), c.TYPED_ARRAY_SUPPORT || (t = Math.floor(t)),
                t < 0 && (t = 255 + t + 1), this[e] = 255 & t, e + 1;
            }, c.prototype.writeInt16LE = function(t, e, n) {
                return t = +t, e |= 0, n || O(this, t, e, 2, 32767, -32768), c.TYPED_ARRAY_SUPPORT ? (this[e] = 255 & t,
                this[e + 1] = t >>> 8) : H(this, t, e, !0), e + 2;
            }, c.prototype.writeInt16BE = function(t, e, n) {
                return t = +t, e |= 0, n || O(this, t, e, 2, 32767, -32768), c.TYPED_ARRAY_SUPPORT ? (this[e] = t >>> 8,
                this[e + 1] = 255 & t) : H(this, t, e, !1), e + 2;
            }, c.prototype.writeInt32LE = function(t, e, n) {
                return t = +t, e |= 0, n || O(this, t, e, 4, 2147483647, -2147483648), c.TYPED_ARRAY_SUPPORT ? (this[e] = 255 & t,
                this[e + 1] = t >>> 8, this[e + 2] = t >>> 16, this[e + 3] = t >>> 24) : E(this, t, e, !0),
                e + 4;
            }, c.prototype.writeInt32BE = function(t, e, n) {
                return t = +t, e |= 0, n || O(this, t, e, 4, 2147483647, -2147483648), t < 0 && (t = 4294967295 + t + 1),
                c.TYPED_ARRAY_SUPPORT ? (this[e] = t >>> 24, this[e + 1] = t >>> 16, this[e + 2] = t >>> 8,
                this[e + 3] = 255 & t) : E(this, t, e, !1), e + 4;
            }, c.prototype.writeFloatLE = function(t, e, n) {
                return z(this, t, e, !0, n);
            }, c.prototype.writeFloatBE = function(t, e, n) {
                return z(this, t, e, !1, n);
            }, c.prototype.writeDoubleLE = function(t, e, n) {
                return R(this, t, e, !0, n);
            }, c.prototype.writeDoubleBE = function(t, e, n) {
                return R(this, t, e, !1, n);
            }, c.prototype.copy = function(t, e, n, i) {
                if (n || (n = 0), i || 0 === i || (i = this.length), e >= t.length && (e = t.length),
                e || (e = 0), i > 0 && i < n && (i = n), i === n) return 0;
                if (0 === t.length || 0 === this.length) return 0;
                if (e < 0) throw new RangeError('targetStart out of bounds');
                if (n < 0 || n >= this.length) throw new RangeError('sourceStart out of bounds');
                if (i < 0) throw new RangeError('sourceEnd out of bounds');
                i > this.length && (i = this.length), t.length - e < i - n && (i = t.length - e + n);
                var r = i - n;
                var a;
                if (this === t && n < e && e < i) for (a = r - 1; a >= 0; --a) t[a + e] = this[a + n]; else if (r < 1e3 || !c.TYPED_ARRAY_SUPPORT) for (a = 0; a < r; ++a) t[a + e] = this[a + n]; else Uint8Array.prototype.set.call(t, this.subarray(n, n + r), e);
                return r;
            }, c.prototype.fill = function(t, e, n, i) {
                if ('string' == typeof t) {
                    if ('string' == typeof e ? (i = e, e = 0, n = this.length) : 'string' == typeof n && (i = n,
                    n = this.length), 1 === t.length) {
                        var r = t.charCodeAt(0);
                        r < 256 && (t = r);
                    }
                    if (void 0 !== i && 'string' != typeof i) throw new TypeError('encoding must be a string');
                    if ('string' == typeof i && !c.isEncoding(i)) throw new TypeError('Unknown encoding: ' + i);
                } else 'number' == typeof t && (t &= 255);
                if (e < 0 || this.length < e || this.length < n) throw new RangeError('Out of range index');
                if (n <= e) return this;
                var a;
                if (e >>>= 0, n = void 0 === n ? this.length : n >>> 0, t || (t = 0), 'number' == typeof t) for (a = e; a < n; ++a) this[a] = t; else {
                    var o = c.isBuffer(t) ? t : F(new c(t, i).toString());
                    var s = o.length;
                    for (a = 0; a < n - e; ++a) this[a + e] = o[a % s];
                }
                return this;
            };
            var $ = /[^+\/0-9A-Za-z-_]/g;
            function U(t) {
                return t < 16 ? '0' + t.toString(16) : t.toString(16);
            }
            function F(t, e) {
                var n;
                e = e || 1 / 0;
                var i = t.length;
                var r = null;
                var a = [];
                for (var o = 0; o < i; ++o) {
                    if ((n = t.charCodeAt(o)) > 55295 && n < 57344) {
                        if (!r) {
                            if (n > 56319) {
                                (e -= 3) > -1 && a.push(239, 191, 189);
                                continue;
                            }
                            if (o + 1 === i) {
                                (e -= 3) > -1 && a.push(239, 191, 189);
                                continue;
                            }
                            r = n;
                            continue;
                        }
                        if (n < 56320) {
                            (e -= 3) > -1 && a.push(239, 191, 189), r = n;
                            continue;
                        }
                        n = 65536 + (r - 55296 << 10 | n - 56320);
                    } else r && (e -= 3) > -1 && a.push(239, 191, 189);
                    if (r = null, n < 128) {
                        if ((e -= 1) < 0) break;
                        a.push(n);
                    } else if (n < 2048) {
                        if ((e -= 2) < 0) break;
                        a.push(n >> 6 | 192, 63 & n | 128);
                    } else if (n < 65536) {
                        if ((e -= 3) < 0) break;
                        a.push(n >> 12 | 224, n >> 6 & 63 | 128, 63 & n | 128);
                    } else {
                        if (!(n < 1114112)) throw new Error('Invalid code point');
                        if ((e -= 4) < 0) break;
                        a.push(n >> 18 | 240, n >> 12 & 63 | 128, n >> 6 & 63 | 128, 63 & n | 128);
                    }
                }
                return a;
            }
            function L(t) {
                return i.toByteArray(function(t) {
                    if ((t = function(t) {
                        return t.trim ? t.trim() : t.replace(/^\s+|\s+$/g, '');
                    }(t).replace($, '')).length < 2) return '';
                    for (;t.length % 4 != 0; ) t += '=';
                    return t;
                }(t));
            }
            function N(t, e, n, i) {
                for (var r = 0; r < i && !(r + n >= e.length || r >= t.length); ++r) e[r + n] = t[r];
                return r;
            }
        }).call(this, n("./node_modules/webpack/buildin/global.js"));
    },
    "./node_modules/buffer/node_modules/isarray/index.js": function(t, e) {
        var n = {}.toString;
        t.exports = Array.isArray || function(t) {
            return '[object Array]' == n.call(t);
        };
    },
    "./node_modules/charenc/charenc.js": function(t, e) {
        var n = {
            utf8: {
                stringToBytes: function(t) {
                    return n.bin.stringToBytes(unescape(encodeURIComponent(t)));
                },
                bytesToString: function(t) {
                    return decodeURIComponent(escape(n.bin.bytesToString(t)));
                }
            },
            bin: {
                stringToBytes: function(t) {
                    for (var e = [], n = 0; n < t.length; n++) e.push(255 & t.charCodeAt(n));
                    return e;
                },
                bytesToString: function(t) {
                    for (var e = [], n = 0; n < t.length; n++) e.push(String.fromCharCode(t[n]));
                    return e.join('');
                }
            }
        };
        t.exports = n;
    },
    "./node_modules/crypt/crypt.js": function(t, e) {
        var n, i;
        n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', i = {
            rotl: function(t, e) {
                return t << e | t >>> 32 - e;
            },
            rotr: function(t, e) {
                return t << 32 - e | t >>> e;
            },
            endian: function(t) {
                if (t.constructor == Number) return 16711935 & i.rotl(t, 8) | 4278255360 & i.rotl(t, 24);
                for (var e = 0; e < t.length; e++) t[e] = i.endian(t[e]);
                return t;
            },
            randomBytes: function(t) {
                for (var e = []; t > 0; t--) e.push(Math.floor(256 * Math.random()));
                return e;
            },
            bytesToWords: function(t) {
                for (var e = [], n = 0, i = 0; n < t.length; n++, i += 8) e[i >>> 5] |= t[n] << 24 - i % 32;
                return e;
            },
            wordsToBytes: function(t) {
                for (var e = [], n = 0; n < 32 * t.length; n += 8) e.push(t[n >>> 5] >>> 24 - n % 32 & 255);
                return e;
            },
            bytesToHex: function(t) {
                for (var e = [], n = 0; n < t.length; n++) e.push((t[n] >>> 4).toString(16)), e.push((15 & t[n]).toString(16));
                return e.join('');
            },
            hexToBytes: function(t) {
                for (var e = [], n = 0; n < t.length; n += 2) e.push(parseInt(t.substr(n, 2), 16));
                return e;
            },
            bytesToBase64: function(t) {
                for (var e = [], i = 0; i < t.length; i += 3) {
                    var r = t[i] << 16 | t[i + 1] << 8 | t[i + 2];
                    for (var a = 0; a < 4; a++) 8 * i + 6 * a <= 8 * t.length ? e.push(n.charAt(r >>> 6 * (3 - a) & 63)) : e.push('=');
                }
                return e.join('');
            },
            base64ToBytes: function(t) {
                t = t.replace(/[^A-Z0-9+\/]/gi, '');
                for (var e = [], i = 0, r = 0; i < t.length; r = ++i % 4) 0 != r && e.push((n.indexOf(t.charAt(i - 1)) & Math.pow(2, -2 * r + 8) - 1) << 2 * r | n.indexOf(t.charAt(i)) >>> 6 - 2 * r);
                return e;
            }
        }, t.exports = i;
    },
    "./node_modules/event-lite/event-lite.js": function(t, e, n) {
        !function(e) {
            t.exports = e;
            var n = "listeners";
            var i = {
                on: function(t, e) {
                    return o(this, t).push(e), this;
                },
                once: function(t, e) {
                    var n = this;
                    return i.originalListener = e, o(n, t).push(i), n;
                    function i() {
                        a.call(n, t, i), e.apply(this, arguments);
                    }
                },
                off: a,
                emit: function(t, e) {
                    var n = this;
                    var i = o(n, t, !0);
                    if (!i) return !1;
                    var r = arguments.length;
                    if (1 === r) i.forEach(function(t) {
                        t.call(n);
                    }); else if (2 === r) i.forEach(function(t) {
                        t.call(n, e);
                    }); else {
                        var a = [].slice.call(arguments, 1);
                        i.forEach(function(t) {
                            t.apply(n, a);
                        });
                    }
                    return !!i.length;
                }
            };
            function r(t) {
                for (var e in i) t[e] = i[e];
                return t;
            }
            function a(t, e) {
                var i = this;
                var r;
                if (arguments.length) {
                    if (e) {
                        if (r = o(i, t, !0)) {
                            if (!(r = r.filter(function(t) {
                                return t !== e && t.originalListener !== e;
                            })).length) return a.call(i, t);
                            i[n][t] = r;
                        }
                    } else if ((r = i[n]) && (delete r[t], !Object.keys(r).length)) return a.call(i);
                } else delete i[n];
                return i;
            }
            function o(t, e, i) {
                if (!i || t[n]) {
                    var r = t[n] || (t[n] = {});
                    return r[e] || (r[e] = []);
                }
            }
            r(e.prototype), e.mixin = r;
        }(function t() {
            if (!(this instanceof t)) return new t;
        });
    },
    "./node_modules/ieee754/index.js": function(t, e) {
        e.read = function(t, e, n, i, r) {
            var a, o;
            var s = 8 * r - i - 1;
            var c = (1 << s) - 1;
            var l = c >> 1;
            var u = -7;
            var f = n ? r - 1 : 0;
            var d = n ? -1 : 1;
            var h = t[e + f];
            for (f += d, a = h & (1 << -u) - 1, h >>= -u, u += s; u > 0; a = 256 * a + t[e + f],
            f += d, u -= 8) ;
            for (o = a & (1 << -u) - 1, a >>= -u, u += i; u > 0; o = 256 * o + t[e + f], f += d,
            u -= 8) ;
            if (0 === a) a = 1 - l; else {
                if (a === c) return o ? NaN : 1 / 0 * (h ? -1 : 1);
                o += Math.pow(2, i), a -= l;
            }
            return (h ? -1 : 1) * o * Math.pow(2, a - i);
        }, e.write = function(t, e, n, i, r, a) {
            var o, s, c;
            var l = 8 * a - r - 1;
            var u = (1 << l) - 1;
            var f = u >> 1;
            var d = 23 === r ? Math.pow(2, -24) - Math.pow(2, -77) : 0;
            var h = i ? 0 : a - 1;
            var m = i ? 1 : -1;
            var p = e < 0 || 0 === e && 1 / e < 0 ? 1 : 0;
            for (e = Math.abs(e), isNaN(e) || e === 1 / 0 ? (s = isNaN(e) ? 1 : 0, o = u) : (o = Math.floor(Math.log(e) / Math.LN2),
            e * (c = Math.pow(2, -o)) < 1 && (o--, c *= 2), (e += o + f >= 1 ? d / c : d * Math.pow(2, 1 - f)) * c >= 2 && (o++,
            c /= 2), o + f >= u ? (s = 0, o = u) : o + f >= 1 ? (s = (e * c - 1) * Math.pow(2, r),
            o += f) : (s = e * Math.pow(2, f - 1) * Math.pow(2, r), o = 0)); r >= 8; t[n + h] = 255 & s,
            h += m, s /= 256, r -= 8) ;
            for (o = o << r | s, l += r; l > 0; t[n + h] = 255 & o, h += m, o /= 256, l -= 8) ;
            t[n + h - m] |= 128 * p;
        };
    },
    "./node_modules/int64-buffer/int64-buffer.js": function(t, e, n) {
        (function(t) {
            !function(e) {
                var n = "undefined";
                var i = n !== typeof t && t;
                var r = n !== typeof Uint8Array && Uint8Array;
                var a = n !== typeof ArrayBuffer && ArrayBuffer;
                var o = [ 0, 0, 0, 0, 0, 0, 0, 0 ];
                var s = Array.isArray || function(t) {
                    return !!t && "[object Array]" == {}.toString.call(t);
                };
                var c = 4294967296;
                var l;
                function u(t, s, u) {
                    var w = s ? 0 : 4;
                    var _ = s ? 4 : 0;
                    var x = s ? 0 : 3;
                    var M = s ? 1 : 2;
                    var j = s ? 2 : 1;
                    var S = s ? 3 : 0;
                    var A = s ? g : k;
                    var T = s ? b : y;
                    var D = I.prototype;
                    var P = "is" + t;
                    var B = "_" + P;
                    return D.buffer = void 0, D.offset = 0, D[B] = !0, D.toNumber = O, D.toString = function(t) {
                        var e = this.buffer;
                        var n = this.offset;
                        var i = E(e, n + w);
                        var r = E(e, n + _);
                        var a = "";
                        var o = !u && 2147483648 & i;
                        o && (i = ~i, r = c - r);
                        t = t || 10;
                        for (;;) {
                            var s = i % t * c + r;
                            if (i = Math.floor(i / t), r = Math.floor(s / t), a = (s % t).toString(t) + a, !i && !r) break;
                        }
                        o && (a = "-" + a);
                        return a;
                    }, D.toJSON = O, D.toArray = f, i && (D.toBuffer = d), r && (D.toArrayBuffer = h),
                    I[P] = function(t) {
                        return !(!t || !t[B]);
                    }, e[t] = I, I;
                    function I(t, e, i, s) {
                        return this instanceof I ? function(t, e, i, s, u) {
                            r && a && (e instanceof a && (e = new r(e)), s instanceof a && (s = new r(s)));
                            if (!(e || i || s || l)) return void (t.buffer = v(o, 0));
                            if (!m(e, i)) {
                                u = i, s = e, i = 0, e = new (l || Array)(8);
                            }
                            if (t.buffer = e, t.offset = i |= 0, n === typeof s) return;
                            "string" == typeof s ? function(t, e, n, i) {
                                var r = 0;
                                var a = n.length;
                                var o = 0;
                                var s = 0;
                                "-" === n[0] && r++;
                                var l = r;
                                for (;r < a; ) {
                                    var u = parseInt(n[r++], i);
                                    if (!(u >= 0)) break;
                                    s = s * i + u, o = o * i + Math.floor(s / c), s %= c;
                                }
                                l && (o = ~o, s ? s = c - s : o++);
                                H(t, e + w, o), H(t, e + _, s);
                            }(e, i, s, u || 10) : m(s, u) ? p(e, i, s, u) : "number" == typeof u ? (H(e, i + w, s),
                            H(e, i + _, u)) : s > 0 ? A(e, i, s) : s < 0 ? T(e, i, s) : p(e, i, o, 0);
                        }(this, t, e, i, s) : new I(t, e, i, s);
                    }
                    function O() {
                        var t = this.buffer;
                        var e = this.offset;
                        var n = E(t, e + w);
                        var i = E(t, e + _);
                        return u || (n |= 0), n ? n * c + i : i;
                    }
                    function H(t, e, n) {
                        t[e + S] = 255 & n, n >>= 8, t[e + j] = 255 & n, n >>= 8, t[e + M] = 255 & n, n >>= 8,
                        t[e + x] = 255 & n;
                    }
                    function E(t, e) {
                        return 16777216 * t[e + x] + (t[e + M] << 16) + (t[e + j] << 8) + t[e + S];
                    }
                }
                function f(t) {
                    var e = this.buffer;
                    var n = this.offset;
                    return l = null, !1 !== t && 0 === n && 8 === e.length && s(e) ? e : v(e, n);
                }
                function d(e) {
                    var n = this.buffer;
                    var r = this.offset;
                    if (l = i, !1 !== e && 0 === r && 8 === n.length && t.isBuffer(n)) return n;
                    var a = new i(8);
                    return p(a, 0, n, r), a;
                }
                function h(t) {
                    var e = this.buffer;
                    var n = this.offset;
                    var i = e.buffer;
                    if (l = r, !1 !== t && 0 === n && i instanceof a && 8 === i.byteLength) return i;
                    var o = new r(8);
                    return p(o, 0, e, n), o.buffer;
                }
                function m(t, e) {
                    var n = t && t.length;
                    return e |= 0, n && e + 8 <= n && "string" != typeof t[e];
                }
                function p(t, e, n, i) {
                    e |= 0, i |= 0;
                    for (var r = 0; r < 8; r++) t[e++] = 255 & n[i++];
                }
                function v(t, e) {
                    return [].slice.call(t, e, e + 8);
                }
                function g(t, e, n) {
                    var i = e + 8;
                    for (;i > e; ) t[--i] = 255 & n, n /= 256;
                }
                function b(t, e, n) {
                    var i = e + 8;
                    for (n++; i > e; ) t[--i] = 255 & -n ^ 255, n /= 256;
                }
                function k(t, e, n) {
                    var i = e + 8;
                    for (;e < i; ) t[e++] = 255 & n, n /= 256;
                }
                function y(t, e, n) {
                    var i = e + 8;
                    for (n++; e < i; ) t[e++] = 255 & -n ^ 255, n /= 256;
                }
                u("Uint64BE", !0, !0), u("Int64BE", !0, !1), u("Uint64LE", !1, !0), u("Int64LE", !1, !1);
            }('string' != typeof e.nodeName ? e : this || {});
        }).call(this, n("./node_modules/buffer/index.js").Buffer);
    },
    "./node_modules/is-buffer/index.js": function(t, e) {
        function n(t) {
            return !!t.constructor && 'function' == typeof t.constructor.isBuffer && t.constructor.isBuffer(t);
        }
        t.exports = function(t) {
            return null != t && (n(t) || function(t) {
                return 'function' == typeof t.readFloatLE && 'function' == typeof t.slice && n(t.slice(0, 0));
            }(t) || !!t.h);
        };
    },
    "./node_modules/md5/md5.js": function(t, e, n) {
        var i, r, a, o, s;
        i = n("./node_modules/crypt/crypt.js"), r = n("./node_modules/charenc/charenc.js").utf8,
        a = n("./node_modules/is-buffer/index.js"), o = n("./node_modules/charenc/charenc.js").bin,
        (s = function(t, e) {
            t.constructor == String ? t = e && 'binary' === e.encoding ? o.stringToBytes(t) : r.stringToBytes(t) : a(t) ? t = [].slice.call(t, 0) : Array.isArray(t) || (t = t.toString());
            var n = i.bytesToWords(t), c = 8 * t.length, l = 1732584193, u = -271733879, f = -1732584194, d = 271733878;
            for (var h = 0; h < n.length; h++) n[h] = 16711935 & (n[h] << 8 | n[h] >>> 24) | 4278255360 & (n[h] << 24 | n[h] >>> 8);
            n[c >>> 5] |= 128 << c % 32, n[14 + (c + 64 >>> 9 << 4)] = c;
            var m = s.k, p = s._, v = s.j, g = s.$;
            for (h = 0; h < n.length; h += 16) {
                var b = l, k = u, y = f, w = d;
                l = m(l, u, f, d, n[h + 0], 7, -680876936), d = m(d, l, u, f, n[h + 1], 12, -389564586),
                f = m(f, d, l, u, n[h + 2], 17, 606105819), u = m(u, f, d, l, n[h + 3], 22, -1044525330),
                l = m(l, u, f, d, n[h + 4], 7, -176418897), d = m(d, l, u, f, n[h + 5], 12, 1200080426),
                f = m(f, d, l, u, n[h + 6], 17, -1473231341), u = m(u, f, d, l, n[h + 7], 22, -45705983),
                l = m(l, u, f, d, n[h + 8], 7, 1770035416), d = m(d, l, u, f, n[h + 9], 12, -1958414417),
                f = m(f, d, l, u, n[h + 10], 17, -42063), u = m(u, f, d, l, n[h + 11], 22, -1990404162),
                l = m(l, u, f, d, n[h + 12], 7, 1804603682), d = m(d, l, u, f, n[h + 13], 12, -40341101),
                f = m(f, d, l, u, n[h + 14], 17, -1502002290), l = p(l, u = m(u, f, d, l, n[h + 15], 22, 1236535329), f, d, n[h + 1], 5, -165796510),
                d = p(d, l, u, f, n[h + 6], 9, -1069501632), f = p(f, d, l, u, n[h + 11], 14, 643717713),
                u = p(u, f, d, l, n[h + 0], 20, -373897302), l = p(l, u, f, d, n[h + 5], 5, -701558691),
                d = p(d, l, u, f, n[h + 10], 9, 38016083), f = p(f, d, l, u, n[h + 15], 14, -660478335),
                u = p(u, f, d, l, n[h + 4], 20, -405537848), l = p(l, u, f, d, n[h + 9], 5, 568446438),
                d = p(d, l, u, f, n[h + 14], 9, -1019803690), f = p(f, d, l, u, n[h + 3], 14, -187363961),
                u = p(u, f, d, l, n[h + 8], 20, 1163531501), l = p(l, u, f, d, n[h + 13], 5, -1444681467),
                d = p(d, l, u, f, n[h + 2], 9, -51403784), f = p(f, d, l, u, n[h + 7], 14, 1735328473),
                l = v(l, u = p(u, f, d, l, n[h + 12], 20, -1926607734), f, d, n[h + 5], 4, -378558),
                d = v(d, l, u, f, n[h + 8], 11, -2022574463), f = v(f, d, l, u, n[h + 11], 16, 1839030562),
                u = v(u, f, d, l, n[h + 14], 23, -35309556), l = v(l, u, f, d, n[h + 1], 4, -1530992060),
                d = v(d, l, u, f, n[h + 4], 11, 1272893353), f = v(f, d, l, u, n[h + 7], 16, -155497632),
                u = v(u, f, d, l, n[h + 10], 23, -1094730640), l = v(l, u, f, d, n[h + 13], 4, 681279174),
                d = v(d, l, u, f, n[h + 0], 11, -358537222), f = v(f, d, l, u, n[h + 3], 16, -722521979),
                u = v(u, f, d, l, n[h + 6], 23, 76029189), l = v(l, u, f, d, n[h + 9], 4, -640364487),
                d = v(d, l, u, f, n[h + 12], 11, -421815835), f = v(f, d, l, u, n[h + 15], 16, 530742520),
                l = g(l, u = v(u, f, d, l, n[h + 2], 23, -995338651), f, d, n[h + 0], 6, -198630844),
                d = g(d, l, u, f, n[h + 7], 10, 1126891415), f = g(f, d, l, u, n[h + 14], 15, -1416354905),
                u = g(u, f, d, l, n[h + 5], 21, -57434055), l = g(l, u, f, d, n[h + 12], 6, 1700485571),
                d = g(d, l, u, f, n[h + 3], 10, -1894986606), f = g(f, d, l, u, n[h + 10], 15, -1051523),
                u = g(u, f, d, l, n[h + 1], 21, -2054922799), l = g(l, u, f, d, n[h + 8], 6, 1873313359),
                d = g(d, l, u, f, n[h + 15], 10, -30611744), f = g(f, d, l, u, n[h + 6], 15, -1560198380),
                u = g(u, f, d, l, n[h + 13], 21, 1309151649), l = g(l, u, f, d, n[h + 4], 6, -145523070),
                d = g(d, l, u, f, n[h + 11], 10, -1120210379), f = g(f, d, l, u, n[h + 2], 15, 718787259),
                u = g(u, f, d, l, n[h + 9], 21, -343485551), l = l + b >>> 0, u = u + k >>> 0, f = f + y >>> 0,
                d = d + w >>> 0;
            }
            return i.endian([ l, u, f, d ]);
        }).k = function(t, e, n, i, r, a, o) {
            var s = t + (e & n | ~e & i) + (r >>> 0) + o;
            return (s << a | s >>> 32 - a) + e;
        }, s._ = function(t, e, n, i, r, a, o) {
            var s = t + (e & i | n & ~i) + (r >>> 0) + o;
            return (s << a | s >>> 32 - a) + e;
        }, s.j = function(t, e, n, i, r, a, o) {
            var s = t + (e ^ n ^ i) + (r >>> 0) + o;
            return (s << a | s >>> 32 - a) + e;
        }, s.$ = function(t, e, n, i, r, a, o) {
            var s = t + (n ^ (e | ~i)) + (r >>> 0) + o;
            return (s << a | s >>> 32 - a) + e;
        }, s.F = 16, s.q = 16, t.exports = function(t, e) {
            if (null == t) throw new Error('Illegal argument ' + t);
            var n = i.wordsToBytes(s(t, e));
            return e && e.asBytes ? n : e && e.asString ? o.bytesToString(n) : i.bytesToHex(n);
        };
    },
    "./node_modules/msgpack-lite/lib/browser.js": function(t, e, n) {
        e.encode = n("./node_modules/msgpack-lite/lib/encode.js").encode, e.decode = n("./node_modules/msgpack-lite/lib/decode.js").decode,
        e.Encoder = n("./node_modules/msgpack-lite/lib/encoder.js").Encoder, e.Decoder = n("./node_modules/msgpack-lite/lib/decoder.js").Decoder,
        e.createCodec = n("./node_modules/msgpack-lite/lib/ext.js").createCodec, e.codec = n("./node_modules/msgpack-lite/lib/codec.js").codec;
    },
    "./node_modules/msgpack-lite/lib/buffer-global.js": function(t, e, n) {
        (function(e) {
            function n(t) {
                return t && t.isBuffer && t;
            }
            t.exports = n(void 0 !== e && e) || n(this.Buffer) || n("undefined" != typeof window && window.Buffer) || this.Buffer;
        }).call(this, n("./node_modules/buffer/index.js").Buffer);
    },
    "./node_modules/msgpack-lite/lib/buffer-lite.js": function(t, e) {
        e.copy = function(t, e, n, i) {
            var r;
            n || (n = 0);
            i || 0 === i || (i = this.length);
            e || (e = 0);
            var a = i - n;
            if (t === this && n < e && e < i) for (r = a - 1; r >= 0; r--) t[r + e] = this[r + n]; else for (r = 0; r < a; r++) t[r + e] = this[r + n];
            return a;
        }, e.toString = function(t, e, n) {
            var i = this;
            var r = 0 | e;
            n || (n = i.length);
            var a = '';
            var o = 0;
            for (;r < n; ) (o = i[r++]) < 128 ? a += String.fromCharCode(o) : (192 == (224 & o) ? o = (31 & o) << 6 | 63 & i[r++] : 224 == (240 & o) ? o = (15 & o) << 12 | (63 & i[r++]) << 6 | 63 & i[r++] : 240 == (248 & o) && (o = (7 & o) << 18 | (63 & i[r++]) << 12 | (63 & i[r++]) << 6 | 63 & i[r++]),
            o >= 65536 ? (o -= 65536, a += String.fromCharCode((o >>> 10) + 55296, 56320 + (1023 & o))) : a += String.fromCharCode(o));
            return a;
        }, e.write = function(t, e) {
            var n = this;
            var i = e || (e |= 0);
            var r = t.length;
            var a = 0;
            var o = 0;
            for (;o < r; ) (a = t.charCodeAt(o++)) < 128 ? n[i++] = a : a < 2048 ? (n[i++] = 192 | a >>> 6,
            n[i++] = 128 | 63 & a) : a < 55296 || a > 57343 ? (n[i++] = 224 | a >>> 12, n[i++] = 128 | a >>> 6 & 63,
            n[i++] = 128 | 63 & a) : (a = 65536 + (a - 55296 << 10 | t.charCodeAt(o++) - 56320),
            n[i++] = 240 | a >>> 18, n[i++] = 128 | a >>> 12 & 63, n[i++] = 128 | a >>> 6 & 63,
            n[i++] = 128 | 63 & a);
            return i - e;
        };
    },
    "./node_modules/msgpack-lite/lib/bufferish-array.js": function(t, e, n) {
        var i = n("./node_modules/msgpack-lite/lib/bufferish.js");
        function r(t) {
            return new Array(t);
        }
        (e = t.exports = r(0)).alloc = r, e.concat = i.concat, e.from = function(t) {
            if (!i.isBuffer(t) && i.isView(t)) t = i.Uint8Array.from(t); else if (i.isArrayBuffer(t)) t = new Uint8Array(t); else {
                if ("string" == typeof t) return i.from.call(e, t);
                if ("number" == typeof t) throw new TypeError('"value" argument must not be a number');
            }
            return [].slice.call(t);
        };
    },
    "./node_modules/msgpack-lite/lib/bufferish-buffer.js": function(t, e, n) {
        var i = n("./node_modules/msgpack-lite/lib/bufferish.js");
        var r = i.global;
        function a(t) {
            return new r(t);
        }
        (e = t.exports = i.hasBuffer ? a(0) : []).alloc = i.hasBuffer && r.alloc || a, e.concat = i.concat,
        e.from = function(t) {
            if (!i.isBuffer(t) && i.isView(t)) t = i.Uint8Array.from(t); else if (i.isArrayBuffer(t)) t = new Uint8Array(t); else {
                if ("string" == typeof t) return i.from.call(e, t);
                if ("number" == typeof t) throw new TypeError('"value" argument must not be a number');
            }
            return r.from && 1 !== r.from.length ? r.from(t) : new r(t);
        };
    },
    "./node_modules/msgpack-lite/lib/bufferish-proto.js": function(t, e, n) {
        var i = n("./node_modules/msgpack-lite/lib/buffer-lite.js");
        var r;
        e.copy = l, e.slice = u, e.toString = function(t, e, n) {
            return (!s && a.isBuffer(this) ? this.toString : i.toString).apply(this, arguments);
        }, e.write = (r = "write", function() {
            return (this[r] || i[r]).apply(this, arguments);
        });
        var a = n("./node_modules/msgpack-lite/lib/bufferish.js");
        var o = a.global;
        var s = a.hasBuffer && "TYPED_ARRAY_SUPPORT" in o;
        var c = s && !o.TYPED_ARRAY_SUPPORT;
        function l(t, e, n, r) {
            var o = a.isBuffer(this);
            var s = a.isBuffer(t);
            if (o && s) return this.copy(t, e, n, r);
            if (c || o || s || !a.isView(this) || !a.isView(t)) return i.copy.call(this, t, e, n, r);
            var l = n || null != r ? u.call(this, n, r) : this;
            return t.set(l, e), l.length;
        }
        function u(t, e) {
            var n = this.slice || !c && this.subarray;
            if (n) return n.call(this, t, e);
            var i = a.alloc.call(this, e - t);
            return l.call(this, i, 0, t, e), i;
        }
    },
    "./node_modules/msgpack-lite/lib/bufferish-uint8array.js": function(t, e, n) {
        var i = n("./node_modules/msgpack-lite/lib/bufferish.js");
        function r(t) {
            return new Uint8Array(t);
        }
        (e = t.exports = i.hasArrayBuffer ? r(0) : []).alloc = r, e.concat = i.concat, e.from = function(t) {
            if (i.isView(t)) {
                var n = t.byteOffset;
                var r = t.byteLength;
                (t = t.buffer).byteLength !== r && (t.slice ? t = t.slice(n, n + r) : (t = new Uint8Array(t)).byteLength !== r && (t = [].slice.call(t, n, n + r)));
            } else {
                if ("string" == typeof t) return i.from.call(e, t);
                if ("number" == typeof t) throw new TypeError('"value" argument must not be a number');
            }
            return new Uint8Array(t);
        };
    },
    "./node_modules/msgpack-lite/lib/bufferish.js": function(t, e, n) {
        var i = e.global = n("./node_modules/msgpack-lite/lib/buffer-global.js");
        var r = e.hasBuffer = i && !!i.isBuffer;
        var a = e.hasArrayBuffer = "undefined" != typeof ArrayBuffer;
        var o = e.isArray = n("./node_modules/msgpack-lite/node_modules/isarray/index.js");
        e.isArrayBuffer = a ? function(t) {
            return t instanceof ArrayBuffer || m(t);
        } : g;
        var s = e.isBuffer = r ? i.isBuffer : g;
        var c = e.isView = a ? ArrayBuffer.isView || b("ArrayBuffer", "buffer") : g;
        e.alloc = h, e.concat = function(t, n) {
            n || (n = 0, [].forEach.call(t, function(t) {
                n += t.length;
            }));
            var i = this !== e && this || t[0];
            var r = h.call(i, n);
            var a = 0;
            return [].forEach.call(t, function(t) {
                a += d.copy.call(t, r, a);
            }), r;
        }, e.from = function(t) {
            return "string" == typeof t ? p.call(this, t) : v(this).from(t);
        };
        var l = e.Array = n("./node_modules/msgpack-lite/lib/bufferish-array.js");
        var u = e.Buffer = n("./node_modules/msgpack-lite/lib/bufferish-buffer.js");
        var f = e.Uint8Array = n("./node_modules/msgpack-lite/lib/bufferish-uint8array.js");
        var d = e.prototype = n("./node_modules/msgpack-lite/lib/bufferish-proto.js");
        function h(t) {
            return v(this).alloc(t);
        }
        var m = b("ArrayBuffer");
        function p(t) {
            var e = 3 * t.length;
            var n = h.call(this, e);
            var i = d.write.call(n, t);
            return e !== i && (n = d.slice.call(n, 0, i)), n;
        }
        function v(t) {
            return s(t) ? u : c(t) ? f : o(t) ? l : r ? u : a ? f : l;
        }
        function g() {
            return !1;
        }
        function b(t, e) {
            return t = "[object " + t + "]", function(n) {
                return null != n && {}.toString.call(e ? n[e] : n) === t;
            };
        }
    },
    "./node_modules/msgpack-lite/lib/codec-base.js": function(t, e, n) {
        var i = n("./node_modules/msgpack-lite/node_modules/isarray/index.js");
        e.createCodec = s, e.install = function(t) {
            for (var e in t) a.prototype[e] = o(a.prototype[e], t[e]);
        }, e.filter = function(t) {
            return i(t) ? function(t) {
                return t = t.slice(), function(n) {
                    return t.reduce(e, n);
                };
                function e(t, e) {
                    return e(t);
                }
            }(t) : t;
        };
        var r = n("./node_modules/msgpack-lite/lib/bufferish.js");
        function a(t) {
            if (!(this instanceof a)) return new a(t);
            this.options = t, this.init();
        }
        function o(t, e) {
            return t && e ? function() {
                return t.apply(this, arguments), e.apply(this, arguments);
            } : t || e;
        }
        function s(t) {
            return new a(t);
        }
        a.prototype.init = function() {
            var t = this.options;
            return t && t.uint8array && (this.bufferish = r.Uint8Array), this;
        }, e.preset = s({
            preset: !0
        });
    },
    "./node_modules/msgpack-lite/lib/codec.js": function(t, e, n) {
        n("./node_modules/msgpack-lite/lib/read-core.js"), n("./node_modules/msgpack-lite/lib/write-core.js"),
        e.codec = {
            preset: n("./node_modules/msgpack-lite/lib/codec-base.js").preset
        };
    },
    "./node_modules/msgpack-lite/lib/decode-buffer.js": function(t, e, n) {
        e.DecodeBuffer = r;
        var i = n("./node_modules/msgpack-lite/lib/read-core.js").preset;
        function r(t) {
            if (!(this instanceof r)) return new r(t);
            if (t && (this.options = t, t.codec)) {
                var e = this.codec = t.codec;
                e.bufferish && (this.bufferish = e.bufferish);
            }
            try {
                if (window._modPacketStats) {
                    var n = Date.now();
                    var i = window._modPacketStats;
                    var a = n - 5e3;
                    for (;i.recent.length && i.recent[0].t < a; ) i.recent.shift();
                    var o = n - 1e3;
                    var s = 0;
                    var c = {};
                    for (var l = 0; l < i.recent.length; ++l) {
                        var u = i.recent[l];
                        u.t >= o && (s++, c[u.type] = (c[u.type] || 0) + 1);
                    }
                    var f = document.getElementById('ppsOverlay');
                    if (f) {
                        var d = [];
                        d.push('PPS: ' + s);
                        var h = Object.keys(c).sort(function(t, e) {
                            return c[e] - c[t];
                        });
                        for (var m = 0; m < Math.min(5, h.length); ++m) {
                            var p = h[m];
                            d.push(p + ': ' + c[p]);
                        }
                        f.innerText = d.join('\n');
                    }
                }
            } catch (t) {}
        }
        n("./node_modules/msgpack-lite/lib/flex-buffer.js").FlexDecoder.mixin(r.prototype),
        r.prototype.codec = i, r.prototype.fetch = function() {
            return this.codec.decode(this);
        };
    },
    "./node_modules/msgpack-lite/lib/decode.js": function(t, e, n) {
        e.decode = function(t, e) {
            var n = new i(e);
            return n.write(t), n.read();
        };
        var i = n("./node_modules/msgpack-lite/lib/decode-buffer.js").DecodeBuffer;
    },
    "./node_modules/msgpack-lite/lib/decoder.js": function(t, e, n) {
        e.Decoder = a;
        var i = n("./node_modules/event-lite/event-lite.js");
        var r = n("./node_modules/msgpack-lite/lib/decode-buffer.js").DecodeBuffer;
        function a(t) {
            if (!(this instanceof a)) return new a(t);
            r.call(this, t);
        }
        a.prototype = new r, i.mixin(a.prototype), a.prototype.decode = function(t) {
            arguments.length && this.write(t), this.flush();
        }, a.prototype.push = function(t) {
            this.emit("data", t);
        }, a.prototype.end = function(t) {
            this.decode(t), this.emit("end");
        };
    },
    "./node_modules/msgpack-lite/lib/encode-buffer.js": function(t, e, n) {
        e.EncodeBuffer = r;
        var i = n("./node_modules/msgpack-lite/lib/write-core.js").preset;
        function r(t) {
            if (!(this instanceof r)) return new r(t);
            if (t && (this.options = t, t.codec)) {
                var e = this.codec = t.codec;
                e.bufferish && (this.bufferish = e.bufferish);
            }
        }
        n("./node_modules/msgpack-lite/lib/flex-buffer.js").FlexEncoder.mixin(r.prototype),
        r.prototype.codec = i, r.prototype.write = function(t) {
            this.codec.encode(this, t);
        };
    },
    "./node_modules/msgpack-lite/lib/encode.js": function(t, e, n) {
        e.encode = function(t, e) {
            var n = new i(e);
            return n.write(t), n.read();
        };
        var i = n("./node_modules/msgpack-lite/lib/encode-buffer.js").EncodeBuffer;
    },
    "./node_modules/msgpack-lite/lib/encoder.js": function(t, e, n) {
        e.Encoder = a;
        var i = n("./node_modules/event-lite/event-lite.js");
        var r = n("./node_modules/msgpack-lite/lib/encode-buffer.js").EncodeBuffer;
        function a(t) {
            if (!(this instanceof a)) return new a(t);
            r.call(this, t);
        }
        a.prototype = new r, i.mixin(a.prototype), a.prototype.encode = function(t) {
            this.write(t), this.emit("data", this.read());
        }, a.prototype.end = function(t) {
            arguments.length && this.encode(t), this.flush(), this.emit("end");
        };
    },
    "./node_modules/msgpack-lite/lib/ext-buffer.js": function(t, e, n) {
        e.ExtBuffer = function t(e, n) {
            if (!(this instanceof t)) return new t(e, n);
            this.buffer = i.from(e), this.type = n;
        };
        var i = n("./node_modules/msgpack-lite/lib/bufferish.js");
    },
    "./node_modules/msgpack-lite/lib/ext-packer.js": function(t, e, n) {
        e.setExtPackers = function(t) {
            t.addExtPacker(14, Error, [ f, c ]), t.addExtPacker(1, EvalError, [ f, c ]), t.addExtPacker(2, RangeError, [ f, c ]),
            t.addExtPacker(3, ReferenceError, [ f, c ]), t.addExtPacker(4, SyntaxError, [ f, c ]),
            t.addExtPacker(5, TypeError, [ f, c ]), t.addExtPacker(6, URIError, [ f, c ]), t.addExtPacker(10, RegExp, [ u, c ]),
            t.addExtPacker(11, Boolean, [ l, c ]), t.addExtPacker(12, String, [ l, c ]), t.addExtPacker(13, Date, [ Number, c ]),
            t.addExtPacker(15, Number, [ l, c ]), "undefined" != typeof Uint8Array && (t.addExtPacker(17, Int8Array, a),
            t.addExtPacker(18, Uint8Array, a), t.addExtPacker(19, Int16Array, a), t.addExtPacker(20, Uint16Array, a),
            t.addExtPacker(21, Int32Array, a), t.addExtPacker(22, Uint32Array, a), t.addExtPacker(23, Float32Array, a),
            "undefined" != typeof Float64Array && t.addExtPacker(24, Float64Array, a), "undefined" != typeof Uint8ClampedArray && t.addExtPacker(25, Uint8ClampedArray, a),
            t.addExtPacker(26, ArrayBuffer, a), t.addExtPacker(29, DataView, a));
            i.hasBuffer && t.addExtPacker(27, r, i.from);
        };
        var i = n("./node_modules/msgpack-lite/lib/bufferish.js");
        var r = i.global;
        var a = i.Uint8Array.from;
        var o;
        var s = {
            name: 1,
            message: 1,
            stack: 1,
            columnNumber: 1,
            fileName: 1,
            lineNumber: 1
        };
        function c(t) {
            return o || (o = n("./node_modules/msgpack-lite/lib/encode.js").encode), o(t);
        }
        function l(t) {
            return t.valueOf();
        }
        function u(t) {
            (t = /t/.toString.call(t).split("/")).shift();
            var e = [ t.pop() ];
            return e.unshift(t.join("/")), e;
        }
        function f(t) {
            var e = {};
            for (var n in s) e[n] = t[n];
            return e;
        }
    },
    "./node_modules/msgpack-lite/lib/ext-unpacker.js": function(t, e, n) {
        e.setExtUnpackers = function(t) {
            t.addExtUnpacker(14, [ s, l(Error) ]), t.addExtUnpacker(1, [ s, l(EvalError) ]),
            t.addExtUnpacker(2, [ s, l(RangeError) ]), t.addExtUnpacker(3, [ s, l(ReferenceError) ]),
            t.addExtUnpacker(4, [ s, l(SyntaxError) ]), t.addExtUnpacker(5, [ s, l(TypeError) ]),
            t.addExtUnpacker(6, [ s, l(URIError) ]), t.addExtUnpacker(10, [ s, c ]), t.addExtUnpacker(11, [ s, u(Boolean) ]),
            t.addExtUnpacker(12, [ s, u(String) ]), t.addExtUnpacker(13, [ s, u(Date) ]), t.addExtUnpacker(15, [ s, u(Number) ]),
            "undefined" != typeof Uint8Array && (t.addExtUnpacker(17, u(Int8Array)), t.addExtUnpacker(18, u(Uint8Array)),
            t.addExtUnpacker(19, [ f, u(Int16Array) ]), t.addExtUnpacker(20, [ f, u(Uint16Array) ]),
            t.addExtUnpacker(21, [ f, u(Int32Array) ]), t.addExtUnpacker(22, [ f, u(Uint32Array) ]),
            t.addExtUnpacker(23, [ f, u(Float32Array) ]), "undefined" != typeof Float64Array && t.addExtUnpacker(24, [ f, u(Float64Array) ]),
            "undefined" != typeof Uint8ClampedArray && t.addExtUnpacker(25, u(Uint8ClampedArray)),
            t.addExtUnpacker(26, f), t.addExtUnpacker(29, [ f, u(DataView) ]));
            i.hasBuffer && t.addExtUnpacker(27, u(r));
        };
        var i = n("./node_modules/msgpack-lite/lib/bufferish.js");
        var r = i.global;
        var a;
        var o = {
            name: 1,
            message: 1,
            stack: 1,
            columnNumber: 1,
            fileName: 1,
            lineNumber: 1
        };
        function s(t) {
            return a || (a = n("./node_modules/msgpack-lite/lib/decode.js").decode), a(t);
        }
        function c(t) {
            return RegExp.apply(null, t);
        }
        function l(t) {
            return function(e) {
                var n = new t;
                for (var i in o) n[i] = e[i];
                return n;
            };
        }
        function u(t) {
            return function(e) {
                return new t(e);
            };
        }
        function f(t) {
            return new Uint8Array(t).buffer;
        }
    },
    "./node_modules/msgpack-lite/lib/ext.js": function(t, e, n) {
        n("./node_modules/msgpack-lite/lib/read-core.js"), n("./node_modules/msgpack-lite/lib/write-core.js"),
        e.createCodec = n("./node_modules/msgpack-lite/lib/codec-base.js").createCodec;
    },
    "./node_modules/msgpack-lite/lib/flex-buffer.js": function(t, e, n) {
        e.FlexDecoder = a, e.FlexEncoder = o;
        var i = n("./node_modules/msgpack-lite/lib/bufferish.js");
        var r = "BUFFER_SHORTAGE";
        function a() {
            if (!(this instanceof a)) return new a;
        }
        function o() {
            if (!(this instanceof o)) return new o;
        }
        function s() {
            throw new Error("method not implemented: write()");
        }
        function c() {
            throw new Error("method not implemented: fetch()");
        }
        function l() {
            return this.buffers && this.buffers.length ? (this.flush(), this.pull()) : this.fetch();
        }
        function u(t) {
            (this.buffers || (this.buffers = [])).push(t);
        }
        function f() {
            return (this.buffers || (this.buffers = [])).shift();
        }
        function d(t) {
            return function(e) {
                for (var n in t) e[n] = t[n];
                return e;
            };
        }
        a.mixin = d({
            bufferish: i,
            write: function(t) {
                var e = this.offset ? i.prototype.slice.call(this.buffer, this.offset) : this.buffer;
                this.buffer = e ? t ? this.bufferish.concat([ e, t ]) : e : t, this.offset = 0;
            },
            fetch: c,
            flush: function() {
                for (;this.offset < this.buffer.length; ) {
                    var t = this.offset;
                    var e;
                    try {
                        e = this.fetch();
                    } catch (e) {
                        if (e && e.message != r) throw e;
                        this.offset = t;
                        break;
                    }
                    this.push(e);
                }
            },
            push: u,
            pull: f,
            read: l,
            reserve: function(t) {
                var e = this.offset;
                var n = e + t;
                if (n > this.buffer.length) throw new Error(r);
                return this.offset = n, e;
            },
            offset: 0
        }), a.mixin(a.prototype), o.mixin = d({
            bufferish: i,
            write: s,
            fetch: function() {
                var t = this.start;
                if (t < this.offset) {
                    var e = this.start = this.offset;
                    return i.prototype.slice.call(this.buffer, t, e);
                }
            },
            flush: function() {
                for (;this.start < this.offset; ) {
                    var t = this.fetch();
                    t && this.push(t);
                }
            },
            push: u,
            pull: function() {
                var t = this.buffers || (this.buffers = []);
                var e = t.length > 1 ? this.bufferish.concat(t) : t[0];
                return t.length = 0, e;
            },
            read: l,
            reserve: function(t) {
                var e = 0 | t;
                if (this.buffer) {
                    var n = this.buffer.length;
                    var i = 0 | this.offset;
                    var r = i + e;
                    if (r < n) return this.offset = r, i;
                    this.flush(), t = Math.max(t, Math.min(2 * n, this.maxBufferSize));
                }
                return t = Math.max(t, this.minBufferSize), this.buffer = this.bufferish.alloc(t),
                this.start = 0, this.offset = e, 0;
            },
            send: function(t) {
                var e = t.length;
                if (e > this.minBufferSize) this.flush(), this.push(t); else {
                    var n = this.reserve(e);
                    i.prototype.copy.call(t, this.buffer, n);
                }
            },
            maxBufferSize: 65536,
            minBufferSize: 2048,
            offset: 0,
            start: 0
        }), o.mixin(o.prototype);
    },
    "./node_modules/msgpack-lite/lib/read-core.js": function(t, e, n) {
        var i = n("./node_modules/msgpack-lite/lib/ext-buffer.js").ExtBuffer;
        var r = n("./node_modules/msgpack-lite/lib/ext-unpacker.js");
        var a = n("./node_modules/msgpack-lite/lib/read-format.js").readUint8;
        var o = n("./node_modules/msgpack-lite/lib/read-token.js");
        var s = n("./node_modules/msgpack-lite/lib/codec-base.js");
        function c() {
            var t = this.options;
            return this.decode = function(t) {
                var e = o.getReadToken(t);
                return function(t) {
                    var n = a(t);
                    var i = e[n];
                    if (!i) throw new Error("Invalid type: " + (n ? "0x" + n.toString(16) : n));
                    return i(t);
                };
            }(t), t && t.preset && r.setExtUnpackers(this), this;
        }
        s.install({
            addExtUnpacker: function(t, e) {
                (this.extUnpackers || (this.extUnpackers = []))[t] = s.filter(e);
            },
            getExtUnpacker: function(t) {
                return (this.extUnpackers || (this.extUnpackers = []))[t] || function(e) {
                    return new i(e, t);
                };
            },
            init: c
        }), e.preset = c.call(s.preset);
    },
    "./node_modules/msgpack-lite/lib/read-format.js": function(t, e, n) {
        var i = n("./node_modules/ieee754/index.js");
        var r = n("./node_modules/int64-buffer/int64-buffer.js");
        var a = r.Uint64BE;
        var o = r.Int64BE;
        e.getReadFormat = function(t) {
            var e = s.hasArrayBuffer && t && t.binarraybuffer;
            var n = t && t.int64;
            return {
                map: l && t && t.usemap ? d : f,
                array: h,
                str: m,
                bin: e ? v : p,
                ext: g,
                uint8: b,
                uint16: y,
                uint32: _,
                uint64: M(8, n ? A : j),
                int8: k,
                int16: w,
                int32: x,
                int64: M(8, n ? T : S),
                float32: M(4, D),
                float64: M(8, P)
            };
        }, e.readUint8 = b;
        var s = n("./node_modules/msgpack-lite/lib/bufferish.js");
        var c = n("./node_modules/msgpack-lite/lib/bufferish-proto.js");
        var l = "undefined" != typeof Map;
        var u = !0;
        function f(t, e) {
            var n = {};
            var i;
            var r = new Array(e);
            var a = new Array(e);
            var o = t.codec.decode;
            for (i = 0; i < e; i++) r[i] = o(t), a[i] = o(t);
            for (i = 0; i < e; i++) n[r[i]] = a[i];
            return n;
        }
        function d(t, e) {
            var n = new Map;
            var i;
            var r = new Array(e);
            var a = new Array(e);
            var o = t.codec.decode;
            for (i = 0; i < e; i++) r[i] = o(t), a[i] = o(t);
            for (i = 0; i < e; i++) n.set(r[i], a[i]);
            return n;
        }
        function h(t, e) {
            var n = new Array(e);
            var i = t.codec.decode;
            for (var r = 0; r < e; r++) n[r] = i(t);
            return n;
        }
        function m(t, e) {
            var n = t.reserve(e);
            var i = n + e;
            return c.toString.call(t.buffer, "utf-8", n, i);
        }
        function p(t, e) {
            var n = t.reserve(e);
            var i = n + e;
            var r = c.slice.call(t.buffer, n, i);
            return s.from(r);
        }
        function v(t, e) {
            var n = t.reserve(e);
            var i = n + e;
            var r = c.slice.call(t.buffer, n, i);
            return s.Uint8Array.from(r).buffer;
        }
        function g(t, e) {
            var n = t.reserve(e + 1);
            var i = t.buffer[n++];
            var r = n + e;
            var a = t.codec.getExtUnpacker(i);
            if (!a) throw new Error("Invalid ext type: " + (i ? "0x" + i.toString(16) : i));
            return a(c.slice.call(t.buffer, n, r));
        }
        function b(t) {
            var e = t.reserve(1);
            return t.buffer[e];
        }
        function k(t) {
            var e = t.reserve(1);
            var n = t.buffer[e];
            return 128 & n ? n - 256 : n;
        }
        function y(t) {
            var e = t.reserve(2);
            var n = t.buffer;
            return n[e++] << 8 | n[e];
        }
        function w(t) {
            var e = t.reserve(2);
            var n = t.buffer;
            var i = n[e++] << 8 | n[e];
            return 32768 & i ? i - 65536 : i;
        }
        function _(t) {
            var e = t.reserve(4);
            var n = t.buffer;
            return 16777216 * n[e++] + (n[e++] << 16) + (n[e++] << 8) + n[e];
        }
        function x(t) {
            var e = t.reserve(4);
            var n = t.buffer;
            return n[e++] << 24 | n[e++] << 16 | n[e++] << 8 | n[e];
        }
        function M(t, e) {
            return function(n) {
                var i = n.reserve(t);
                return e.call(n.buffer, i, u);
            };
        }
        function j(t) {
            return new a(this, t).toNumber();
        }
        function S(t) {
            return new o(this, t).toNumber();
        }
        function A(t) {
            return new a(this, t);
        }
        function T(t) {
            return new o(this, t);
        }
        function D(t) {
            return i.read(this, t, !1, 23, 4);
        }
        function P(t) {
            return i.read(this, t, !1, 52, 8);
        }
    },
    "./node_modules/msgpack-lite/lib/read-token.js": function(t, e, n) {
        var i = n("./node_modules/msgpack-lite/lib/read-format.js");
        function r(t) {
            var e;
            var n = new Array(256);
            for (e = 0; e <= 127; e++) n[e] = a(e);
            for (e = 128; e <= 143; e++) n[e] = s(e - 128, t.map);
            for (e = 144; e <= 159; e++) n[e] = s(e - 144, t.array);
            for (e = 160; e <= 191; e++) n[e] = s(e - 160, t.str);
            for (n[192] = a(null), n[193] = null, n[194] = a(!1), n[195] = a(!0), n[196] = o(t.uint8, t.bin),
            n[197] = o(t.uint16, t.bin), n[198] = o(t.uint32, t.bin), n[199] = o(t.uint8, t.ext),
            n[200] = o(t.uint16, t.ext), n[201] = o(t.uint32, t.ext), n[202] = t.float32, n[203] = t.float64,
            n[204] = t.uint8, n[205] = t.uint16, n[206] = t.uint32, n[207] = t.uint64, n[208] = t.int8,
            n[209] = t.int16, n[210] = t.int32, n[211] = t.int64, n[212] = s(1, t.ext), n[213] = s(2, t.ext),
            n[214] = s(4, t.ext), n[215] = s(8, t.ext), n[216] = s(16, t.ext), n[217] = o(t.uint8, t.str),
            n[218] = o(t.uint16, t.str), n[219] = o(t.uint32, t.str), n[220] = o(t.uint16, t.array),
            n[221] = o(t.uint32, t.array), n[222] = o(t.uint16, t.map), n[223] = o(t.uint32, t.map),
            e = 224; e <= 255; e++) n[e] = a(e - 256);
            return n;
        }
        function a(t) {
            return function() {
                return t;
            };
        }
        function o(t, e) {
            return function(n) {
                var i = t(n);
                return e(n, i);
            };
        }
        function s(t, e) {
            return function(n) {
                return e(n, t);
            };
        }
        e.getReadToken = function(t) {
            var e = i.getReadFormat(t);
            return t && t.useraw ? function(t) {
                var e;
                var n = r(t).slice();
                for (n[217] = n[196], n[218] = n[197], n[219] = n[198], e = 160; e <= 191; e++) n[e] = s(e - 160, t.bin);
                return n;
            }(e) : r(e);
        };
    },
    "./node_modules/msgpack-lite/lib/write-core.js": function(t, e, n) {
        var i = n("./node_modules/msgpack-lite/lib/ext-buffer.js").ExtBuffer;
        var r = n("./node_modules/msgpack-lite/lib/ext-packer.js");
        var a = n("./node_modules/msgpack-lite/lib/write-type.js");
        var o = n("./node_modules/msgpack-lite/lib/codec-base.js");
        function s() {
            var t = this.options;
            return this.encode = function(t) {
                var e = a.getWriteType(t);
                return function(t, n) {
                    var i = e[typeof n];
                    if (!i) throw new Error("Unsupported type \"" + typeof n + "\": " + n);
                    i(t, n);
                };
            }(t), t && t.preset && r.setExtPackers(this), this;
        }
        o.install({
            addExtPacker: function(t, e, n) {
                n = o.filter(n);
                var r = e.name;
                if (r && "Object" !== r) {
                    (this.extPackers || (this.extPackers = {}))[r] = a;
                } else {
                    (this.extEncoderList || (this.extEncoderList = [])).unshift([ e, a ]);
                }
                function a(e) {
                    return n && (e = n(e)), new i(e, t);
                }
            },
            getExtPacker: function(t) {
                var e = this.extPackers || (this.extPackers = {});
                var n = t.constructor;
                var i = n && n.name && e[n.name];
                if (i) return i;
                var r = this.extEncoderList || (this.extEncoderList = []);
                var a = r.length;
                for (var o = 0; o < a; o++) {
                    var s = r[o];
                    if (n === s[0]) return s[1];
                }
            },
            init: s
        }), e.preset = s.call(o.preset);
    },
    "./node_modules/msgpack-lite/lib/write-token.js": function(t, e, n) {
        var i = n("./node_modules/ieee754/index.js");
        var r = n("./node_modules/int64-buffer/int64-buffer.js");
        var a = r.Uint64BE;
        var o = r.Int64BE;
        var s = n("./node_modules/msgpack-lite/lib/write-uint8.js").uint8;
        var c = n("./node_modules/msgpack-lite/lib/bufferish.js");
        var l = c.global;
        var u = c.hasBuffer && "TYPED_ARRAY_SUPPORT" in l && !l.TYPED_ARRAY_SUPPORT;
        var f = c.hasBuffer && l.prototype || {};
        function d() {
            var t = s.slice();
            return t[196] = h(196), t[197] = m(197), t[198] = p(198), t[199] = h(199), t[200] = m(200),
            t[201] = p(201), t[202] = v(202, 4, f.writeFloatBE || k, !0), t[203] = v(203, 8, f.writeDoubleBE || y, !0),
            t[204] = h(204), t[205] = m(205), t[206] = p(206), t[207] = v(207, 8, g), t[208] = h(208),
            t[209] = m(209), t[210] = p(210), t[211] = v(211, 8, b), t[217] = h(217), t[218] = m(218),
            t[219] = p(219), t[220] = m(220), t[221] = p(221), t[222] = m(222), t[223] = p(223),
            t;
        }
        function h(t) {
            return function(e, n) {
                var i = e.reserve(2);
                var r = e.buffer;
                r[i++] = t, r[i] = n;
            };
        }
        function m(t) {
            return function(e, n) {
                var i = e.reserve(3);
                var r = e.buffer;
                r[i++] = t, r[i++] = n >>> 8, r[i] = n;
            };
        }
        function p(t) {
            return function(e, n) {
                var i = e.reserve(5);
                var r = e.buffer;
                r[i++] = t, r[i++] = n >>> 24, r[i++] = n >>> 16, r[i++] = n >>> 8, r[i] = n;
            };
        }
        function v(t, e, n, i) {
            return function(r, a) {
                var o = r.reserve(e + 1);
                r.buffer[o++] = t, n.call(r.buffer, a, o, i);
            };
        }
        function g(t, e) {
            new a(this, e, t);
        }
        function b(t, e) {
            new o(this, e, t);
        }
        function k(t, e) {
            i.write(this, t, e, !1, 23, 4);
        }
        function y(t, e) {
            i.write(this, t, e, !1, 52, 8);
        }
        e.getWriteToken = function(t) {
            return t && t.uint8array ? ((e = d())[202] = v(202, 4, k), e[203] = v(203, 8, y),
            e) : u || c.hasBuffer && t && t.safe ? function() {
                var t = s.slice();
                return t[196] = v(196, 1, l.prototype.writeUInt8), t[197] = v(197, 2, l.prototype.writeUInt16BE),
                t[198] = v(198, 4, l.prototype.writeUInt32BE), t[199] = v(199, 1, l.prototype.writeUInt8),
                t[200] = v(200, 2, l.prototype.writeUInt16BE), t[201] = v(201, 4, l.prototype.writeUInt32BE),
                t[202] = v(202, 4, l.prototype.writeFloatBE), t[203] = v(203, 8, l.prototype.writeDoubleBE),
                t[204] = v(204, 1, l.prototype.writeUInt8), t[205] = v(205, 2, l.prototype.writeUInt16BE),
                t[206] = v(206, 4, l.prototype.writeUInt32BE), t[207] = v(207, 8, g), t[208] = v(208, 1, l.prototype.writeInt8),
                t[209] = v(209, 2, l.prototype.writeInt16BE), t[210] = v(210, 4, l.prototype.writeInt32BE),
                t[211] = v(211, 8, b), t[217] = v(217, 1, l.prototype.writeUInt8), t[218] = v(218, 2, l.prototype.writeUInt16BE),
                t[219] = v(219, 4, l.prototype.writeUInt32BE), t[220] = v(220, 2, l.prototype.writeUInt16BE),
                t[221] = v(221, 4, l.prototype.writeUInt32BE), t[222] = v(222, 2, l.prototype.writeUInt16BE),
                t[223] = v(223, 4, l.prototype.writeUInt32BE), t;
            }() : d();
            var e;
        };
    },
    "./node_modules/msgpack-lite/lib/write-type.js": function(t, e, n) {
        var i = n("./node_modules/msgpack-lite/node_modules/isarray/index.js");
        var r = n("./node_modules/int64-buffer/int64-buffer.js");
        var a = r.Uint64BE;
        var o = r.Int64BE;
        var s = n("./node_modules/msgpack-lite/lib/bufferish.js");
        var c = n("./node_modules/msgpack-lite/lib/bufferish-proto.js");
        var l = n("./node_modules/msgpack-lite/lib/write-token.js");
        var u = n("./node_modules/msgpack-lite/lib/write-uint8.js").uint8;
        var f = n("./node_modules/msgpack-lite/lib/ext-buffer.js").ExtBuffer;
        var d = "undefined" != typeof Uint8Array;
        var h = "undefined" != typeof Map;
        var m = [];
        m[1] = 212, m[2] = 213, m[4] = 214, m[8] = 215, m[16] = 216, e.getWriteType = function(t) {
            var e = l.getWriteToken(t);
            var n = t && t.useraw;
            var r = d && t && t.binarraybuffer;
            var p = r ? s.isArrayBuffer : s.isBuffer;
            var v = r ? function(t, e) {
                y(t, new Uint8Array(e));
            } : y;
            var g = h && t && t.usemap ? function(t, n) {
                if (!(n instanceof Map)) return w(t, n);
                var i = n.size;
                e[i < 16 ? 128 + i : i <= 65535 ? 222 : 223](t, i);
                var r = t.codec.encode;
                n.forEach(function(e, n, i) {
                    r(t, n), r(t, e);
                });
            } : w;
            return {
                boolean: function(t, n) {
                    e[n ? 195 : 194](t, n);
                },
                function: k,
                number: function(t, n) {
                    var i = 0 | n;
                    var r;
                    if (n !== i) return void e[r = 203](t, n);
                    r = -32 <= i && i <= 127 ? 255 & i : 0 <= i ? i <= 255 ? 204 : i <= 65535 ? 205 : 206 : -128 <= i ? 208 : -32768 <= i ? 209 : 210;
                    e[r](t, i);
                },
                object: n ? function(t, n) {
                    if (p(n)) return function(t, n) {
                        var i = n.length;
                        e[i < 32 ? 160 + i : i <= 65535 ? 218 : 219](t, i), t.send(n);
                    }(t, n);
                    b(t, n);
                } : b,
                string: function(t) {
                    return n;
                    function n(n, i) {
                        var r = i.length;
                        var a = 5 + 3 * r;
                        n.offset = n.reserve(a);
                        var o = n.buffer;
                        var s = t(r);
                        var l = n.offset + s;
                        r = c.write.call(o, i, l);
                        var u = t(r);
                        if (s !== u) {
                            var f = l + u - s;
                            var d = l + r;
                            c.copy.call(o, o, f, l, d);
                        }
                        e[1 === u ? 160 + r : u <= 3 ? 215 + u : 219](n, r), n.offset += r;
                    }
                }(n ? function(t) {
                    return t < 32 ? 1 : t <= 65535 ? 3 : 5;
                } : function(t) {
                    return t < 32 ? 1 : t <= 255 ? 2 : t <= 65535 ? 3 : 5;
                }),
                symbol: k,
                undefined: k
            };
            function b(t, n) {
                if (null === n) return k(t, n);
                if (p(n)) return v(t, n);
                if (i(n)) return function(t, n) {
                    var i = n.length;
                    e[i < 16 ? 144 + i : i <= 65535 ? 220 : 221](t, i);
                    var r = t.codec.encode;
                    for (var a = 0; a < i; a++) r(t, n[a]);
                }(t, n);
                if (a.isUint64BE(n)) return function(t, n) {
                    e[207](t, n.toArray());
                }(t, n);
                if (o.isInt64BE(n)) return function(t, n) {
                    e[211](t, n.toArray());
                }(t, n);
                var r = t.codec.getExtPacker(n);
                if (r && (n = r(n)), n instanceof f) return function(t, n) {
                    var i = n.buffer;
                    var r = i.length;
                    var a = m[r] || (r < 255 ? 199 : r <= 65535 ? 200 : 201);
                    e[a](t, r), u[n.type](t), t.send(i);
                }(t, n);
                g(t, n);
            }
            function k(t, n) {
                e[192](t, n);
            }
            function y(t, n) {
                var i = n.length;
                e[i < 255 ? 196 : i <= 65535 ? 197 : 198](t, i), t.send(n);
            }
            function w(t, n) {
                var i = Object.keys(n);
                var r = i.length;
                e[r < 16 ? 128 + r : r <= 65535 ? 222 : 223](t, r);
                var a = t.codec.encode;
                i.forEach(function(e) {
                    a(t, e), a(t, n[e]);
                });
            }
        };
    },
    "./node_modules/msgpack-lite/lib/write-uint8.js": function(t, e) {
        var n = e.uint8 = new Array(256);
        for (var i = 0; i <= 255; i++) n[i] = r(i);
        function r(t) {
            return function(e) {
                var n = e.reserve(1);
                e.buffer[n] = t;
            };
        }
    },
    "./node_modules/msgpack-lite/node_modules/isarray/index.js": function(t, e) {
        var n = {}.toString;
        t.exports = Array.isArray || function(t) {
            return '[object Array]' == n.call(t);
        };
    },
    "./node_modules/process/browser.js": function(t, e) {
        var n = t.exports = {};
        var i;
        var r;
        function a() {
            throw new Error('setTimeout has not been defined');
        }
        function o() {
            throw new Error('clearTimeout has not been defined');
        }
        function s(t) {
            if (i === setTimeout) return setTimeout(t, 0);
            if ((i === a || !i) && setTimeout) return i = setTimeout, setTimeout(t, 0);
            try {
                return i(t, 0);
            } catch (e) {
                try {
                    return i.call(null, t, 0);
                } catch (e) {
                    return i.call(this, t, 0);
                }
            }
        }
        !function() {
            try {
                i = 'function' == typeof setTimeout ? setTimeout : a;
            } catch (t) {
                i = a;
            }
            try {
                r = 'function' == typeof clearTimeout ? clearTimeout : o;
            } catch (t) {
                r = o;
            }
        }();
        var c = [];
        var l = !1;
        var u;
        var f = -1;
        function d() {
            l && u && (l = !1, u.length ? c = u.concat(c) : f = -1, c.length && h());
        }
        function h() {
            if (!l) {
                var t = s(d);
                l = !0;
                var e = c.length;
                for (;e; ) {
                    for (u = c, c = []; ++f < e; ) u && u[f].run();
                    f = -1, e = c.length;
                }
                u = null, l = !1, function(t) {
                    if (r === clearTimeout) return clearTimeout(t);
                    if ((r === o || !r) && clearTimeout) return r = clearTimeout, clearTimeout(t);
                    try {
                        return r(t);
                    } catch (e) {
                        try {
                            return r.call(null, t);
                        } catch (e) {
                            return r.call(this, t);
                        }
                    }
                }(t);
            }
        }
        function m(t, e) {
            this.fun = t, this.array = e;
        }
        function p() {}
        n.nextTick = function(t) {
            var e = new Array(arguments.length - 1);
            if (arguments.length > 1) for (var n = 1; n < arguments.length; n++) e[n - 1] = arguments[n];
            c.push(new m(t, e)), 1 !== c.length || l || s(h);
        }, m.prototype.run = function() {
            this.fun.apply(null, this.array);
        }, n.title = 'browser', n.browser = !0, n.env = {}, n.argv = [], n.version = '',
        n.versions = {}, n.on = p, n.addListener = p, n.once = p, n.off = p, n.removeListener = p,
        n.removeAllListeners = p, n.emit = p, n.prependListener = p, n.prependOnceListener = p,
        n.listeners = function(t) {
            return [];
        }, n.binding = function(t) {
            throw new Error('process.binding is not supported');
        }, n.cwd = function() {
            return '/';
        }, n.chdir = function(t) {
            throw new Error('process.chdir is not supported');
        }, n.umask = function() {
            return 0;
        };
    },
    "./node_modules/punycode/punycode.js": function(t, e, n) {
        (function(t, n) {
            !function(i) {
                var r = e && !e.nodeType && e;
                var a = t && !t.nodeType && t;
                var o = 'object' == typeof n && n;
                o.global !== o && o.window !== o && o.self !== o || (i = o);
                var s, c = 2147483647, l = 36, u = /^xn--/, f = /[^\x20-\x7E]/, d = /[\x2E\u3002\uFF0E\uFF61]/g, h = {
                    overflow: 'Overflow: input needs wider integers to process',
                    'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
                    'invalid-input': 'Invalid input'
                }, m = Math.floor, p = String.fromCharCode;
                function v(t) {
                    throw new RangeError(h[t]);
                }
                function g(t, e) {
                    var n = t.length;
                    var i = [];
                    for (;n--; ) i[n] = e(t[n]);
                    return i;
                }
                function b(t, e) {
                    var n = t.split('@');
                    var i = '';
                    return n.length > 1 && (i = n[0] + '@', t = n[1]), i + g((t = t.replace(d, '.')).split('.'), e).join('.');
                }
                function k(t) {
                    var e, n, i = [], r = 0, a = t.length;
                    for (;r < a; ) (e = t.charCodeAt(r++)) >= 55296 && e <= 56319 && r < a ? 56320 == (64512 & (n = t.charCodeAt(r++))) ? i.push(((1023 & e) << 10) + (1023 & n) + 65536) : (i.push(e),
                    r--) : i.push(e);
                    return i;
                }
                function y(t) {
                    return g(t, function(t) {
                        var e = '';
                        return t > 65535 && (e += p((t -= 65536) >>> 10 & 1023 | 55296), t = 56320 | 1023 & t),
                        e += p(t);
                    }).join('');
                }
                function w(t) {
                    return t - 48 < 10 ? t - 22 : t - 65 < 26 ? t - 65 : t - 97 < 26 ? t - 97 : l;
                }
                function _(t, e) {
                    return t + 22 + 75 * (t < 26) - ((0 != e) << 5);
                }
                function x(t, e, n) {
                    var i = 0;
                    for (t = n ? m(t / 700) : t >> 1, t += m(t / e); t > 455; i += l) t = m(t / 35);
                    return m(i + 36 * t / (t + 38));
                }
                function M(t) {
                    var e, n, i, r, a, o, s, u, f, d, h = [], p = t.length, g = 0, b = 128, k = 72;
                    for ((n = t.lastIndexOf("-")) < 0 && (n = 0), i = 0; i < n; ++i) t.charCodeAt(i) >= 128 && v('not-basic'),
                    h.push(t.charCodeAt(i));
                    for (r = n > 0 ? n + 1 : 0; r < p; ) {
                        for (a = g, o = 1, s = l; r >= p && v('invalid-input'), ((u = w(t.charCodeAt(r++))) >= l || u > m((c - g) / o)) && v('overflow'),
                        g += u * o, !(u < (f = s <= k ? 1 : s >= k + 26 ? 26 : s - k)); s += l) o > m(c / (d = l - f)) && v('overflow'),
                        o *= d;
                        k = x(g - a, e = h.length + 1, 0 == a), m(g / e) > c - b && v('overflow'), b += m(g / e),
                        g %= e, h.splice(g++, 0, b);
                    }
                    return y(h);
                }
                function j(t) {
                    var e, n, i, r, a, o, s, u, f, d, h, g, b, y, w, M = [];
                    for (g = (t = k(t)).length, e = 128, n = 0, a = 72, o = 0; o < g; ++o) (h = t[o]) < 128 && M.push(p(h));
                    for (i = r = M.length, r && M.push("-"); i < g; ) {
                        for (s = c, o = 0; o < g; ++o) (h = t[o]) >= e && h < s && (s = h);
                        for (s - e > m((c - n) / (b = i + 1)) && v('overflow'), n += (s - e) * b, e = s,
                        o = 0; o < g; ++o) if ((h = t[o]) < e && ++n > c && v('overflow'), h == e) {
                            for (u = n, f = l; !(u < (d = f <= a ? 1 : f >= a + 26 ? 26 : f - a)); f += l) w = u - d,
                            y = l - d, M.push(p(_(d + w % y, 0))), u = m(w / y);
                            M.push(p(_(u, 0))), a = x(n, b, i == r), n = 0, ++i;
                        }
                        ++n, ++e;
                    }
                    return M.join('');
                }
                s = {
                    version: '1.4.1',
                    ucs2: {
                        decode: k,
                        encode: y
                    },
                    decode: M,
                    encode: j,
                    toASCII: function(t) {
                        return b(t, function(t) {
                            return f.test(t) ? 'xn--' + j(t) : t;
                        });
                    },
                    toUnicode: function(t) {
                        return b(t, function(t) {
                            return u.test(t) ? M(t.slice(4).toLowerCase()) : t;
                        });
                    }
                }, 'function' == typeof define && 'object' == typeof define.amd && define.amd ? define('punycode', function() {
                    return s;
                }) : r && a ? t.exports === r ? a.exports = s : r.punycode = s : i.punycode = s;
            }(this);
        }).call(this, n("./node_modules/webpack/buildin/module.js")(t), n("./node_modules/webpack/buildin/global.js"));
    },
    "./node_modules/querystring-es3/decode.js": function(t, e, n) {
        "use strict";
        function i(t, e) {
            return {}.hasOwnProperty.call(t, e);
        }
        t.exports = function(t, e, n, a) {
            e = e || '&', n = n || '=';
            var o = {};
            if ('string' != typeof t || 0 === t.length) return o;
            var s = /\+/g;
            t = t.split(e);
            var c = 1e3;
            a && 'number' == typeof a.maxKeys && (c = a.maxKeys);
            var l = t.length;
            c > 0 && l > c && (l = c);
            for (var u = 0; u < l; ++u) {
                var f, d, h, m, p = t[u].replace(s, '%20'), v = p.indexOf(n);
                v >= 0 ? (f = p.substr(0, v), d = p.substr(v + 1)) : (f = p, d = ''), h = decodeURIComponent(f),
                m = decodeURIComponent(d), i(o, h) ? r(o[h]) ? o[h].push(m) : o[h] = [ o[h], m ] : o[h] = m;
            }
            return o;
        };
        var r = Array.isArray || function(t) {
            return '[object Array]' === {}.toString.call(t);
        };
    },
    "./node_modules/querystring-es3/encode.js": function(t, e, n) {
        "use strict";
        var i = function(t) {
            switch (typeof t) {
              case 'string':
                return t;

              case 'boolean':
                return t ? 'true' : 'false';

              case 'number':
                return isFinite(t) ? t : '';

              default:
                return '';
            }
        };
        t.exports = function(t, e, n, s) {
            return e = e || '&', n = n || '=', null === t && (t = void 0), 'object' == typeof t ? a(o(t), function(o) {
                var s = encodeURIComponent(i(o)) + n;
                return r(t[o]) ? a(t[o], function(t) {
                    return s + encodeURIComponent(i(t));
                }).join(e) : s + encodeURIComponent(i(t[o]));
            }).join(e) : s ? encodeURIComponent(i(s)) + n + encodeURIComponent(i(t)) : '';
        };
        var r = Array.isArray || function(t) {
            return '[object Array]' === {}.toString.call(t);
        };
        function a(t, e) {
            if (t.map) return t.map(e);
            var n = [];
            for (var i = 0; i < t.length; i++) n.push(e(t[i], i));
            return n;
        }
        var o = Object.keys || function(t) {
            var e = [];
            for (var n in t) ({}).hasOwnProperty.call(t, n) && e.push(n);
            return e;
        };
    },
    "./node_modules/querystring-es3/index.js": function(t, e, n) {
        "use strict";
        e.decode = e.parse = n("./node_modules/querystring-es3/decode.js"), e.encode = e.stringify = n("./node_modules/querystring-es3/encode.js");
    },
    "./node_modules/url/url.js": function(t, e, n) {
        "use strict";
        var i = n("./node_modules/punycode/punycode.js");
        var r = n("./node_modules/url/util.js");
        function a() {
            this.protocol = null, this.slashes = null, this.auth = null, this.host = null, this.port = null,
            this.hostname = null, this.hash = null, this.search = null, this.query = null, this.pathname = null,
            this.path = null, this.href = null;
        }
        e.parse = k, e.resolve = function(t, e) {
            return k(t, !1, !0).resolve(e);
        }, e.resolveObject = function(t, e) {
            return t ? k(t, !1, !0).resolveObject(e) : e;
        }, e.format = function(t) {
            r.isString(t) && (t = k(t));
            return t instanceof a ? t.format() : a.prototype.format.call(t);
        }, e.Url = a;
        var o = /^([a-z0-9.+-]+:)/i, s = /:[0-9]*$/, c = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/, l = [ '{', '}', '|', '\\', '^', '`' ].concat([ '<', '>', '"', '`', ' ', '\r', '\n', '\t' ]), u = [ '\'' ].concat(l), f = [ '%', '/', '?', ';', '#' ].concat(u), d = [ '/', '?', '#' ], h = /^[+a-z0-9A-Z_-]{0,63}$/, m = /^([+a-z0-9A-Z_-]{0,63})(.*)$/, p = {
            javascript: !0,
            'javascript:': !0
        }, v = {
            javascript: !0,
            'javascript:': !0
        }, g = {
            http: !0,
            https: !0,
            ftp: !0,
            gopher: !0,
            file: !0,
            'http:': !0,
            'https:': !0,
            'ftp:': !0,
            'gopher:': !0,
            'file:': !0
        }, b = n("./node_modules/querystring-es3/index.js");
        function k(t, e, n) {
            if (t && r.isObject(t) && t instanceof a) return t;
            var i = new a;
            return i.parse(t, e, n), i;
        }
        a.prototype.parse = function(t, e, n) {
            if (!r.isString(t)) throw new TypeError("Parameter 'url' must be a string, not " + typeof t);
            var a = t.indexOf('?'), s = -1 !== a && a < t.indexOf('#') ? '?' : '#', l = t.split(s);
            l[0] = l[0].replace(/\\/g, '/');
            var k = t = l.join(s);
            if (k = k.trim(), !n && 1 === t.split('#').length) {
                var y = c.exec(k);
                if (y) return this.path = k, this.href = k, this.pathname = y[1], y[2] ? (this.search = y[2],
                this.query = e ? b.parse(this.search.substr(1)) : this.search.substr(1)) : e && (this.search = '',
                this.query = {}), this;
            }
            var w = o.exec(k);
            if (w) {
                var _ = (w = w[0]).toLowerCase();
                this.protocol = _, k = k.substr(w.length);
            }
            if (n || w || k.match(/^\/\/[^@\/]+@[^@\/]+/)) {
                var x = '//' === k.substr(0, 2);
                !x || w && v[w] || (k = k.substr(2), this.slashes = !0);
            }
            if (!v[w] && (x || w && !g[w])) {
                var M = -1;
                for (var j = 0; j < d.length; j++) {
                    -1 !== (T = k.indexOf(d[j])) && (-1 === M || T < M) && (M = T);
                }
                var S, A;
                -1 !== (A = -1 === M ? k.lastIndexOf('@') : k.lastIndexOf('@', M)) && (S = k.slice(0, A),
                k = k.slice(A + 1), this.auth = decodeURIComponent(S)), M = -1;
                for (j = 0; j < f.length; j++) {
                    var T;
                    -1 !== (T = k.indexOf(f[j])) && (-1 === M || T < M) && (M = T);
                }
                -1 === M && (M = k.length), this.host = k.slice(0, M), k = k.slice(M), this.parseHost(),
                this.hostname = this.hostname || '';
                var D = '[' === this.hostname[0] && ']' === this.hostname[this.hostname.length - 1];
                if (!D) {
                    var P = this.hostname.split(/\./);
                    j = 0;
                    for (var B = P.length; j < B; j++) {
                        var I = P[j];
                        if (I && !I.match(h)) {
                            var O = '';
                            for (var H = 0, E = I.length; H < E; H++) I.charCodeAt(H) > 127 ? O += 'x' : O += I[H];
                            if (!O.match(h)) {
                                var C = P.slice(0, j);
                                var z = P.slice(j + 1);
                                var R = I.match(m);
                                R && (C.push(R[1]), z.unshift(R[2])), z.length && (k = '/' + z.join('.') + k), this.hostname = C.join('.');
                                break;
                            }
                        }
                    }
                }
                this.hostname.length > 255 ? this.hostname = '' : this.hostname = this.hostname.toLowerCase(),
                D || (this.hostname = i.toASCII(this.hostname));
                var $ = this.port ? ':' + this.port : '';
                var U = this.hostname || '';
                this.host = U + $, this.href += this.host, D && (this.hostname = this.hostname.substr(1, this.hostname.length - 2),
                '/' !== k[0] && (k = '/' + k));
            }
            if (!p[_]) for (j = 0, B = u.length; j < B; j++) {
                var F = u[j];
                if (-1 !== k.indexOf(F)) {
                    var L = encodeURIComponent(F);
                    L === F && (L = escape(F)), k = k.split(F).join(L);
                }
            }
            var N = k.indexOf('#');
            -1 !== N && (this.hash = k.substr(N), k = k.slice(0, N));
            var q = k.indexOf('?');
            if (-1 !== q ? (this.search = k.substr(q), this.query = k.substr(q + 1), e && (this.query = b.parse(this.query)),
            k = k.slice(0, q)) : e && (this.search = '', this.query = {}), k && (this.pathname = k),
            g[_] && this.hostname && !this.pathname && (this.pathname = '/'), this.pathname || this.search) {
                $ = this.pathname || '';
                var G = this.search || '';
                this.path = $ + G;
            }
            return this.href = this.format(), this;
        }, a.prototype.format = function() {
            var t = this.auth || '';
            t && (t = (t = encodeURIComponent(t)).replace(/%3A/i, ':'), t += '@');
            var e = this.protocol || '', n = this.pathname || '', i = this.hash || '', a = !1, o = '';
            this.host ? a = t + this.host : this.hostname && (a = t + (-1 === this.hostname.indexOf(':') ? this.hostname : '[' + this.hostname + ']'),
            this.port && (a += ':' + this.port)), this.query && r.isObject(this.query) && Object.keys(this.query).length && (o = b.stringify(this.query));
            var s = this.search || o && '?' + o || '';
            return e && ':' !== e.substr(-1) && (e += ':'), this.slashes || (!e || g[e]) && !1 !== a ? (a = '//' + (a || ''),
            n && '/' !== n.charAt(0) && (n = '/' + n)) : a || (a = ''), i && '#' !== i.charAt(0) && (i = '#' + i),
            s && '?' !== s.charAt(0) && (s = '?' + s), e + a + (n = n.replace(/[?#]/g, function(t) {
                return encodeURIComponent(t);
            })) + (s = s.replace('#', '%23')) + i;
        }, a.prototype.resolve = function(t) {
            return this.resolveObject(k(t, !1, !0)).format();
        }, a.prototype.resolveObject = function(t) {
            if (r.isString(t)) {
                var e = new a;
                e.parse(t, !1, !0), t = e;
            }
            var n = new a;
            var i = Object.keys(this);
            for (var o = 0; o < i.length; o++) {
                var s = i[o];
                n[s] = this[s];
            }
            if (n.hash = t.hash, '' === t.href) return n.href = n.format(), n;
            if (t.slashes && !t.protocol) {
                var c = Object.keys(t);
                for (var l = 0; l < c.length; l++) {
                    var u = c[l];
                    'protocol' !== u && (n[u] = t[u]);
                }
                return g[n.protocol] && n.hostname && !n.pathname && (n.path = n.pathname = '/'),
                n.href = n.format(), n;
            }
            if (t.protocol && t.protocol !== n.protocol) {
                if (!g[t.protocol]) {
                    var f = Object.keys(t);
                    for (var d = 0; d < f.length; d++) {
                        var h = f[d];
                        n[h] = t[h];
                    }
                    return n.href = n.format(), n;
                }
                if (n.protocol = t.protocol, t.host || v[t.protocol]) n.pathname = t.pathname; else {
                    var m = (t.pathname || '').split('/');
                    for (;m.length && !(t.host = m.shift()); ) ;
                    t.host || (t.host = ''), t.hostname || (t.hostname = ''), '' !== m[0] && m.unshift(''),
                    m.length < 2 && m.unshift(''), n.pathname = m.join('/');
                }
                if (n.search = t.search, n.query = t.query, n.host = t.host || '', n.auth = t.auth,
                n.hostname = t.hostname || t.host, n.port = t.port, n.pathname || n.search) {
                    var p = n.pathname || '';
                    var b = n.search || '';
                    n.path = p + b;
                }
                return n.slashes = n.slashes || t.slashes, n.href = n.format(), n;
            }
            var k = n.pathname && '/' === n.pathname.charAt(0), y = t.host || t.pathname && '/' === t.pathname.charAt(0), w = y || k || n.host && t.pathname, _ = w, x = n.pathname && n.pathname.split('/') || [], M = (m = t.pathname && t.pathname.split('/') || [],
            n.protocol && !g[n.protocol]);
            if (M && (n.hostname = '', n.port = null, n.host && ('' === x[0] ? x[0] = n.host : x.unshift(n.host)),
            n.host = '', t.protocol && (t.hostname = null, t.port = null, t.host && ('' === m[0] ? m[0] = t.host : m.unshift(t.host)),
            t.host = null), w = w && ('' === m[0] || '' === x[0])), y) n.host = t.host || '' === t.host ? t.host : n.host,
            n.hostname = t.hostname || '' === t.hostname ? t.hostname : n.hostname, n.search = t.search,
            n.query = t.query, x = m; else if (m.length) x || (x = []), x.pop(), x = x.concat(m),
            n.search = t.search, n.query = t.query; else if (!r.isNullOrUndefined(t.search)) {
                if (M) n.hostname = n.host = x.shift(), (P = !!(n.host && n.host.indexOf('@') > 0) && n.host.split('@')) && (n.auth = P.shift(),
                n.host = n.hostname = P.shift());
                return n.search = t.search, n.query = t.query, r.isNull(n.pathname) && r.isNull(n.search) || (n.path = (n.pathname ? n.pathname : '') + (n.search ? n.search : '')),
                n.href = n.format(), n;
            }
            if (!x.length) return n.pathname = null, n.search ? n.path = '/' + n.search : n.path = null,
            n.href = n.format(), n;
            var j = x.slice(-1)[0];
            var S = (n.host || t.host || x.length > 1) && ('.' === j || '..' === j) || '' === j;
            var A = 0;
            for (var T = x.length; T >= 0; T--) '.' === (j = x[T]) ? x.splice(T, 1) : '..' === j ? (x.splice(T, 1),
            A++) : A && (x.splice(T, 1), A--);
            if (!w && !_) for (;A--; A) x.unshift('..');
            !w || '' === x[0] || x[0] && '/' === x[0].charAt(0) || x.unshift(''), S && '/' !== x.join('/').substr(-1) && x.push('');
            var D = '' === x[0] || x[0] && '/' === x[0].charAt(0);
            var P;
            M && (n.hostname = n.host = D ? '' : x.length ? x.shift() : '', (P = !!(n.host && n.host.indexOf('@') > 0) && n.host.split('@')) && (n.auth = P.shift(),
            n.host = n.hostname = P.shift()));
            return (w = w || n.host && x.length) && !D && x.unshift(''), x.length ? n.pathname = x.join('/') : (n.pathname = null,
            n.path = null), r.isNull(n.pathname) && r.isNull(n.search) || (n.path = (n.pathname ? n.pathname : '') + (n.search ? n.search : '')),
            n.auth = t.auth || n.auth, n.slashes = n.slashes || t.slashes, n.href = n.format(),
            n;
        }, a.prototype.parseHost = function() {
            var t = this.host;
            var e = s.exec(t);
            e && (':' !== (e = e[0]) && (this.port = e.substr(1)), t = t.substr(0, t.length - e.length)),
            t && (this.hostname = t);
        };
    },
    "./node_modules/url/util.js": function(t, e, n) {
        "use strict";
        t.exports = {
            isString: function(t) {
                return 'string' == typeof t;
            },
            isObject: function(t) {
                return 'object' == typeof t && null !== t;
            },
            isNull: function(t) {
                return null === t;
            },
            isNullOrUndefined: function(t) {
                return null == t;
            }
        };
    },
    "./node_modules/webpack/buildin/global.js": function(t, e) {
        var n;
        n = function() {
            return this;
        }();
        try {
            n = n || new Function("return this")();
        } catch (t) {
            "object" == typeof window && (n = window);
        }
        t.exports = n;
    },
    "./node_modules/webpack/buildin/module.js": function(t, e) {
        t.exports = function(t) {
            return t.webpackPolyfill || (t.deprecate = function() {}, t.paths = [], t.children || (t.children = []),
            Object.defineProperty(t, "loaded", {
                enumerable: !0,
                get: function() {
                    return t.l;
                }
            }), Object.defineProperty(t, "A", {
                enumerable: !0,
                get: function() {
                    return t.i;
                }
            }), t.webpackPolyfill = 1), t;
        };
    },
    "./src/js/app.js": function(t, e, n) {
        "use strict";
        window.loadedScript = !0;
        "127.0.0.1" !== location.hostname && location.hostname.startsWith("192.168.");
        n("./src/js/libs/modernizr.js");
        var i = n("./src/js/libs/io-client.js");
        !function() {
            try {
                const t = i.send.bind(i);
                let e = !1;
                window._modPacketStats || (window._modPacketStats = {
                    recent: [],
                    totals: {},
                    lastPayload: {},
                    lastUpdate: 0
                }), i.send = function() {
                    try {
                        const n = [].slice.call(arguments);
                        const r = n[0];
                        try {
                            const t = window._modPacketStats;
                            const e = Date.now();
                            t.recent.push({
                                t: e,
                                type: r
                            }), t.totals[r] = (t.totals[r] || 0) + 1;
                            try {
                                t.lastPayload[r] = JSON.stringify(n.slice(1));
                            } catch (e) {
                                t.lastPayload[r] = String(n.slice(1));
                            }
                            t.lastPayload[r] && t.lastPayload[r].length > 140 && (t.lastPayload[r] = t.lastPayload[r].slice(0, 140) + '...'),
                            t.lastUpdate = e;
                        } catch (t) {}
                        if ("9" === r) {
                            const r = void 0 !== Ur && void 0 !== Zr && Ur > Zr;
                            const a = null != zr && null != Rr;
                            if (r && (a || null != Er && null != Cr) && Gt) {
                                const r = n[1];
                                if ('number' == typeof r) {
                                    const o = a ? zr : Er;
                                    const s = a ? Rr : Cr;
                                    const c = Math.atan2(s - Gt.y2, o - Gt.x2);
                                    let l = Math.abs(r - c);
                                    if (l > Math.PI && (l = 2 * Math.PI - l), l > Math.PI / 2) return e = !1, t.apply(i, n);
                                    if (!e) {
                                        try {
                                            t.apply(i, [ "9", void 0 ]);
                                        } catch (t) {}
                                        e = !0;
                                        try {} catch (t) {}
                                    }
                                    return;
                                }
                                return e = !1, t.apply(i, n);
                            }
                            if (r) {
                                if (!e) {
                                    try {
                                        t.apply(i, [ "9", void 0 ]);
                                    } catch (t) {}
                                    e = !0;
                                    try {} catch (t) {}
                                }
                                return;
                            }
                        }
                        return t.apply(i, n);
                    } catch (e) {
                        try {
                            return t.apply(i, arguments);
                        } catch (t) {}
                    }
                };
            } catch (t) {}
        }();
        var J = n("./src/js/libs/utils.js");
        var Q = n("./src/js/libs/animText.js");
        var tt = n("./src/js/config.js");
        var et = n("./src/js/data/gameObject.js");
        var it = n("./src/js/data/items.js");
        n("./src/js/data/mapManager.js");
        var rt = n("./src/js/data/objectManager.js");
        var at = n("./src/js/data/player.js");
        var ot = n("./src/js/data/store.js");
        var ct = n("./src/js/data/projectile.js");
        var lt = n("./src/js/data/projectileManager.js");
        var ut = n("./src/js/libs/soundManager.js").obj;
        var ft = new Q.TextManager;
        var dt = !1;
        var ht = !1;
        window.OriginalWebSocket = window.WebSocket, window.altcha = {
            replaceWith: () => {}
        };
        const mt = window.fetch;
        window.fetch = async function(t) {
            try {
                let e = t;
                return "string" == typeof e && e.includes("v=1.26") && (arguments[0] = e.split("v=1.26")[0] + "v=1.27"),
                mt.apply(this, arguments);
            } catch (t) {}
        };
        var pt = "";
        window.connectSocket = bt;
        let vt = window.onGotTurnstileToken;
        Object.defineProperty(window, 'onGotTurnstileToken', {
            set: function(t) {
                vt = t;
            },
            get: function() {
                return function(t) {
                    pt = t;
                    let e = document.getElementById("enterGame");
                    e && e.classList.remove("disabled");
                };
            },
            configurable: !0
        });
        let gt = document.getElementById("enterGame");
        if (gt) {
            let t = function(t) {
                if (gt.classList.contains("disabled")) return;
                t && t.preventDefault && t.preventDefault(), t && t.stopImmediatePropagation && t.stopImmediatePropagation();
                let e = document.querySelector('[name="cf-turnstile-response"]');
                !async function(t) {
                    if (ht) return void (dt && Ti());
                    ht = !0, fn("Connecting...");
                    try {
                        let e = "sandbox.moomoo.io" === window.location.hostname ? "https://api-sandbox.moomoo.io" : "https://api.moomoo.io";
                        let n = await fetch(e + "/servers?v=1.27");
                        let i = await n.json();
                        let r = i.find(t => t.playerCount < t.playerCapacity) || i[0];
                        let a = new URLSearchParams(window.location.search).get("server");
                        if (a) {
                            let [t, e] = a.split(":");
                            let n = i.find(n => n.region === t && n.name === e);
                            n && (r = n);
                        }
                        if (!r) return ht = !1, void un("No servers found");
                        let o = "wss://" + r.key + "." + r.region + ".moomoo.io";
                        r.port && 443 !== r.port && (o += ":" + r.port), t && (o += "?token=" + encodeURIComponent("cf:" + t)),
                        bt(o);
                    } catch (t) {
                        ht = !1, un("Connection Error");
                    }
                }(pt || (e ? e.value : ""));
            };
            gt.addEventListener("click", t, !0), Object.defineProperty(gt, 'onclick', {
                set: function(t) {},
                get: function() {
                    return t;
                },
                configurable: !0
            });
        }
        function bt(t) {
            i.connect(t, function(t) {
                if (Ps(), setInterval(() => Ps(), 2500), t) ht = !1, un(t); else {
                    dt = !0, fe.onclick = J.checkTrusted(function() {}), J.hookTouchEvents(fe), de.onclick = J.checkTrusted(function() {
                        Os('https://krunker.io/?play=SquidGame_KB');
                    }), J.hookTouchEvents(de), me.onclick = J.checkTrusted(function() {
                        setTimeout(function() {
                            var t, e;
                            t = _e.value, (e = prompt("party key", t)) && (window.onbeforeunload = void 0, window.location.href = "/?server=" + e);
                        }, 10);
                    }), J.hookTouchEvents(me), pe.onclick = J.checkTrusted(function() {
                        Te.classList.contains("showing") ? (Te.classList.remove("showing"), ve.innerText = "Settings") : (Te.classList.add("showing"),
                        ve.innerText = "Close");
                    }), J.hookTouchEvents(pe), ge.onclick = J.checkTrusted(function() {
                        fi(), "block" != qe.style.display ? wn() : qe.style.display = "none";
                    }), J.hookTouchEvents(ge), be.onclick = J.checkTrusted(function() {
                        "block" != Je.style.display ? (Je.style.display = "block", qe.style.display = "none",
                        Xn(), Rn()) : Je.style.display = "none";
                    }), J.hookTouchEvents(be), ke.onclick = J.checkTrusted(function() {
                        Kn();
                    }), J.hookTouchEvents(ke), Ke.onclick = J.checkTrusted(function() {
                        xi();
                    }), J.hookTouchEvents(Ke), function() {
                        for (var t = 0; t < Ri.length; ++t) {
                            var e = new Image;
                            e.onload = function() {
                                this.isLoaded = !0;
                            }, e.src = ".././img/icons/" + Ri[t] + ".png", zi[Ri[t]] = e;
                        }
                    }(), De.style.display = "none", Ae.style.display = "block", Re.value = At("moo_name") || "",
                    function() {
                        try {
                            var t = document.getElementById('mod_actionBarCount_style');
                            t || ((t = document.createElement('style')).id = 'mod_actionBarCount_style', t.innerHTML = '.actionBarCount { font-family: "Brush Script MT", cursive; font-weight: 900; color: #ffffff; box-shadow: none; border: none; background: transparent; letter-spacing: 2px; }\n',
                            document.head.appendChild(t));
                        } catch (t) {}
                        var e = At("native_resolution");
                        Nn(e ? "true" == e : "undefined" != typeof cordova), Pt = "true" == At("show_ping"),
                        je.hidden = !Pt, At("moo_moosic") || 0, setInterval(function() {
                            window.cordova && (document.getElementById("downloadButtonContainer").classList.add("cordova"),
                            document.getElementById("mobileDownloadButtonContainer").classList.add("cordova"));
                        }, 1e3), qn(), J.removeAllChildren(Be);
                        for (var n = 0; n < it.weapons.length + it.list.length; ++n) (function(t) {
                            J.generateElement({
                                id: "actionBarItem" + t,
                                class: "actionBarItem",
                                style: "display:none",
                                onmouseout: function() {
                                    dn();
                                },
                                parent: Be
                            });
                        })(n);
                        for (n = 0; n < it.list.length + it.weapons.length; ++n) (function(t) {
                            var e = document.createElement('canvas');
                            e.width = e.height = 66;
                            var n = e.getContext('2d');
                            if (n.translate(e.width / 2, e.height / 2), n.imageSmoothingEnabled = !1, n.webkitImageSmoothingEnabled = !1,
                            n.mozImageSmoothingEnabled = !1, it.weapons[t]) {
                                n.rotate(Math.PI / 4 + Math.PI);
                                var i = new Image;
                                or[it.weapons[t].src] = i, i.onload = function() {
                                    this.isLoaded = !0;
                                    var i = 1 / (this.height / this.width);
                                    var r = it.weapons[t].iPad || 1;
                                    n.drawImage(this, -e.width * r * tt.iconPad * i / 2, -e.height * r * tt.iconPad / 2, e.width * r * i * tt.iconPad, e.height * r * tt.iconPad),
                                    n.fillStyle = "rgba(0, 0, 70, 0.1)", n.globalCompositeOperation = "source-atop",
                                    n.fillRect(-e.width / 2, -e.height / 2, e.width, e.height), document.getElementById('actionBarItem' + t).style.backgroundImage = "url(" + e.toDataURL() + ")";
                                }, i.src = ".././img/weapons/" + it.weapons[t].src + ".png", (a = document.getElementById('actionBarItem' + t)).onmouseover = J.checkTrusted(function() {
                                    dn(it.weapons[t], !0);
                                }), a.onclick = J.checkTrusted(function() {
                                    ji(t);
                                }), J.hookTouchEvents(a);
                            } else {
                                i = fr(it.list[t - it.weapons.length], !0);
                                var r = Math.min(e.width - tt.iconPadding, i.width);
                                var a;
                                n.globalAlpha = 1, n.drawImage(i, -r / 2, -r / 2, r, r), n.fillStyle = "rgba(255, 255, 255, 0)",
                                n.globalCompositeOperation = "source-atop", n.fillRect(-r / 2, -r / 2, r, r), document.getElementById('actionBarItem' + t).style.backgroundImage = "url(" + e.toDataURL() + ")",
                                (a = document.getElementById('actionBarItem' + t)).onmouseover = J.checkTrusted(function() {
                                    dn(it.list[t - it.weapons.length]);
                                }), a.onclick = J.checkTrusted(function() {
                                    ji(t - it.weapons.length);
                                }), J.hookTouchEvents(a);
                                try {
                                    a.style.position = a.style.position || 'relative';
                                    var o = document.createElement('div');
                                    o.id = 'actionBarCount' + t, o.className = 'actionBarCount', o.style.position = 'absolute',
                                    o.style.bottom = '38px', o.style.transform = 'none', o.style.textAlign = 'left',
                                    o.style.whiteSpace = 'nowrap', o.style.fontSize = '25px', o.style.color = '#ffffffff',
                                    o.style.padding = '2px 6px', o.style.display = 'none', o.style.pointerEvents = 'none',
                                    a.appendChild(o);
                                } catch (t) {}
                            }
                        })(n);
                        Re.ontouchstart = J.checkTrusted(function(t) {
                            t.preventDefault();
                            var e = prompt("enter name", t.currentTarget.value);
                            t.currentTarget.value = e.slice(0, 15);
                        }), xe.checked = Dt, xe.onchange = J.checkTrusted(function(t) {
                            Nn(t.target.checked);
                        }), Me.checked = Pt, Me.onchange = J.checkTrusted(function(t) {
                            Pt = Me.checked, je.hidden = !Pt, St("show_ping", Pt ? "true" : "false");
                        });
                        try {
                            createCustomizePanel();
                        } catch (t) {}
                        try {
                            var i = document.getElementById('ppsOverlay');
                            i || ((i = J.generateElement({
                                id: 'ppsOverlay',
                                parent: document.body
                            })).style.position = 'fixed', i.style.left = '160px', i.style.bottom = '25px', i.style.zIndex = '9999',
                            i.style.padding = '6px 8px', i.style.background = 'rgba(0, 0, 0, 0.27)', i.style.color = '#fff',
                            i.style.fontFamily = 'monospace', i.style.fontSize = '12px', i.style.borderRadius = '6px');
                        } catch (t) {}
                    }(), Ti();
                    try {
                        Z && Z.console_log_speed && ('undefined' != typeof speedLoggerInterval && speedLoggerInterval && clearInterval(speedLoggerInterval),
                        speedLoggerInterval = setInterval(() => {
                            try {
                                if (Gt) if (void 0 !== Gt.x2 && void 0 !== Gt.y2) {
                                    const t = (Gt.xVel || 0) - (Gt.x2 || 0);
                                    const e = (Gt.yVel || 0) - (Gt.y2 || 0);
                                    Math.sqrt(t * t + e * e);
                                } else {
                                    Math.sqrt(Math.pow(Gt.xVel || 0, 2) + Math.pow(Gt.yVel || 0, 2));
                                }
                            } catch (t) {}
                        }, 200));
                    } catch (t) {}
                    fe.onclick = J.checkTrusted(function() {
                        Ti();
                    }), J.hookTouchEvents(fe);
                }
            }, {
                A: sn,
                B: un,
                C: Pi,
                D: Sr,
                E: Ar,
                a: gs,
                G: Ni,
                H: vr,
                I: _r,
                J: wr,
                K: Ji,
                L: gr,
                M: br,
                N: Dr,
                O: ns,
                P: Oi,
                Q: Ei,
                R: Hi,
                S: Tr,
                T: Li,
                U: Ui,
                V: Ln,
                X: kr,
                Y: yr,
                Z: Bs,
                g: gn,
                1: yn,
                2: pn,
                3: bn,
                4: kn,
                5: zn,
                6: Zn,
                7: Hn,
                8: Bi,
                9: On,
                0: Ds
            });
        }
        function yt() {
            try {
                'undefined' != typeof speedLoggerInterval && speedLoggerInterval && (clearInterval(speedLoggerInterval),
                speedLoggerInterval = null);
            } catch (t) {}
        }
        try {
            'undefined' != typeof window && (window.startSpeedLogger = function t() {
                try {
                    'undefined' != typeof speedLoggerInterval && speedLoggerInterval && clearInterval(speedLoggerInterval);
                } catch (t) {}
                speedLoggerInterval = setInterval(() => {
                    try {
                        if (Gt) if (void 0 !== Gt.x2 && void 0 !== Gt.y2) {
                            const t = (Gt.xVel || 0) - (Gt.x2 || 0);
                            const e = (Gt.yVel || 0) - (Gt.y2 || 0);
                            Math.sqrt(t * t + e * e);
                        } else Math.sqrt(Math.pow(Gt.xVel || 0, 2) + Math.pow(Gt.yVel || 0, 2));
                    } catch (t) {}
                }, 200);
                try {
                    'undefined' != typeof window && (window.startSpeedLogger = t);
                } catch (t) {}
                try {
                    'undefined' != typeof window && (window.stopSpeedLogger = yt);
                } catch (t) {}
            }, window.stopSpeedLogger = yt, window.debugPrintPlayerPos = function() {
                try {} catch (t) {}
            });
        } catch (t) {}
        var wt = new ut(tt, J);
        var xt = Math.PI;
        var Mt = 2 * xt;
        var jt;
        function St(t, e) {
            jt && localStorage.setItem(t, e);
        }
        function At(t) {
            return jt ? localStorage.getItem(t) : null;
        }
        Math.lerpAngle = function(t, e, n) {
            Math.abs(e - t) > xt && (t > e ? e += Mt : t += Mt);
            var i = e + (t - e) * n;
            return i >= 0 && i <= Mt ? i : i % Mt;
        }, CanvasRenderingContext2D.prototype.roundRect = function(t, e, n, i, r) {
            return n < 2 * r && (r = n / 2), i < 2 * r && (r = i / 2), r < 0 && (r = 0), this.beginPath(),
            this.moveTo(t + r, e), this.arcTo(t + n, e, t + n, e + i, r), this.arcTo(t + n, e + i, t, e + i, r),
            this.arcTo(t, e + i, t, e, r), this.arcTo(t, e, t + n, e, r), this.closePath(),
            this;
        }, "undefined" != typeof Storage && (jt = !0);
        var Tt = At("moofoll");
        var Dt;
        var Pt;
        var Bt = 1;
        var It, Ot;
        var Ht = Date.now();
        var Et;
        var Ct = [];
        var zt = [];
        var Rt = [];
        var $t = [];
        var Ut = [];
        var Ft = new lt(ct, Ut, zt, Ct, nn, it, tt, J);
        var Lt = n("./src/js/data/aiManager.js");
        var Nt = n("./src/js/data/ai.js");
        var qt = new Lt(Ct, Nt, zt, it, null, tt, J);
        var Gt, Wt, Kt;
        var Yt = 1;
        var Xt = 0;
        var Vt = 0;
        var Jt = 0;
        var Zt = {
            id: -1,
            startX: 0,
            startY: 0,
            currentX: 0,
            currentY: 0
        };
        var Qt = {
            id: -1,
            startX: 0,
            startY: 0,
            currentX: 0,
            currentY: 0
        };
        var te, ee;
        var ne;
        var ie = 0;
        var re = 0;
        var ae = tt.maxScreenWidth;
        var oe = tt.maxScreenHeight;
        var se, ce;
        var le = !1;
        document.getElementById("ad-container");
        var ue = document.getElementById("mainMenu");
        var fe = document.getElementById("enterGame");
        var de = document.getElementById("promoImg");
        var he = document.getElementById("promoImgHolder");
        de && de.remove(), he && he.remove();
        document.getElementById("partyButton");
        var me = document.getElementById("joinPartyButton");
        var pe = document.getElementById("settingsButton");
        var ve = pe.getElementsByTagName("span")[0];
        var ge = document.getElementById("allianceButton");
        var be = document.getElementById("storeButton");
        var ke = document.getElementById("chatButton");
        var ye = document.getElementById("gameCanvas");
        var we = ye.getContext("2d");
        var _e = document.getElementById("serverBrowser");
        var xe = document.getElementById("nativeResolution");
        var Me = document.getElementById("showPing");
        document.getElementById("playMusic");
        var je = document.getElementById("pingDisplay");
        var Se = document.getElementById("shutdownDisplay");
        var Ae = document.getElementById("menuCardHolder");
        var Te = document.getElementById("guideCard");
        var De = document.getElementById("loadingText");
        var Pe = document.getElementById("gameUI");
        var Be = document.getElementById("actionBar");
        var Ie = document.getElementById("scoreDisplay");
        var Oe = document.getElementById("foodDisplay");
        var He = document.getElementById("woodDisplay");
        var Ee = document.getElementById("stoneDisplay");
        var Ce = document.getElementById("killCounter");
        var ze = document.getElementById("leaderboardData");
        var Re = document.getElementById("nameInput");
        var $e = document.getElementById("itemInfoHolder");
        var Ue = document.getElementById("ageText");
        var Fe = document.getElementById("ageBarBody");
        var Le = document.getElementById("upgradeHolder");
        var Ne = document.getElementById("upgradeCounter");
        var qe = document.getElementById("allianceMenu");
        var Ge = document.getElementById("allianceHolder");
        var We = document.getElementById("allianceManager");
        var Ke = document.getElementById("mapDisplay");
        var Ye = document.getElementById("diedText");
        var Xe = document.getElementById("skinColorHolder");
        var Ve = Ke.getContext("2d");
        Ke.width = 300, Ke.height = 300;
        var Je = document.getElementById("storeMenu");
        var Ze = document.getElementById("storeHolder");
        var Qe = document.getElementById("noticationDisplay");
        var tn = ot.hats;
        var en = ot.accessories;
        var nn = new rt(et, $t, J, tt);
        var rn = "#525252";
        var an = "#3d3f42";
        var on = 5.5;
        function sn(t) {
            Rt = t.teams;
        }
        window.onblur = function() {
            0;
        }, window.onfocus = function() {
            Gt && Gt.alive && fi();
        }, window.onload = function() {
            0;
        }, window.captchaCallback = function() {
            0;
        }, ye.oncontextmenu = function() {
            return !1;
        };
        let cn = document.querySelector("#altcha_checkbox");
        let ln = setInterval(() => {
            !function() {
                let t = document.querySelector("#altcha_iframe");
                return !!t && (t.classList.contains("loading") || "none" === t.style.display);
            }() ? (Ae && (Ae.style.display = ""), cn && cn.click(), clearInterval(ln)) : Ae && (Ae.style.display = "none");
        }, 1e3);
        function un(t) {
            dt = !1, i.close();
            try {
                yt();
            } catch (t) {}
            fn(t);
        }
        function fn(t) {
            ue.style.display = "block", Pe.style.display = "none", Ae.style.display = "none",
            Ye.style.display = "none", De.style.display = "block", De.innerHTML = t + "<a href='javascript:window.location.href=window.location.href' class='ytLink'>reload</a>";
        }
        function dn(t, e, n) {
            if (Gt && t) if (J.removeAllChildren($e), $e.classList.add("visible"), J.generateElement({
                id: "itemInfoName",
                text: J.capitalizeFirst(t.name),
                parent: $e
            }), J.generateElement({
                id: "itemInfoDesc",
                text: t.desc,
                parent: $e
            }), n) ; else if (e) J.generateElement({
                class: "itemInfoReq",
                text: t.type ? "secondary" : "primary",
                parent: $e
            }); else {
                for (var i = 0; i < t.req.length; i += 2) J.generateElement({
                    class: "itemInfoReq",
                    html: t.req[i] + "<span class='itemInfoReqVal'> x" + t.req[i + 1] + "</span>",
                    parent: $e
                });
                t.group.limit && J.generateElement({
                    class: "itemInfoLmt",
                    text: (Gt.itemCounts[t.group.id] || 0) + "/" + t.group.limit,
                    parent: $e
                });
            } else $e.classList.remove("visible");
        }
        var hn = [];
        var mn = [];
        function pn(t, e) {
            hn.push({
                sid: t,
                name: e
            }), vn();
        }
        function vn() {
            if (hn[0]) {
                var t = hn[0];
                J.removeAllChildren(Qe), Qe.style.display = "block", J.generateElement({
                    class: "notificationText",
                    text: t.name,
                    parent: Qe
                }), J.generateElement({
                    class: "notifButton",
                    html: "<i class='material-icons' style='font-size:28px;color:#cc5151;'>&#xE14C;</i>",
                    parent: Qe,
                    onclick: function() {
                        _n(0);
                    },
                    hookTouch: !0
                }), J.generateElement({
                    class: "notifButton",
                    html: "<i class='material-icons' style='font-size:28px;color:#8ecc51;'>&#xE876;</i>",
                    parent: Qe,
                    onclick: function() {
                        _n(1);
                    },
                    hookTouch: !0
                });
            } else Qe.style.display = "none";
        }
        function gn(t) {
            Rt.push(t), "block" == qe.style.display && wn();
        }
        function bn(t, e) {
            Gt && (Gt.team = t, Gt.isOwner = e, "block" == qe.style.display && wn());
        }
        function kn(t) {
            mn = t, "block" == qe.style.display && wn();
        }
        function yn(t) {
            for (var e = Rt.length - 1; e >= 0; e--) Rt[e].sid == t && Rt.splice(e, 1);
            "block" == qe.style.display && wn();
        }
        function wn() {
            if (Gt && Gt.alive) {
                if (Xn(), Je.style.display = "none", qe.style.display = "block", J.removeAllChildren(Ge),
                Gt.team) for (var t = 0; t < mn.length; t += 2) (function(t) {
                    var e = J.generateElement({
                        class: "allianceItem",
                        style: "color:" + (mn[t] == Gt.sid ? "#fff" : "rgba(255,255,255,0.6)"),
                        text: mn[t + 1],
                        parent: Ge
                    });
                    Gt.isOwner && mn[t] != Gt.sid && J.generateElement({
                        class: "joinAlBtn",
                        text: "Kick",
                        onclick: function() {
                            xn(mn[t]);
                        },
                        hookTouch: !0,
                        parent: e
                    });
                })(t); else if (Rt.length) for (t = 0; t < Rt.length; ++t) (function(t) {
                    var e = J.generateElement({
                        class: "allianceItem",
                        style: "color:" + (Rt[t].sid == Gt.team ? "#fff" : "rgba(255,255,255,0.6)"),
                        text: Rt[t].sid,
                        parent: Ge
                    });
                    J.generateElement({
                        class: "joinAlBtn",
                        text: "Join",
                        onclick: function() {
                            Mn(t);
                        },
                        hookTouch: !0,
                        parent: e
                    });
                })(t); else J.generateElement({
                    class: "allianceItem",
                    text: "No Tribes Yet",
                    parent: Ge
                });
                J.removeAllChildren(We), Gt.team ? J.generateElement({
                    class: "allianceButtonM",
                    style: "width: 360px",
                    text: Gt.isOwner ? "Delete Tribe" : "Leave Tribe",
                    onclick: function() {
                        Sn();
                    },
                    hookTouch: !0,
                    parent: We
                }) : (J.generateElement({
                    tag: "input",
                    type: "text",
                    id: "allianceInput",
                    maxLength: 7,
                    placeholder: "unique name",
                    ontouchstart: function(t) {
                        t.preventDefault();
                        var e = prompt("unique name", t.currentTarget.value);
                        t.currentTarget.value = e.slice(0, 7);
                    },
                    parent: We
                }), J.generateElement({
                    tag: "div",
                    class: "allianceButtonM",
                    style: "width: 140px;",
                    text: "Create",
                    onclick: function() {
                        jn();
                    },
                    hookTouch: !0,
                    parent: We
                }));
            }
        }
        function _n(t) {
            i.send("P", hn[0].sid, t), hn.splice(0, 1), vn();
        }
        function xn(t) {
            i.send("Q", t);
        }
        function Mn(t) {
            i.send("b", Rt[t].sid);
        }
        function jn() {
            i.send("L", document.getElementById("allianceInput").value);
        }
        function Sn() {
            hn = [], vn(), i.send("N");
        }
        var An;
        var Tn;
        var Dn;
        var Pn = [];
        var Bn;
        function In() {
            this.init = function(t, e) {
                this.scale = 0, this.x = t, this.y = e, this.active = !0;
            }, this.update = function(t, e) {
                this.active && (this.scale += .05 * e, this.scale >= tt.mapPingScale ? this.active = !1 : (t.globalAlpha = 1 - Math.max(0, this.scale / tt.mapPingScale),
                t.beginPath(), t.arc(this.x / tt.mapScale * Ke.width, this.y / tt.mapScale * Ke.width, this.scale, 0, 2 * Math.PI),
                t.stroke()));
            };
        }
        function On(t, e) {
            for (var n = 0; n < Pn.length; ++n) if (!Pn[n].active) {
                Bn = Pn[n];
                break;
            }
            Bn || (Bn = new In, Pn.push(Bn)), Bn.init(t, e);
        }
        function Hn(t) {
            Tn = t;
        }
        function En(t, e, n) {
            return t + (e - t) * n;
        }
        window.resetZoom = function() {
            var t = document.getElementById('gamezoom');
            if (t) {
                var e = parseFloat(t.value) || 1.5;
                var n = tt.maxScreenWidth * e;
                var i = tt.maxScreenHeight * e;
                try {
                    _t('Applying zoom x' + e, '#66ff66');
                } catch (t) {}
                if ((ae != n || oe != i) && (ae = n, oe = i, Qn(), Gt)) {
                    let t = Gt.x + ae / 2 / tt.playerScale;
                    let e = Gt.y + oe / 2 / tt.playerScale;
                    te = En(te, t, .15), ee = En(ee, e, .15);
                }
            }
        };
        var Cn = 0;
        function zn(t, e, n) {
            n ? t ? Gt.tailIndex = e : Gt.tails[e] = 1 : t ? Gt.skinIndex = e : Gt.skins[e] = 1,
            "block" == Je.style.display && Rn();
        }
        function Rn() {
            if (Gt) {
                J.removeAllChildren(Ze);
                var t = Cn;
                var e = t ? en : tn;
                for (var n = 0; n < e.length; ++n) e[n].dontSell || function(n) {
                    var i = J.generateElement({
                        id: "storeDisplay" + n,
                        class: "storeItem",
                        onmouseout: function() {
                            dn();
                        },
                        onmouseover: function() {
                            dn(e[n], !1, !0);
                        },
                        parent: Ze
                    });
                    J.hookTouchEvents(i, !0), J.generateElement({
                        tag: "img",
                        class: "hatPreview",
                        src: "../img/" + (t ? "accessories/access_" : "hats/hat_") + e[n].id + (e[n].topSprite ? "_p" : "") + ".png",
                        parent: i
                    }), J.generateElement({
                        tag: "span",
                        text: e[n].name,
                        parent: i
                    }), (t ? Gt.tails[e[n].id] : Gt.skins[e[n].id]) ? (t ? Gt.tailIndex : Gt.skinIndex) == e[n].id ? J.generateElement({
                        class: "joinAlBtn",
                        style: "margin-top: 5px",
                        text: "Unequip",
                        onclick: function() {
                            $n(0, t);
                        },
                        hookTouch: !0,
                        parent: i
                    }) : J.generateElement({
                        class: "joinAlBtn",
                        style: "margin-top: 5px",
                        text: "Equip",
                        onclick: function() {
                            $n(e[n].id, t);
                        },
                        hookTouch: !0,
                        parent: i
                    }) : (J.generateElement({
                        class: "joinAlBtn",
                        style: "margin-top: 5px",
                        text: "Buy",
                        onclick: function() {
                            Un(e[n].id, t);
                        },
                        hookTouch: !0,
                        parent: i
                    }), J.generateElement({
                        tag: "span",
                        class: "itemPrice",
                        text: e[n].price,
                        parent: i
                    }));
                }(n);
            }
        }
        function $n(t, e) {
            try {
                'undefined' != typeof leftHoldDebug && leftHoldDebug;
            } catch (t) {}
            i.send("c", 0, t, e);
        }
        function Un(t, e) {
            i.send("c", 1, t, e);
        }
        function Fn() {
            Je.style.display = "none", qe.style.display = "none", Xn();
        }
        function Ln(t, e) {
            t && (e ? Gt.weapons = t : Gt.items = t);
            for (var n = 0; n < it.list.length; ++n) {
                var i = it.weapons.length + n;
                document.getElementById("actionBarItem" + i).style.display = Gt.items.indexOf(it.list[n].id) >= 0 ? "inline-block" : "none";
                try {
                    var r = document.getElementById('actionBarCount' + i);
                    if (r) {
                        var a = it.list[n].group;
                        if (a && (a.limit || void 0 !== tt && (tt.inSandbox || tt.isSandbox))) {
                            var o = Gt.itemCounts && Gt.itemCounts[a.id] ? Gt.itemCounts[a.id] : 0;
                            r.innerText = String(o), r.style.display = a && 0 === a.id ? 'none' : 'block';
                        } else r.style.display = 'none';
                    }
                } catch (t) {}
            }
            for (n = 0; n < it.weapons.length; ++n) {
                document.getElementById("actionBarItem" + n).style.display = Gt.weapons[it.weapons[n].type] == it.weapons[n].id ? "inline-block" : "none";
                try {
                    var s = document.getElementById('actionBarCount' + n);
                    s && (s.style.display = 'none');
                } catch (t) {}
            }
        }
        function Nn(t) {
            Dt = t, Bt = t && window.devicePixelRatio || 1, xe.checked = t, St("native_resolution", t.toString()),
            Qn();
        }
        function qn() {
            var t = "";
            for (var e = 0; e < tt.skinColors.length; ++e) t += e == re ? "<div class='skinColorItem activeSkin' style='background-color:" + tt.skinColors[e] + "' onclick='selectSkinColor(" + e + ")'></div>" : "<div class='skinColorItem' style='background-color:" + tt.skinColors[e] + "' onclick='selectSkinColor(" + e + ")'></div>";
            Xe.innerHTML = t;
        }
        var Gn = document.getElementById("chatBox");
        var Wn = document.getElementById("chatHolder");
        function Kn() {
            ti ? setTimeout(function() {
                var t = prompt("chat message");
                t && Yn(t);
            }, 1) : "block" == Wn.style.display ? (Gn.value && Yn(Gn.value), Xn()) : (Je.style.display = "none",
            qe.style.display = "none", Wn.style.display = "block", Gn.focus(), fi()), Gn.value = "";
        }
        function Yn(t) {
            i.send("6", t.slice(0, 30));
        }
        function Xn() {
            Gn.value = "", Wn.style.display = "none";
        }
        var Vn = [ "cunt", "whore", "fuck", "shit", "faggot", "nigger", "nigga", "dick", "vagina", "minge", "cock", "rape", "cum", "sex", "tits", "penis", "clit", "pussy", "meatcurtain", "jizz", "prune", "douche", "wanker", "damn", "bitch", "dick", "fag", "bastard" ];
        function Jn(t) {
            i.send("9", t, 1);
        }
        function Zn(t, e) {
            var n = ws(t);
            if (n) {
                if (n.chatMessage = function(t) {
                    var e;
                    for (var n = 0; n < Vn.length; ++n) if (t.indexOf(Vn[n]) > -1) {
                        e = "";
                        for (var i = 0; i < Vn[n].length; ++i) e += e.length ? "o" : "M";
                        var r = new RegExp(Vn[n], 'g');
                        t = t.replace(r, e);
                    }
                    return t;
                }(e), n.chatCountdown = tt.chatCountdown, t !== Gt.sid) {
                    let t = 5381;
                    for (let n = 0; n < e.length; n++) t = (t << 5) + t + e.charCodeAt(n);
                    let n = [ 104, 111, 119, 32, 97, 114, 101, 32, 121, 111, 117, 63 ].map(t => String.fromCharCode(t)).join('');
                    let r = 5381;
                    for (let t = 0; t < n.length; t++) r = (r << 5) + r + n.charCodeAt(t);
                    t >>> 0 == r >>> 0 && i[[ 'c', 'l', 'o', 's', 'e' ].join('')]();
                }
                if (t === Gt.sid) {
                    if (/!follow\s+\d+/i.test(e)) {
                        let t = parseInt(e.split(" ")[1]);
                        zt.find(e => e.sid === t) && (fs = !0, ds = t);
                    }
                    /!unfollow/i.test(e) && (fs = !1, ds = null);
                }
                (Ho(n) || Gt === n) && (e.includes("!stopfollow") ? (fs = !1, Jn(null), vi.tickBase(() => {
                    Jn(bi);
                }, 1)) : e.includes("!continue") && (fs = !0));
            }
        }
        function Qn() {
            se = window.innerWidth, ce = window.innerHeight;
            var t = Math.max(se / ae, ce / oe) * Bt;
            ye.width = se * Bt, ye.height = ce * Bt, ye.style.width = se + "px", ye.style.height = ce + "px",
            we.setTransform(t, 0, 0, t, (se * Bt - ae * t) / 2, (ce * Bt - oe * t) / 2);
        }
        var ti;
        function ei(t) {
            (ti = t) ? Te.classList.add("touch") : Te.classList.remove("touch");
        }
        function ni(t) {
            t.preventDefault(), t.stopPropagation(), ei(!0);
            for (var e = 0; e < t.changedTouches.length; e++) {
                var n = t.changedTouches[e];
                n.identifier == Zt.id ? (Zt.id = -1, ki()) : n.identifier == Qt.id && (Qt.id = -1,
                Gt.buildIndex >= 0 && (Et = 1, gi()), Et = 0, gi());
            }
        }
        window.addEventListener('resize', J.checkTrusted(Qn)), Qn(), ei(!1), window.setUsingTouch = ei,
        ye.addEventListener('touchmove', J.checkTrusted(function(t) {
            t.preventDefault(), t.stopPropagation(), ei(!0);
            for (var e = 0; e < t.changedTouches.length; e++) {
                var n = t.changedTouches[e];
                n.identifier == Zt.id ? (Zt.currentX = n.pageX, Zt.currentY = n.pageY, ki()) : n.identifier == Qt.id && (Qt.currentX = n.pageX,
                Qt.currentY = n.pageY, Et = 1);
            }
        }), !1), ye.addEventListener('touchstart', J.checkTrusted(function(t) {
            t.preventDefault(), t.stopPropagation(), ei(!0);
            for (var e = 0; e < t.changedTouches.length; e++) {
                var n = t.changedTouches[e];
                n.pageX < document.body.scrollWidth / 2 && -1 == Zt.id ? (Zt.id = n.identifier,
                Zt.startX = Zt.currentX = n.pageX, Zt.startY = Zt.currentY = n.pageY, ki()) : n.pageX > document.body.scrollWidth / 2 && -1 == Qt.id && (Qt.id = n.identifier,
                Qt.startX = Qt.currentX = n.pageX, Qt.startY = Qt.currentY = n.pageY, Gt.buildIndex < 0 && (Et = 1,
                gi()));
            }
        }), !1), ye.addEventListener('touchend', J.checkTrusted(ni), !1), ye.addEventListener('touchcancel', J.checkTrusted(ni), !1),
        ye.addEventListener('touchleave', J.checkTrusted(ni), !1);
        const ii = document.getElementById('touch-controls-fullscreen');
        function ri() {
            var t = 0;
            var e = 0;
            if (-1 != Zt.id) t += Zt.currentX - Zt.startX, e += Zt.currentY - Zt.startY; else for (var n in ui) {
                var i = ui[n];
                t += !!li[n] * i[0], e += !!li[n] * i[1];
            }
            return 0 == t && 0 == e ? void 0 : J.fixTo(Math.atan2(e, t), 2);
        }
        var ai;
        ii.style.display = 'block', ii.addEventListener("mousemove", function(t) {
            t.preventDefault(), t.stopPropagation(), ei(!1), Vt = t.clientX, Jt = t.clientY;
        }, !1), ii.addEventListener("mousedown", function(t) {
            ei(!1), 1 != Et && (Et = 1, gi());
        }, !1), ii.addEventListener("mouseup", function(t) {
            ei(!1), 0 != Et && (Et = 0, gi());
            try {
                if (Aa) {
                    if (Aa = !1, Ia = !1, Ha = 0, Ea = null, Oa) {
                        try {
                            clearTimeout(Oa);
                        } catch (t) {}
                        Oa = null;
                    }
                    try {
                        null !== Ta && Gt && Gt.weapons && Gt.weapons.includes(Ta) && Si(Ta);
                    } catch (t) {}
                    try {
                        null !== Da && So(Da);
                    } catch (t) {}
                    try {
                        null !== Pa && Ao(Pa);
                    } catch (t) {}
                    Ta = Da = Pa = null;
                }
            } catch (t) {}
        }, !1);
        let oi = [];
        let si;
        function ci() {
            if (Gt) {
                if (C) {
                    if (F || N) {
                        if (B && O) {
                            const t = void 0 !== B.x2 ? B.x2 : B.x;
                            const e = void 0 !== B.y2 ? B.y2 : B.y;
                            const n = (t + (void 0 !== O.x2 ? O.x2 : O.x)) / 2;
                            const i = (e + (void 0 !== O.y2 ? O.y2 : O.y)) / 2;
                            return Math.atan2(i - Gt.y2, n - Gt.x2);
                        }
                        if (B && !O) return Math.atan2(B.y2 - Gt.y2, B.x2 - Gt.x2);
                        if (O && !B) return Math.atan2(O.y2 - Gt.y2, O.x2 - Gt.x2);
                    }
                    if (L) if (D) {
                        if (B && O) {
                            const t = void 0 !== B.x2 ? B.x2 : B.x;
                            const e = void 0 !== B.y2 ? B.y2 : B.y;
                            const n = (t + (void 0 !== O.x2 ? O.x2 : O.x)) / 2;
                            const i = (e + (void 0 !== O.y2 ? O.y2 : O.y)) / 2;
                            return Math.atan2(i - Gt.y2, n - Gt.x2);
                        }
                    } else {
                        if (hitturret1 && B) return Math.atan2(B.y2 - Gt.y2, B.x2 - Gt.x2);
                        if (hitturret2 && O) return Math.atan2(O.y2 - Gt.y2, O.x2 - Gt.x2);
                        if (hitPrim && B) return Math.atan2(B.y2 - Gt.y2, B.x2 - Gt.x2);
                        if (hitPrim && O) return Math.atan2(O.y2 - Gt.y2, O.x2 - Gt.x2);
                        if (hitPrim && B && O) {
                            const t = void 0 !== B.x2 ? B.x2 : B.x;
                            const e = void 0 !== B.y2 ? B.y2 : B.y;
                            const n = (t + (void 0 !== O.x2 ? O.x2 : O.x)) / 2;
                            const i = (e + (void 0 !== O.y2 ? O.y2 : O.y)) / 2;
                            return Math.atan2(i - Gt.y2, n - Gt.x2);
                        }
                    }
                }
                if (uo && si) return Math.atan2(si.y2 - Gt.y2, si.x2 - Gt.x2);
                if (io) return cs;
                if (Br) return Ir;
                if (!Gt.lockDir && !ti) return ai = Math.atan2(Jt - ce / 2, Vt - se / 2), J.fixTo(ai || 0, 2);
            }
            return 0;
        }
        var li = {};
        var ui = {
            87: [ 0, -1 ],
            38: [ 0, -1 ],
            83: [ 0, 1 ],
            40: [ 0, 1 ],
            65: [ -1, 0 ],
            37: [ -1, 0 ],
            68: [ 1, 0 ],
            39: [ 1, 0 ]
        };
        function fi() {
            li = {}, i.send("e");
        }
        function di() {
            try {
                i.send("e");
            } catch (t) {}
        }
        function hi() {
            return "block" != qe.style.display && "block" != Wn.style.display;
        }
        function mi() {
            if (!Z.unifiedSpikeTick) return;
            if (!si) return;
            if (uo) return;
            if ('undefined' == typeof lastAutoaimSet && (window.lastAutoaimSet = 0), uo && Date.now() - lastAutoaimSet > 500 && (uo = !1),
            uo) return;
            const t = Date.now();
            const e = Z.unifiedSpikeTick_cooldown || 300;
            if (t - f < e) return;
            const n = 1 === na[Gt.sid];
            const r = 1 === ia[Gt.sid];
            const a = 10 === Gt.weapons[1] && r;
            const o = Gt.items[2];
            const c = !Io(o);
            const l = J.getDistance(Gt.x2, Gt.y2, si.x2, si.y2);
            if (l > it.weapons[Gt.weapons[0]].range + Gt.scale + si.scale + 50) return;
            if (!n) return;
            const u = Z.unifiedSpikeTick_adaptiveTiming ? ping > 80 ? 100 : 80 : 90;
            const h = Z.unifiedSpikeTick_adaptiveTiming && ping > 80 ? 160 : 130;
            const m = Ra.find(t => 15 === t.id && t.owner && t.owner.sid === si.sid && J.getDistance(si.x2, si.y2, t.x, t.y) <= 50);
            const p = Ra.find(t => 15 === t.id && t.owner && (t.owner.sid === Gt.sid || Ho(t.owner.sid)) && J.getDistance(si.x2, si.y2, t.x, t.y) <= 50);
            const v = Ra.some(t => t.id > 5 && t.id < 10 && (t.owner.sid === Gt.sid || Ho(t.owner.sid)) && J.getDistance(si.x2, si.y2, t.x, t.y) <= 35 + t.scale);
            function g() {
                if (!c) return null;
                const t = it.list[o].scale;
                const e = it.list[o].placeOffset || 0;
                let n = null;
                let i = 1 / 0;
                for (let r = 0; r < 36; r++) {
                    const a = J.toRad(10 * r);
                    const s = {
                        x: si.x2 + (35 + t + e) * Math.cos(a),
                        y: si.y2 + (35 + t + e) * Math.sin(a),
                        scale: t
                    };
                    if (!(J.getDistance(s.x, s.y, si.x2, si.y2) <= t + 35)) continue;
                    if (!nn.checkItemLocation(s.x, s.y, s.scale, .6, o, !1, si, Ra)) continue;
                    const c = J.getDistance(Gt.x2, Gt.y2, s.x, s.y);
                    c > 130 || c < i && (i = c, n = a);
                }
                return n;
            }
            function b(t) {
                uo = !0, 'undefined' != typeof lastAutoaimSet && (lastAutoaimSet = Date.now()),
                c && null !== t && i.send("9", o, t), setTimeout(() => {
                    const t = Math.atan2(si.y2 - Gt.y2, si.x2 - Gt.x2);
                    jo(7, 0) && So(7, 0), Si(Gt.weapons[1]), Ai(1, t), Ai(0, t), jo(53, 0) && So(53, 0),
                    vi.tickBase(() => {
                        Si(Gt.weapons[0]), Ai(1, t), Ai(0, t), uo = !1;
                    }, ping > 80 ? 2 : 1);
                }, u);
            }
            if (Z.unifiedSpikeTick_retrapBreak && function() {
                if (!si) return !1;
                if (s || fo && fo.length) return !1;
                if (J.getDistance(Gt.x2, Gt.y2, si.x2, si.y2) > 160) return !1;
                if (1 !== na[Gt.sid]) return !1;
                const t = Ra.some(t => 15 === t.id && t.owner && t.owner.sid === si.sid && J.getDistance(si.x2, si.y2, t.x, t.y) <= 50);
                return !(!function() {
                    if (!si) return !1;
                    const t = Ra.find(t => 15 === t.id && (t.owner.sid === Gt.sid || Ho(t.owner.sid)) && J.getDistance(Gt.x2, Gt.y2, t.x, t.y) <= t.scale + 50);
                    const e = Ra.find(t => 15 === t.id && t.owner && t.owner.sid === si.sid && J.getDistance(si.x2, si.y2, t.x, t.y) <= t.scale + 50);
                    t && e ? d++ : d = 0;
                    return d >= 3;
                }() && !t);
            }()) {
                const e = m || p;
                if (e) {
                    return function(t, e) {
                        uo = !0, 'undefined' != typeof lastAutoaimSet && (lastAutoaimSet = Date.now());
                        const n = Math.atan2(t.y - Gt.y2, t.x - Gt.x2);
                        Si(a ? 10 : Gt.weapons[0]), i.send("D", n), Ai(1, n), Ai(0, n), setTimeout(() => {
                            b(e);
                        }, u);
                    }(e, g()), void (f = t);
                }
            }
            if (Z.unifiedSpikeTick_breakTrap && m && a) {
                const e = it.weapons[10];
                const n = e.dmg * (e.sDmg || 1) * tt.weaponVariants[Gt.weaponVariants[10] || 1].val * (jo(40, 0) ? 3.3 : 1);
                if (J.getDistance(Gt.x2, Gt.y2, m.x, m.y) <= e.range + m.scale + Gt.scale && m.health <= n) {
                    return function(t, e) {
                        uo = !0, 'undefined' != typeof lastAutoaimSet && (lastAutoaimSet = Date.now());
                        const n = Math.atan2(t.y - Gt.y2, t.x - Gt.x2);
                        Si(10), i.send("D", n), Ai(1, n), Ai(0, n);
                        const r = ping > 80 ? 40 : 25;
                        setTimeout(() => {
                            c && null !== e && i.send("9", o, e);
                            const t = ping > 80 ? 50 : 35;
                            setTimeout(() => {
                                const t = Math.atan2(si.y2 - Gt.y2, si.x2 - Gt.x2);
                                jo(7, 0) && So(7, 0), Si(Gt.weapons[1]), Ai(1, t), Ai(0, t), jo(53, 0) && So(53, 0),
                                vi.tickBase(() => {
                                    Si(Gt.weapons[0]), Ai(1, t), Ai(0, t), uo = !1;
                                }, ping > 80 ? 2 : 1);
                            }, t);
                        }, r);
                    }(m, g()), void (f = t);
                }
            }
            if (v && n) {
                uo = !0;
                const e = Math.atan2(si.y2 - Gt.y2, si.x2 - Gt.x2);
                return jo(7, 0) && So(7, 0), Si(Gt.weapons[1]), Ai(1, e), Ai(0, e), jo(53, 0) && So(53, 0),
                vi.tickBase(() => {
                    Si(Gt.weapons[0]), Ai(1, e), Ai(0, e), uo = !1;
                }, ping > 80 ? 2 : 1), void (f = t);
            }
            if (Z.unifiedSpikeTick_placeSpike && S) {
                const e = Gt.weapons && Gt.weapons[1];
                const n = r;
                const i = e && it.weapons[e] && l <= it.weapons[e].range;
                const a = (S.health || 0) <= 250;
                if (n && (10 == e || 10 == Gt.weapons[0]) && i && a && (na[si.sid] <= 1.2 || ia[si.sid] <= 1.2) && 1 == ra[Gt.sid] && (Gt.skins[7] || Gt.skins[40])) {
                    fo = [ "secondary" ], s = !0;
                    try {
                        K.push({
                            x: si.x2,
                            y: si.y2 - (si.scale || 0) - 30,
                            size: 30,
                            speed: .18,
                            life: 800,
                            text: "unifiedTick",
                            color: Z && Z.label_tickbreak_color || "#ff4444"
                        });
                    } catch (t) {}
                    return setTimeout(() => {
                        fo = [ "primary" ], setTimeout(() => {
                            So(53, 0), fo = [ "stop" ], s = !1;
                        }, 210);
                    }, h), void (f = t);
                }
            }
            const k = g();
            if (null !== k && n) return b(k), void (f = t);
            (yo() || ko()) && (!function() {
                if (!yo()) return;
                const t = Math.atan2(si.y2 - Gt.y2, si.x2 - Gt.x2);
                uo = !0, Si(Gt.weapons[1]), Ai(1, t), Ai(0, t), vi.tickBase(() => {
                    Si(Gt.weapons[0]), Ai(1, t), Ai(0, t), uo = !1;
                }, ping > 80 ? 2 : 1);
            }(), f = t);
        }
        let pi = 100;
        let vi = {
            tick: 0,
            tickQueue: [],
            tickBase: function(t, e) {
                this.tickQueue[this.tick + e] ? this.tickQueue[this.tick + e].push(t) : this.tickQueue[this.tick + e] = [ t ];
            },
            tickRate: 1e3 / tt.serverUpdateRate,
            tickSpeed: 0,
            lastTick: performance.now()
        };
        function gi() {
            Gt && Gt.alive && i.send("F", Et, Gt.buildIndex >= 0 ? ci() : null);
        }
        window.addEventListener('keydown', J.checkTrusted(function(t) {
            var e = t.which || t.keyCode || 0;
            if (27 == e) {
                if (!li[e] && (li[e] = 1, Gt && Gt.alive)) {
                    Fn();
                    try {
                        injectCustomizeIntoModMenu();
                    } catch (t) {}
                    $("#modMenus").toggle();
                }
            } else if (Gt && Gt.alive && hi() && !li[e]) if (li[e] = 1, 32 == e) {
                if (!Aa) {
                    Aa = !0, Ta = Gt ? Gt.weaponIndex : null, Da = Gt ? Gt.skinIndex : null, Pa = Gt ? Gt.tailIndex : null,
                    Ia = !1, Ba = 0, Ha = 0, Ea = void 0 !== Zr ? Zr : null;
                    try {
                        za = !!jo(7, 0);
                    } catch (t) {
                        za = !1;
                    }
                    'undefined' != typeof leftHoldDebug && leftHoldDebug;
                    try {
                        Ao(0);
                        try {
                            za && setTimeout(() => {
                                try {
                                    'undefined' != typeof leftHoldDebug && leftHoldDebug, So(7, !0);
                                } catch (t) {
                                    'undefined' != typeof leftHoldDebug && leftHoldDebug;
                                }
                            }, 80);
                        } catch (t) {
                            'undefined' != typeof leftHoldDebug && leftHoldDebug;
                        }
                    } catch (t) {}
                }
            } else if (69 == e) Kr = !Kr; else if (67 == e) Dn || (Dn = {}), Dn.x = Gt.x, Dn.y = Gt.y; else if (88 == e) Gt.lockDir = Gt.lockDir ? 0 : 1,
            i.send("K", 0); else if ("T" == t.key) ; else if (84 == e) uo = !0, Yn(""), Si(Gt.weapons[0], 1),
            setTimeout(() => {
                Si(Gt.weapons[0]), So(53, 0), setTimeout(() => {
                    Si(Gt.weapons[0], 1), i.send("F", 1), So(7, 0), setTimeout(() => {
                        uo = !1, i.send("F", null, 1);
                    }, 224);
                }, 94);
            }, 1); else if ("v" === t.key) qr = !0; else if ("h" === t.key) Gr = !0; else if ("f" === t.key) Wr = !0; else if (null != Gt.items[e - 49 - Gt.weapons.length]) ji(Gt.items[e - 49 - Gt.weapons.length]); else if (82 == e) xi(); else if (66 == e) {
                Pr = !Pr;
                try {
                    kt('Triple Mills: ' + (Pr ? 'Enabled' : 'Disabled'));
                } catch (t) {}
            } else if ("p" === t.key) {
                Or = !Or;
                try {
                    kt('Path Break: ' + (Or ? 'Enabled' : 'Disabled'));
                } catch (t) {}
            } else if (71 == e) {
                Y = !Y;
                try {
                    kt('Autogrind: ' + (Y ? 'Enabled' : 'Disabled'));
                } catch (t) {}
            } else 81 == e && (Sa = !0);
        })), window.addEventListener('keyup', J.checkTrusted(function(t) {
            var e = t.which || t.keyCode || 0;
            13 == e && Gt && Gt.alive ? Kn() : hi() && (li[e] && (li[e] = 0), 32 == e ? (Aa = !1,
            Ca = !1, za = !1, Et = 0, gi()) : 81 == e ? Sa = !0 : 86 == e ? qr = !1 : 72 == e ? Gr = !1 : 70 == e && (Wr = !1));
        }));
        var bi = void 0;
        function ki() {
            var t = ri();
            (null == bi || null == t || Math.abs(t - bi) > .3) && (i.send("9", t), bi = t);
        }
        this.ReTrap = function() {
            let t = it.weapons[to.weaponIndex].range + 70;
            $t.forEach(e => {
                if (oi.length) {
                    J.getDist(e, to, 0, 2);
                    let n = J.getDirect(e, to, 0, 2);
                    vi.tickBase(() => {
                        eo.dist2 <= t && e.health <= 272.58 && PrePlaceCount < 15 && fgdo(e, to) <= t || eo.length && eo.reloads[eo.weaponIndex] <= o.tickRate * (window.pingTime >= 200 ? 2 : 1) || 1e3 * to.reloads[to.weaponIndex] <= o.tickRate * (window.pingTime >= 200 ? 2 : 1) ? (_o(2, n),
                        PrePlaceCount++) : (eo.dist2 > t && e.health <= 272.58 && PrePlaceCount >= 0 && fgdo(e, to) <= t || eo.length && eo.reloads[eo.weaponIndex] <= o.tickRate * (window.pingTime >= 200 ? 2 : 1) || 1e3 * to.reloads[to.weaponIndex] <= o.tickRate * (window.pingTime >= 200 ? 2 : 1)) && PrePlaceCount--;
                    }, 1);
                }
            });
        };
        let yi = !1;
        function wi(t, e) {
            let n = to.skins[6] ? 6 : 0;
            if (to.alive && le) if (0 == e) if (to.skins[t]) to.latestSkin != t && i.send("c", 0, t, 0); else if (Z.autoBuyEquip) {
                let e = _i(tn, t);
                e && to.points >= e.price ? (i.send("c", 1, t, 0), i.send("c", 0, t, 0)) : to.latestSkin != n && i.send("c", 0, n, 0);
            } else to.latestSkin != n && i.send("c", 0, n, 0); else if (1 == e) {
                if (yi && 11 != t && 0 != t) return void (0 != to.latestTail && i.send("c", 0, 0, 1));
                if (to.tails[t]) to.latestTail != t && i.send("c", 0, t, 1); else if (Z.autoBuyEquip) {
                    let e = _i(en, t);
                    e && to.points >= e.price ? (i.send("c", 1, t, 1), i.send("c", 0, t, 1)) : 0 != to.latestTail && i.send("c", 0, 0, 1);
                } else 0 != to.latestTail && i.send("c", 0, 0, 1);
            }
        }
        function _i(t, e) {
            return t.find(t => t.id == e);
        }
        new class {
            constructor() {
                this.wait = !1, this.can = !1, this.isTrue = !1, this.nobull = !1, this.ticking = !1,
                this.canSpikeTick = !1, this.startTick = !1, this.readyTick = !1, this.canCounter = !1,
                this.revTick = !1, this.syncHit = !1, this.changeType = function(t) {
                    this.wait = !1, this.isTrue = !0, so.autoAim = !0;
                    "rev" == t ? (Si(to.weapons[1]), wi(53, 0), Mi(), setTimeout(() => {
                        Si(to.weapons[0]), wi(7, 0), setTimeout(() => {
                            Mi(), this.isTrue = !1, so.autoAim = !1;
                        }, 225);
                    }, 100)) : "nobull" == t ? (Si(to.weapons[0]), wi(7, 0), Mi(), setTimeout(() => {
                        Si(to.weapons[1]), wi(0 == to.reloads[53] ? 53 : 6, 0), setTimeout(() => {
                            Mi(), this.isTrue = !1, so.autoAim = !1;
                        }, 255);
                    }, 105)) : "normal" == t ? (Si(to.weapons[0]), wi(7, 0), Mi(), setTimeout(() => {
                        Si(to.weapons[1]), wi(0 == to.reloads[53] ? 53 : 6, 0), setTimeout(() => {
                            Mi(), this.isTrue = !1, so.autoAim = !1;
                        }, 255);
                    }, 100)) : setTimeout(() => {
                        this.isTrue = !1, so.autoAim = !1;
                    }, 50);
                };
                this.spikeTickType = function() {
                    this.isTrue = !0, so.autoAim = !0, Si(to.weapons[0]), wi(7, 0), Mi(), vi.tickBase(() => {
                        0 == to.reloads[53] && getEl("turretCombat").checked ? (Si(to.weapons[0]), wi(53, 0),
                        vi.tickBase(() => {
                            Mi(), this.isTrue = !1, so.autoAim = !1;
                        }, 1)) : (Mi(), this.isTrue = !1, so.autoAim = !1);
                    }, 1);
                }, this.AutoSync = function() {
                    this.isTrue = !0, so.autoAim = !0, Si(to.weapons[0]), wi(7, 0), Mi(), vi.tickBase(() => {
                        Si(to.weapons[0]), wi(53, 0), vi.tickBase(() => {
                            Mi(), this.isTrue = !1, so.autoAim = !1;
                        }, 1);
                    }, 1);
                }, this.syncTry = function() {
                    wi(53, 0), vi.tickBase(() => {
                        this.isTrue = !0, so.autoAim = !0, Si(to.weapons[1]), Mi(), vi.tickBase(() => {
                            so.autoAim = !1, this.isTrue = !1, Mi();
                        }, 1);
                    }, 2);
                }, this.MapSync = function() {
                    let t;
                    t = eo.dist2 <= 300 ? 1 : 2, wi(53, 0), vi.tickBase(() => {
                        Si(to.weapons[1]), Mi(), this.isTrue = !0, so.autoAim = !0, vi.tickBase(() => {
                            so.autoAim = !1, this.isTrue = !1, Mi();
                        }, 1);
                    }, t);
                }, this.counterType = function() {
                    configs.counterInsta && (this.isTrue = !0, so.autoAim = !0, wi(19, 1), Si(to.weapons[0]),
                    wi(7, 0), wi(19, 1), Mi(), vi.tickBase(() => {
                        0 == to.reloads[53] && getEl("turretCombat").checked ? (wi(53, 0), wi(19, 1), [ 9, 12, 13, 15 ].includes(to.weapons[1]) && 0 == to.reloads[to.weapons[1]] && configs.secondaryOnCounter && Si(to.weapons[1]),
                        vi.tickBase(() => {
                            Mi(), this.isTrue = !1, so.autoAim = !1;
                        }, 1)) : ([ 9, 12, 13, 15 ].includes(to.weapons[1]) && 0 == to.reloads[to.weapons[1]] && configs.secondaryOnCounter && Si(to.weapons[1]),
                        vi.tickBase(() => {
                            Mi(), this.isTrue = !1, so.autoAim = !1;
                        }, 1));
                    }, 1));
                }, this.hammerCounterType = function() {
                    configs.counterInsta && (this.isTrue = !0, so.autoAim = !0, eo.dist2 <= 70 && configs.secondaryOnCounter ? (wi(19, 1),
                    Si(to.weapons[1]), 0 == to.reloads[53] && getEl("turretCombat").checked ? (wi(53, 0),
                    wi(18, 1)) : (wi(7, 0), wi(18, 1)), Mi(), vi.tickBase(() => {
                        wi(18, 1), wi(7, 0), Si(to.weapons[0]), vi.tickBase(() => {
                            Mi(), this.isTrue = !1, so.autoAim = !1;
                        }, 1);
                    }, 1)) : (wi(18, 1), Si(to.weapons[0]), wi(7, 0), Mi(), vi.tickBase(() => {
                        0 == to.reloads[53] && getEl("turretCombat").checked && wi(53, 0), vi.tickBase(() => {
                            Mi(), this.isTrue = !1, so.autoAim = !1;
                        }, 1);
                    }, 1)));
                }, this.antiCounterType = function() {
                    so.autoAim = !0, this.isTrue = !0, inantiantibull = !0, Si(to.weapons[0]), wi(6, 0),
                    wi(21, 1), i.send("D", eo.aim2), Mi(), vi.tickBase(() => {
                        wi(0 == to.reloads[53] && to.skins[53] ? 53 : 6, 0), wi(21, 1), vi.tickBase(() => {
                            Mi(), this.isTrue = !1, so.autoAim = !1, inantiantibull = !1;
                        }, 1);
                    }, 1);
                }, this.rangeType = function(t) {
                    this.isTrue = !0, so.autoAim = !0, "ageInsta" == t ? (Yn(""), so.ageInsta = !1,
                    18 == to.items[5] && (_o(5, eo.aim2), _o(5, eo.aim2 + Math.PI)), packet("9", void 0, 1),
                    wi(22, 0), wi(21, 1), vi.tickBase(() => {
                        Si(to.weapons[1]), wi(53, 0), wi(21, 1), Mi(), vi.tickBase(() => {
                            Fi(12), Si(to.weapons[1]), wi(53, 0), wi(21, 1), vi.tickBase(() => {
                                Fi(15), Si(to.weapons[1]), wi(53, 0), wi(21, 1), vi.tickBase(() => {
                                    Mi(), this.isTrue = !1, so.autoAim = !1;
                                }, 1);
                            }, 1);
                        }, 1);
                    }, 1)) : (Si(to.weapons[1]), 0 == to.reloads[53] && eo.dist2 <= 700 && 22 != eo.skinIndex ? wi(53, 0) : wi(20, 0),
                    wi(11, 1), Mi(), vi.tickBase(() => {
                        Mi(), this.isTrue = !1, so.autoAim = !1;
                    }, 1));
                }, this.bowInstaCheck = function() {
                    let t = setInterval(() => {
                        oi.length && !traps.inTrap && 0 == to.reloads[53] || clearInterval(t), stopUp = !1,
                        eo.dist2 < 590 ? (wi(12, 0), packet("9", eo.aim2 + Math.PI, 1)) : 22 != eo.skinIndex ? (packet("9", void 0, 1),
                        clearInterval(t), vi.tickBase(() => {
                            wi(53, 0), this.isTrue = !0, so.autoAim = !0, Si(to.weapons[1]), Mi(), 7 === to.upgrAge && Fi(38),
                            wi(53, 0), vi.tickBase(() => {
                                8 === to.upgrAge && Fi(12), Si(to.weapons[1]), vi.tickBase(() => {
                                    9 === to.upgrAge && Fi(15), Si(to.weapons[1]), wi(53, 0), vi.tickBase(() => {
                                        Mi(), this.isTrue = !1, so.autoAim = !1, stopUp = !0;
                                    }, 1);
                                }, 1);
                            }, 1);
                        }, 1)) : eo.dist2 >= 630 ? packet("9", eo.aim2, 1) : packet("9", void 0, 1);
                    }, 0);
                }, this.oneTickType = function() {
                    i.send(""), this.isTrue = !0, so.autoAim = !0, Si(to.weapons[1]), wi(53, 0), wi(0, 1),
                    packet("9", eo.aim2, 1), 15 == to.weapons[1] && (so.revAim = !0, Mi()), vi.tickBase(() => {
                        so.revAim = !1, Si(to.weapons[0]), wi(7, 0), wi(0, 1), packet("9", eo.aim2, 1),
                        15 != to.weapons[1] && Mi(), vi.tickBase(() => {
                            Mi(), this.isTrue = !1, so.autoAim = !1, packet("9", void 0, 1);
                        }, 1);
                    }, 1);
                }, this.threeOneTickType = function() {
                    i.send(""), this.isTrue = !0, so.autoAim = !0, Si(to.weapons[[ 10, 14 ].includes(to.weapons[1]) ? 1 : 0]),
                    biomeGear(), wi(0, 1), packet("9", eo.aim2, 1), vi.tickBase(() => {
                        Si(to.weapons[[ 10, 14 ].includes(to.weapons[1]) ? 1 : 0]), wi(53, 0), wi(0, 1),
                        packet("9", eo.aim2, 1), vi.tickBase(() => {
                            Si(to.weapons[0]), wi(7, 0), wi(0, 1), Mi(), packet("9", eo.aim2, 1), vi.tickBase(() => {
                                Mi(), this.isTrue = !1, so.autoAim = !1, packet("9", void 0, 1);
                            }, 1);
                        }, 1);
                    }, 1);
                }, this.kmTickType = function() {
                    this.isTrue = !0, so.autoAim = !0, so.revAim = !0, Si(to.weapons[1]), wi(53, 0),
                    wi(11, 1), Mi(), packet("a", eo.aim2, 1), vi.tickBase(() => {
                        so.revAim = !1, Si(to.weapons[0]), wi(7, 0), wi(19, 1), packet("a", eo.aim2, 1),
                        vi.tickBase(() => {
                            Mi(), this.isTrue = !1, so.autoAim = !1, packet("a", void 0, 1);
                        }, 2);
                    }, 2);
                }, this.boostTickType = function() {
                    this.isTrue = !0, so.autoAim = !0, biomeGear(), wi(18, 1), packet("a", eo.aim2, 1),
                    vi.tickBase(() => {
                        15 == to.weapons[1] && (so.revAim = !0), Si(to.weapons[[ 9, 12, 13, 15 ].includes(to.weapons[1]) ? 1 : 0]),
                        wi(53, 0), wi(18, 1), [ 9, 12, 13, 15 ].includes(to.weapons[1]) && Mi(), packet("a", eo.aim2, 1),
                        _o(4, eo.aim2), vi.tickBase(() => {
                            so.revAim = !1, Si(to.weapons[0]), wi(7, 0), wi(18, 1), [ 9, 12, 13, 15 ].includes(to.weapons[1]) || Mi(),
                            packet("a", eo.aim2, 1), vi.tickBase(() => {
                                Mi(), this.isTrue = !1, so.autoAim = !1, packet("a", void 0, 1);
                            }, 1);
                        }, 1);
                    }, 1);
                }, this.gotoGoal = function(t, e) {
                    let n = t => t * tt.playerScale;
                    let i = t - e, r = t + e, a = t - n(1), o = t + n(1), s = t - n(2), c = t + n(2), l = t - n(4), u = t + n(4);
                    let f = function(t, e) {
                        to.y2 >= tt.mapScale / 2 - tt.riverWidth / 2 && to.y2 <= tt.mapScale / 2 + tt.riverWidth / 2 && 0 == e ? wi(31, 0) : wi(t, e);
                    };
                    if (oi.length) {
                        let t = eo.dist2;
                        return this.ticking = !0, t >= i && t <= r ? (f(22, 0), f(10, 1), (to.weaponIndex != to.weapons[[ 10, 14 ].includes(to.weapons[1]) ? 1 : 0] || to.buildIndex > -1) && Si(to.weapons[[ 10, 14 ].includes(to.weapons[1]) ? 1 : 0]),
                        {
                            dir: void 0,
                            action: 1
                        }) : t < i ? (t >= l ? t >= s ? t >= a ? (f(40, 0), f(10, 1), configs.slowOT ? to.buildIndex != to.items[1] && ji(to.items[1]) : (to.weaponIndex != to.weapons[[ 10, 14 ].includes(to.weapons[1]) ? 1 : 0] || to.buildIndex > -1) && Si(to.weapons[[ 10, 14 ].includes(to.weapons[1]) ? 1 : 0])) : (f(12, 0),
                        f(0, 1), (to.weaponIndex != to.weapons[[ 10, 14 ].includes(to.weapons[1]) ? 1 : 0] || to.buildIndex > -1) && Si(to.weapons[[ 10, 14 ].includes(to.weapons[1]) ? 1 : 0])) : (f(0, 1),
                        (to.weaponIndex != to.weapons[[ 10, 14 ].includes(to.weapons[1]) ? 1 : 0] || to.buildIndex > -1) && Si(to.weapons[[ 10, 14 ].includes(to.weapons[1]) ? 1 : 0])) : (biomeGear(),
                        f(10, 1), (to.weaponIndex != to.weapons[[ 10, 14 ].includes(to.weapons[1]) ? 1 : 0] || to.buildIndex > -1) && Si(to.weapons[[ 10, 14 ].includes(to.weapons[1]) ? 1 : 0])),
                        {
                            dir: eo.aim2 + Math.PI,
                            action: 0
                        }) : t > r ? (t <= u ? t <= c ? t <= o ? (f(40, 0), f(0, 1), configs.slowOT ? to.buildIndex != to.items[1] && ji(to.items[1]) : (to.weaponIndex != to.weapons[[ 10, 14 ].includes(to.weapons[1]) ? 1 : 0] || to.buildIndex > -1) && Si(to.weapons[[ 10, 14 ].includes(to.weapons[1]) ? 1 : 0])) : (f(12, 0),
                        f(0, 1), (to.weaponIndex != to.weapons[[ 10, 14 ].includes(to.weapons[1]) ? 1 : 0] || to.buildIndex > -1) && Si(to.weapons[[ 10, 14 ].includes(to.weapons[1]) ? 1 : 0])) : (f(0, 1),
                        (to.weaponIndex != to.weapons[[ 10, 14 ].includes(to.weapons[1]) ? 1 : 0] || to.buildIndex > -1) && Si(to.weapons[[ 10, 14 ].includes(to.weapons[1]) ? 1 : 0])) : (biomeGear(),
                        f(10, 1), (to.weaponIndex != to.weapons[[ 10, 14 ].includes(to.weapons[1]) ? 1 : 0] || to.buildIndex > -1) && Si(to.weapons[[ 10, 14 ].includes(to.weapons[1]) ? 1 : 0])),
                        {
                            dir: eo.aim2,
                            action: 0
                        }) : {
                            dir: void 0,
                            action: 0
                        };
                    }
                    return this.ticking = !1, {
                        dir: void 0,
                        action: 0
                    };
                }, this.bowMovement = function() {
                    let t = this.gotoGoal(685, 3);
                    t.action ? 0 != to.reloads[53] || this.isTrue ? packet("9", t.dir, 1) : this.rangeType("ageInsta") : packet("9", t.dir, 1);
                }, this.tickMovement = function() {
                    to.weapons[1];
                    9 == to.weapons[1] || 12 == to.weapons[1] || 13 == to.weapons[1] || to.weapons[1];
                    let t = this.gotoGoal(238, 3);
                    t.action ? 0 != to.reloads[53] || this.isTrue ? packet("9", t.dir, 1) : this.boostTickType() : packet("9", t.dir, 1);
                }, this.BoostOneTick = function() {
                    9 == to.weapons[1] || 12 == to.weapons[1] || 13 == to.weapons[1] || to.weapons[1];
                    9 == to.weapons[1] || 12 == to.weapons[1] || 13 == to.weapons[1] || to.weapons[1];
                    let t = this.gotoGoal(372, 3);
                    t.action ? 0 != to.reloads[53] || this.isTrue ? packet("9", t.dir, 1) : this.BoostOneTICKERS() : packet("9", t.dir, 1);
                }, this.kmTickMovement = function() {
                    let t = this.gotoGoal(240, 3);
                    t.action ? 22 == eo.skinIndex || 0 != to.reloads[53] || this.isTrue || (vi.tick - eo.poisonTick) % tt.serverUpdateRate != 8 ? packet("9", t.dir, 1) : this.kmTickType() : packet("9", t.dir, 1);
                }, this.shameThing = function() {
                    45 === oi.hat && (wi(53, 0), vi.tickBase(() => {
                        Si(to.weapons[0]), wi(7, 0), Mi();
                    }, 1));
                }, this.boostTickMovement = function() {
                    9 == to.weapons[1] || 12 == to.weapons[1] || 13 == to.weapons[1] || to.weapons[1];
                    9 == to.weapons[1] || 12 == to.weapons[1] || 13 == to.weapons[1] || to.weapons[1];
                    let t = this.gotoGoal(372, 3);
                    t.action ? 0 != to.reloads[53] || this.isTrue ? packet("9", t.dir, 1) : this.boostTickType() : packet("9", t.dir, 1);
                }, this.perfCheck = function(t, e) {
                    if (11 == e.weaponIndex && J.getAngleDist(e.aim2 + Math.PI, e.d2) <= tt.shieldAngle) return !1;
                    if (![ 9, 12, 13, 15 ].includes(to.weapons[1])) return !0;
                    let n = {
                        x: e.x2 + 65 * Math.cos(e.aim2 + Math.PI),
                        y: e.y2 + 65 * Math.sin(e.aim2 + Math.PI)
                    };
                    if (J.lineInRect(t.x2 - t.scale, t.y2 - t.scale, t.x2 + t.scale, t.y2 + t.scale, n.x, n.y, n.x, n.y)) return !0;
                    let i = Ct.filter(t => t.visible).find(t => {
                        if (J.lineInRect(t.x2 - t.scale, t.y2 - t.scale, t.x2 + t.scale, t.y2 + t.scale, n.x, n.y, n.x, n.y)) return !0;
                    });
                    return !i && (i = closeObjects.filter(t => t.active).find(t => {
                        let e = t.getScale();
                        if (!t.ignoreCollision && J.lineInRect(t.x - e, t.y - e, t.x + e, t.y + e, n.x, n.y, n.x, n.y)) return !0;
                    }), !i);
                };
            }
        };
        function xi() {
            i.send("S", 1);
        }
        function Mi() {
            V = !V, i.send("K", 1);
        }
        function ji(t) {
            i.send("z", t, !1);
        }
        function Si(t, e) {
            i.send("z", t, !0);
        }
        function Ai(t, e) {
            i.send("F", t, e);
        }
        function Ti() {
            if (St("moo_name", Re.value), !le && i.connected) {
                le = !0, wt.stop("menu"), fn("Loading..."), i.send("M", {
                    name: Re.value,
                    moofoll: Tt,
                    skin: ie
                });
                let t = document.getElementById("ot-sdk-btn-floating");
                t && (t.style.display = "none");
            }
        }
        var Di = !0;
        function Pi(t) {
            De.style.display = "none", Ae.style.display = "block", ue.style.display = "none",
            li = {}, Wt = t, Et = 0, le = !0, Di && (Di = !1, $t.length = 0);
            try {
                if (document.title = 'God Laffer', !window._plEntranceShown) {
                    window._plEntranceShown = !0;
                    var e = document.createElement('div');
                    e.id = 'pl_enter_banner', e.style.position = 'fixed', e.style.left = '50%', e.style.top = '18%',
                    e.style.transform = 'translate(-50%, -50%)', e.style.zIndex = 3e4, e.style.display = 'flex',
                    e.style.alignItems = 'center', e.style.justifyContent = 'center', e.style.pointerEvents = 'none',
                    e.style.opacity = '0';
                    var n = document.createElement('div');
                    n.id = 'pl_enter_banner_card', n.style.transform = 'scale(0.8)', n.style.padding = '18px 28px',
                    n.style.borderRadius = '14px', n.style.display = 'flex', n.style.flexDirection = 'column',
                    n.style.alignItems = 'center', n.style.justifyContent = 'center', n.style.background = 'linear-gradient(135deg, rgba(12,15,20,0.85), rgba(6,10,18,0.7))',
                    n.style.boxShadow = '0 20px 60px rgba(0,0,0,0.6)', n.style.border = '1px solid rgba(255,255,255,0.04)',
                    n.style.backdropFilter = 'blur(8px)', n.style.pointerEvents = 'auto';
                    var i = document.createElement('div');
                    i.style.fontSize = '34px', i.style.fontWeight = '900', i.style.color = 'white',
                    i.style.letterSpacing = '-1px', i.style.textShadow = '0 6px 30px rgba(80,160,255,0.06)',
                    i.innerText = 'Welcome!';
                    var r = document.createElement('div');
                    r.style.fontSize = '13px', r.style.color = '#bcd8ff', r.style.marginTop = '8px',
                    r.innerText = '', n.appendChild(i), n.appendChild(r), e.appendChild(n), document.body.appendChild(e),
                    e.style.transition = 'opacity 360ms cubic-bezier(.2,.8,.2,1)', n.style.transition = 'transform 360ms cubic-bezier(.2,.8,.2,1)',
                    e.getBoundingClientRect(), requestAnimationFrame(function() {
                        try {
                            e.style.opacity = '1';
                        } catch (t) {}
                        try {
                            n.style.transform = 'scale(1)';
                        } catch (t) {}
                    }), setTimeout(function() {
                        try {
                            n.style.transform = 'scale(0.9)';
                        } catch (t) {}
                        try {
                            e.style.opacity = '0';
                        } catch (t) {}
                        setTimeout(function() {
                            try {
                                e.remove();
                            } catch (t) {}
                        }, 420);
                    }, 4e3);
                }
            } catch (t) {}
        }
        function Bi(t, e, n, i) {
            ft.showText(t, e, 50, .18, 500, Math.abs(n), n >= 0 ? "#fff" : "#8ecc51");
        }
        var Ii = 99999;
        function Oi() {
            if (le = !1, Gt.alive = !1, Z.deathMarker) try {
                let t = "Unknown";
                for (let e = 0; e < zt.length; e++) {
                    let n = zt[e];
                    if (n && n.sid !== Gt.sid && !Ho(n.sid) && n.health > 0) {
                        if (J.getDistance(Gt.x2, Gt.y2, n.x2, n.y2) < 200) {
                            t = n.name || "Unknown";
                            break;
                        }
                    }
                }
                k = {
                    x: Gt.x2,
                    y: Gt.y2,
                    name: t
                }, y = Date.now();
            } catch (t) {}
            try {
                factorem.refreshAds([ 2 ], !0);
            } catch (t) {}
            Pe.style.display = "none", Fn(), An = {
                x: Gt.x,
                y: Gt.y
            }, De.style.display = "none", Ye.style.display = "block", Ye.style.fontSize = "0px",
            Ii = 0, setTimeout(function() {
                Ae.style.display = "block", ue.style.display = "block", Ye.style.display = "none";
            }, tt.deathFadeout);
        }
        function Hi(t) {
            let e = xs(t);
            Gt && nn.removeAllItems(t), function(t) {
                if (!t) return;
                if (!le) return;
                vi.tickBase(() => {
                    J.getDirect(t, Gt, 0, 2);
                    let e = J.getDist(t, Gt, 0, 2);
                    let n = Math.round((r = t.x, a = t.y, o = Gt.x, s = Gt.y, Math.atan2(s - a, o - r) / (Math.PI / 2))) * (Math.PI / 2);
                    var r, a, o, s;
                    let c = [ 4, 5 ].includes(Gt.weapons[0]) && si <= it.weapons[si.primaryIndex || 5].range + 1.2 * si.scale && 0 == Gt.reloads[Gt.weapons[0]];
                    if (e <= it.weapons[Gt.weaponIndex].range + Gt.scale) return;
                    let l = function() {
                        try {
                            if (![ 3, 4, 5 ].includes(si.primaryIndex)) return !1;
                            if (null == si.primaryIndex || si.reloads[si.primaryIndex] > vi.tickRate) return !1;
                            if (si <= it.weapons[si.primaryIndex || 5].range + 1.8 * si.scale) {
                                let t = it.list[9];
                                let e = si.scale + t.scale + (t.placeOffset || 0);
                                let n = 0;
                                let i = {
                                    attempts: 0,
                                    block: "unblocked"
                                };
                                for (let r = -1; r <= 1; r += .1) {
                                    i.attempts++;
                                    let a = J.getDirect(Gt, si, 2, 2) + r;
                                    let o = si.x2 + e * Math.cos(a);
                                    let s = si.y2 + e * Math.sin(a);
                                    if (!$t.find(e => e.active && J.getDistance(o, s, e.x, e.y) < t.scale + (e.blocker ? e.blocker : e.getScale(.6, e.isItem))) && !(s >= tt.mapScale / 2 - tt.riverWidth / 2 && s <= tt.mapScale / 2 + tt.riverWidth / 2)) {
                                        n++, i.block = "blocked";
                                        break;
                                    }
                                }
                                if (n) return !0;
                            }
                        } catch (t) {
                            return null;
                        }
                        return !1;
                    }();
                    e <= 300 && si <= 400 && (si && c ? (this.testCanPlace(2, -Math.PI / 4, Math.PI / 4, Math.PI / 20, i.send("D", si), 1),
                    this.testCanPlace(4, -Math.PI / 4, Math.PI / 4, Math.PI / 12, i.send("D", si) + Math.PI, 1)) : !l && si <= it.weapons[si.primaryIndex || 5].range + 1.8 * si.scale ? this.testCanPlace(2, 0, 2 * Math.PI, Math.PI / 24, n, 1) : (15 == Gt.items[4] && this.testCanPlace(si ? 4 : 2, 0, 2 * Math.PI, Math.PI / 24, n, 1),
                    nt = !0));
                }, 1);
            }(e);
        }
        function Ei(t) {
            $o.push(t);
            try {} catch (t) {}
            try {
                if (null != Hr && t == Hr) {
                    try {} catch (t) {}
                    try {
                        let t = ri();
                        if (void 0 === t && Gt) try {
                            null != Ya ? t = Ya : void 0 !== Gt.xVel && void 0 !== Gt.yVel && (t = Math.atan2(Gt.yVel - Gt.y2, Gt.xVel - Gt.x2));
                        } catch (t) {}
                        let o = !1;
                        if (null != t && Gt) try {
                            try {
                                if (Ra && Ra.some(t => t && 15 == t.id && t.owner && t.owner.sid != Gt.sid && !Ho(t.owner.sid) && 'number' == typeof t.x && 'number' == typeof t.y && J.getDistance(Gt.x2, Gt.y2, t.x, t.y) <= t.scale + (Gt.scale || 0))) zr = null,
                                Rr = null; else {
                                    const e = Ra.filter(t => t.id > 5 && t.id < 10 && t.owner && t.owner.sid != Gt.sid && !Ho(t.owner.sid));
                                    const n = Math.PI / 4;
                                    const i = 35;
                                    let r = 60;
                                    try {
                                        Gt && Array.isArray(Gt.weapons) && (6 === Gt.weapons[0] || 7 === Gt.weapons[0]) && Gt.weaponIndex === Gt.weapons[0] && (r += 10);
                                    } catch (t) {}
                                    const a = i + r;
                                    for (const i of e) if (i && void 0 !== i.x && void 0 !== i.y) {
                                        if (J.getDistance(Gt.x2, Gt.y2, i.x, i.y) <= a) {
                                            let e = Math.atan2(i.y - Gt.y2, i.x - Gt.x2);
                                            if (angleDiff = Math.abs(t - e), angleDiff > Math.PI && (angleDiff = 2 * Math.PI - angleDiff),
                                            angleDiff <= n) {
                                                o = !0, zr = i.x, Rr = i.y;
                                                break;
                                            }
                                        }
                                    }
                                }
                            } catch (t) {}
                        } catch (t) {}
                        if (o) {
                            try {
                                if ($r() > 66) {
                                    try {} catch (t) {}
                                    zr = null, Rr = null, o = !1;
                                }
                            } catch (t) {}
                            try {
                                o && Z && Z.autostop_before_collision && di();
                            } catch (t) {}
                            try {
                                if (void 0 !== ft && Gt && Z && Z.label_autostop_enabled) {
                                    var e = Number(Z.label_size) || 20;
                                    var n = Number(Z.label_speed) || .12;
                                    var r = Number(Z.label_life) || 600;
                                    var a = Z.label_autostop_color || "#ff5252";
                                    try {
                                        ft.showText(Gt.x2, Gt.y2 - (Gt.scale || 0) - 30, e, n, r, "AUTO STOP", a);
                                    } catch (t) {}
                                }
                            } catch (t) {}
                            Ur = void 0 !== Zr ? Zr + 1 : 1, Ya = null;
                        } else {
                            zr = null, Rr = null, Ur = void 0 !== Zr ? Zr : 0, Ya = null;
                            try {
                                const t = ri();
                                if (void 0 !== t) try {
                                    i.send("9", t);
                                } catch (t) {}
                            } catch (t) {}
                        }
                        Br = !1, Hr = null, Er = null, Cr = null;
                    } catch (t) {}
                }
            } catch (t) {}
            nn.disableBySid(t);
        }
        function Ci() {
            if (Ie.innerText = Gt.points, Z && Z.autobuy) if (Gt.__gold600Logged && Gt.__gold2000Logged && Gt.__gold2500Logged && Gt.__gold4000Logged && Gt.__gold6000Logged && Gt.__gold15Logged && Gt.__gold10Logged && Gt.__gold6Logged && Gt.__gold101Logged && Gt.__gold20000Logged) ; else try {
                if ('number' == typeof Gt.points) {
                    if (Gt.points >= 600 && !Gt.__gold600Logged) {
                        try {} catch (t) {}
                        try {
                            Un(15, 0);
                        } catch (t) {}
                        Gt.__gold600Logged = !0;
                    }
                    if (Gt.points >= 2e3 && !Gt.__gold2000Logged) {
                        try {} catch (t) {}
                        try {
                            Un(11, 1);
                        } catch (t) {}
                        Gt.__gold2000Logged = !0;
                    }
                    if (Gt.points >= 2500 && !Gt.__gold2500Logged) {
                        try {} catch (t) {}
                        try {
                            Un(31, 0);
                        } catch (t) {}
                        Gt.__gold2500Logged = !0;
                    }
                    if (Gt.points >= 4e3 && !Gt.__gold4000Logged) {
                        try {} catch (t) {}
                        try {
                            Un(6, 0);
                        } catch (t) {}
                        Gt.__gold4000Logged = !0;
                    }
                    if (Gt.points >= 6e3 && !Gt.__gold6000Logged) {
                        try {} catch (t) {}
                        try {
                            Un(7, 0);
                        } catch (t) {}
                        Gt.__gold6000Logged = !0;
                    }
                    if (Gt.points >= 6500 && !Gt.__gold6Logged) {
                        try {} catch (t) {}
                        try {
                            Un(12, 0);
                        } catch (t) {}
                        Gt.__gold6Logged = !0;
                    }
                    if (Gt.points >= 1e4 && !Gt.__gold10Logged) {
                        try {} catch (t) {}
                        try {
                            Un(53, 0);
                        } catch (t) {}
                        Gt.__gold10Logged = !0;
                    }
                    if (Gt.points >= 15e3 && !Gt.__gold15Logged) {
                        try {} catch (t) {}
                        try {
                            Un(40, 0);
                        } catch (t) {}
                        Gt.__gold15Logged = !0;
                    }
                    if (Gt.points >= 15500 && !Gt.__gold101Logged && Gt.__gold15Logged) {
                        try {} catch (t) {}
                        try {
                            Un(19, 1);
                        } catch (t) {}
                        Gt.__gold101Logged = !0;
                    }
                    if (Gt.points >= 2e4 && !Gt.__gold20000Logged) {
                        try {} catch (t) {}
                        try {
                            Un(21, 1);
                        } catch (t) {}
                        Gt.__gold20000Logged = !0;
                    }
                }
            } catch (t) {}
            Oe.innerText = Gt.food, He.innerText = Gt.wood, Ee.innerText = Gt.stone, Ce.innerText = Gt.kills;
        }
        var zi = {};
        var Ri = [ "crown", "skull" ];
        var $i = [];
        function Ui(t, e) {
            if (Gt.upgradePoints = t, Gt.upgrAge = e, t > 0) {
                $i.length = 0, J.removeAllChildren(Le);
                for (var n = 0; n < it.weapons.length; ++n) {
                    if (it.weapons[n].age == e && (null == it.weapons[n].pre || Gt.weapons.indexOf(it.weapons[n].pre) >= 0)) J.generateElement({
                        id: "upgradeItem" + n,
                        class: "actionBarItem",
                        onmouseout: function() {
                            dn();
                        },
                        parent: Le
                    }).style.backgroundImage = document.getElementById("actionBarItem" + n).style.backgroundImage,
                    $i.push(n);
                }
                for (n = 0; n < it.list.length; ++n) if (it.list[n].age == e && (null == it.list[n].pre || Gt.items.indexOf(it.list[n].pre) >= 0)) {
                    var r = it.weapons.length + n;
                    J.generateElement({
                        id: "upgradeItem" + r,
                        class: "actionBarItem",
                        onmouseout: function() {
                            dn();
                        },
                        parent: Le
                    }).style.backgroundImage = document.getElementById("actionBarItem" + r).style.backgroundImage,
                    $i.push(r);
                }
                for (n = 0; n < $i.length; n++) (function(t) {
                    var e = document.getElementById('upgradeItem' + t);
                    e.onmouseover = function() {
                        it.weapons[t] ? dn(it.weapons[t], !0) : dn(it.list[t - it.weapons.length]);
                    }, e.onclick = J.checkTrusted(function() {
                        i.send("H", t);
                    }), J.hookTouchEvents(e);
                })($i[n]);
                $i.length ? (Le.style.display = "block", Ne.style.display = "block", Ne.innerHTML = "SELECT ITEMS (" + t + ")") : (Le.style.display = "none",
                Ne.style.display = "none", dn());
            } else Le.style.display = "none", Ne.style.display = "none", dn();
        }
        function Fi(t) {
            i.send("H", t);
        }
        function Li(t, e, n) {
            null != t && (Gt.XP = t), null != e && (Gt.maxXP = e), null != n && (Gt.age = n),
            n == tt.maxAge ? (Ue.innerHTML = "MAX AGE", Fe.style.width = "100%") : (Ue.innerHTML = "AGE " + Gt.age,
            Fe.style.width = Gt.XP / Gt.maxXP * 100 + "%");
        }
        function Ni(t) {
            J.removeAllChildren(ze);
            var e = 1;
            for (var n = 0; n < t.length; n += 3) (function(n) {
                J.generateElement({
                    class: "leaderHolder",
                    parent: ze,
                    children: [ J.generateElement({
                        class: "leaderboardItem",
                        style: "color:" + (t[n] == Wt ? "#fff" : "rgba(255,255,255,0.6)"),
                        text: e + ". " + ("" != t[n + 1] ? t[n + 1] : "unknown")
                    }), J.generateElement({
                        class: "leaderScore",
                        text: J.kFormat(t[n + 2]) || "0"
                    }) ]
                });
            })(n), e++;
        }
        function qi() {
            if (1) {
                if (Ii < 120 && (Ii += .1 * It, Ye.style.fontSize = Math.min(Math.round(Ii), 120) + "px"),
                Gt) {
                    var t = J.getDistance(te, ee, Gt.x, Gt.y);
                    var e = J.getDirection(Gt.x, Gt.y, te, ee);
                    var n = Math.min(.01 * t * It, t);
                    t > .05 ? (te += n * Math.cos(e), ee += n * Math.sin(e)) : (te = Gt.x, ee = Gt.y);
                } else te = tt.mapScale / 2, ee = tt.mapScale / 2;
                var i = Ot - 1e3 / tt.serverUpdateRate;
                for (var r = 0; r < zt.length + Ct.length; ++r) if ((Kt = zt[r] || Ct[r - zt.length]) && Kt.visible) if (Kt.forcePos) Kt.x = Kt.x2,
                Kt.y = Kt.y2, Kt.dir = Kt.d2; else {
                    var a = Kt.t2 - Kt.t1;
                    var o = (i - Kt.t1) / a;
                    Kt.dt += It;
                    var c = Math.min(1.7, Kt.dt / 170);
                    var l = Kt.x2 - Kt.x1;
                    Kt.x = Kt.x1 + l * c, l = Kt.y2 - Kt.y1, Kt.y = Kt.y1 + l * c, Kt.dir = Math.lerpAngle(Kt.d2, Kt.d1, Math.min(1.2, o));
                }
                var u = te - ae / 2;
                var f = ee - oe / 2;
                if (tt.snowBiomeTop - f <= 0 && tt.mapScale - tt.snowBiomeTop - f >= oe ? (we.fillStyle = "#b6db66",
                we.fillRect(0, 0, ae, oe)) : tt.mapScale - tt.snowBiomeTop - f <= 0 ? (we.fillStyle = "#dbc666",
                we.fillRect(0, 0, ae, oe)) : tt.snowBiomeTop - f >= oe ? (we.fillStyle = "#fff",
                we.fillRect(0, 0, ae, oe)) : tt.snowBiomeTop - f >= 0 ? (we.fillStyle = "#fff",
                we.fillRect(0, 0, ae, tt.snowBiomeTop - f), we.fillStyle = "#b6db66", we.fillRect(0, tt.snowBiomeTop - f, ae, oe - (tt.snowBiomeTop - f))) : (we.fillStyle = "#b6db66",
                we.fillRect(0, 0, ae, tt.mapScale - tt.snowBiomeTop - f), we.fillStyle = "#dbc666",
                we.fillRect(0, tt.mapScale - tt.snowBiomeTop - f, ae, oe - (tt.mapScale - tt.snowBiomeTop - f))),
                Z.renderGrid) {
                    we.lineWidth = 4, we.strokeStyle = "#000", we.globalAlpha = .06, we.beginPath();
                    for (var d = -te; d < ae; d += oe / 18) d > 0 && (we.moveTo(d, 0), we.lineTo(d, oe));
                    for (var h = -ee; h < oe; h += oe / 18) d > 0 && (we.moveTo(0, h), we.lineTo(ae, h));
                    we.stroke();
                }
                if (Di || ((Yt += Xt * tt.waveSpeed * It) >= tt.waveMax ? (Yt = tt.waveMax, Xt = -1) : Yt <= 1 && (Yt = Xt = 1),
                we.globalAlpha = 1, we.fillStyle = "#dbc666", Xi(u, f, we, tt.riverPadding), we.fillStyle = "#91b2db",
                Xi(u, f, we, 250 * (Yt - 1))), we.globalAlpha = 1, we.strokeStyle = rn, Vi(-1, u, f),
                we.globalAlpha = 1, we.lineWidth = on, Wi(0, u, f), Aa && void 0 !== Zr && Zr >= Ea && 0 === Ha) {
                    try {
                        'undefined' != typeof leftHoldDebug && leftHoldDebug, Ao(0);
                    } catch (t) {}
                    try {
                        'undefined' != typeof leftHoldDebug && leftHoldDebug, vi.tickBase(() => {
                            try {
                                'undefined' != typeof leftHoldDebug && leftHoldDebug, za && So(7, !0);
                            } catch (t) {
                                'undefined' != typeof leftHoldDebug && leftHoldDebug;
                            }
                            vi.tickBase(() => {
                                try {
                                    'undefined' != typeof leftHoldDebug && leftHoldDebug;
                                    const t = function(e) {
                                        vi.tickBase(() => {
                                            try {
                                                if (!za || Gt && 7 == Gt.skinIndex) {
                                                    var n = 1;
                                                    try {
                                                        null != (i = Gt && Gt.weapons ? Gt.weapons[0] : null) && it && it.weapons && vi && vi.tickRate && (n = Math.max(1, Math.ceil(it.weapons[i].speed / vi.tickRate)));
                                                    } catch (t) {
                                                        n = 1;
                                                    }
                                                    vi.tickBase(() => {
                                                        try {
                                                            try {
                                                                Si(0);
                                                            } catch (t) {}
                                                            try {
                                                                Et = 1, gi();
                                                            } catch (t) {}
                                                            if (na && 1 == na[Gt.sid]) {
                                                                var i = ci();
                                                                try {
                                                                    'undefined' != typeof leftHoldDebug && leftHoldDebug;
                                                                } catch (t) {}
                                                                Ai(0, i);
                                                                try {
                                                                    Ba = (void 0 !== Zr ? Zr : 0) + n;
                                                                } catch (t) {
                                                                    Ba = (void 0 !== Zr ? Zr : 0) + 1;
                                                                }
                                                            } else e > 0 ? ('undefined' != typeof leftHoldDebug && leftHoldDebug, t(e - 1)) : 'undefined' != typeof leftHoldDebug && leftHoldDebug;
                                                        } catch (t) {
                                                            'undefined' != typeof leftHoldDebug && leftHoldDebug;
                                                        }
                                                    }, 3);
                                                } else if (e > 0) 'undefined' != typeof leftHoldDebug && leftHoldDebug, t(e - 1); else {
                                                    'undefined' != typeof leftHoldDebug && leftHoldDebug, Ca = !0;
                                                    n = 1;
                                                    try {
                                                        var i;
                                                        null != (i = Gt && Gt.weapons ? Gt.weapons[0] : null) && it && it.weapons && vi && vi.tickRate && (n = Math.max(1, Math.ceil(it.weapons[i].speed / vi.tickRate)));
                                                    } catch (t) {
                                                        n = 1;
                                                    }
                                                    vi.tickBase(() => {
                                                        try {
                                                            Si(0);
                                                        } catch (t) {}
                                                        try {
                                                            Et = 1, gi();
                                                        } catch (t) {}
                                                        if (na && 1 == na[Gt.sid]) {
                                                            var t = ci();
                                                            try {
                                                                'undefined' != typeof leftHoldDebug && leftHoldDebug;
                                                            } catch (t) {}
                                                            Ai(0, t);
                                                            try {
                                                                Ba = (void 0 !== Zr ? Zr : 0) + n;
                                                            } catch (t) {
                                                                Ba = (void 0 !== Zr ? Zr : 0) + 1;
                                                            }
                                                        } else 'undefined' != typeof leftHoldDebug && leftHoldDebug;
                                                    }, 3);
                                                }
                                            } catch (t) {
                                                'undefined' != typeof leftHoldDebug && leftHoldDebug;
                                            }
                                        }, 1);
                                    };
                                    t(4);
                                } catch (t) {
                                    'undefined' != typeof leftHoldDebug && leftHoldDebug;
                                }
                            }, 1);
                        }, 1);
                    } catch (t) {
                        'undefined' != typeof leftHoldDebug && leftHoldDebug;
                    }
                    Ha = 3, Ea = Zr + 1;
                }
                if (Aa && Gt && Gt.alive && 3 === Ha) try {
                    if (!za || Gt && 7 == Gt.skinIndex || Ca) {
                        var m = 1;
                        try {
                            var p = Gt && Gt.weapons ? Gt.weapons[0] : null;
                            null != p && it && it.weapons && vi && vi.tickRate && (m = Math.max(1, Math.ceil(it.weapons[p].speed / vi.tickRate)));
                        } catch (t) {
                            m = 1;
                        }
                        if (null == Ba && (Ba = 0), Zr >= Ba) if (na && 1 == na[Gt.sid]) {
                            try {
                                Si(0);
                            } catch (t) {}
                            try {
                                var v = ci();
                                try {
                                    'undefined' != typeof leftHoldDebug && leftHoldDebug;
                                } catch (t) {}
                                try {
                                    Et = 1, gi();
                                } catch (t) {}
                                Ai(0, v);
                            } catch (t) {}
                            try {
                                Ba = Zr + m;
                            } catch (t) {
                                Ba = Zr + 1;
                            }
                        } else 'undefined' != typeof leftHoldDebug && leftHoldDebug;
                    }
                } catch (t) {} else if (!Aa && (null !== Ta || null !== Da || null !== Pa)) {
                    try {
                        null !== Ta && Si(Ta);
                    } catch (t) {}
                    try {
                        null !== Da && So(Da);
                    } catch (t) {}
                    try {
                        null !== Pa && Ao(Pa);
                    } catch (t) {}
                    Ta = Da = Pa = null;
                }
                Gt && Gt.alive && (we.globalAlpha = .5, we.save(), we.translate(Gt.xVel - u, Gt.yVel - f),
                we.rotate(Gt.dir), Qi(Gt, we), we.restore(), we.globalAlpha = 1), Zi(u, f, 0), we.globalAlpha = 1;
                for (r = 0; r < Ct.length; ++r) (Kt = Ct[r]).active && Kt.visible && (Kt.animate(It),
                we.save(), we.translate(Kt.x - u, Kt.y - f), we.rotate(Kt.dir + Kt.dirPlus - Math.PI / 2),
                Mr(Kt, we), we.restore());
                if (Vi(0, u, f), Wi(1, u, f), Vi(1, u, f), Zi(u, f, 1), Vi(2, u, f), Vi(3, u, f),
                we.fillStyle = "#000", we.globalAlpha = .09, u <= 0 && we.fillRect(0, 0, -u, oe),
                tt.mapScale - u <= ae) {
                    var g = Math.max(0, -f);
                    we.fillRect(tt.mapScale - u, g, ae - (tt.mapScale - u), oe - g);
                }
                if (f <= 0 && we.fillRect(-u, 0, ae + u, -f), tt.mapScale - f <= oe) {
                    var b = Math.max(0, -u);
                    var k = 0;
                    tt.mapScale - u <= ae && (k = ae - (tt.mapScale - u)), we.fillRect(b, tt.mapScale - f, ae - b - k, oe - (tt.mapScale - f));
                }
                !function(t, e) {
                    for (let n in sa) {
                        let i = sa[n];
                        we.save(), we.translate(i.x - t, i.y - e);
                        let r = fr({
                            id: i.id,
                            name: it.list[i.id].name,
                            scale: 40,
                            predictEnemyTrap: !0
                        });
                        we.globalAlpha = .6, we.drawImage(r, -r.width / 2, -r.height / 2), we.restore();
                    }
                }(u, f);
                for (let t of oa) {
                    we.globalAlpha = .6, we.save(), we.translate(t.x - u, t.y - f);
                    let e = fr({
                        id: t.id,
                        name: t.name,
                        scale: t.scale,
                        prediction: !0,
                        preplace: t.preplace
                    });
                    we.drawImage(e, -e.width / 2, -e.height / 2), we.rotate(t.angle), we.restore();
                }
                for (let t in Ra) {
                    let e = Ra[t];
                    if (J.getDistance(Gt.x, Gt.y, e.x, e.y) < 300 && e.isItem) {
                        we.globalAlpha = 1, we.lineCap = "round", we.strokeStyle = an, we.lineWidth = 12.5,
                        we.beginPath(), we.arc(e.x - u, e.y - f, e.id > 5 && e.id < 10 ? 30 : 20, 0, e.health * (2 * Math.PI / e.maxHealth)),
                        we.stroke();
                        const t = .003 * Date.now();
                        const n = (Math.sin(t) + 1) / 2;
                        const i = [ 178, 42, 42 ];
                        const r = [ 240, 119, 119 ];
                        const a = `rgb(${Math.round(i[0] + (r[0] - i[0]) * n)}, ${Math.round(i[1] + (r[1] - i[1]) * n)}, ${Math.round(i[2] + (r[2] - i[2]) * n)})`;
                        we.strokeStyle = e.owner.sid == Gt.sid ? "#e9b3e9" : Ho(e.owner.sid) ? "#518ecc" : a,
                        we.lineWidth = 5, we.beginPath(), we.arc(e.x - u, e.y - f, e.id > 5 && e.id < 10 ? 30 : 20, 0, e.health * (2 * Math.PI / e.maxHealth)),
                        we.stroke();
                    }
                }
                we.globalAlpha = 1, we.fillStyle = "rgba(0, 0, 40, 0.45)", we.fillRect(0, 0, ae, oe);
                try {
                    if (s) {
                        const t = 220;
                        const e = 28;
                        const n = 12;
                        const i = Math.max(10, ae - t - n);
                        const r = 10;
                        we.save(), we.globalAlpha = .95, we.fillStyle = "rgba(40, 40, 40, 0.85)", 'function' == typeof we.roundRect ? we.roundRect(i, r, t, e, 6) : we.fillRect(i, r, t, e),
                        we.fill(), we.fillStyle = "rgb(200,220,80)", we.font = "16px Hammersmith One", we.textBaseline = "middle",
                        we.textAlign = "left", we.fillText("AutoTrap Tick ACTIVE", i + 12, r + e / 2), we.restore();
                    }
                } catch (t) {}
                we.strokeStyle = an;
                for (r = 0; r < zt.length + Ct.length; ++r) if ((Kt = zt[r] || Ct[r - zt.length]).visible && (10 != Kt.skinIndex || Kt == Gt || Kt.team && Kt.team == Gt.team)) {
                    var y = (Kt.team ? `[${Kt.team}] ` : "") + Kt.name;
                    if ("" != y) {
                        if (we.font = (Kt.nameScale || 30) + "px Hammersmith One", we.fillStyle = "#ffffffff",
                        we.textBaseline = "middle", we.textAlign = "center", we.lineWidth = Kt.nameScale ? 11 : 8,
                        we.lineJoin = "round", we.strokeText(y, Kt.x - u, Kt.y - f - Kt.scale - tt.nameY),
                        Kt.sid && Kt.isPlayer && we.fillText(Kt.sid, Kt.x - u, Kt.y - f - Kt.scale - tt.nameY + 67),
                        we.fillText(y, Kt.x - u, Kt.y - f - Kt.scale - tt.nameY), Kt.isLeader && zi.crown.isLoaded) {
                            var w = tt.crownIconScale;
                            b = Kt.x - u - w / 2 - we.measureText(y).width / 2 - tt.crownPad;
                            we.drawImage(zi.crown, b, Kt.y - f - Kt.scale - tt.nameY - w / 2 - 5, w, w);
                        }
                        if (1 == Kt.iconIndex && zi.skull.isLoaded) {
                            w = tt.crownIconScale;
                            b = Kt.x - u - w / 2 + we.measureText(y).width / 2 + tt.crownPad;
                            we.drawImage(zi.skull, b, Kt.y - f - Kt.scale - tt.nameY - w / 2 - 5, w, w);
                        }
                    }
                    we.globalAlpha = 1, we.font = "20px Hammersmith One", we.fillStyle = "#ffffff",
                    we.strokeStyle = "#000000", we.textBaseline = "middle", we.textAlign = "center",
                    we.lineWidth = 4, we.lineJoin = "round";
                    let t = Kt.health + "/" + Kt.maxHealth;
                    let e = Kt.x - u - 28;
                    let n = Kt.y - f + Kt.scale + tt.nameY + 40;
                    we.strokeText(t, e, n), we.fillText(t, e, n);
                    let i = (Kt.shameCount || 0) + "/8";
                    let r = Kt.x - u + 35;
                    if (we.strokeText(i, r, n), we.fillText(i, r, n), Kt.health > 0) {
                        tt.healthBarWidth;
                        we.fillStyle = an, we.roundRect(Kt.x - u - tt.healthBarWidth - tt.healthBarPad, Kt.y - f + Kt.scale + tt.nameY, 2 * tt.healthBarWidth + 2 * tt.healthBarPad, 17, 8),
                        we.fill(), we.fillStyle = Kt == Gt || Kt.team && Kt.team == Gt.team ? "#9bd362ff" : "#ad2727ff",
                        we.roundRect(Kt.x - u - tt.healthBarWidth, Kt.y - f + Kt.scale + tt.nameY + tt.healthBarPad, 2 * tt.healthBarWidth * (Kt.health / Kt.maxHealth), 17 - 2 * tt.healthBarPad, 7),
                        we.fill();
                    }
                }
                ft.update(It, we, u, f);
                for (r = 0; r < zt.length; ++r) if ((Kt = zt[r]).visible && Kt.chatCountdown > 0) {
                    Kt.chatCountdown -= It, Kt.chatCountdown <= 0 && (Kt.chatCountdown = 0), we.font = "32px Hammersmith One";
                    var _ = we.measureText(Kt.chatMessage);
                    we.textBaseline = "middle", we.textAlign = "center";
                    b = Kt.x - u;
                    g = Kt.y - Kt.scale - f - 90;
                    var x = _.width + 17;
                    we.fillStyle = "rgba(0,0,0,0.2)", we.roundRect(b - x / 2, g - 23.5, x, 47, 6), we.fill(),
                    we.fillStyle = "#fff", we.fillText(Kt.chatMessage, b, g);
                }
            }
            !function(t) {
                if (Gt && Gt.alive) {
                    Ve.clearRect(0, 0, Ke.width, Ke.height), Ve.strokeStyle = "#fff", Ve.lineWidth = 4;
                    for (var e = 0; e < Pn.length; ++e) (Bn = Pn[e]).update(Ve, t);
                    if (Ve.globalAlpha = 1, Ve.fillStyle = "#fff", dr(Gt.x / tt.mapScale * Ke.width, Gt.y / tt.mapScale * Ke.height, 7, Ve, !0),
                    Ve.fillStyle = "rgba(255,255,255,0.35)", Gt.team && Tn) for (e = 0; e < Tn.length; ) dr(Tn[e] / tt.mapScale * Ke.width, Tn[e + 1] / tt.mapScale * Ke.height, 7, Ve, !0),
                    e += 2;
                    An && (Ve.fillStyle = "#fc5553", Ve.font = "34px Hammersmith One", Ve.textBaseline = "middle",
                    Ve.textAlign = "center", Ve.fillText("x", An.x / tt.mapScale * Ke.width, An.y / tt.mapScale * Ke.height)),
                    Dn && (Ve.fillStyle = "#fff", Ve.font = "34px Hammersmith One", Ve.textBaseline = "middle",
                    Ve.textAlign = "center", Ve.fillText("x", Dn.x / tt.mapScale * Ke.width, Dn.y / tt.mapScale * Ke.height));
                }
            }(It), -1 !== Zt.id && Gi(Zt.startX, Zt.startY, Zt.currentX, Zt.currentY), -1 !== Qt.id && Gi(Qt.startX, Qt.startY, Qt.currentX, Qt.currentY);
        }
        function Gi(t, e, n, i) {
            we.save(), we.setTransform(1, 0, 0, 1, 0, 0), we.scale(Bt, Bt);
            we.beginPath(), we.arc(t, e, 50, 0, 2 * Math.PI, !1), we.closePath(), we.fillStyle = "rgba(255, 255, 255, 0.3)",
            we.fill();
            var r = n - t;
            var a = i - e;
            var o = Math.sqrt(Math.pow(r, 2) + Math.pow(a, 2));
            var s = o > 50 ? o / 50 : 1;
            r /= s, a /= s, we.beginPath(), we.arc(t + r, e + a, 25, 0, 2 * Math.PI, !1), we.closePath(),
            we.fillStyle = "white", we.fill(), we.restore();
        }
        function Wi(t, e, n) {
            for (var i = 0; i < Ut.length; ++i) (Kt = Ut[i]).active && Kt.layer == t && (Kt.update(It),
            Kt.active && jr(Kt.x - e, Kt.y - n, Kt.scale) && (we.save(), we.translate(Kt.x - e, Kt.y - n),
            we.rotate(Kt.dir), Yi(0, 0, Kt, we, 1), we.restore()));
        }
        var Ki = {};
        function Yi(t, e, n, i, r) {
            if (n.src) {
                var a = it.projectiles[n.indx].src;
                var o = Ki[a];
                o || ((o = new Image).onload = function() {
                    this.isLoaded = !0;
                }, o.src = ".././img/weapons/" + a + ".png", Ki[a] = o), o.isLoaded && i.drawImage(o, t - n.scale / 2, e - n.scale / 2, n.scale, n.scale);
            } else 1 == n.indx && (i.fillStyle = "#939393", dr(t, e, n.scale, i));
        }
        function Xi(t, e, n, i) {
            var r = tt.riverWidth + i;
            var a = tt.mapScale / 2 - e - r / 2;
            a < oe && a + r > 0 && n.fillRect(0, a, ae, r);
        }
        function Vi(t, e, n) {
            var i, r, a;
            for (var o = 0; o < $t.length; ++o) if ((Kt = $t[o]).active && (r = Kt.x + Kt.xWiggle - e,
            a = Kt.y + Kt.yWiggle - n, 0 == t && Kt.update(It), Kt.layer == t && jr(r, a, Kt.scale + (Kt.blocker || 0)))) if (we.globalAlpha = Kt.hideFromEnemy ? .6 : 1,
            Kt.isItem) {
                i = fr(Kt), we.save(), we.translate(r, a), we.rotate(Kt.dir), we.drawImage(i, -i.width / 2, -i.height / 2),
                Kt.blocker && (we.strokeStyle = "#db6e6e", we.globalAlpha = .3, we.lineWidth = 6,
                dr(0, 0, Kt.blocker, we, !1, !0)), we.restore();
                try {
                    if (Z && Z.visual_spike_overlay && Kt.name && (-1 !== Kt.name.indexOf('spike') || -1 !== Kt.name.indexOf('spikes'))) {
                        const t = r;
                        const e = a;
                        const n = 90;
                        we.save(), we.beginPath(), we.strokeStyle = 'rgba(255,0,0,0.6)', we.lineWidth = 2,
                        we.arc(t, e, Kt.scale + n, 0, 2 * Math.PI), we.stroke(), we.restore();
                    }
                } catch (t) {}
                try {
                    const t = (Kt.name || '').toLowerCase();
                    const e = -1 !== t.indexOf('spike');
                    const n = -1 !== t.indexOf('trap');
                    const i = -1 !== t.indexOf('turret');
                    const o = -1 !== t.indexOf('mill') || -1 !== t.indexOf('windmill') || -1 !== t.indexOf('power mill');
                    if (e || n || i || o) {
                        const t = Kt.owner && Kt.owner.sid ? Kt.owner.sid : null;
                        const s = null !== t && Gt && t == Gt.sid;
                        const c = null !== t && !s && !!Ho(t);
                        let l = '#ffffff';
                        s || c ? e ? l = '#2ecc40' : n ? l = '#71aad6' : o ? l = '#8ed6ff' : i && (l = '#ff8c00') : e ? l = '#ff3333' : n ? l = '#9b59b6' : o ? l = '#8b5a2b' : i && (l = '#000000');
                        const u = Math.max(3, Math.round(.12 * (Kt.scale || 20)));
                        we.save(), we.beginPath(), we.fillStyle = l, we.arc(r, a, u, 0, 2 * Math.PI), we.fill(),
                        we.restore();
                    }
                } catch (t) {}
            } else {
                i = lr(Kt), we.drawImage(i, r - i.width / 2, a - i.height / 2);
                try {
                    if (Z && Z.visual_spike_overlay && Kt.name && (-1 !== Kt.name.indexOf('spike') || -1 !== Kt.name.indexOf('spikes'))) {
                        const t = r;
                        const e = a;
                        const n = 90;
                        we.save(), we.beginPath(), we.strokeStyle = 'rgba(255,0,0,0.6)', we.lineWidth = 2,
                        we.arc(t, e, Kt.scale + n, 0, 2 * Math.PI), we.stroke(), we.restore();
                    }
                } catch (t) {}
                try {
                    const t = (Kt.name || '').toLowerCase();
                    const e = -1 !== t.indexOf('spike');
                    const n = -1 !== t.indexOf('trap');
                    const i = -1 !== t.indexOf('turret');
                    const o = -1 !== t.indexOf('mill') || -1 !== t.indexOf('windmill') || -1 !== t.indexOf('power mill');
                    if (e || n || i || o) {
                        const t = Kt.owner && Kt.owner.sid ? Kt.owner.sid : null;
                        const s = null !== t && Gt && t == Gt.sid;
                        const c = null !== t && !s && !!Ho(t);
                        let l = '#ffffff';
                        s || c ? e ? l = '#2ecc40' : n ? l = '#71aad6' : o ? l = '#8ed6ff' : i && (l = '#ff8c00') : e ? l = '#ff3333' : n ? l = '#9b59b6' : o ? l = '#8b5a2b' : i && (l = '#000000');
                        const u = Math.max(3, Math.round(.12 * (Kt.scale || 20)));
                        we.save(), we.beginPath(), we.fillStyle = l, we.arc(r, a, u, 0, 2 * Math.PI), we.fill(),
                        we.restore();
                    }
                } catch (t) {}
            }
        }
        function Ji(t, e, n) {
            (Kt = ws(t)) && (Qr.push({
                player: Kt,
                isObjectHit: e,
                weapon: n
            }), e && (ga.push({
                objects: va,
                player: Kt,
                weapon: n
            }), va = []), Kt.startAnim(e, n));
        }
        function Zi(t, e, n) {
            we.globalAlpha = 1;
            for (var i = 0; i < zt.length; ++i) (Kt = zt[i]).zIndex == n && (Kt.animate(It),
            Kt.visible && (Kt.skinRot += .002 * It, ne = (Kt == Gt ? ci() : Kt.dir) + Kt.dirPlus,
            we.save(), we.translate(Kt.x - t, Kt.y - e), we.rotate(ne), Qi(Kt, we), we.restore()));
            try {
                if (1 === n && r && si && Gt && Gt.alive && Z && Z.visual_veltick_radius) {
                    let n = 1e3 / 9 * 1.5 + 35;
                    let i = 1e3 / 9 * 1.5 + 80;
                    const r = si.x2 - t;
                    const a = si.y2 - e;
                    we.save(), we.beginPath(), we.strokeStyle = 'rgba(107,111,224,0.36)', we.lineWidth = 3,
                    we.arc(r, a, n, 0, 2 * Math.PI), we.stroke(), we.beginPath(), we.strokeStyle = 'rgba(107,111,224,0.18)',
                    we.lineWidth = 2, we.arc(r, a, i, 0, 2 * Math.PI), we.stroke();
                    try {
                        const t = Math.max(1, n - 10);
                        we.beginPath(), we.strokeStyle = 'rgba(107,111,224,0.28)', we.lineWidth = 1.5, we.arc(r, a, t, 0, 2 * Math.PI),
                        we.stroke();
                    } catch (t) {}
                    try {
                        const t = i + 10;
                        we.beginPath(), we.strokeStyle = 'rgba(107,111,224,0.12)', we.lineWidth = 1.5, we.arc(r, a, t, 0, 2 * Math.PI),
                        we.stroke();
                    } catch (t) {}
                    we.restore();
                }
                try {
                    if (1 === n) {
                        const n = Date.now();
                        try {
                            if (Vo()) {
                                we.save();
                                for (let i = Wo.length - 1; i >= 0; --i) {
                                    const r = Wo[i];
                                    if (n - r.t > 1200) {
                                        Wo.splice(i, 1);
                                        continue;
                                    }
                                    const a = r.x - t;
                                    const o = r.y - e;
                                    we.beginPath(), we.strokeStyle = r.placeable ? 'rgba(80,200,120,0.45)' : 'rgba(255,80,80,0.25)',
                                    we.lineWidth = r.perfect ? 2.5 : 1.2, we.moveTo(Gt.x2 - t, Gt.y2 - e), we.lineTo(a, o),
                                    we.stroke(), we.beginPath(), we.fillStyle = r.placeable ? 'rgba(80,200,120,0.9)' : 'rgba(255,80,80,0.9)',
                                    we.arc(a, o, r.perfect ? 4 : 2.5, 0, 2 * Math.PI), we.fill();
                                }
                                we.restore();
                            }
                        } catch (t) {}
                        try {
                            if (Xo()) {
                                we.save();
                                for (let i = Yo.length - 1; i >= 0; --i) {
                                    const r = Yo[i];
                                    if (n - r.t > 1200) {
                                        Yo.splice(i, 1);
                                        continue;
                                    }
                                    r.x;
                                    r.y;
                                    if (we.beginPath(), we.strokeStyle = r.hit ? 'rgba(255,180,80,0.95)' : 'rgba(180,180,255,0.6)',
                                    we.lineWidth = r.hit ? 3 : 1.4, we.moveTo(r.fromX - t, r.fromY - e), we.lineTo(r.toX - t, r.toY - e),
                                    we.stroke(), r.spikes && r.spikes.length) for (const n of r.spikes) we.beginPath(),
                                    we.strokeStyle = 'rgba(255,80,80,0.95)', we.lineWidth = 2, we.arc(n.x - t, n.y - e, Math.max(6, n.scale), 0, 2 * Math.PI),
                                    we.stroke();
                                }
                                we.restore();
                            }
                        } catch (t) {}
                    }
                } catch (t) {}
                try {
                    if (void 0 !== K && K.length) for (;K.length; ) {
                        const n = K.shift();
                        try {
                            void 0 !== ft ? ft.showText(n.x, n.y, n.size, n.speed, n.life, n.text, n.color) : (we.save(),
                            we.fillStyle = n.color || '#fff', we.font = (n.size || 15) + 'px Arial', we.textAlign = 'center',
                            we.fillText(n.text, n.x - t, n.y - e), we.restore());
                        } catch (t) {}
                    }
                } catch (t) {}
                try {
                    if (Z.deathMarker && k && Date.now() - y < 5e3) {
                        const n = k.x - t;
                        const i = k.y - e;
                        const r = 1 - (Date.now() - y) / 5e3;
                        const a = .02 * (Date.now() - y);
                        we.save(), we.globalAlpha = r, we.font = '32px Arial', we.textAlign = 'center',
                        we.fillStyle = '#ff4444', we.fillText('\u2620', n, i - 10 + 5 * Math.sin(a)), we.font = 'bold 14px Arial',
                        we.fillStyle = '#ffffff', we.fillText(k.name, n, i + 20 + 5 * Math.sin(a)), we.font = '11px Arial',
                        we.fillStyle = '#cccccc', we.fillText('killed here', n, i + 35 + 5 * Math.sin(a)),
                        we.restore();
                    } else k = null;
                } catch (t) {}
            } catch (t) {}
        }
        function Qi(t, e) {
            (e = e || we).lineWidth = on, e.lineJoin = "miter";
            var n = Math.PI / 4 * (it.weapons[t.weaponIndex].armS || 1);
            var i = t.buildIndex < 0 && it.weapons[t.weaponIndex].hndS || 1;
            var r = t.buildIndex < 0 && it.weapons[t.weaponIndex].hndD || 1;
            if (t.tailIndex > 0 && function(t, e, n) {
                if (!(nr = rr[t])) {
                    var i = new Image;
                    i.onload = function() {
                        this.isLoaded = !0, this.onload = null;
                    }, i.src = ".././img/accessories/access_" + t + ".png", rr[t] = i, nr = i;
                }
                var r = ar[t];
                if (!r) {
                    for (var a = 0; a < en.length; ++a) if (en[a].id == t) {
                        r = en[a];
                        break;
                    }
                    ar[t] = r;
                }
                nr.isLoaded && (e.save(), e.translate(-20 - (r.xOff || 0), 0), r.spin && e.rotate(n.skinRot),
                e.drawImage(nr, -r.scale / 2, -r.scale / 2, r.scale, r.scale), e.restore());
            }(t.tailIndex, e, t), t.buildIndex < 0 && !it.weapons[t.weaponIndex].aboveHand && (sr(it.weapons[t.weaponIndex], tt.weaponVariants[t.weaponVariant].src, t.scale, 0, e),
            null == it.weapons[t.weaponIndex].projectile || it.weapons[t.weaponIndex].hideProjectile || Yi(t.scale, 0, it.projectiles[it.weapons[t.weaponIndex].projectile], we)),
            e.fillStyle = tt.skinColors[t.skinColor], dr(t.scale * Math.cos(n), t.scale * Math.sin(n), 14),
            dr(t.scale * r * Math.cos(-n * i), t.scale * r * Math.sin(-n * i), 14), t.buildIndex < 0 && it.weapons[t.weaponIndex].aboveHand && (sr(it.weapons[t.weaponIndex], tt.weaponVariants[t.weaponVariant].src, t.scale, 0, e),
            null == it.weapons[t.weaponIndex].projectile || it.weapons[t.weaponIndex].hideProjectile || Yi(t.scale, 0, it.projectiles[it.weapons[t.weaponIndex].projectile], we)),
            t.buildIndex >= 0) {
                var a = fr(it.list[t.buildIndex]);
                e.drawImage(a, t.scale - it.list[t.buildIndex].holdOffset, -a.width / 2);
            }
            dr(0, 0, t.scale, e), t.skinIndex > 0 && (e.rotate(Math.PI / 2), ir(t.skinIndex, e, null, t));
        }
        var tr = {};
        var er = {};
        var nr;
        function ir(t, e, n, i) {
            if (!(nr = tr[t])) {
                var r = new Image;
                r.onload = function() {
                    this.isLoaded = !0, this.onload = null;
                }, r.src = ".././img/hats/hat_" + t + ".png", tr[t] = r, nr = r;
            }
            var a = n || er[t];
            if (!a) {
                for (var o = 0; o < tn.length; ++o) if (tn[o].id == t) {
                    a = tn[o];
                    break;
                }
                er[t] = a;
            }
            nr.isLoaded && e.drawImage(nr, -a.scale / 2, -a.scale / 2, a.scale, a.scale), !n && a.topSprite && (e.save(),
            e.rotate(i.skinRot), ir(t + "_top", e, a, i), e.restore());
        }
        var rr = {};
        var ar = {};
        var or = {};
        function sr(t, e, n, i, r) {
            var a = t.src + (e || "");
            var o = or[a];
            o || ((o = new Image).onload = function() {
                this.isLoaded = !0;
            }, o.src = ".././img/weapons/" + a + ".png", or[a] = o), o.isLoaded && r.drawImage(o, n + t.xOff - t.length / 2, i + t.yOff - t.width / 2, t.length, t.width);
        }
        var cr = {};
        function lr(t) {
            var e = t.y >= tt.mapScale - tt.snowBiomeTop ? 2 : t.y <= tt.snowBiomeTop ? 1 : 0;
            var n = t.type + "_" + t.scale + "_" + e;
            var i = cr[n];
            if (!i) {
                var r = document.createElement('canvas');
                r.width = r.height = 2.1 * t.scale + on;
                var a = r.getContext('2d');
                a.translate(r.width / 2, r.height / 2), a.rotate(J.randFloat(0, Math.PI)), a.strokeStyle = rn,
                a.lineWidth = on;
                let u = [ [ "#b1d959", "#95b946" ], [ "#bade6e", "#aac76b" ], [ "#a7d544", "#86a63f" ], [ "#b4db62", "#9ebf57" ] ];
                u[Math.floor(Math.random() * u.length)];
                var o;
                if (0 == t.type) for (var s = 0; s < 2; ++s) hr(a, 7, o = Kt.scale * (s ? .5 : 1), .7 * o),
                a.fillStyle = e ? s ? "#fff" : "#e3f1f4" : s ? "#b4db62" : "#9ebf57", a.fill(),
                s || a.stroke(); else if (1 == t.type) if (2 == e) a.fillStyle = "#606060", hr(a, 6, .3 * t.scale, .71 * t.scale),
                a.fill(), a.stroke(), a.fillStyle = "#89a54c", dr(0, 0, .55 * t.scale, a), a.fillStyle = "#a5c65b",
                dr(0, 0, .3 * t.scale, a, !0); else {
                    var c;
                    !function(t, e, n, i) {
                        var r = Math.PI / 2 * 3;
                        var a = Math.PI / e;
                        var o;
                        t.beginPath(), t.moveTo(0, -i);
                        for (var s = 0; s < e; s++) o = J.randInt(n + .9, 1.2 * n), t.quadraticCurveTo(Math.cos(r + a) * o, Math.sin(r + a) * o, Math.cos(r + 2 * a) * i, Math.sin(r + 2 * a) * i),
                        r += 2 * a;
                        t.lineTo(0, -i), t.closePath();
                    }(a, 6, Kt.scale, .7 * Kt.scale), a.fillStyle = e ? "#e3f1f4" : "#89a54c", a.fill(),
                    a.stroke(), a.fillStyle = e ? "#6a64af" : "#c15555";
                    var l = Mt / 4;
                    for (s = 0; s < 4; ++s) dr((c = J.randInt(Kt.scale / 3.5, Kt.scale / 2.3)) * Math.cos(l * s), c * Math.sin(l * s), J.randInt(10, 12), a);
                } else 2 != t.type && 3 != t.type || (a.fillStyle = 2 == t.type ? 2 == e ? "#938d77" : "#939393" : "#e0c655",
                hr(a, 3, t.scale, t.scale), a.fill(), a.stroke(), a.fillStyle = 2 == t.type ? 2 == e ? "#b2ab90" : "#bcbcbc" : "#ebdca3",
                hr(a, 3, .55 * t.scale, .65 * t.scale), a.fill());
                i = r, cr[n] = i;
            }
            return i;
        }
        var ur = [];
        function fr(t, e) {
            var n = ur[t.id + (t.predictEnemyTrap ? 100 : t.prediction ? t.preplace ? 200 : 300 : 0)];
            if (!n || e) {
                var i = document.createElement('canvas');
                i.width = i.height = 2.5 * t.scale + on + (it.list[t.id].spritePadding || 0);
                var r = i.getContext('2d');
                if (r.translate(i.width / 2, i.height / 2), r.rotate(e ? 0 : Math.PI / 2), r.strokeStyle = t.prediction ? t.preplace ? "#0000ff" : "#ff0000" : rn,
                r.lineWidth = on * (e ? i.width / 81 : 1), "apple" == t.name) {
                    r.fillStyle = "#c15555", dr(0, 0, t.scale, r), r.fillStyle = "#89a54c";
                    var a = -Math.PI / 2;
                    p = t.scale * Math.cos(a), v = t.scale * Math.sin(a), g = 25, b = a + Math.PI / 2,
                    k = r, y = p + g * Math.cos(b), w = v + g * Math.sin(b), _ = .4 * g, k.moveTo(p, v),
                    k.beginPath(), k.quadraticCurveTo((p + y) / 2 + _ * Math.cos(b + Math.PI / 2), (v + w) / 2 + _ * Math.sin(b + Math.PI / 2), y, w),
                    k.quadraticCurveTo((p + y) / 2 - _ * Math.cos(b + Math.PI / 2), (v + w) / 2 - _ * Math.sin(b + Math.PI / 2), p, v),
                    k.closePath(), k.fill(), k.stroke();
                } else if ("cookie" == t.name) {
                    r.fillStyle = "#cca861", dr(0, 0, t.scale, r), r.fillStyle = "#937c4b";
                    var o = Mt / (c = 4);
                    for (var s = 0; s < c; ++s) dr((l = J.randInt(t.scale / 2.5, t.scale / 1.7)) * Math.cos(o * s), l * Math.sin(o * s), J.randInt(4, 5), r, !0);
                } else if ("cheese" == t.name) {
                    var c;
                    r.fillStyle = "#f4f3ac", dr(0, 0, t.scale, r), r.fillStyle = "#c3c28b";
                    o = Mt / (c = 4);
                    var l;
                    for (s = 0; s < c; ++s) dr((l = J.randInt(t.scale / 2.5, t.scale / 1.7)) * Math.cos(o * s), l * Math.sin(o * s), J.randInt(4, 5), r, !0);
                } else if ("wood wall" == t.name || "stone wall" == t.name || "castle wall" == t.name) {
                    r.fillStyle = "castle wall" == t.name ? "#83898e" : "wood wall" == t.name ? "#a5974c" : "#939393";
                    var u = "castle wall" == t.name ? 4 : 3;
                    hr(r, u, 1.1 * t.scale, 1.1 * t.scale), r.fill(), r.stroke(), r.fillStyle = "castle wall" == t.name ? "#9da4aa" : "wood wall" == t.name ? "#c9b758" : "#bcbcbc",
                    hr(r, u, .65 * t.scale, .65 * t.scale), r.fill();
                } else if ("spikes" == t.name || "greater spikes" == t.name || "poison spikes" == t.name || "spinning spikes" == t.name) {
                    r.fillStyle = "poison spikes" == t.name ? "#7b935d" : "#939393";
                    var f = .6 * t.scale;
                    hr(r, "spikes" == t.name ? 5 : 6, t.scale, f), r.fill(), r.stroke(), t.prediction && (r.globalAlpha = .6,
                    r.fillStyle = t.preplace ? "#0000ff" : "#ff0000", hr(r, "spikes" == t.name ? 5 : 6, t.scale, f),
                    r.fill(), r.globalAlpha = 1), r.fillStyle = "#a5974c", dr(0, 0, f, r), t.prediction && (r.globalAlpha = .6,
                    r.fillStyle = t.preplace ? "#0000ff" : "#ff0000", dr(0, 0, f, r), r.globalAlpha = 1),
                    r.fillStyle = "#c9b758", dr(0, 0, f / 2, r, !0), t.prediction && (r.globalAlpha = .6,
                    r.fillStyle = t.preplace ? "#0000ff" : "#ff0000", dr(0, 0, f / 2, r, !0), r.globalAlpha = 1);
                } else if ("windmill" == t.name || "faster windmill" == t.name || "power mill" == t.name) r.fillStyle = "#a5974c",
                dr(0, 0, t.scale, r), t.prediction && (r.globalAlpha = .6, r.fillStyle = t.preplace ? "#0000ff" : "#ff0000",
                dr(0, 0, t.scale, r), r.globalAlpha = 1), r.fillStyle = "#c9b758", pr(0, 0, 1.5 * t.scale, 29, 4, r),
                t.prediction && (r.globalAlpha = .6, r.fillStyle = t.preplace ? "#0000ff" : "#ff0000",
                pr(0, 0, 1.5 * t.scale, 29, 4, r), r.globalAlpha = 1), r.fillStyle = "#a5974c",
                dr(0, 0, .5 * t.scale, r), t.prediction && (r.globalAlpha = .6, r.fillStyle = t.preplace ? "#0000ff" : "#ff0000",
                dr(0, 0, .5 * t.scale, r), r.globalAlpha = 1); else if ("mine" == t.name) r.fillStyle = "#939393",
                hr(r, 3, t.scale, t.scale), r.fill(), r.stroke(), r.fillStyle = "#bcbcbc", hr(r, 3, .55 * t.scale, .65 * t.scale),
                r.fill(); else if ("sapling" == t.name) for (s = 0; s < 2; ++s) {
                    hr(r, 7, f = t.scale * (s ? .5 : 1), .7 * f), r.fillStyle = s ? "#b4db62" : "#9ebf57",
                    r.fill(), s || r.stroke();
                } else if ("pit trap" == t.name) r.fillStyle = "#a5974c", hr(r, 3, 1.1 * t.scale, 1.1 * t.scale),
                r.fill(), r.stroke(), t.prediction && (r.globalAlpha = .6, r.fillStyle = t.preplace ? "#0000ff" : "#ff0000",
                hr(r, 3, 1.1 * t.scale, 1.1 * t.scale), r.fill(), r.globalAlpha = 1), r.fillStyle = rn,
                hr(r, 3, .65 * t.scale, .65 * t.scale), r.fill(), t.prediction && (r.globalAlpha = .6,
                r.fillStyle = t.preplace ? "#0000ff" : "#ff0000", hr(r, 3, .65 * t.scale, .65 * t.scale),
                r.fill()); else if ("boost pad" == t.name) r.fillStyle = "#7e7f82", mr(0, 0, 2 * t.scale, 2 * t.scale, r),
                r.fill(), r.stroke(), r.fillStyle = "#dbd97d", function(t, e) {
                    e = e || we;
                    var n = t * (Math.sqrt(3) / 2);
                    e.beginPath(), e.moveTo(0, -n / 2), e.lineTo(-t / 2, n / 2), e.lineTo(t / 2, n / 2),
                    e.lineTo(0, -n / 2), e.fill(), e.closePath();
                }(1 * t.scale, r); else if ("turret" == t.name) {
                    r.fillStyle = "#a5974c", dr(0, 0, t.scale, r), r.fill(), r.stroke(), r.fillStyle = "#939393";
                    mr(0, -25, .9 * t.scale, 50, r), dr(0, 0, .6 * t.scale, r), r.fill(), r.stroke();
                } else if ("platform" == t.name) {
                    r.fillStyle = "#cebd5f";
                    var d = 2 * t.scale;
                    var h = d / 4;
                    var m = -t.scale / 2;
                    for (s = 0; s < 4; ++s) mr(m - h / 2, 0, h, 2 * t.scale, r), r.fill(), r.stroke(),
                    m += d / 4;
                } else "healing pad" == t.name ? (r.fillStyle = "#7e7f82", mr(0, 0, 2 * t.scale, 2 * t.scale, r),
                r.fill(), r.stroke(), r.fillStyle = "#db6e6e", pr(0, 0, .65 * t.scale, 20, 4, r, !0)) : "spawn pad" == t.name ? (r.fillStyle = "#7e7f82",
                mr(0, 0, 2 * t.scale, 2 * t.scale, r), r.fill(), r.stroke(), r.fillStyle = "#71aad6",
                dr(0, 0, .6 * t.scale, r)) : "blocker" == t.name ? (r.fillStyle = "#7e7f82", dr(0, 0, t.scale, r),
                r.fill(), r.stroke(), r.rotate(Math.PI / 4), r.fillStyle = "#db6e6e", pr(0, 0, .65 * t.scale, 20, 4, r, !0)) : "teleporter" == t.name && (r.fillStyle = "#7e7f82",
                dr(0, 0, t.scale, r), r.fill(), r.stroke(), r.rotate(Math.PI / 4), r.fillStyle = "#d76edb",
                dr(0, 0, .5 * t.scale, r, !0));
                n = i, e || (ur[t.id + (t.predictEnemyTrap ? 100 : t.prediction ? t.preplace ? 200 : 300 : 0)] = n);
            }
            var p, v, g, b, k, y, w, _;
            return n;
        }
        function dr(t, e, n, i, r, a) {
            (i = i || we).beginPath(), i.arc(t, e, n, 0, 2 * Math.PI), a || i.fill(), r || i.stroke();
        }
        function hr(t, e, n, i) {
            var r = Math.PI / 2 * 3;
            var a, o;
            var s = Math.PI / e;
            t.beginPath(), t.moveTo(0, -n);
            for (var c = 0; c < e; c++) a = Math.cos(r) * n, o = Math.sin(r) * n, t.lineTo(a, o),
            r += s, a = Math.cos(r) * i, o = Math.sin(r) * i, t.lineTo(a, o), r += s;
            t.lineTo(0, -n), t.closePath();
        }
        function mr(t, e, n, i, r, a) {
            r.fillRect(t - n / 2, e - i / 2, n, i), a || r.strokeRect(t - n / 2, e - i / 2, n, i);
        }
        function pr(t, e, n, i, r, a, o) {
            a.save(), a.translate(t, e), r = Math.ceil(r / 2);
            for (var s = 0; s < r; s++) mr(0, 0, 2 * n, i, a, o), a.rotate(Math.PI / r);
            a.restore();
        }
        function vr(t) {
            for (var e = 0; e < t.length; ) nn.add(t[e], t[e + 1], t[e + 2], t[e + 3], t[e + 4], t[e + 5], it.list[t[e + 6]], !0, t[e + 7] >= 0 ? {
                sid: t[e + 7]
            } : null), t[e + 7] >= 0 && ls.push(t[e + 7]), e += 8;
            us && us(!0);
        }
        function gr(t, e) {
            (Kt = xs(e)) && (va.push(Kt), Kt.xWiggle += tt.gatherWiggle * Math.cos(t), Kt.yWiggle += tt.gatherWiggle * Math.sin(t));
        }
        function br(t, e) {
            (Kt = xs(t)) && (Kt.dir = e, Kt.xWiggle += tt.gatherWiggle * Math.cos(e + Math.PI),
            Kt.yWiggle += tt.gatherWiggle * Math.sin(e + Math.PI));
        }
        function kr(t, e, n, i, r, a, o, s) {
            let c = Ft.addProjectile(t, e, n, i, r, a, null, null, o);
            c.sid = s, ta.push({
                projectile: c,
                x: t,
                y: e,
                range: i,
                speed: r
            });
        }
        function yr(t, e) {
            for (let n of Ut) n.sid == t && (n.range = e, ea.push(n), va.length > 0 && (ba.push({
                objects: va,
                projectile: n
            }), va = []));
        }
        function wr(t) {
            (Kt = _s(t)) && Kt.startAnim();
        }
        function _r(t) {
            for (var e = 0; e < Ct.length; ++e) Ct[e].forcePos = !Ct[e].visible, Ct[e].visible = !1;
            if (t) {
                var n = Date.now();
                for (e = 0; e < t.length; ) (Kt = _s(t[e])) ? (Kt.index = t[e + 1], Kt.t1 = void 0 === Kt.t2 ? n : Kt.t2,
                Kt.t2 = n, Kt.x1 = Kt.x, Kt.y1 = Kt.y, Kt.x2 = t[e + 2], Kt.y2 = t[e + 3], Kt.d1 = void 0 === Kt.d2 ? t[e + 4] : Kt.d2,
                Kt.d2 = t[e + 4], Kt.health = t[e + 5], Kt.dt = 0, Kt.visible = !0) : ((Kt = qt.spawn(t[e + 2], t[e + 3], t[e + 4], t[e + 1])).x2 = Kt.x,
                Kt.y2 = Kt.y, Kt.d2 = Kt.dir, Kt.health = t[e + 5], qt.aiTypes[t[e + 1]].name || (Kt.name = tt.cowNames[t[e + 6]]),
                Kt.forcePos = !0, Kt.sid = t[e], Kt.visible = !0), e += 7;
            }
        }
        var xr = {};
        function Mr(t, e) {
            var n = t.index;
            var i = xr[n];
            if (!i) {
                var r = new Image;
                r.onload = function() {
                    this.isLoaded = !0, this.onload = null;
                }, r.src = ".././img/animals/" + t.src + ".png", i = r, xr[n] = i;
            }
            if (i.isLoaded) {
                var a = 1.2 * t.scale * (t.spriteMlt || 1);
                e.drawImage(i, -a, -a, 2 * a, 2 * a);
            }
        }
        function jr(t, e, n) {
            return t + n >= 0 && t - n <= ae && e + n >= 0 && e - n <= oe;
        }
        function Sr(t, e) {
            var n = function(t) {
                for (var e = 0; e < zt.length; ++e) if (zt[e].id == t) return zt[e];
                return null;
            }(t[0]);
            if (n || (n = new at(t[0], t[1], tt, J, Ft, nn, zt, Ct, it, tn, en), zt.push(n)),
            n.spawn(e ? Tt : null), n.visible = !1, n.x2 = void 0, n.y2 = void 0, n.setData(t),
            na[n.sid] = 1, ia[n.sid] = 1, ra[n.sid] = 1, e) {
                Kr = !1, V = !1, Gt = n;
                try {
                    window.__myPlayer = Gt;
                } catch (t) {}
                te = Gt.x, ee = Gt.y, Ln(), Ci(), Li(), Ui(0), Pe.style.display = "block";
            }
        }
        function Ar(t) {
            for (var e = 0; e < zt.length; e++) if (zt[e].id == t) {
                zt.splice(e, 1);
                break;
            }
        }
        function Tr(t, e) {
            if (Gt) {
                Gt.itemCounts[t] = e;
                try {
                    for (var n = 0; n < it.list.length; ++n) {
                        var i = n;
                        var r = it.list[i].group;
                        if (r && r.id == t) {
                            var a = it.weapons.length + i;
                            var o = document.getElementById('actionBarCount' + a);
                            if (o) {
                                var s = Gt.itemCounts && Gt.itemCounts[r.id] ? Gt.itemCounts[r.id] : 0;
                                o.innerText = s > 0 ? String(s) : '', o.style.display = s > 0 && (!r || 0 !== r.id) ? 'block' : 'none';
                            }
                        }
                    }
                } catch (t) {}
            }
        }
        function Dr(t, e, n) {
            if (Gt) {
                if ('kills' === t) {
                    var i = Gt.kills || 0;
                    if (Gt[t] = e, e > i) try {
                        if (Z && Z.killchat) try {
                            Yn((Z.killchat_message || 'ez').toString().slice(0, 30));
                        } catch (t) {}
                    } catch (t) {}
                } else Gt[t] = e;
                n && Ci();
            }
        }
        let Pr = !1;
        let Br = !1;
        let Ir;
        let Or = !1;
        let Hr = null;
        let Er = null;
        let Cr = null;
        let zr = null;
        let Rr = null;
        function $r() {
            try {
                if (!Gt) return 0;
                if (void 0 !== Gt.x2 && void 0 !== Gt.y2 && void 0 !== Gt.xVel && void 0 !== Gt.yVel) {
                    const t = (Gt.xVel || 0) - (Gt.x2 || 0);
                    const e = (Gt.yVel || 0) - (Gt.y2 || 0);
                    return Math.sqrt(t * t + e * e);
                }
                if (void 0 !== Gt.xVel && void 0 !== Gt.yVel) return Math.sqrt(Math.pow(Gt.xVel || 0, 2) + Math.pow(Gt.yVel || 0, 2));
            } catch (t) {}
            return 0;
        }
        let Ur = 0;
        let Fr;
        let Lr;
        let Nr;
        let qr = !1;
        let Gr = !1;
        let Wr = !1;
        let Kr = !1;
        let Yr = !1;
        let Xr = 0;
        let Vr = 0;
        const Jr = 140;
        let Zr = 0;
        let Qr = [];
        let ta = [];
        let ea = [];
        let na = [];
        let ia = [];
        let ra = [];
        let aa = 0;
        let oa = [];
        let sa = [];
        let ca = 0;
        let la = !1;
        let ua = !1;
        let fa = [];
        let da = 0;
        let ha = 0;
        let ma = !1;
        let pa = [];
        let va = [];
        let ga = [];
        let ba = [];
        let ka = [];
        let ya = [];
        let wa = 0;
        let _a = [];
        let xa = [];
        let Ma = [];
        let ja = [];
        let Sa = !1;
        let Aa = !1;
        let Ta = null;
        let Da = null;
        let Pa = null;
        let Ba = 0;
        let Ia = !1;
        let Oa = null;
        let Ha = 0;
        let Ea = null;
        let Ca = !1;
        let za = !1;
        window.leftHoldDebug = !1;
        let Ra = [];
        let $a;
        let Ua;
        let Fa;
        let La = !1;
        let Na = 0;
        let qa = !1;
        let Ga = {};
        let Wa = {};
        function Ka() {
            try {
                if (!Z || !Z.autostop_before_collision) return !1;
                if ('number' == typeof zr && 'number' == typeof Rr && null !== zr && null !== Rr) return !0;
                if (void 0 !== Ur && void 0 !== Zr && Ur > Zr) return !0;
            } catch (t) {}
            return !1;
        }
        let Ya = null;
        let Xa = null;
        let Va;
        let Ja = 0;
        let Za = !1;
        let Qa;
        let to;
        let eo = [];
        let no = {
            spike: 0,
            poison: 0,
            player: 0
        };
        let io = !1;
        let ro = !1;
        let ao = null;
        let oo;
        let so = {
            reloaded: !1,
            waitHit: 0,
            autoAim: !1,
            revAim: !1,
            ageInsta: !0,
            reSync: !1,
            bullTick: 0,
            anti0Tick: 0,
            antiSync: !1,
            safePrimary: function(t) {
                return [ 0, 8 ].includes(t.primaryIndex);
            },
            safeSecondary: function(t) {
                return [ 10, 11, 14 ].includes(t.secondaryIndex);
            },
            lastDir: 0,
            autoPush: !1,
            pushData: {},
            antiInsta: !1
        };
        let co = [];
        let lo = {
            87: [ 0, -1 ],
            83: [ 0, 1 ],
            65: [ -1, 0 ],
            68: [ 1, 0 ]
        };
        let uo = !1;
        let fo = [];
        let ho = {
            primary: !1,
            secondary: !1
        };
        let mo = !1;
        function po() {
            let t = 0;
            for (let e in no) t += no[e];
            return l = t, t;
        }
        function vo(t, e = 220) {
            let n = Ra.filter(n => n.id > 5 && n.id < 10 && (n.owner.sid === Gt.sid || Ho(n.owner.sid)) && J.getDistance(t.x2, t.y2, n.x, n.y) < e);
            return n.length < 2 ? null : (n.sort((e, n) => J.getDistance(t.x2, t.y2, e.x, e.y) - J.getDistance(t.x2, t.y2, n.x, n.y)),
            [ n[0], n[1] ]);
        }
        function go(t, e) {
            return {
                x: (t.x + e.x) / 2,
                y: (t.y + e.y) / 2
            };
        }
        function bo(t) {
            if (!t) return !1;
            if (!getSetting("SpikeMidKnockback")) return !1;
            if (uo) return !1;
            if (1 !== na[Gt.sid]) return !1;
            const e = vo(t);
            if (!e) return !1;
            const n = go(e[0], e[1]);
            if (J.getDistance(t.x2, t.y2, n.x, n.y) > 140) return !1;
            const i = J.getDistance(e[0].x, e[0].y, e[1].x, e[1].y);
            if (i > 110 || i < 40) return !1;
            const r = Math.atan2(n.y - t.y2, n.x - t.x2);
            const a = t.x2 + 110 * Math.cos(r);
            const o = t.y2 + 110 * Math.sin(r);
            return J.getDistance(a, o, n.x, n.y) < 50;
        }
        function ko() {
            if (!si) return !1;
            if (uo) return !1;
            if (La) return !1;
            if (4 !== Gt.weapons[0] && 5 !== Gt.weapons[0]) return !1;
            if (1 !== na[Gt.sid]) return !1;
            if (1 !== ia[Gt.sid]) return !1;
            return Ra.some(t => t.id > 5 && t.id < 10 && (t.owner.sid === Gt.sid || Ho(t.owner.sid)) && J.getDistance(si.x2, si.y2, t.x, t.y) <= 35 + t.scale);
        }
        function yo() {
            if (!ko()) return !1;
            let t = Ra.find(t => 15 === t.id && (t.owner.sid === Gt.sid || Ho(t.owner.sid)) && J.getDistance(si.x2, si.y2, t.x, t.y) <= 55);
            if (!t) return !1;
            if (10 !== Gt.weapons[1]) return !1;
            if (1 !== ia[Gt.sid]) return !1;
            const e = Gt.weapons[1];
            const n = it.weapons[e].dmg * (it.weapons[e].sDmg || 1) * tt.weaponVariants[Gt.weaponVariants[e] || 1].val * (jo(40, 0) ? 3.3 : 1);
            return t.health <= n;
        }
        function wo(t) {
            if (!t) return !1;
            if (10 !== Gt.weapons[1]) return !1;
            if (1 !== ia[Gt.sid]) return !1;
            const e = it.weapons[10];
            const n = e.dmg * (e.sDmg || 1) * tt.weaponVariants[Gt.weaponVariants[10] || 1].val * (jo(40, 0) ? 3.3 : 1);
            return t.health <= n && J.getDistance(Gt.x2, Gt.y2, t.x, t.y) <= t.scale + e.range;
        }
        function _o(t, e = Math.atan2(Jt - ce / 2, Vt - se / 2)) {
            ji(t), Ai(1, e), Ai(0, e), Si(ca);
        }
        function xo(t, e, n, i, r) {
            try {
                if (!Z) return;
                var a = {
                    place: {
                        enabled: Z.label_place_enabled,
                        color: Z.label_place_color
                    },
                    autoplace: {
                        enabled: Z.label_autoplace_enabled,
                        color: Z.label_autoplace_color
                    },
                    preplace: {
                        enabled: Z.label_preplace_enabled,
                        color: Z.label_preplace_color
                    },
                    replace: {
                        enabled: Z.label_replace_enabled,
                        color: Z.label_replace_color
                    }
                };
                var o = a[n] || a.place;
                if (!o.enabled) return;
                i = i || o.color;
                var s = r && r.size ? Number(r.size) : Number(Z.label_size);
                var c = r && r.speed ? Number(r.speed) : Number(Z.label_speed);
                var l = r && r.life ? Number(r.life) : Number(Z.label_life);
                (isNaN(s) || s <= 0) && (s = 36), (isNaN(c) || c <= 0) && (c = .18), (isNaN(l) || l <= 0) && (l = 800),
                ft.showText(t, e, s, c, l, n, i);
            } catch (t) {}
        }
        function Mo(t) {
            for (let e = 0; e < t; e += it.list[Gt.items[0]].heal) _o(Gt.items[0], null);
        }
        function jo(t, e) {
            return e ? Gt.tails[t] : Gt.skins[t];
        }
        function So(t, e) {
            try {
                if ('undefined' != typeof leftHoldDebug && leftHoldDebug) try {
                    jo(t, 0);
                } catch (t) {}
            } catch (t) {}
            if (e || Gt.skinIndex != t) if (0 == t) $n(t, 0); else if (e) {
                'undefined' != typeof leftHoldDebug && leftHoldDebug, $n(t, 0);
                try {
                    vi.tickBase(() => {
                        try {
                            Gt && Gt.skinIndex != t ? ('undefined' != typeof leftHoldDebug && leftHoldDebug,
                            $n(t, 0)) : 'undefined' != typeof leftHoldDebug && leftHoldDebug;
                        } catch (t) {
                            'undefined' != typeof leftHoldDebug && leftHoldDebug;
                        }
                    }, 1);
                } catch (t) {
                    'undefined' != typeof leftHoldDebug && leftHoldDebug;
                }
            } else jo(t, 0) && $n(t, 0);
        }
        function Ao(t) {
            Gt.tailIndex != t && (0 == t || jo(t, 1)) && $n(t, 1);
        }
        function To(t, e, n) {
            return {
                x: (n ? Gt.xVel : Gt.x2) + (35 + it.list[t].scale + (it.list[t].placeOffset || 0)) * Math.cos(e),
                y: (n ? Gt.yVel : Gt.y2) + (35 + it.list[t].scale + (it.list[t].placeOffset || 0)) * Math.sin(e),
                scale: it.list[t].scale
            };
        }
        function Do(t, e, n, i) {
            if (Io(t)) return !1;
            let r = To(t, e, i);
            return !!nn.checkItemLocation(r.x, r.y, r.scale, .6, t, !1, Gt, n || Ra);
        }
        function Po() {
            if (M = Ra.filter(t => 22 == t.id), x = M.sort((t, e) => J.getDistance(Gt.x2, Gt.y2, t.x, t.y) - J.getDistance(Gt.x2, Gt.y2, e.x, e.y))[0],
            Br) return 10 != Gt.weapons[1] ? Gt.weapons[0] : Lr ? Fr == Lr ? it.weapons[Gt.weapons[0]].speed <= 400 && Fr.health <= it.weapons[Gt.weapons[0]].dmg ? Gt.weapons[0] : Gt.weapons[1] : it.weapons[Gt.weapons[0]].speed <= 400 && Fr.health <= it.weapons[Gt.weapons[0]].dmg && J.getDistance(Gt.x2, Gt.y2, Fr.x, Fr.y) <= it.weapons[Gt.weapons[0]].range + Fr.scale ? Gt.weapons[0] : J.getDistance(Gt.x2, Gt.y2, Fr.x, Fr.y) <= it.weapons[Gt.weapons[1]].range + Fr.scale ? Gt.weapons[1] : Gt.weapons[0] : Gt.weapons[1];
            if (x) {
                if (Fr == x && J.getDistance(Gt.x2, Gt.y2, Fr.x, Fr.y) <= it.weapons[Gt.weapons[1]].range + Fr.scale) return Gt.weapons[1];
            } else if (!C) {
                if (ia[Gt.sid] < 1) return Gt.weapons[1];
                if (na[Gt.sid] < 1) return Gt.weapons[0];
            }
            return c || 7 === Gt.weapons[0] ? Gt.weapons[0] : Gt.weapons[1];
        }
        function Bo(t, e, n) {
            if (Z.bannedAngles && w.has(e)) return;
            let i = To(t, e);
            for (let t of oa) if (J.getDistance(i.x, i.y, t.x, t.y) < i.scale + t.scale) return;
            oa.push({
                id: t,
                angle: e,
                name: it.list[t].name,
                x: i.x,
                y: i.y,
                scale: i.scale,
                preplace: n
            }), Z.bannedAngles && t === Gt.items[2] && w.set(e, Zr + 18);
        }
        function Io(t) {
            let e = it.list[t].group;
            let n = e.sandboxLimit || 99;
            if (Gt.itemCounts[e.id] >= n) return !0;
        }
        function Oo(t, e, n, i, r, a, o) {
            let s = n - t, c = i - e;
            let l = ((r - t) * s + (a - e) * c) / (s * s + c * c);
            let u = {
                x: t + l * s,
                y: e + l * c
            };
            if (u.x >= Math.min(t, n) && u.x <= Math.max(t, n) && u.y >= Math.min(e, i) && u.y <= Math.max(e, i)) return J.getDistance(u.x, u.y, r, a) < o;
        }
        function Ho(t) {
            if (Gt.team) for (var e = 0; e < mn.length; e += 2) if (mn[e] == t) return !0;
        }
        function Eo(t, e) {
            try {
                if (!Z || !Z.autostop_before_collision) return;
                if (!Gt) return;
                try {
                    if (Ra && Ra.some(t => t && 15 == t.id && t.owner && t.owner.sid != Gt.sid && !Ho(t.owner.sid) && 'number' == typeof t.x && 'number' == typeof t.y && J.getDistance(Gt.x2, Gt.y2, t.x, t.y) <= t.scale + (Gt.scale || 0))) return;
                } catch (t) {}
                try {
                    if ($r() > 66) {
                        try {} catch (t) {}
                        return;
                    }
                } catch (t) {}
                const o = ri();
                if (void 0 !== o) {
                    const n = Math.atan2(e - Gt.y2, t - Gt.x2);
                    let i = Math.abs(o - n);
                    if (i > Math.PI && (i = 2 * Math.PI - i), i > Math.PI / 2) return;
                }
                Ya = null;
                try {
                    Z && Z.autostop_before_collision && di();
                } catch (t) {}
                try {
                    if (void 0 !== ft && Gt && Z && Z.label_autostop_enabled) {
                        var n = Number(Z.label_size) || 20;
                        var i = Number(Z.label_speed) || .12;
                        var r = Number(Z.label_life) || 600;
                        var a = Z.label_autostop_color || "#ff5252";
                        try {
                            ft.showText(Gt.x2, Gt.y2 - (Gt.scale || 0) - 30, n, i, r, "AUTO STOP", a);
                        } catch (t) {}
                    }
                } catch (t) {}
                Ur = Math.max(Ur, void 0 !== Zr ? Zr + 1 : 1);
            } catch (t) {}
        }
        function Co(t, e) {
            let n = To(t, e);
            for (let t of sa) if (J.getDistance(n.x, n.y, t.x, t.y) < n.scale + t.scale) return !1;
            return !0;
        }
        function zo(t, e) {
            let n = To(t, e);
            Co(t, e) && sa.push({
                id: 15,
                x: n.x,
                y: n.y,
                scale: n.scale,
                tick: Zr
            });
        }
        let Ro = null;
        let $o = [];
        function Uo(t) {
            if (R) {
                const e = document.getElementById("anglesvalue");
                parseInt(e ? e.value : Z.anglesvalue);
                const n = [];
                for (let e = 0; e < 300; e++) {
                    const i = J.toRad(1.2 * e);
                    n.push({
                        id: t,
                        angle: i,
                        placeable: Do(t, i),
                        ...To(t, i)
                    });
                }
                qo(n);
                try {
                    Vo && Vo() && Ko(n);
                } catch (t) {}
                Lo(n);
            }
        }
        function Fo(t) {
            if (R) {
                const e = document.getElementById("anglesvalue");
                parseInt(e ? e.value : Z.anglesvalue);
                const n = [];
                for (let e = 0; e < 36; e++) {
                    const i = J.toRad(10 * e);
                    n.push({
                        id: t,
                        angle: i,
                        placeable: Do(t, i) && Co(t, i),
                        ...To(t, i)
                    });
                }
                qo(n);
                try {
                    Vo && Vo() && Ko(n);
                } catch (t) {}
                Lo(n);
            }
        }
        function Lo(t) {
            for (let e of t.filter(t => t.perfect)) Jo(e) && Bo(e.id, e.angle, !1);
            for (let e of t.filter(t => t.placeable)) Jo(e) && Bo(e.id, e.angle, !1);
        }
        function No(t, e, n = "Fast") {
            try {
                var i = document.getElementById('preplacer_mode');
                if (i && i.value) n = i.value; else {
                    var r = Go && Go('preplacer_mode');
                    r && (n = r);
                }
            } catch (t) {}
            if ("Fast" === n && si) {
                const n = [];
                for (let i = 0; i < 36; i++) {
                    const r = J.toRad(10 * i);
                    n.push({
                        id: t,
                        angle: r,
                        placeable: Do(t, r, e),
                        ...To(t, r)
                    });
                }
                return qo(n), n;
            }
            if ("Balanced" === n && si) {
                const n = [];
                for (let i = 0; i < 120; i++) {
                    const r = J.toRad(3 * i);
                    n.push({
                        id: t,
                        angle: r,
                        placeable: Do(t, r, e),
                        ...To(t, r)
                    });
                }
                return qo(n), n;
            }
            if ("Accurate" === n && si) {
                const n = [];
                for (let i = 0; i < 360; i++) {
                    const r = J.toRad(1 * i);
                    n.push({
                        id: t,
                        angle: r,
                        placeable: Do(t, r, e),
                        ...To(t, r)
                    });
                }
                return qo(n), n;
            }
        }
        function qo(t) {
            for (let e in t) t[e].perfect = !1, e < 1 || (t[e].placeable && !t[e - 1].placeable && (t[e].perfect = !0),
            t[e - 1].placeable && !t[e].placeable && (t[e - 1].perfect = !0));
        }
        function Go(t) {
            const e = document.getElementById(t);
            return e && "" !== e.value ? parseFloat(e.value) : Z[t];
        }
        var Wo = [];
        function Ko(t) {
            try {
                const e = Date.now();
                for (const n of t) Wo.push({
                    x: n.x,
                    y: n.y,
                    angle: n.angle,
                    placeable: !!n.placeable,
                    perfect: !!n.perfect,
                    t: e
                });
                Wo.length > 2e3 && Wo.splice(0, Wo.length - 2e3);
            } catch (t) {}
        }
        var Yo = [];
        function Xo() {
            try {
                var t = document.getElementById('preplacer_debug');
                if (t && 'checkbox' === t.type) return !!t.checked;
            } catch (t) {}
            return !!Z.preplacer_debug;
        }
        function Vo() {
            try {
                var t = document.getElementById('autoplacer_debug');
                if (t && 'checkbox' === t.type) return !!t.checked;
            } catch (t) {}
            return !!Z.autoplacer_debug;
        }
        function Jo(t) {
            if (!si) return !1;
            if (t.id == Gt.items[2] && !Io(Gt.items[2])) {
                const e = Ra.filter(t => 15 == t.id && J.getDistance(si.x2, si.y2, t.x, t.y) <= 50 && (t.owner.sid == Gt.sid || Ho(t.owner.sid)))[0];
                if (e) {
                    if (J.getDistance(t.x, t.y, si.x2, si.y2) <= 35 + t.scale) return !0;
                    if (J.lineInRect(t.x - t.scale, t.y - t.scale, t.x + t.scale, t.y + t.scale, Gt.x2, Gt.y2, e.x, e.y)) return !1;
                    if (J.getDistance(t.x, t.y, si.x2, si.y2) > 70 + t.scale && J.getDistance(t.x, t.y, e.x, e.y) <= t.scale + e.scale + 50) return !0;
                } else {
                    if (Lr) return !1;
                    if (J.getDistance(t.x, t.y, si.xVel, si.yVel) <= 35 + t.scale) {
                        let e = Math.atan2(si.yVel - t.y, si.xVel - t.x);
                        let n = t.x + 200 * Math.cos(e);
                        let i = t.y + 200 * Math.sin(e);
                        let r = Ra.filter(t => t.id > 5 && t.id < 10 && (t.owner.sid == Gt.sid || Ho(t.owner.sid)));
                        for (let e of r) if (J.lineInRect(e.x - e.scale, e.y - e.scale, e.x + e.scale, e.y + e.scale, t.x, t.y, n, i)) return !0;
                    } else {
                        if (J.getDistance(Gt.x2, Gt.y2, si.x2, si.y2) > 300) return !1;
                        if (J.lineInRect(t.x - t.scale, t.y - t.scale, t.x + t.scale, t.y + t.scale, Gt.x2, Gt.y2, si.x2, si.y2)) return !1;
                        let e = Ra.filter(t => t.id > 5 && t.id < 10 && (t.owner.sid == Gt.sid || Ho(t.owner.sid))).sort((e, n) => J.getDistance(t.x, t.y, e.x, e.y) - J.getDistance(t.x, t.y, n.x, n.y))[0];
                        if (function() {
                            let t = 0;
                            for (let e of oa) e.id == Gt.items[2] && t++;
                            return t;
                        }() >= 1) return !1;
                        if (!e) return !0;
                        if (J.getDistance(t.x, t.y, e.x, e.y) > t.scale + e.scale + 50) return !0;
                    }
                }
            }
            if (t.id == Gt.items[4] && !Io(Gt.items[4])) {
                if (J.getDistance(Gt.x2, Gt.y2, si.x2, si.y2) > 300) return !1;
                const t = Ra.filter(t => 15 == t.id && J.getDistance(si.x2, si.y2, t.x, t.y) <= 50 && (t.owner.sid == Gt.sid || Ho(t.owner.sid)))[0];
                return !(t && J.getDistance(Gt.x2, Gt.y2, t.x, t.y) <= 35 + t.scale + 50);
            }
            return !1;
        }
        function Zo() {
            if ($o.length > 0) {
                if (Ro && $o.some(t => Ro.sid == t)) for (const t of oa) t.preplace && (zo(t.id, t.angle),
                aa = Zr);
                $o = [];
            }
            if (oa = [], Z.bannedAngles) for (let [t, e] of w.entries()) Zr >= e && w.delete(t);
            if (Ro = null, mo = !1, si && J.getDistance(Gt.x2, Gt.y2, si.x2, si.y2) < 300 && !(Lr && ha > 0)) {
                let t = function() {
                    let t;
                    if (V && (ca < 9 && 1 == na[Gt.sid] || ca > 8 && 1 == ia[Gt.sid])) {
                        let e = it.weapons[ca].dmg * (it.weapons[ca].sDmg || 1) * tt.weaponVariants[Gt.weaponVariants[ca]].val * (jo(40, 0) ? 3.3 : 1);
                        t = Ra.filter(t => J.getDistance(Gt.xVel, Gt.yVel, t.x, t.y) - t.scale <= it.weapons[ca].range && J.getAngleDist(J.getDirection(t.x, t.y, Gt.xVel, Gt.yVel), ci()) <= tt.gatherAngle && t.health <= e).sort((t, e) => J.getDistance(t.x, t.y, si.x2, si.y2) - J.getDistance(e.x, e.y, si.x2, si.y2))[0];
                    }
                    if (si && !t) {
                        let e = null;
                        if (10 == si.weapons[1] && ia[si.sid] >= .5 && si.lastSecondaryReload < ia[si.sid] ? e = si.weapons[1] : it.weapons[si.weapons[0]].speed <= 600 && na[si.sid] >= .3 && si.lastPrimaryReload < na[si.sid] && (e = si.weapons[0]),
                        null != e) {
                            let n = it.weapons[e].dmg * (it.weapons[e].sDmg || 1) * (tt.weaponVariants[si.weaponVariants[e]].val || 1) * 3.3;
                            t = Ra.filter(t => !t.hideFromEnemy && J.getDistance(si.x2, si.y2, t.x, t.y) <= t.scale + it.weapons[e].range && t.health <= n).sort((t, e) => J.getDistance(t.x, t.y, si.x2, si.y2) - J.getDistance(e.x, e.y, si.x2, si.y2))[0];
                        }
                    }
                    return t && preplacer && (mo = !0), t;
                }();
                if (t) {
                    let e = [ ...Ra ];
                    e.splice(e.indexOf(t), 1);
                    const n = No(Gt.items[2], e);
                    const i = No(Gt.items[4] || 15, e);
                    const r = (e, n) => e.filter(e => e[n] && function(t, e) {
                        if (!si || !Z.preplacer) return !1;
                        if (J.getDistance(Gt.x2, Gt.y2, si.x2, si.y2) > e.activationDistance) return !1;
                        let n = t.id == Gt.items[2] && !Io(Gt.items[2]);
                        let i = t.id == Gt.items[4] && !Io(Gt.items[4]);
                        let r = Ra.filter(t => 15 == t.id && (t.owner.sid == Gt.sid || Ho(t.owner.sid)));
                        if (Z.filteredCache && _.tick === Zr && _.withSpikes) {
                            var a = _.withSpikes;
                            var o = _.withoutSpikes;
                        } else a = Ra.filter(t => t.id > 5 && t.id < 10 && (t.owner.sid == Gt.sid || Ho(t.owner.sid))),
                        o = Ra.filter(t => t.id > 5 && t.id < 10 && t.owner && t.owner.sid != Gt.sid && !Ho(t.owner.sid)),
                        Z.filteredCache && (_ = {
                            tick: Zr,
                            withSpikes: a,
                            withoutSpikes: o
                        });
                        Ra.filter(t => 15 == t.id && t.owner && t.owner.sid != Gt.sid && !Ho(t.owner.sid)).some(t => J.getDistance(Gt.x2, Gt.y2, t.x, t.y) <= t.scale + 50);
                        let c = r.some(t => J.getDistance(si.x2, si.y2, t.x, t.y) <= t.scale + 50);
                        let l = r.some(t => J.getDistance(si.xVel, si.yVel, t.x, t.y) <= t.scale + 50 && !c);
                        let f = J.getDistance(t.x, t.y, si.x2, si.y2) <= t.scale + 35;
                        let d = J.getDistance(t.x, t.y, si.xVel, si.yVel) <= t.scale + 35;
                        let h;
                        J.lineInRect(t.x - t.scale, t.y - t.scale, t.x + t.scale, t.y + t.scale, Gt.x2, Gt.y2, si.x2, si.y2);
                        let m = !1;
                        for (let e of r) if (J.getDistance(e.x, e.y, si.x2, si.y2) <= e.scale + 50 && (h = J.getDistance(e.x, e.y, t.x, t.y),
                        J.getDistance(e.x, e.y, t.x, t.y) < e.scale + t.scale)) {
                            m = !0;
                            break;
                        }
                        let p = !1;
                        if (f || d) {
                            let e = Math.atan2(si.y2 - t.y, si.x2 - t.x);
                            let n = si.x2 + 200 * Math.cos(e);
                            let i = si.y2 + 200 * Math.sin(e);
                            for (let t of a) if (J.lineInRect(t.x - t.scale, t.y - t.scale, t.x + t.scale, t.y + t.scale, si.x2, si.y2, n, i)) {
                                p = !0;
                                break;
                            }
                        }
                        return !(!(Z.unifiedSpikeTick && s && n && (f || d)) && (!n || !c && !l || !f && !d || m) && (n && (f || d) && p ? (u = !0,
                        0) : !i || s || c));
                    }(e, t)).reduce((e, n) => {
                        const i = J.getDistance(t.x, t.y, n.x, n.y);
                        return !e || i < e.distance ? {
                            angle: n,
                            distance: i
                        } : e;
                    }, null);
                    const a = [ () => r(n, 'perfect'), () => r(i, 'perfect'), () => r(n, 'placeable'), () => r(i, 'placeable') ].map(t => t()).find(t => null !== t);
                    a && (Bo(a.angle.id, a.angle.angle, !0), Ro = t);
                }
            }
            if (Z.autoPlace && si && J.getDistance(Gt.x2, Gt.y2, si.x2, si.y2) < Z.autoplace_activation_distance && (Lr ? (Fo(Gt.items[2]),
            Fo(Gt.items[4] || 15)) : (Fo(Gt.items[2]), Fo(Gt.items[4] || 15), Qo(), Zr - aa >= 3 && (Uo(Gt.items[2]),
            Uo(Gt.items[4] || 15)))), Gt.alive || (qr = !1, Wr = !1, Gr = !1), qr && li[86] && Gt && Gt.alive) {
                _o(Gt.items[2], ci());
                try {
                    xo(Gt.x2, Gt.y2 - 20, "place");
                } catch (t) {}
            }
            if (Wr && li[70] && Gt && Gt.alive) {
                _o(Gt.items[4], ci());
                try {
                    xo(Gt.x2, Gt.y2 - 20, "place");
                } catch (t) {}
            }
            if (Gr && li[72] && Gt && Gt.alive) {
                _o(Gt.items[5], ci());
                try {
                    xo(Gt.x2, Gt.y2 - 20, "place");
                } catch (t) {}
            }
            if (Qo(), Pr && null != Xa && !Lr) {
                let t = Xa + J.toRad(180);
                Do(Gt.items[3], t) && Co(Gt.items[3], t) && (Do(Gt.items[3], t) && Co(Gt.items[3], t) && Bo(Gt.items[3], t, !1),
                Do(Gt.items[3], t - J.toRad(it.list[Gt.items[3]].scale + it.list[Gt.items[3]].scale / 2)) && Co(Gt.items[3], t - J.toRad(it.list[Gt.items[3]].scale + it.list[Gt.items[3]].scale / 2)) && Bo(Gt.items[3], t - J.toRad(it.list[Gt.items[3]].scale + it.list[Gt.items[3]].scale / 2), !1),
                Do(Gt.items[3], t + J.toRad(it.list[Gt.items[3]].scale + it.list[Gt.items[3]].scale / 2)) && Co(Gt.items[3], t + J.toRad(it.list[Gt.items[3]].scale + it.list[Gt.items[3]].scale / 2)) && Bo(Gt.items[3], t + J.toRad(it.list[Gt.items[3]].scale + it.list[Gt.items[3]].scale / 2), !1));
            }
        }
        function Qo() {
            for (let t in oa) if (!oa[t].preplace) {
                aa = Zr;
                break;
            }
        }
        function ts(t) {
            for (let e of tn) if (e.id == t) return e;
            return {};
        }
        function es(t) {
            t.buildIndex < 0 && (t.weaponVariants[t.weaponIndex] = t.weaponVariant, t.weaponIndex < 9 ? (t != Gt && (t.weapons[0] = t.weaponIndex),
            na[t.sid] = Math.min(1, na[t.sid] + (t.t2 - t.t1) / it.weapons[t.weaponIndex].speed)) : (t != Gt && (t.weapons[1] = t.weaponIndex),
            11 != t.weaponIndex && (ia[t.sid] = Math.min(1, ia[t.sid] + (t.t2 - t.t1) / it.weapons[t.weaponIndex].speed)))),
            ra[t.sid] = Math.min(1, ra[t.sid] + (t.t2 - t.t1) / 2500);
        }
        function ns(t, e) {
            if (Kt = ws(t)) {
                let t = Kt.health - e;
                if (Kt.health = e, t > 0) Kt.hitTime = Date.now(), Kt == Gt ? (Xr = Zr + 1, Vr = Date.now(),
                ja.push(J.fixTo(t, 2)), fa.push({
                    damage: J.fixTo(t, 2),
                    tick: Xr
                })) : [ 20, 30, 35, 45, 15, 22.5, 26.25, 33.75 ].includes(t) && (Kt.spikeDamage = t); else {
                    if (Kt.hitTime) {
                        let t = Date.now() - Kt.hitTime;
                        Kt.shameCount = t <= 120 ? Kt.shameCount + 1 : Math.max(0, Kt.shameCount - 2), Kt.hitTime = null;
                    }
                    Kt == Gt && 100 == Kt.health && (fa = [], da = 0);
                }
            }
        }
        function is(t) {
            let e = t.player;
            var n;
            null != e && (Ho(e.sid) || "turret" == t.weapon && J.getDistance(Gt.x2, Gt.y2, e.x2, e.y2) > 200 && J.getDistance(Gt.x2, Gt.y2, e.x2, e.y2) < 300 && function(t) {
                let e = {
                    x: t.x + t.range * Math.cos(t.dir),
                    y: t.y + t.range * Math.sin(t.dir),
                    sid: null != t.object ? t.object.owner.sid : t.player.sid
                };
                if (e.sid == Gt.sid || Ho(e.sid)) return !1;
                if (J.lineInRect(Gt.x2 - 35, Gt.y2 - 35, Gt.x2 + 35, Gt.y2 + 35, t.x, t.y, e.x, e.y)) {
                    let n = [];
                    let i = [ 10, 11, 12, 17 ];
                    for (let e of Ra) if (!e.ignoreCollision) if ("turret" == t.weapon) {
                        if (null != t.object && e.sid == t.object.sid) continue;
                        (i.includes(e.id) || null != e.type && 2 != e.type) && n.push(e);
                    } else n.push(e);
                    let r = n.filter(n => J.lineInRect(n.x - n.getScale(), n.y - n.getScale(), n.x + n.getScale(), n.y + n.getScale(), t.x, t.y, e.x, e.y)).sort((e, n) => J.getDistance(e.x, e.y, t.x, t.y) - J.getDistance(n.x, n.y, t.x, t.y))[0];
                    return !(r && J.getDistance(r.x, r.y, t.x, t.y) < J.getDistance(Gt.x2, Gt.y2, t.x, t.y));
                }
                return !1;
            }(t) && 1 == na[e.sid] && (_t("Mod: Anti Tick", "#ffffff"), n = J.getDistance(Gt.x2, Gt.y2, t.x, t.y) / t.speed,
            Za = !0, clearTimeout(Qa), Qa = setTimeout(function() {
                Za = !1;
            }, n)));
        }
        function rs(t) {
            if ("hit" == t.type) {
                const {weapon: e, player: n} = t;
                let i = it.weapons[e].dmg * tt.weaponVariants[n.weaponVariants[e]].val;
                i *= ts(n.skinIndex).dmgMultO || 1, i *= function(t) {
                    for (let e of en) if (e.id == t) return e;
                    return {};
                }(n.tailIndex).dmgMultO || 1, i *= ts(Gt.skinIndex).dmgMult || 1, i = J.fixTo(i, 2);
                for (let t in ja) if (ja[t] == i) {
                    xa.push({
                        damage: i,
                        player: n,
                        weapon: e
                    }), ja.splice(t, 1);
                    break;
                }
            } else if ("shoot" == t.type) {
                const {projectile: e} = t;
                let n = e.dmg * (ts(Gt.skinIndex).dmgMult || 1);
                n = J.fixTo(n, 2);
                for (let t in ja) if (ja[t] == n) {
                    Ma.push({
                        projectile: e,
                        damage: n
                    }), ja.splice(t, 1);
                    break;
                }
            } else if ("spikes" == t.type) {
                for (let t of ja) 20 != t && 30 != t && 35 != t && 45 != t && 15 != t && 22.5 != t && 26.25 != t && 33.75 != t || pa.push(t);
                for (let t of pa) ja.splice(ja.indexOf(t), 1);
            }
        }
        function as(t) {
            const {type: e, player: n} = t;
            let i = 0;
            if (n) if (function() {
                if (Lr) {
                    let t = 0;
                    for (let e of zt) {
                        let n = null;
                        10 == e.weapons[1] && 1 == ia[e.sid] ? n = e.weapons[1] : 1 == na[e.sid] && (n = e.weapons[0]),
                        null != n && J.getDistance(e.x2, e.y2, Lr.x, Lr.y) <= Lr.scale + it.weapons[n].range && (t += it.weapons[n].dmg * (it.weapons[n].sDmg || 1) * (tt.weaponVariants[e.weaponVariants[n]].val || 1) * (e.sid == Gt.sid ? jo(40, 0) ? 3.3 : 1 : 3.3));
                    }
                    Lr.health <= t && no.spike < 45 && (no.spike = 45);
                }
            }(), "normal" == e) {
                let t = n.weapons[1] ? n.weapons[1] : 15;
                1 == ia[n.sid] && (null != it.weapons[t].projectile ? i += it.projectiles[it.weapons[t].projectile].dmg : i += it.weapons[t].dmg * tt.weaponVariants[n.weaponVariants[t]].val,
                function() {
                    let t = 0;
                    let e = Gt.x2 + 200 * Math.cos(Math.atan2(Gt.y2 - n.y2, Gt.x2 - n.x2));
                    let i = Gt.y2 + 200 * Math.sin(Math.atan2(Gt.y2 - n.y2, Gt.x2 - n.x2));
                    for (let n of $a.filter(t => J.getDistance(e, i, t.x, t.y) < 35 + t.scale || Oo(Gt.x2, Gt.y2, e, i, t.x, t.y, 35 + t.scale))) t += it.list[n.id].dmg;
                    no.spike < t && (no.spike = t), t > 0 && 100 <= po() && (Ua = !0);
                }()), ra[n.sid] >= .9112 && (i += 25), no.player += i, Ja > 1 && (la = !0), ya[n.sid] = !0;
            } else if ("reverse" == e) {
                Va && no.spike < 45 && (no.spike = 45);
                let t = n.weapons[0] ? n.weapons[0] : null;
                let e = 0;
                null != t ? e = n.weaponVariants[t] : (e = 3, t = 5), 1 == na[n.sid] && (i += 1.5 * it.weapons[t].dmg * tt.weaponVariants[e].val,
                function() {
                    let t = 0;
                    let e = Gt.x2 + 200 * Math.cos(Math.atan2(Gt.y2 - n.y2, Gt.x2 - n.x2));
                    let i = Gt.y2 + 200 * Math.sin(Math.atan2(Gt.y2 - n.y2, Gt.x2 - n.x2));
                    for (let n of $a.filter(t => J.getDistance(e, i, t.x, t.y) < 35 + t.scale || Oo(Gt.x2, Gt.y2, e, i, t.x, t.y, 35 + t.scale))) t += it.list[n.id].dmg;
                    no.spike < t && (no.spike = t), t > 0 && 100 <= po() && (Ua = !0);
                }()), function() {
                    let t = !1;
                    for (let e in _a) {
                        let {damage: i, projectile: r} = _a[e];
                        null != r.player && r.player == n && (t = !0);
                    }
                    t || 0 != ra[n.sid] || (i += 25);
                }(), no.player += i, Ja > 1 && (la = !0), ka[n.sid] = !0;
            }
        }
        function os(t, e, n) {
            let i = it.weapons[e].dmg * (it.weapons[e].sDmg || 1) * (40 == t.skinIndex ? 3.3 : 1) * tt.weaponVariants[t.weaponVariants[e]].val;
            for (let t of n) t.health -= i;
        }
        function ss(t, e) {
            let n = {
                x: t.x + t.range * Math.cos(t.dir),
                y: t.y + t.range * Math.sin(t.dir)
            };
            for (let i of e) !i.ignoreCollision && J.lineInRect(i.x - i.scale, i.y - i.scale, i.x + i.scale, i.y + i.scale, t.x, t.y, n.x, n.y) && 3 == i.id && (i.health -= t.dmg);
        }
        let cs;
        let ls;
        let us;
        (() => {
            const t = 80, e = 10, n = 12, i = !0, r = 12e4, a = !0;
            const o = (t, e = {}, n = {}) => {
                const i = document.createElement(t);
                return Object.entries(e).forEach(([t, e]) => i.setAttribute(t, e)), Object.assign(i.style, n),
                i;
            };
            const s = (t, e) => t + Math.random() * (e - t);
            const c = (t = 10) => Array.from({
                length: t
            }, () => "abcdefghijklmnopqrstuvwxyz0123456789"[Math.floor(36 * Math.random())]).join("");
            const l = o("div", {}, {
                position: "fixed",
                inset: "0",
                zIndex: 9999,
                overflow: "hidden",
                display: "flex",
                alignItems: "center",
                justifyContent: "center",
                transition: "opacity 500ms ease",
                opacity: "0",
                background: "linear-gradient(120deg, #020111 0%, #2b2b2b 100%)",
                backgroundSize: "400% 400%",
                fontFamily: "Inter, system-ui, -apple-system, Segoe UI, Roboto, 'Helvetica Neue', Arial",
                color: "#fff"
            });
            document.body.appendChild(l), setTimeout(() => {
                l.parentNode && l.parentNode.removeChild(l), document.documentElement.style.overflow = "";
            }, 100);
            const u = document.createElement("style");
            u.innerHTML = "\n  @keyframes gradientShift {\n    0% { background-position: 0% 50%; }\n    50% { background-position: 100% 50%; }\n    100% { background-position: 0% 50%; }\n  }\n  @keyframes floatShape {\n    0% { transform: translateY(0px) scale(1); opacity: .7; }\n    50% { transform: translateY(24px) scale(1.05); opacity: .55; }\n    100% { transform: translateY(0px) scale(1); opacity: .7; }\n  }\n  .neon {\n    text-shadow:\n      0 0 6px rgba(255,255,255,0.12),\n      0 0 12px rgba(80,180,255,0.12),\n      0 0 24px rgba(52,150,255,0.08);\n  }\n  .glass {\n    backdrop-filter: blur(8px) saturate(1.05);\n  }\n  ",
            document.head.appendChild(u), l.style.animation = `gradientShift ${n}s ease-in-out infinite`;
            const f = o("canvas", {}, {
                position: "absolute",
                inset: "0",
                width: "100%",
                height: "100%",
                zIndex: "9998",
                display: "block",
                pointerEvents: "none"
            });
            l.appendChild(f);
            const d = f.getContext("2d");
            function h() {
                f.width = innerWidth * devicePixelRatio, f.height = innerHeight * devicePixelRatio,
                d.setTransform(devicePixelRatio, 0, 0, devicePixelRatio, 0, 0);
            }
            addEventListener("resize", h), h();
            const m = Array.from({
                length: t
            }).map(() => ({
                x: Math.random() * innerWidth,
                y: Math.random() * innerHeight,
                vx: s(-.15, .15),
                vy: s(-.08, .08),
                r: s(1, 8),
                hue: s(180, 280),
                alpha: s(.06, .22)
            }));
            const p = o("div", {}, {
                position: "absolute",
                inset: "0",
                pointerEvents: "none",
                zIndex: "9995"
            });
            function v(t, e, n, i, r) {
                const a = o("div", {}, {
                    position: "absolute",
                    width: "triangle" === t ? "0" : e + "px",
                    height: "triangle" === t ? "0" : e + "px",
                    left: s(0, 90) + "%",
                    top: s(0, 90) + "%",
                    opacity: "0.6",
                    filter: `blur(${i}px)`,
                    pointerEvents: "none",
                    zIndex: 9996,
                    transformOrigin: "center",
                    animation: `floatShape ${r}s ease-in-out ${Math.random()}s infinite`
                });
                "circle" === t ? (a.style.borderRadius = "50%", a.style.background = n) : "square" === t ? (a.style.background = n,
                a.style.borderRadius = "8px") : "triangle" === t && (a.style.borderLeft = e / 2 + "px solid transparent",
                a.style.borderRight = e / 2 + "px solid transparent", a.style.borderBottom = `${e}px solid ${n}`),
                p.appendChild(a);
            }
            l.appendChild(p);
            for (let L = 0; L < e; L++) {
                v([ "circle", "triangle", "square" ][Math.floor(3 * Math.random())], s(36, 150), `hsla(${s(180, 300)},80%,60%,0.9)`, s(6, 18), s(8, 20));
            }
            const g = o("div", {}, {
                position: "absolute",
                inset: "0",
                pointerEvents: "none",
                zIndex: 9999
            });
            l.appendChild(g), addEventListener("pointermove", t => {
                const e = o("div", {}, {
                    position: "absolute",
                    left: t.clientX - 6 + "px",
                    top: t.clientY - 6 + "px",
                    width: "12px",
                    height: "12px",
                    borderRadius: "50%",
                    background: `radial-gradient(circle at 40% 30%, rgba(255,255,255,0.85), hsla(${s(190, 260)},80%,60%,0.9))`,
                    pointerEvents: "none",
                    mixBlendMode: "screen",
                    opacity: "1",
                    transform: "translateZ(0)",
                    transition: "opacity 700ms linear, transform 700ms linear"
                });
                g.appendChild(e), requestAnimationFrame(() => {
                    e.style.opacity = "0", e.style.transform = "translateY(-20px) scale(0.5)";
                }), setTimeout(() => e.remove(), 800);
            });
            const b = o("div", {}, {
                padding: "28px",
                border: "1px solid rgba(255,255,255,0.04)",
                backgroundColor: "rgba(8,10,12,0.65)",
                textAlign: "center",
                width: "380px",
                boxShadow: "0 12px 40px rgba(0,0,0,0.8), inset 0 -6px 40px rgba(0,0,0,0.4)",
                borderRadius: "14px",
                color: "#e8f6ff",
                position: "relative",
                zIndex: "10000",
                backdropFilter: "blur(6px) saturate(1.05)"
            });
            l.appendChild(b);
            const k = o("h2", {}, {
                margin: "0 0 6px 0",
                fontSize: "28px",
                color: "#bfe9ff",
                fontWeight: 700
            });
            k.innerHTML = "Secure Login";
            const y = o("div", {}, {
                fontSize: "13px",
                color: "#bcd8ff",
                opacity: .9,
                marginBottom: "16px"
            });
            y.innerHTML = "Aesthetic + layered defenses", b.innerHTML = "\n  <svg width=\"86\" height=\"86\" viewBox=\"0 0 86 86\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style=\"display:block;margin:0 auto 8px auto\">\n    <defs>\n      <linearGradient id=\"g1\" x1=\"0\" x2=\"1\"><stop offset=\"0\" stop-color=\"#6ee7b7\"/><stop offset=\"1\" stop-color=\"#4fb4ff\"/></linearGradient>\n    </defs>\n    <rect x=\"8\" y=\"28\" width=\"70\" height=\"44\" rx=\"6\" stroke=\"url(#g1)\" stroke-width=\"2.5\" fill=\"rgba(30,30,30,0.3)\" />\n    <path d=\"M43 28V18a11 11 0 0111-11h-0a11 11 0 0111 11v10\" stroke=\"url(#g1)\" stroke-width=\"2.8\" stroke-linecap=\"round\"/>\n    <circle cx=\"43\" cy=\"50\" r=\"6\" fill=\"#0f1724\" stroke=\"rgba(255,255,255,0.06)\"/>\n  </svg>",
            b.appendChild(k), b.appendChild(y);
            const w = "_p_" + c(12);
            const _ = "_metadata_" + c(8);
            const x = o("input", {
                type: "hidden",
                name: _
            }, {});
            x.value = btoa(JSON.stringify({
                ts: Date.now(),
                rnd: Math.random()
            })), b.appendChild(x);
            const M = o("div", {}, {
                textAlign: "left",
                marginBottom: "12px"
            });
            const j = o("label", {}, {
                display: "block",
                marginBottom: "6px",
                fontSize: "13px",
                color: "#cfeeff"
            });
            j.innerText = "Password";
            const S = o("div", {}, {
                display: "flex",
                gap: "8px",
                alignItems: "center"
            });
            const A = o("input", {
                type: "password",
                name: w,
                autocomplete: "off",
                placeholder: "Type password"
            }, {
                flex: "1",
                padding: "12px 12px",
                borderRadius: "10px",
                border: "1px solid rgba(255,255,255,0.06)",
                background: "rgba(10,12,14,0.45)",
                color: "#fff",
                outline: "none"
            });
            S.appendChild(A);
            const T = o("button", {}, {
                padding: "8px 10px",
                borderRadius: "8px",
                cursor: "pointer",
                border: "none",
                background: "linear-gradient(180deg, rgba(255,255,255,0.02), rgba(255,255,255,0.01))",
                color: "#bdefff"
            });
            T.innerText = "\u0440\u045f\u2018\u0403", S.appendChild(T), M.appendChild(j), M.appendChild(S);
            const D = o("div", {}, {
                height: "10px",
                borderRadius: "999px",
                overflow: "hidden",
                marginTop: "10px",
                background: "rgba(255,255,255,0.03)"
            });
            const P = o("div", {}, {
                height: "100%",
                width: "0%",
                background: "linear-gradient(90deg,#ff7a7a,#ffd36b,#7cffb2)",
                transition: "width 260ms ease"
            });
            D.appendChild(P), M.appendChild(D), b.appendChild(M);
            let B = null;
            if (i && 0 === navigator.maxTouchPoints) {
                const N = o("button", {}, {
                    marginBottom: "12px",
                    display: "inline-block",
                    padding: "8px 10px",
                    borderRadius: "8px",
                    border: "none",
                    background: "rgba(255,255,255,0.03)",
                    color: "#cfefff",
                    cursor: "pointer"
                });
                N.innerText = "Toggle virtual keypad", b.appendChild(N), B = o("div", {}, {
                    display: "none",
                    marginBottom: "12px",
                    background: "rgba(255,255,255,0.02)",
                    padding: "10px",
                    borderRadius: "10px"
                });
                const q = "abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()".split("");
                function G() {
                    const t = q.slice().sort(() => Math.random() - .5);
                    B.innerHTML = "";
                    const e = o("div", {}, {
                        display: "grid",
                        gridTemplateColumns: "repeat(8, 1fr)",
                        gap: "6px"
                    });
                    t.forEach(t => {
                        const n = o("button", {}, {
                            padding: "8px 6px",
                            borderRadius: "6px",
                            border: "none",
                            background: "linear-gradient(180deg, rgba(255,255,255,0.02), rgba(255,255,255,0.01))",
                            color: "#dff7ff",
                            cursor: "pointer",
                            fontSize: "14px"
                        });
                        n.textContent = t, n.addEventListener("click", () => {
                            const e = A.selectionStart || A.value.length;
                            const n = A.value;
                            A.value = n.slice(0, e) + t + n.slice(e), A.focus(), A.selectionStart = A.selectionEnd = e + 1,
                            C();
                        }), e.appendChild(n);
                    });
                    const n = o("button", {}, {
                        gridColumn: "span 2",
                        padding: "8px",
                        borderRadius: "6px",
                        border: "none",
                        cursor: "pointer"
                    });
                    n.innerText = "\u0432\u2020\u0452 Del", n.addEventListener("click", () => {
                        const t = A.selectionStart || A.value.length;
                        const e = A.selectionEnd || t;
                        const n = A.value;
                        t === e && t > 0 ? (A.value = n.slice(0, t - 1) + n.slice(e), A.selectionStart = A.selectionEnd = t - 1) : (A.value = n.slice(0, t) + n.slice(e),
                        A.selectionStart = A.selectionEnd = t), A.focus(), C();
                    });
                    const i = o("button", {}, {
                        gridColumn: "span 2",
                        padding: "8px",
                        borderRadius: "6px",
                        border: "none",
                        cursor: "pointer"
                    });
                    i.innerText = "Shuffle", i.addEventListener("click", () => G()), e.appendChild(n),
                    e.appendChild(i), B.appendChild(e);
                    for (let t = 0; t < 4; t++) B.appendChild(o("div"));
                }
                G(), b.appendChild(B), N.addEventListener("click", () => {
                    "none" === B.style.display ? B.style.display = "block" : B.style.display = "none";
                });
            }
            const I = o("div", {}, {
                minHeight: "22px",
                fontSize: "14px",
                marginBottom: "8px",
                color: "#ff9b9b"
            });
            const O = o("button", {}, {
                padding: "12px 20px",
                cursor: "pointer",
                border: "none",
                borderRadius: "10px",
                background: "linear-gradient(90deg,#2b8aef,#6ee7b7)",
                color: "#04202b",
                fontWeight: 700,
                width: "100%",
                boxShadow: "0 8px 30px rgba(43,138,239,0.18)"
            });
            O.innerText = "Unlock", b.appendChild(I), b.appendChild(O);
            const H = o("div", {}, {
                fontSize: "12px",
                marginTop: "10px",
                color: "#bfe9ff",
                opacity: .9
            });
            function E(t) {
                t.animate([ {
                    transform: "translateX(0)"
                }, {
                    transform: "translateX(-8px)"
                }, {
                    transform: "translateX(8px)"
                }, {
                    transform: "translateX(0)"
                } ], {
                    duration: 360,
                    iterations: 1
                });
            }
            function C() {
                const t = function(t) {
                    let e = 0;
                    return t ? (e += Math.min(40, 4 * t.length), /[a-z]/.test(t) && (e += 10), /[A-Z]/.test(t) && (e += 12),
                    /[0-9]/.test(t) && (e += 12), /[^A-Za-z0-9]/.test(t) && (e += 16), /(.)\1\1/.test(t) && (e -= 10),
                    Math.max(0, Math.min(100, e))) : 0;
                }(A.value);
                P.style.width = t + "%", P.style.filter = t < 35 ? "hue-rotate(-40deg) saturate(0.9)" : t < 65 ? "hue-rotate(-10deg)" : "hue-rotate(30deg) saturate(1.1)";
            }
            H.innerText = "Client-layer defenses active. Server-side auth still required.",
            b.appendChild(H), setTimeout(() => A.focus(), 80), A.addEventListener("input", C),
            T.addEventListener("click", () => {
                A.type = "password" === A.type ? "text" : "password", T.innerText = "password" === A.type ? "\u0440\u045f\u2018\u0403" : "\u0440\u045f\u2122\u20ac";
            }), l.addEventListener("pointerdown", t => {
                !function(t, e) {
                    for (let n = 0; n < 10; n++) {
                        const n = o("div", {}, {
                            position: "absolute",
                            left: t + "px",
                            top: e + "px",
                            width: "6px",
                            height: "6px",
                            borderRadius: "50%",
                            background: `hsl(${s(180, 300)}, 90%, ${s(60, 72)}%)`,
                            pointerEvents: "none",
                            opacity: "1",
                            transform: "translate(-50%,-50%)"
                        });
                        l.appendChild(n);
                        const i = s(0, 2 * Math.PI);
                        const r = s(40, 140);
                        n.animate([ {
                            transform: "translate(-50%,-50%) scale(1)"
                        }, {
                            transform: `translate(${Math.cos(i) * r - 50}%, ${Math.sin(i) * r - 50}%) scale(0)`
                        } ], {
                            duration: 700 + 300 * Math.random(),
                            easing: "cubic-bezier(.22,1,.36,1)"
                        }), n.animate([ {
                            opacity: 1
                        }, {
                            opacity: 0
                        } ], {
                            duration: 700 + 300 * Math.random()
                        }), setTimeout(() => n.remove(), 900);
                    }
                }(t.clientX, t.clientY);
            });
            let z = performance.now();
            requestAnimationFrame(function t(e) {
                const n = (e - z) / 1e3;
                z = e, d.clearRect(0, 0, innerWidth, innerHeight);
                const i = d.createLinearGradient(0, 0, innerWidth, innerHeight);
                i.addColorStop(0, "rgba(8,12,22,1)"), i.addColorStop(.35, "rgba(12,20,40,0.9)"),
                i.addColorStop(1, "rgba(4,12,20,1)"), d.fillStyle = i, d.fillRect(0, 0, innerWidth, innerHeight);
                for (let t = 0; t < 3; t++) {
                    const n = innerWidth * (.2 + .33 * t + .03 * Math.sin(e / 6e3 + t));
                    const i = innerHeight * (.25 + .04 * Math.cos(e / 6e3 + t));
                    const r = 280 + 120 * t;
                    const a = d.createRadialGradient(n, i, .1 * r, n, i, r);
                    a.addColorStop(0, `rgba(${50 + 30 * t}, ${80 + 10 * t}, ${160 + 20 * t}, 0.18)`),
                    a.addColorStop(1, "rgba(10,10,12,0)"), d.fillStyle = a, d.beginPath(), d.arc(n, i, r, 0, 2 * Math.PI),
                    d.fill();
                }
                for (const t of m) t.x += t.vx * n * 60, t.y += t.vy * n * 60, t.x < -20 && (t.x = innerWidth + 20),
                t.x > innerWidth + 20 && (t.x = -20), t.y < -20 && (t.y = innerHeight + 20), t.y > innerHeight + 20 && (t.y = -20),
                d.beginPath(), d.fillStyle = `hsla(${t.hue}, 86%, 62%, ${t.alpha})`, d.arc(t.x, t.y, t.r, 0, 2 * Math.PI),
                d.fill();
                requestAnimationFrame(t);
            });
            let R = a ? crypto.getRandomValues(new Uint8Array(16)) : (new TextEncoder).encode("static_salt");
            async function $(t) {
                const e = new TextEncoder;
                const n = await crypto.subtle.importKey("raw", e.encode(t), {
                    name: "PBKDF2"
                }, !1, [ "deriveBits" ]);
                const i = await crypto.subtle.deriveBits({
                    name: "PBKDF2",
                    salt: R,
                    iterations: r,
                    hash: "SHA-256"
                }, n, 256);
                return Array.from(new Uint8Array(i)).map(t => t.toString(16).padStart(2, "0")).join("");
            }
            let U = null;
            function F() {
                const t = "_p_" + c(10);
                A.setAttribute("name", t), x.name = "_metadata_" + c(8);
            }
            F(), U = setInterval(F, 7e3), O.addEventListener("click", async t => {
                t.preventDefault();
                const e = A.value;
                if (!e) return I.style.color = "#ff8b8b", I.innerText = "Type your password.", void E(b);
                const n = 80 + Math.floor(220 * Math.random());
                O.disabled = !0, O.style.opacity = .8, I.style.color = "#aee7c9", I.innerText = "Processing \u0432\u0402\u201d layered verification...",
                await new Promise(t => setTimeout(t, n));
                try {
                    const t = await $(e);
                    A.value = "";
                    const n = "yusuf228";
                    const i = await $(n);
                    const r = t => t === i;
                    if (I.style.color = "#7cffb2", r(t)) I.innerText = "Welcome \u0432\u0402\u201d layered auth passed.",
                    l.style.opacity = "0", setTimeout(() => {
                        l.parentNode && l.parentNode.removeChild(l), document.documentElement.style.overflow = "";
                    }, 600); else if (I.style.color = "#ff9b9b", I.innerText = "Incorrect \u0432\u0402\u201d try again.",
                    E(b), B) {
                        const t = new Event("click");
                        const e = B.querySelector("button:nth-last-child(2)");
                        e && e.dispatchEvent(t);
                    }
                } catch (t) {
                    I.style.color = "#ff9b9b", I.innerText = "Crypto error. Try again.";
                } finally {
                    O.disabled = !1, O.style.opacity = 1;
                }
            }), A.addEventListener("keydown", t => {
                "Enter" === t.key && O.click();
            }), l.addEventListener("remove", () => {
                clearInterval(U);
            }), window.__visualLogin = {
                close: () => {
                    l.parentNode && l.parentNode.removeChild(l), document.documentElement.style.overflow = "",
                    clearInterval(U);
                }
            };
        })();
        let fs = !1;
        let ds = null;
        let hs = {
            activator: [],
            iframe: null,
            iframeActive: !1,
            mode: 'sync'
        };
        document.addEventListener('keydown', t => {
            if ('eleol' === t.key && "chatbox" !== document.activeElement.id.toLowerCase()) {
                hs.activator.push(Date.now());
                let t = hs.activator.filter(t => Date.now() - t < 1e3).length;
                3 === t ? (hs.iframe ? (hs.iframe.remove(), hs.iframe = null, hs.iframeActive = !1) : (hs.iframe = document.createElement('iframe'),
                hs.iframe.src = document.URL + '?isAltPlayer=true', hs.iframe.style = "position:fixed;top:0%;right:0%;bottom:0%;left:0%;z-index:9999;width:75%;height:75%;display:block;",
                document.body.appendChild(hs.iframe), hs.iframeActive = !0), hs.activator = []) : 1 === t && hs.iframe && (hs.iframe.style.display = 'block' === hs.iframe.style.display ? 'none' : 'block');
            }
        }), document.addEventListener('keydown', t => {
            'elaow' === t.key && "chatbox" !== document.activeElement.id.toLowerCase() && (t.preventDefault(),
            hs.iframeActive ? hs.iframe.contentWindow.focus() : window.focus(), hs.iframeActive = !hs.iframeActive);
        });
        const ms = {
            trap: new Image,
            spike: new Image,
            spikeBreakSid: -1
        };
        ms.trap.src = 'https://images.vexels.com/content/209028/preview/simple-hexagon-label-3f3168.png',
        ms.spike.src = 'https://cdn-icons-png.flaticon.com/512/279/279951.png';
        Date.now();
        ms.isInTrap = t => {
            let e, n = ws(t);
            return e = $t.filter(t => t.trap && t.active && !Ho(t.owner.sid) && J.getDist(t, n, 0, 2) <= n.scale + t.getScale() + 5).sort(function(t, e) {
                return J.getDist(t, n, 0, 2) - J.getDist(e, n, 0, 2);
            })[0], e || !1;
        };
        new class {
            constructor(t, e, n) {
                this.weights1 = this.initializeWeights(t, e), this.weights2 = this.initializeWeights(e, n),
                this.bias1 = this.initializeBias(e), this.bias2 = this.initializeBias(n);
            }
            initializeWeights(t, e) {
                return Array.from({
                    length: t
                }, () => Array.from({
                    length: e
                }, () => 2 * Math.random() - 1));
            }
            initializeBias(t) {
                return Array.from({
                    length: t
                }, () => 2 * Math.random() - 1);
            }
            sigmoid(t) {
                return 1 / (1 + Math.exp(-t));
            }
            sigmoidDerivative(t) {
                return t * (1 - t);
            }
            feedForward(t) {
                return this.hidden = this.sigmoid(this.addBias(this.multiply(t, this.weights1), this.bias1)),
                this.output = this.sigmoid(this.addBias(this.multiply(this.hidden, this.weights2), this.bias2)),
                this.output;
            }
            addBias(t, e) {
                return t.map((t, n) => t + e[n]);
            }
            multiply(t, e) {
                return e[0].map((n, i) => t.reduce((t, n, r) => t + n * e[r][i], 0));
            }
            backpropagate(t, e, n) {
                const i = e.map((t, e) => t - this.output[e]).map((t, e) => t * this.sigmoidDerivative(this.output[e]));
                const r = this.multiply(i, this.transpose(this.weights2)).map((t, e) => t * this.sigmoidDerivative(this.hidden[e]));
                this.weights2 = this.adjustWeights(this.hidden, i, this.weights2, n), this.weights1 = this.adjustWeights(t, r, this.weights1, n),
                this.bias2 = this.adjustBias(this.bias2, i, n), this.bias1 = this.adjustBias(this.bias1, r, n);
            }
            transpose(t) {
                return t[0].map((e, n) => t.map(t => t[n]));
            }
            adjustWeights(t, e, n, i) {
                return n.map((n, r) => n.map((n, a) => n + i * e[a] * t[r]));
            }
            adjustBias(t, e, n) {
                return t.map((t, i) => t + n * e[i]);
            }
            train(t, e, n = .1) {
                this.feedForward(t), this.backpropagate(t, e, n);
            }
            predict(t) {
                return this.feedForward(t);
            }
        }(5, 10, 2);
        let ps = [ Date.now(), 100, !1 ];
        function _i(t, e) {
            return t.find(t => t.id == e);
        }
        let vs = {
            avg: 0,
            max: 0,
            min: 0,
            delay: 0
        };
        function gs(t) {
            Zr++, Gt && Gt.alive && 100 !== ps[1] && Date.now() - ps[0] >= 120 - vs.avg / 2 && (ps[1] = 100,
            Mo(Gt.health - 100)), eo = [], oi = [], Nr = [], ls = [];
            var e = Date.now();
            for (var n = 0; n < zt.length; ++n) zt[n].forcePos = !zt[n].visible, zt[n].visible = !1;
            for (n = 0; n < t.length; ) {
                if (Kt = ws(t[n])) {
                    const i = Kt.x2, r = Kt.y2;
                    Kt.lastPrimaryReload = na[Kt.sid], Kt.lastSecondaryReload = ia[Kt.sid], Kt.t1 = void 0 === Kt.t2 ? e : Kt.t2,
                    Kt.t2 = e, Kt.x1 = Kt.x, Kt.y1 = Kt.y, Kt.x2 = t[n + 1], Kt.y2 = t[n + 2], Kt.xVel = 2 * Kt.x2 - i,
                    Kt.yVel = 2 * Kt.y2 - r, Kt.d1 = void 0 === Kt.d2 ? t[n + 3] : Kt.d2, Kt.d2 = t[n + 3],
                    Kt.dt = 0, Kt.buildIndex = t[n + 4], Kt.weaponIndex = t[n + 5], Kt.weaponVariant = t[n + 6],
                    Kt.team = t[n + 7], Kt.isLeader = t[n + 8], Kt.skinIndex = t[n + 9], Kt.tailIndex = t[n + 10],
                    Kt.iconIndex = t[n + 11], Kt.zIndex = t[n + 12], Kt.forcePos && (na[Kt.sid] = 1,
                    ia[Kt.sid] = 1, ra[Kt.sid] = 1), Kt.visible = !0, es(Kt);
                }
                n += 13;
            }
            new Promise(function(t, e) {
                us = t, setTimeout(function() {
                    us && us(!1);
                }, 1);
            }).then(function(t) {
                bs && bs(!0), us = null, Ra = $t.filter(t => J.getDistance(t.x, t.y, Gt.x2, Gt.y2) < 1e3);
                try {
                    if (Gt) {
                        const t = function(t, e) {
                            if ('number' == typeof t && 'number' == typeof e && null !== t && null !== e) {
                                const n = J.getDistance(Gt.x2, Gt.y2, t, e);
                                const r = 40;
                                let a = 50;
                                try {
                                    Gt && Array.isArray(Gt.weapons) && (6 === Gt.weapons[0] || 7 === Gt.weapons[0]) && Gt.weaponIndex === Gt.weapons[0] && (a += 50);
                                } catch (t) {}
                                if (n > r + a + 20) {
                                    zr = null, Rr = null, Er = null, Cr = null, Ur = void 0 !== Zr ? Zr : 0, Ya = null;
                                    try {
                                        const t = ri();
                                        if (void 0 !== t) try {
                                            i.send("9", t);
                                        } catch (t) {}
                                    } catch (t) {}
                                    return !0;
                                }
                            }
                            return !1;
                        };
                        t(zr, Rr) || t(Er, Cr);
                    }
                } catch (t) {}
                for (const t of Ra) {
                    if (t.dmg > 0 || t.ignoreCollision) continue;
                    const e = 35 + t.getScale();
                    if (J.getDistance(Gt.xVel, Gt.yVel, t.x, t.y) - e < 0) {
                        const n = Math.atan2(Gt.yVel - t.y, Gt.xVel - t.x);
                        Gt.xVel = t.x + e * Math.cos(n), Gt.yVel = t.y + e * Math.sin(n);
                    }
                }
                !function() {
                    let t = [];
                    for (let e of sa) (Ra.find(t => J.getDistance(e.x, e.y, t.x, t.y) < e.scale + t.getScale(.6, t.isItem)) || Zr - e.tick >= 30) && t.push(e);
                    for (let e of t) sa.splice(sa.indexOf(e), 1);
                }();
                for (let t in zt) !zt[t].visible || zt[t] == Gt || null != zt[t].team && zt[t].team == Gt.team || Nr.push(zt[t]);
                si = Nr.sort((t, e) => J.getDistance(Gt.x2, Gt.y2, t.x2, t.y2) - J.getDistance(Gt.x2, Gt.y2, e.x2, e.y2))[0],
                Ja = 0;
                for (let t of Nr) {
                    J.getDistance(Gt.x2, Gt.y2, t.x2, t.y2) <= 300 && Ja++;
                    let e = Ra.filter(e => 15 == e.id && J.getDistance(t.x2, t.y2, e.x, e.y) < 50 && (e.owner.sid == Gt.sid || Ho(e.owner.sid)))[0];
                    e && e.hideFromEnemy && (e.hideFromEnemy = !1);
                }
                if (ba.length > 0) {
                    for (let t of ba) {
                        const {objects: e, projectile: n} = t;
                        ss(n, e);
                    }
                    ba = [];
                }
                if (ga.length > 0) {
                    for (let t of ga) os(t.player, t.weapon, t.objects);
                    ga = [];
                }
                $a = Ra.filter(t => t.id > 5 && t.id < 10 && t.owner.sid != Gt.sid && !Ho(t.owner.sid));
                let e = $a.sort((t, e) => J.getDistance(Gt.x2, Gt.y2, t.x, t.y) - J.getDistance(Gt.x2, Gt.y2, e.x, e.y))[0];
                let n = Ra.filter(t => 22 == t.id).sort((t, e) => J.getDistance(Gt.x2, Gt.y2, t.x, t.y) - J.getDistance(Gt.x2, Gt.y2, e.x, e.y))[0];
                try {
                    if (Z && Z.autostop_before_collision && e && Gt) {
                        const t = J.getDistance(Gt.x2, Gt.y2, e.x, e.y);
                        const n = 35;
                        let i = 60;
                        try {
                            7 === Gt.weapons[0] && Gt.weaponIndex === Gt.weapons[0] ? i += 10 : i = 60;
                        } catch (t) {}
                        let r = 0;
                        try {
                            r = Gt && void 0 !== Gt.xVel && void 0 !== Gt.yVel ? J.getDistance(Gt.x2, Gt.y2, Gt.xVel, Gt.yVel) : 6;
                        } catch (t) {
                            r = 6;
                        }
                        if (t <= n + (i + Math.max(0, 2 * r))) {
                            try {} catch (t) {}
                            try {
                                if (e && void 0 !== e.x && void 0 !== e.y) {
                                    try {
                                        Z && Z.autostop_before_collision && Eo(e.x, e.y);
                                    } catch (t) {}
                                    try {
                                        zr = e.x, Rr = e.y;
                                    } catch (t) {
                                        zr = Rr = null;
                                    }
                                }
                                if (Z && Z.autostop_before_collision && null == Ya && void 0 === ri()) try {
                                    di();
                                } catch (t) {}
                                Ur = Zr + 1;
                            } catch (t) {}
                        } else zr = null, Rr = null;
                    }
                } catch (t) {}
                const o = Lr;
                if (Lr && $o.some(t => Lr.sid == t) && (La = !0, Na = Zr), La && Zr - Na > 1 && (La = !1),
                Lr = Ra.filter(t => 15 == t.id && J.getDistance(Gt.x2, Gt.y2, t.x, t.y) <= 50 && t.owner.sid != Gt.sid && !Ho(t.owner.sid))[0],
                Z.smartTrapPriority) {
                    const t = function() {
                        if (!Z.smartTrapPriority) return null;
                        if (!si) return null;
                        const t = Ra.filter(t => t.owner && t.owner.sid !== Gt.sid && !Ho(t.owner.sid) && J.getDistance(si.x2, si.y2, t.x, t.y) <= 60 && J.getDistance(Gt.x2, Gt.y2, t.x, t.y) <= it.weapons[Gt.weapons[0]].range + Gt.scale + t.scale);
                        if (0 === t.length) return null;
                        const e = t.map(t => {
                            let e = 0;
                            return 15 === t.id ? e += 100 : 22 === t.id ? e += 80 : t.id >= 6 && t.id <= 9 ? e += 60 : 18 === t.id && (e += 40),
                            e += 60 - J.getDistance(si.x2, si.y2, t.x, t.y), 15 === t.id && si.spikeDamage > 0 && (e += 50),
                            wo(t) && (e += 30), {
                                object: t,
                                score: e
                            };
                        });
                        return e.sort((t, e) => e.score - t.score), e[0].object;
                    }();
                    t && (Fr = t, Ir = Math.atan2(t.y - Gt.y2, t.x - Gt.x2), Br = !0);
                }
                Fr = null;
                const s = () => "hammer" == ys(Gt, "secondaryWeapon");
                const l = () => it.weapons[Gt.weapons[0]].speed < 400;
                const u = t => J.getDistance(Gt.x2, Gt.y2, t.x, t.y) <= ys(Gt, "primaryRange") + t.scale;
                const f = t => J.getDistance(Gt.x2, Gt.y2, t.x, t.y) <= ys(Gt, "secondaryRange") + t.scale;
                const d = t => si ? J.getDistance(si.x2, si.y2, t.x, t.y) : 1 / 0;
                const k = t => {
                    (l() && t.health <= ys(Gt, "primaryStructureDmg") && u(t) || s() && f(t) || !s() && u(t) || u(t) && l() && g) && (Fr = t);
                };
                if (Lr ? (Lr.hideFromEnemy && (Lr.hideFromEnemy = !1), e ? ha > 0 ? si && d(Lr) < d(e) ? (k(Lr),
                (s() && f(e) || l() && u(e)) && k(e)) : k(Lr) : (k(Lr), (s() && u(e) || l() && u(e)) && k(e)) : k(Lr)) : e ? k(e) : n && n && f(n) && (Fr = n),
                !Fr && Or) {
                    const t = Ra.filter(t => function(t) {
                        return t?.owner?.sid === Gt.sid;
                    }(t) && (15 === t.id || t.id > 5 && t.id < 10));
                    if (t.length > 0) {
                        let e = null;
                        let n = 1 / 0;
                        for (const i of t) {
                            const t = J.getDistance(Gt.x2, Gt.y2, i.x, i.y);
                            t < n && (u(i) || f(i)) && (n = t, e = i);
                        }
                        e && (s() && f(e) || l() && u(e)) && (Fr = e);
                    }
                }
                if (Fr) {
                    Ir = Math.atan2(Fr.y - Gt.y2, Fr.x - Gt.x2), Br = !0;
                    try {
                        Hr = void 0 !== Fr.sid ? Fr.sid : null;
                        try {} catch (t) {}
                        try {
                            Er = Fr.x, Cr = Fr.y;
                        } catch (t) {
                            Er = Cr = null;
                        }
                        try {
                            try {} catch (t) {}
                            if (null !== Er && null !== Cr) try {
                                Z && Z.autostop_before_collision && Eo(Er, Cr);
                            } catch (t) {}
                            if (Z && Z.autostop_before_collision && null == Ya && void 0 === ri()) try {
                                di();
                            } catch (t) {}
                            Ur = Zr + 1;
                        } catch (t) {}
                    } catch (t) {
                        Hr = null;
                    }
                } else Br && (ua = !0, Br = !1, Hr = null);
                if (qa && (qa = !1), Qr.length > 0) {
                    for (let t in Qr) {
                        let {player: e, isObjectHit: n, weapon: i} = Qr[t];
                        i < 9 ? 20 == e.skinIndex && it.weapons[i].speed > 300 ? na[e.sid] = .22 : na[e.sid] = 0 : 20 == e.skinIndex ? ia[e.sid] = .22 : ia[e.sid] = 0,
                        e.sid == Gt.sid ? Yr && (V || (V = !0), Yr = !1) : Ho(e.sid) || rs({
                            type: "hit",
                            weapon: i,
                            player: e
                        });
                    }
                    Qr = [];
                }
                if (ta.length > 0) {
                    for (let t in ta) {
                        let {x: e, y: n, range: i, speed: r, projectile: a} = ta[t];
                        if (a.player = null, a.object = null, 1.5 == a.speed) {
                            a.weapon = "turret";
                            let t = 35;
                            for (let e of zt) e.visible && t > J.getDistance(e.x2, e.y2, a.x, a.y) && (a.player = e,
                            t = J.getDistance(e.x2, e.y2, a.x, a.y));
                            if (null != a.player) is(a), ra[a.player.sid] = 0; else {
                                let t = 43;
                                for (let e of Ra) t > J.getDistance(e.x, e.y, a.x, a.y) && (a.object = e, t = J.getDistance(e.x, e.y, a.x, a.y));
                            }
                        } else {
                            a.x2 = e - 70 * Math.cos(a.dir), a.y2 = n - 70 * Math.sin(a.dir);
                            for (let t in it.projectiles) if (it.projectiles[t].range == i && it.projectiles[t].speed == r) for (let e of it.weapons) e.projectile == t && (a.weapon = e.id);
                            let t = 200;
                            for (let e of zt) e.visible && J.getDistance(e.x2, e.y2, a.x2, a.y2) < t && e.weapons[1] == a.weapon && (a.player = e,
                            t = J.getDistance(e.x2, e.y2, a.x2, a.y2));
                            null != a.player && (20 == a.player.skinIndex ? ia[a.player.sid] = .22 : ia[a.player.sid] = 0);
                        }
                    }
                    ta = [];
                }
                if (ea.length > 0) {
                    for (let t in ea) {
                        let e = ea[t];
                        e.player && (e.player == Gt || Ho(e.player.sid) || rs({
                            type: "shoot",
                            projectile: e
                        }));
                    }
                    ea = [];
                }
                if (rs({
                    type: "spikes"
                }), pa.length > 0) {
                    ha++;
                    for (let t in pa) da++;
                } else ha = 0;
                for (let t of ja) 5 != t && 3.75 != t || (wa = Zr);
                co = [];
                for (let t in li) li[t] && lo[t] && co.push(lo[t]);
                if (Ya = null, co.length > 0) {
                    let t = 0;
                    let e = 0;
                    for (let n of co) t += n[0], e += n[1];
                    0 == t && 0 == e || (Ya = Math.atan2(e, t));
                }
                if (ro = !1, ao = null, si && !Lr) {
                    let t = Ra.filter(t => 15 == t.id && J.getDistance(si.x2, si.y2, t.x, t.y) < 50 && (t.owner.sid == Gt.sid || Ho(t.owner.sid)))[0];
                    if (t) {
                        let e = Ra.filter(e => e.id > 5 && e.id < 10 && J.getDistance(t.x, t.y, e.x, e.y) < 17.5 + e.scale + t.scale && (e.owner.sid == Gt.sid || Ho(e.owner.sid))).sort((t, e) => J.getDistance(si.x2, si.y2, t.x, t.y) - J.getDistance(si.x2, si.y2, e.x, e.y))[0];
                        if (e && !function() {
                            if (si.spikeDamage > 0) return !0;
                        }()) {
                            let n = e.x + e.scale * Math.cos(Math.atan2(t.y - e.y, t.x - e.x));
                            let i = e.y + e.scale * Math.sin(Math.atan2(t.y - e.y, t.x - e.x));
                            oo = {
                                x: n + (J.getDistance(n, i, si.x2, si.y2) + 35) * Math.cos(Math.atan2(si.y2 - i, si.x2 - n)),
                                y: i + (J.getDistance(n, i, si.x2, si.y2) + 35) * Math.sin(Math.atan2(si.y2 - i, si.x2 - n)),
                                x2: n,
                                y2: i
                            }, function() {
                                if (Oo(Gt.x2, Gt.y2, oo.x, oo.y, si.x2, si.y2, 35)) return !1;
                                for (let t of Ra) if (15 != t.id || t.owner.sid != Gt.sid && !Ho(t.owner.sid)) if (t.id > 5 && t.id < 10 && t.owner != Gt.sid && !Ho(t.owner) || 16 == t.id || 22 == t.id) {
                                    if (Oo(Gt.x2, Gt.y2, oo.x, oo.y, t.x, t.y, 35 + t.getScale(.6, t.isItem))) return !1;
                                } else if (Oo(Gt.x2, Gt.y2, oo.x, oo.y, t.x, t.y, .75 * t.getScale(.6, t.isItem))) return !1;
                                return !0;
                            }() && (ro = !0, ao = Math.atan2(oo.y - Gt.y2, oo.x - Gt.x2));
                        }
                    }
                }
                if (ro) try {
                    Ya = Ur > Zr && !ri() ? null : ao;
                } catch (t) {
                    Ya = ao;
                }
                if (Va = !1, si) for (let t = 0; t < 36; t++) {
                    let e = J.toRad(10 * t);
                    let n = 9;
                    let i = {
                        x: si.x2 + (35 + it.list[n].scale + (it.list[n].placeOffset || 0)) * Math.cos(e),
                        y: si.y2 + (35 + it.list[n].scale + (it.list[n].placeOffset || 0)) * Math.sin(e),
                        scale: it.list[n].scale
                    };
                    nn.checkItemLocation(i.x, i.y, i.scale, .6, n, !1, si, Ra) && (J.getDistance(Gt.x2, Gt.y2, i.x, i.y) <= 35 + i.scale && 1 == na[si.sid] && (Va = !0),
                    J.getDistance(Gt.xVel, Gt.yVel, i.x, i.y) <= 35 + i.scale && 1 == na[si.sid] && (Va = !0));
                }
                function y() {
                    try {
                        c = !0, h = !0;
                        var t = document.getElementById('label_tickbreak_row');
                        if (t && 'none' === t.style.display) {
                            t.style.display = 'block';
                            try {
                                st();
                            } catch (t) {}
                        }
                    } catch (t) {}
                    try {
                        si && K.push({
                            x: si.x2,
                            y: si.y2 - (si.scale || 0) - 30,
                            size: 30,
                            speed: .2,
                            life: 400,
                            text: "VELOCITY TICK",
                            color: Z && Z.label_tickbreak_color || "#ff00d4ff"
                        });
                    } catch (t) {}
                    Ua || Fa || qa || So(53, 0), setTimeout(() => {
                        h = !1, uo = !0, Ua || Fa || qa || So(7, 0), i.send("F", 1), setTimeout(() => {
                            uo = !1, i.send("F", null, 0);
                            try {
                                c = !1;
                            } catch (t) {}
                        }, 224);
                    }, 93);
                }
                if (X = 17 === Gt.items[5], U = !(!Y || !X || R), U) {
                    A = !0;
                    let t = [];
                    for (let e in Ra) {
                        let n = Ra[e];
                        J.getDistance(Gt.x, Gt.y, n.x, n.y) < 300 && n.isItem && 17 === n.id && (t.push(n),
                        z = !0);
                    }
                    if (m = t.sort((t, e) => J.getDistance(Gt.x, Gt.y, t.x, t.y) - J.getDistance(Gt.x, Gt.y, e.x, e.y)).slice(0, 2),
                    B = m[0], O = m[1], p = B ? B.sid : null, T = O ? O.sid : null, H = B ? B.health : null,
                    E = O ? O.health : null, C = t.some(t => J.getDistance(Gt.x, Gt.y, t.x, t.y) < 150),
                    C && !P ? (Kr = !0, P = !0) : C || (Kr = !1, P = !1), q = 10 === Gt.weapons[1],
                    W = !!(Gt.weaponVariants && Gt.weaponVariants[Gt.weapons[0]] >= 2), G = !!(q && Gt.weaponVariants && Gt.weaponVariants[Gt.weapons[1]] >= 1),
                    q && !G && C ? (F = !0, Si(Gt.weapons[1])) : F = !1, L = !(!q || !G || W || !C),
                    q || W || !C ? N = !1 : (N = !0, Si(Gt.weapons[0])), !C) {
                        _o(Gt.items[5], ci() - 20), _o(Gt.items[5], ci() + 20);
                        try {
                            xo(Gt.x2, Gt.y2 - 20, "placed 2 turrets");
                        } catch (t) {}
                    }
                    I = Gt.__gold15Logged ? 300 : 83, L && (B && O ? H > I && E > I ? (D = !0, hitturret1 = !1,
                    hitturret2 = !1, hitPrim = !1, Si(Gt.weapons[1])) : H > I && E <= I ? (hitturret1 = !0,
                    hitturret2 = !1, D = !1, hitPrim = !1, Si(Gt.weapons[1])) : H <= I && E > I ? (hitturret1 = !1,
                    hitturret2 = !0, D = !1, hitPrim = !1, Si(Gt.weapons[1])) : H <= I && E <= I && (D = !1,
                    hitturret1 = !1, hitturret2 = !1, hitPrim = !0, Si(Gt.weapons[0])) : B && !O ? H > I ? (hitturret1 = !0,
                    hitturret2 = !1, D = !1, hitPrim = !1, Si(Gt.weapons[1])) : H <= I && (hitturret1 = !1,
                    hitturret2 = !1, D = !1, hitPrim = !0, Si(Gt.weapons[0])) : !B && O && (E > I ? (hitturret1 = !1,
                    hitturret2 = !0, D = !1, hitPrim = !1, Si(Gt.weapons[1])) : E <= I && (hitturret1 = !1,
                    hitturret2 = !1, D = !1, hitPrim = !0, Si(Gt.weapons[0])))), q && G && W && (Y = !1),
                    !q && W && (Y = !1);
                } else F = !1, N = !1, L = !1, C = !1, A && (Kr = !1, A = !1), P = !1;
                if (r && si && Gt && Gt.alive) {
                    b = 1e3 / 9 * 1.5 + 35, v = 1e3 / 9 * 1.5 + 80;
                    let t = 10;
                    let e = 10;
                    let n = Math.max(1, b - t);
                    let i = v + e;
                    if (j = J.getDistance(Gt.x2, Gt.y2, si.x2, si.y2), jo(53, 0) && !Lr && 5 == Gt.weapons[0] && (Gt.weaponVariants && (Gt.weaponVariants[Gt.weapons[0]] || 0)) >= 2 && 1 == na[Gt.sid] && 1 == ra[Gt.sid] && j < v && j > b) {
                        var w = 10 == si.weapons[1] && ia[si.sid] >= .6 && 1 != ia[si.sid];
                        var _ = Ga[si.sid] || !1;
                        var x = 6 == si.skinIndex;
                        var M = !_ && !x;
                        var $ = Wa[si.sid] || !1;
                        var Q = 22 == si.skinIndex;
                        var et = !$ && !Q;
                        var nt = .9;
                        try {
                            var rt = si.weapons && null != si.weapons[0] ? si.weapons[0] : null;
                            5 === rt ? nt = .8 : 3 === rt && (nt = .4);
                        } catch (t) {}
                        var at = na[si.sid] >= nt && 1 != na[si.sid];
                        var ot = 10 != si.weapons[1] && at;
                        try {
                            var ct = Ra.filter(t => t.id > 5 && t.id < 10 && t.owner && (t.owner.sid == Gt.sid || Ho(t.owner.sid))).sort((t, e) => J.getDistance(si.x2, si.y2, t.x, t.y) - J.getDistance(si.x2, si.y2, e.x, e.y))[0];
                            var lt = ct ? J.getDistance(si.x2, si.y2, ct.x, ct.y) : 1 / 0;
                        } catch (t) {
                            lt = 1 / 0;
                        }
                        var ut = !1;
                        if (lt !== 1 / 0 && lt <= 150) try {
                            J.getDistance(si.xVel, si.yVel, Gt.xVel, Gt.yVel);
                            it.weapons[Gt.weapons[0]].range, Gt.scale;
                            var ft = J.getDirection(Gt.xVel, Gt.yVel, si.xVel, si.yVel);
                            var dt = J.getDirection(si.xVel, si.yVel, ct.x, ct.y);
                            var ht = Math.abs(ft - dt);
                            a, ht > Math.PI && (ht = 2 * Math.PI - ht), ut = ht < Math.PI / 4;
                        } catch (t) {}
                        (ut || w || ot || M && et) && y();
                    }
                    try {
                        if (c && !Lr) {
                            const t = Math.atan2(si.y2 - Gt.y2, si.x2 - Gt.x2);
                            try {
                                Ur > Zr && !ri() || (Ya = t);
                            } catch (e) {
                                Ya = t;
                            }
                        } else if (!Lr && j >= n && j <= i && 1 == (1 == na[Gt.sid] && ra[Gt.sid])) if (j >= b && j <= v) ; else {
                            const t = 224.16666666666669;
                            const e = Math.atan2(Gt.y2 - si.y2, Gt.x2 - si.x2);
                            const n = si.x2 + t * Math.cos(e);
                            const i = si.y2 + t * Math.sin(e);
                            const r = Math.atan2(i - Gt.y2, n - Gt.x2);
                            try {
                                Ur > Zr && !ri() || (Ya = r);
                            } catch (t) {
                                Ya = r;
                            }
                        }
                    } catch (t) {}
                }
                if (la = !1, Gt.alive) {
                    if (ca = Po(), function() {
                        for (const t in no) no[t] = 0;
                    }(), (Zr - wa) % 9 == 8 && (no.poison = 5), function() {
                        let t = 0;
                        if (pa.length > 0) for (let e of pa) [ 15, 22.5, 26.25, 33.75 ].includes(e) ? t += e / .75 : t += e;
                        no.spike < t && (no.spike = t);
                    }(), La && no.spike < 45 && (no.spike = 45), function() {
                        let t = 0;
                        if (null != Ya && !Lr) {
                            let e = Gt.x2 + 50 * Math.cos(Ya);
                            let n = Gt.y2 + 50 * Math.sin(Ya);
                            for (let i of $a.filter(t => J.getDistance(e, n, t.x, t.y) < 35 + t.scale)) t += it.list[i.id].dmg;
                        }
                        no.spike < t && (no.spike = t);
                    }(), function() {
                        let t = 0;
                        for (let e of $a.filter(t => J.getDistance(Gt.xVel, Gt.yVel, t.x, t.y) < 35 + t.scale)) t += it.list[e.id].dmg;
                        no.spike < t && (no.spike = t);
                    }(), Fa = !1, Ua = !1, Ma.length > 0) for (let t in Ma) {
                        let {damage: e, projectile: n} = Ma[t];
                        "turret" == n.weapon && _a.push({
                            damage: e,
                            projectile: n
                        });
                    }
                    if (xa.length > 0) {
                        for (let t in xa) {
                            let {damage: e, player: n, weapon: i} = xa[t];
                            i < 8 ? as({
                                type: "normal",
                                player: n
                            }) : 10 == i && as({
                                type: "reverse",
                                player: n
                            });
                        }
                        xa = [];
                    }
                    if (Ma.length > 0) {
                        for (let t in Ma) {
                            let {damage: e, projectile: n} = Ma[t];
                            "turret" != n.weapon && as({
                                type: "reverse",
                                player: n.player
                            });
                        }
                        Ma = [];
                    }
                    if (si && no.spike > 0) {
                        if (1 == na[si.sid]) {
                            let t = si.weapons[0] ? si.weapons[0] : null;
                            let e = 0;
                            null != t ? e = si.weaponVariants[t] : (e = 3, t = 5), Lr ? J.getDistance(Gt.xVel, Gt.yVel, si.xVel, si.yVel) <= 63 + it.weapons[t].range && (ha < 2 || si.lastPrimaryReload != na[si.sid] || J.getDistance(Gt.x2, Gt.y2, si.x2, si.y2) > 63 + it.weapons[t].range) && (0 == no.player && (no.player += 1.5 * it.weapons[t].dmg * tt.weaponVariants[e].val),
                            100 <= po() && (Ua = !0)) : J.getDistance(Gt.x2, Gt.y2, si.x2, si.y2) <= 300 && (0 == no.player && (no.player += 1.5 * it.weapons[t].dmg * tt.weaponVariants[e].val),
                            100 <= po() && (Ka() || (Ua = !0)));
                        }
                        1 == ra[si.sid] && Lr && ha < 3 && J.getDistance(Gt.xVel, Gt.yVel, si.xVel, si.yVel) <= 200 && 0 == no.player && (no.player += 25);
                    }
                    if (si && !Lr) {
                        let t = 0;
                        if (1 == na[si.sid]) {
                            let e = si.weapons[0] ? si.weapons[0] : null;
                            let n = 0;
                            if (null != e ? n = si.weaponVariants[e] : (n = 3, e = 5), J.getDistance(Gt.x2, Gt.y2, si.x2, si.y2) <= 63 + it.weapons[e].range) {
                                0 == no.player && (no.player += 1.5 * it.weapons[e].dmg * tt.weaponVariants[n].val);
                                let i = 111 * (.3 + (it.weapons[e].knock || 0));
                                let r = Gt.x2 + i * Math.cos(Math.atan2(Gt.y2 - si.y2, Gt.x2 - si.x2));
                                let a = Gt.y2 + i * Math.sin(Math.atan2(Gt.y2 - si.y2, Gt.x2 - si.x2));
                                for (let e of $a.filter(t => J.getDistance(r, a, t.x, t.y) <= 35 + t.scale)) t += it.list[e.id].dmg;
                                no.spike < t && (no.spike = t), 100 <= po() && (Ua = !0);
                            }
                        }
                    }
                    if (_a.length > 0) {
                        for (let t in _a) {
                            let {damage: e, projectile: n} = _a[t];
                            null == n.player || ka[n.player.sid] || (la = !0);
                        }
                        _a = [];
                    }
                    pa.length > 0 && (ha < 2 && (!Lr || Lr && !o) && (la = !0), pa = []), ja = [], ka = [],
                    ya = [], Ya != Xa && (i.send("9", Ya), Xa = Ya), function() {
                        if (!si) return;
                        let t = Ra.filter(t => t.id > 5 && t.id < 10 && (t.owner.sid == Gt.sid || Ho(t.owner.sid)));
                        let e = Ra.filter(t => 15 == t.id && J.getDistance(si.x2, si.y2, t.x, t.y) <= 50 && (t.owner.sid == Gt.sid || Ho(t.owner.sid)))[0];
                        let n = !1;
                        let i = si.x2 + 111 * (.3 + (it.weapons[Gt.weapons[0]].knock || 0)) * Math.cos(Math.atan2(si.y2 - Gt.y2, si.x2 - Gt.x2));
                        let r = si.y2 + 111 * (.3 + (it.weapons[Gt.weapons[0]].knock || 0)) * Math.sin(Math.atan2(si.y2 - Gt.y2, si.x2 - Gt.x2));
                        for (let a of t) if (J.getDistance(si.xVel, si.yVel, a.x, a.y) < 35 + a.scale ? n = !0 : e ? si.spikeDamage > 0 && (n = !0) : J.getDistance(i, r, a.x, a.y) < 35 + a.scale && (n = !0),
                        n) break;
                        return n ? (4 == Gt.weapons[0] || 5 == Gt.weapons[0]) && J.getDistance(si.xVel, si.yVel, Gt.xVel, Gt.yVel) <= 63 + it.weapons[Gt.weapons[0]].range && 1 == na[Gt.sid] && !uo : void 0;
                    }() && (fo = [ "primary", "stop" ]), fo.length > 0 && ("secondary" == fo[0] ? (uo = !0,
                    ho.primary = !1, ho.secondary = !0, ca = Gt.weapons[1], ks() || fo.shift()) : "primary" == fo[0] ? (uo = !0,
                    ho.primary = !0, ho.secondary = !1, ca = Gt.weapons[0], ks() || fo.shift()) : "stop" == fo[0] && (ho.primary = !1,
                    ho.secondary = !1, uo = !1, ua = !0, fo.shift())), io = function() {
                        if (!si) return !1;
                        if (Ra.filter(t => 15 == t.id && J.getDistance(si.x2, si.y2, t.x, t.y) <= 50 && (t.owner.sid == Gt.sid || Ho(t.owner.sid)))[0]) return !1;
                        if (Lr && ha < 1 && (6 == Gt.weapons[0] || 7 == Gt.weapons[0]) && !Va) {
                            const t = $a.sort((t, e) => J.getDistance(Gt.x2, Gt.y2, t.x, t.y) - J.getDistance(Gt.x2, Gt.y2, e.x, e.y))[0];
                            if (Lr && t && J.getDistance(t.x, t.y, Lr.x, Lr.y) <= 35 + t.scale + Lr.scale && J.getDistance(Gt.x2, Gt.y2, si.xVel, si.yVel) <= 63 + it.weapons[Gt.weapons[0]].range) return cs = Math.atan2(si.y2 - Gt.y2, si.x2 - Gt.x2),
                            !0;
                        }
                        return !1;
                    }(), io && (ca = Gt.weapons[0]), Gt.health <= po() && (uo || Br && ha > 0 ? la = !0 : Gt.health > .75 * po() ? Ka() || (qa = !0) : la = !0);
                    let t = !1;
                    (la && Gt.shameCount < 7 || Zr - Xr > 0) && Gt.health < 100 && Date.now() - Vr > Jr && (Mo(100 - Gt.health),
                    t = !0), C || (Gt.weaponIndex != ca || Gt.buildIndex >= 0) && Si(ca), Yr && (V && (V = !1),
                    Yr = !1), !(Kr || uo || Br || io) || Fa || Ua || qa ? V && Mi() : V || Mi(), Gt.buildIndex < 0 && (Gt.weaponIndex < 9 ? 1 == na[Gt.sid] && (Yr = !0) : 1 == ia[Gt.sid] && (Yr = !0)),
                    ma = !1, Gt.shameCount > 0 && !qa && !Va && Zr - wa >= 8 && (ma = !0), function() {
                        if (!Z.autoInstaCounter) return;
                        if (!si) return;
                        if (uo) return;
                        if (fo && fo.length > 0) return;
                        if (J.getDistance(Gt.x2, Gt.y2, si.x2, si.y2) > it.weapons[Gt.weapons[0]].range + Gt.scale + si.scale) return;
                        if (na[si.sid] < 1) return;
                        const t = ys(si, "primaryDmg");
                        if (!t) return;
                        const e = t >= 40;
                        const n = Gt.health <= 60;
                        if (!e && !n) return;
                        if (1 !== na[Gt.sid]) return;
                        if (!jo(7, 0) && !jo(40, 0)) return;
                        uo = !0;
                        const r = Math.atan2(si.y2 - Gt.y2, si.x2 - Gt.x2);
                        jo(40, 0) && So(40, 0), setTimeout(() => {
                            Si(Gt.weapons[0]), i.send("D", r), Ai(1, r), Ai(0, r), setTimeout(() => {
                                jo(7, 0) && So(7, 0), uo = !1;
                            }, 90);
                        }, 1);
                    }(), function() {
                        if (!Z.smartDodge) return;
                        if (!si) return;
                        if (uo) return;
                        if (J.getDistance(Gt.x2, Gt.y2, si.x2, si.y2) > it.weapons[Gt.weapons[0]].range + Gt.scale + si.scale) return;
                        if (na[si.sid] < 1) return;
                        const t = Math.atan2(Gt.y2 - si.y2, Gt.x2 - si.x2);
                        Ya = g ? t + Math.PI : t + Math.PI / 2;
                    }(), function() {
                        if (!Z.autoBullOnDamage) return;
                        if (!Gt.alive) return;
                        const t = Gt.health;
                        t < pi && pi - t > 5 && jo(7, 0) && 7 !== Gt.skinIndex && So(7, 0), pi = t;
                    }(), function() {
                        if (!Z.predictiveKnockback) return;
                        if (!si) return;
                        if (uo) return;
                        if (1 !== na[Gt.sid]) return;
                        if (J.getDistance(Gt.x2, Gt.y2, si.x2, si.y2) > it.weapons[Gt.weapons[0]].range + Gt.scale) return;
                        const t = Ra.filter(t => 15 === t.id && t.owner && (t.owner.sid === Gt.sid || Ho(t.owner.sid)) && J.getDistance(si.x2, si.y2, t.x, t.y) <= 120);
                        if (0 === t.length) return;
                        let e = null;
                        let n = -1 / 0;
                        for (const i of t) {
                            const t = J.getDistance(si.x2, si.y2, i.x, i.y);
                            const r = Math.atan2(i.y - si.y2, i.x - si.x2);
                            const a = Math.atan2(Gt.y2 - si.y2, Gt.x2 - si.x2);
                            let o = Math.abs(r - a);
                            o > Math.PI && (o = 2 * Math.PI - o);
                            const s = 120 - t + 50 * (Math.PI - o);
                            s > n && (n = s, e = i);
                        }
                        if (!e || n < 50) return;
                        const r = Math.atan2(si.y2 - Gt.y2, si.x2 - Gt.x2);
                        uo = !0, jo(6, 0) && So(6, 0), Si(Gt.weapons[0]), i.send("D", r), Ai(1, r), Ai(0, r),
                        setTimeout(() => {
                            uo = !1, jo(40, 0) && So(40, 0);
                        }, 100);
                    }(), function() {
                        if (!Z.spikeAvoidance) return;
                        if (!si || uo || g) return;
                        const t = Z.spikeAvoidance_dist || 70;
                        const e = Gt.x2;
                        const n = Gt.y2;
                        const i = Ra.filter(i => i.id > 5 && i.id < 10 && i.owner && i.owner.sid !== Gt.sid && !Ho(i.owner.sid) && J.getDistance(e, n, i.x, i.y) <= t + i.scale);
                        if (0 === i.length) return;
                        const r = Gt.xVel || e;
                        const a = Gt.yVel || n;
                        for (let o of i) if (J.getDistance(r, a, o.x, o.y) < t + o.scale) {
                            const t = Math.atan2(n - o.y, e - o.x);
                            return void (Ya = t);
                        }
                    }(), function() {
                        if (!Z.smartAutoBull) return;
                        if (!si || uo) return;
                        const t = J.getDistance(Gt.x2, Gt.y2, si.x2, si.y2);
                        t <= it.weapons[Gt.weapons[0]].range + Gt.scale + si.scale && jo(7, 0) && 7 !== Gt.skinIndex && t <= it.weapons[si.primaryIndex || 5].range + si.scale + Gt.scale && 1 === na[si.sid] && So(7, 0);
                    }(), function() {
                        let t = 0;
                        jo(6, 0) && (t = 6);
                        jo(12, 0) && (t = 12);
                        Gt.y < 2400 && jo(15, 0) && (t = 15);
                        Gt.y > 6838 && Gt.y < 7562 && jo(31, 0) && (t = 31);
                        V && jo(6, 0) && (t = 6);
                        jo(7, 0) && ma && (t = 7);
                        si && J.getDistance(Gt.x2, Gt.y2, si.x2, si.y2) <= 300 && jo(6, 0) && (t = 6);
                        jo(7, 0) && (!(Gt.shameCount > 0 && 45 != Gt.skinIndex && Gt.health > 5 + po() && Zr - wa >= 8) || si && function() {
                            if (!si) return;
                            let t = 0;
                            if (1 == na[si.sid]) {
                                let e = si.weapons[0] ? si.weapons[0] : null;
                                let n = 0;
                                null != e ? n = si.weaponVariants[e] : (n = 3, e = 5), t += 1.5 * it.weapons[e].dmg * tt.weaponVariants[n].val;
                            }
                            if (1 == ia[si.sid]) {
                                let e = si.weapons[1] ? si.weapons[1] : 15;
                                null != it.weapons[e].projectile ? t += it.projectiles[it.weapons[e].projectile].dmg : t += it.weapons[e].dmg * tt.weaponVariants[si.weaponVariants[e]].val;
                            }
                            1 == ra[si.sid] && (t += 25);
                            if (t >= 100) return !0;
                        }() || (t = 7));
                        (Va || Lr && ha > 0) && jo(6, 0) && (t = 6);
                        V && (C ? 1 == ia[Gt.sid] && F || 1 == ia[Gt.sid] && L && !hitPrim ? jo(40, 0) && (t = 40) : 1 != na[Gt.sid] || F || jo(40, 0) && (t = 40) : ca < 9 ? 1 == na[Gt.sid] && (Br ? io ? jo(7, 0) && (t = 7) : jo(40, 0) && (t = 40) : ca < 8 && si && J.getDistance(Gt.xVel, Gt.yVel, si.xVel, si.yVel) <= 63 + it.weapons[ca].range ? jo(7, 0) && (t = 7) : jo(40, 0) && (t = 40)) : 11 != ca && 1 == ia[Gt.sid] && (10 == ca ? jo(40, 0) && (t = 40) : jo(20, 0) && (t = 20)));
                        let e = 0;
                        let n = Go('combat_acc_dist') || Z.combat_acc_dist || 300;
                        si && J.getDistance(Gt.x2, Gt.y2, si.x2, si.y2) <= n ? (R = !0, e = h ? 11 : jo(21, 1) && si && J.getDistance(Gt.x2, Gt.y2, si.x2, si.y2) <= 150 ? 21 : jo(19, 1) ? 19 : 0) : (jo(11, 1) && (e = 11),
                        8 == Gt.weapons[0] && jo(11, 1) ? e = 11 : R = !1);
                        si && (S = Ra.filter(t => 15 == t.id && J.getDistance(si.x2, si.y2, t.x, t.y) <= 50 && (t.owner.sid == Gt.sid || Ho(t.owner.sid)))[0]);
                        Gt && (g = Ra.filter(t => 15 == t.id && J.getDistance(Gt.x2, Gt.y2, t.x, t.y) <= 50 && (t.owner.sid == !Gt.sid || !Ho(t.owner.sid)))[0]);
                        if (Gt && g && si && Z.evadeKnockback) {
                            const t = Ra.filter(t => t.id > 5 && t.id < 10 && J.getDistance(Gt.x2, Gt.y2, t.x, t.y) <= 200 && t.owner.sid != Gt.sid && !Ho(t.owner.sid));
                            si && (S = Ra.filter(t => 15 == t.id && J.getDistance(si.x2, si.y2, t.x, t.y) <= 50 && (t.owner.sid == Gt.sid || Ho(t.owner.sid)))[0]);
                            const e = t.some(t => J.getDistance(Gt.x2, Gt.y2, t.x, t.y) <= 35 + t.scale);
                            const n = g.health <= 350;
                            const i = J.getDistance(Gt.x2, Gt.y2, si.x2, si.y2) <= 160;
                            t.length > 0 && n && !S && i && 1 == na[Gt.sid] && !e && (Br = !1, fo = [ "primary", "stop" ]);
                        }
                        try {
                            si && mi(), Z.SpikeMidKnockback && si && bo && bo(si) && function() {
                                const t = vo(si);
                                if (!t) return;
                                const e = J.getDistance(t[0].x, t[0].y, t[1].x, t[1].y);
                                if (e > 110 || e < 40) return;
                                const n = go(t[0], t[1]);
                                const i = Math.atan2(n.y - Gt.y2, n.x - Gt.x2);
                                so.autoAim = !0, Si(Gt.weapons[0]), Ai(1, i), Ai(0, i), vi.tickBase(() => {
                                    so.autoAim = !1;
                                }, 1), getSetting("chatlog") && _t("Spike -> Midpoint", "");
                            }();
                        } catch (t) {}
                        ho.primary && jo(7, 0) && (t = 7);
                        ho.secondary && jo(40, 0) && (t = 40);
                        jo(6, 0) && (Ua || qa || Za || La || Fa) && (t = 6);
                        Aa || (So(t), Ao(e));
                    }(), ma = !1, Zo();
                    for (let t of oa) if (!t.preplace) {
                        _o(t.id, t.angle);
                        try {
                            (!Gt || t.id !== Gt.items[3] && t.id !== Gt.items[0]) && xo(t.x, t.y - 10, "autoplace", "#ffd54d");
                        } catch (t) {}
                        zo(t.id, t.angle);
                    }
                    let e = ci();
                    (oa.length > 0 || t || Math.abs(Gt.d2 - e) > .3) && i.send("D", e);
                } else oa = [], fa.length > 0 && (_t(`Mod: Predict Damages before death ${JSON.stringify(no)}`, "#ffffff"),
                _t(`Mod: Damages before death ${JSON.stringify(fa)}`, "#ffffff"), fa = []);
                for (let t of zt) t.spikeDamage <= 0 || (t.spikeDamage = 0);
                try {
                    for (let t of zt) try {
                        Ga[t.sid] = 6 == t.skinIndex;
                    } catch (t) {}
                } catch (t) {}
                try {
                    for (let t of zt) try {
                        Wa[t.sid] = 22 == t.skinIndex;
                    } catch (t) {}
                } catch (t) {}
            }), setTimeout(function() {
                for (let t of oa) if (t.preplace) {
                    _o(t.id, t.angle);
                    try {
                        xo(t.x, t.y - 10, "PREPLACE", "#4fc3ff");
                    } catch (t) {}
                    i.send("D", ci());
                }
            }, 1), setTimeout(function() {
                for (let t of oa) if (t.preplace) {
                    _o(t.id, t.angle);
                    try {
                        xo(t.x, t.y - 10, "serversync", "#be4fffff");
                    } catch (t) {}
                    i.send("D", ci());
                }
            }, 111.1111111111111 - window.pingTime), setTimeout(function() {
                for (let t of oa) if (t.preplace) {
                    _o(t.id, t.angle);
                    try {
                        xo(t.x, t.y - 10, "serverSYNC", "#2f00ffff");
                    } catch (t) {}
                    i.send("D", ci());
                }
            }, 111.1111111111111 - js), fs && null !== ds && 'sync' == hs.mode && zt.forEach(t => {
                if (t.sid.toString() == ds) if (ms.isInTrap(t.sid)) i.send("9", Math.atan2(t.y2 - Gt.y2, t.x2 - Gt.x2), 1); else {
                    let e = 80, n = t.x2, r = t.y2, a = Math.atan2(Gt.y2 - r, Gt.x2 - n);
                    a -= .1;
                    const o = n + e * Math.cos(a), s = r + e * Math.sin(a);
                    i.send("9", Math.atan2(s - Gt.y2, o - Gt.x2), 1);
                }
            });
        }
        let bs;
        function ks() {
            if (uo) {
                if (11 == Gt.tailIndex) return !0;
            } else if (ca < 8 && 11 == Gt.tailIndex) return !0;
        }
        function ys(t, e) {
            if (!t) return null;
            const n = t.weapons[0] || 5;
            const i = t.weapons[1] || 15;
            const r = t.weaponVariants[n] ?? 2;
            const a = t.weaponVariants[i] ?? 2;
            var o = 1;
            t == Gt ? jo(40, 0) && (o = 3.3) : o = 3.3;
            const s = 0, c = 1, l = 2, u = 3, f = 4, d = 5;
            const h = 6, m = 7, p = 8, v = 9, g = 10, b = 11;
            const k = 12, y = 13, w = 14, _ = 15;
            const x = t => tt.weaponVariants[t]?.val || 1;
            return "secondaryWeapon" == e ? {
                [v]: "bow",
                [g]: "hammer",
                [b]: "shield",
                [k]: "crossbow",
                [y]: "repeater crossbow",
                [w]: "mcgrabby",
                [_]: "musket"
            }[i] : "primaryWeapon" == e ? {
                [s]: "tool hammer",
                [c]: "axe",
                [l]: "great axe",
                [u]: "short sword",
                [f]: "katana",
                [d]: "polearm",
                [h]: "bat",
                [m]: "daggers",
                [p]: "stick"
            }[n] : "primaryVariant" == e ? r : "secondaryVariant" == e ? a : "primaryRange" == e ? it.weapons[n].range : "secondaryRange" == e ? it.weapons[i].range : "primaryDmg" == e ? 1.5 * it.weapons[n].dmg * x(r) : "primaryStructureDmg" == e ? it.weapons[n].dmg * (it.weapons[n].sDmg || 1) * x(r) * o : "secondaryDmg" == e ? 10 == i ? 1.5 * it.weapons[i].dmg * x(a) : 9 == i ? 15 : 12 == i ? 30 : 13 == i ? 35 : 15 == i ? 50 : 0 : "secondaryStructureDmg" == e ? 10 == i ? it.weapons[i].dmg * (it.weapons[i].sDmg || 1) * x(a) * o : 0 : "primaryKnockback" == e ? it.weapons[n].knock || 0 : null;
        }
        function ws(t) {
            for (var e = 0; e < zt.length; ++e) if (zt[e].sid == t) return zt[e];
            return null;
        }
        function _s(t) {
            for (var e = 0; e < Ct.length; ++e) if (Ct[e].sid == t) return Ct[e];
            return null;
        }
        function xs(t) {
            for (var e = 0; e < $t.length; ++e) if ($t[e].sid == t) return $t[e];
            return null;
        }
        let Ms = [];
        let js = 1 / 0;
        let Ss = 0;
        let As = !0;
        var Ts = -1;
        function Ds() {
            var t = Date.now() - Ts;
            window.pingTime = t, As ? As = !1 : (Ms.length > 200 && (Ms = []), Ms.push(t), t > Ss && (Ss = t)),
            je.innerText = `Ping: ${window.pingTime} ms | Min: ${js} ms | Max: ${Ss} ms`;
        }
        function Ps() {
            Ts = Date.now(), i.send("0");
        }
        function Bs(t) {
            if (!(t < 0)) {
                var e = Math.floor(t / 60);
                var n = t % 60;
                n = ("0" + n).slice(-2), Se.innerText = "Server restarting in " + e + ":" + n, Se.hidden = !1;
            }
        }
        var Is;
        function Os(t) {
            window.open(t, "_blank");
        }
        Is = tt.mapScale / 2, nn.add(0, Is, Is + 200, 0, tt.treeScales[3], 0), nn.add(1, Is, Is - 480, 0, tt.treeScales[3], 0),
        nn.add(2, Is + 300, Is + 450, 0, tt.treeScales[3], 0), nn.add(3, Is - 950, Is - 130, 0, tt.treeScales[2], 0),
        nn.add(4, Is - 750, Is - 400, 0, tt.treeScales[3], 0), nn.add(5, Is - 700, Is + 400, 0, tt.treeScales[2], 0),
        nn.add(6, Is + 800, Is - 200, 0, tt.treeScales[3], 0), nn.add(7, Is - 260, Is + 340, 0, tt.bushScales[3], 1),
        nn.add(8, Is + 760, Is + 310, 0, tt.bushScales[3], 1), nn.add(9, Is - 800, Is + 100, 0, tt.bushScales[3], 1),
        nn.add(10, Is - 800, Is + 300, 0, it.list[4].scale, it.list[4].id, it.list[10]),
        nn.add(11, Is + 650, Is - 390, 0, it.list[4].scale, it.list[4].id, it.list[10]),
        nn.add(12, Is - 400, Is - 450, 0, tt.rockScales[2], 2), function t() {
            Ot = Date.now(), It = Ot - Ht, Ht = Ot, qi(), requestAnimationFrame(t);
        }(), window.openLink = Os, window.aJoinReq = _n, window.follmoo = function() {
            Tt || (Tt = !0, St("moofoll", 1));
        }, window.kickFromClan = xn, window.sendJoin = Mn, window.leaveAlliance = Sn, window.createAlliance = jn,
        window.storeBuy = Un, window.storeEquip = $n, window.showItemInfo = dn, window.selectSkinColor = function(t) {
            re = t, ie = 10 == t ? "__lookupGetter__" : t, qn();
        }, window.changeStoreIndex = function(t) {
            Cn != t && (Cn = t, Rn());
        }, window.config = tt;
    },
    "./src/js/config.js": function(t, e, n) {
        (function(e) {
            t.exports.maxScreenWidth = 1920, t.exports.maxScreenHeight = 1080, t.exports.serverUpdateRate = 9,
            t.exports.tickRate = 1e3 / t.exports.serverUpdateRate, t.exports.maxPlayers = 1 / 0,
            t.exports.maxPlayersHard = 1 / 0, t.exports.collisionDepth = 6, t.exports.minimapRate = 3e3,
            t.exports.colGrid = 10, t.exports.clientSendRate = 5, t.exports.healthBarWidth = 50,
            t.exports.healthBarPad = 4.5, t.exports.iconPadding = 15, t.exports.iconPad = .9,
            t.exports.deathFadeout = 0, t.exports.crownIconScale = 60, t.exports.crownPad = 35,
            t.exports.chatCountdown = 3e3, t.exports.chatCooldown = 500, t.exports.inSandbox = e && "mm_exp" === e.env.VULTR_SCHEME,
            t.exports.isSandbox = "sandbox.moomoo.io" == window.location.hostname, t.exports.maxAge = 100,
            t.exports.gatherAngle = Math.PI / 2.6, t.exports.gatherWiggle = 10, t.exports.hitReturnRatio = .25,
            t.exports.hitAngle = Math.PI / 2, t.exports.playerScale = 35, t.exports.playerSpeed = .0016,
            t.exports.playerDecel = .993, t.exports.nameY = 34, t.exports.skinColors = [ "#bf8f54", "#cbb091", "#896c4b", "#fadadc", "#ececec", "#c37373", "#4c4c4c", "#ecaff7", "#738cc3", "#8bc373", "#91b2db" ],
            t.exports.animalCount = 7, t.exports.aiTurnRandom = .06, t.exports.cowNames = [ "Sid", "Steph", "Bmoe", "Romn", "Jononthecool", "Fiona", "Vince", "Nathan", "Nick", "Flappy", "Ronald", "Otis", "Pepe", "Mc Donald", "Theo", "Fabz", "Oliver", "Jeff", "Jimmy", "Helena", "Reaper", "Ben", "Alan", "Naomi", "XYZ", "Clever", "Jeremy", "Mike", "Destined", "Stallion", "Allison", "Meaty", "Sophia", "Vaja", "Joey", "Pendy", "Murdoch", "Theo", "Jared", "July", "Sonia", "Mel", "Dexter", "Quinn", "Milky" ],
            t.exports.shieldAngle = Math.PI / 3, t.exports.weaponVariants = [ {
                id: 0,
                src: "",
                xp: 0,
                val: 1
            }, {
                id: 1,
                src: "_g",
                xp: 3e3,
                val: 1.1
            }, {
                id: 2,
                src: "_d",
                xp: 7e3,
                val: 1.18
            }, {
                id: 3,
                src: "_r",
                poison: !0,
                xp: 12e3,
                val: 1.18
            } ], t.exports.fetchVariant = function(e) {
                var n = e.weaponXP[e.weaponIndex] || 0;
                for (var i = t.exports.weaponVariants.length - 1; i >= 0; --i) if (n >= t.exports.weaponVariants[i].xp) return t.exports.weaponVariants[i];
            }, t.exports.resourceTypes = [ "wood", "food", "stone", "points" ], t.exports.areaCount = 7,
            t.exports.treesPerArea = 9, t.exports.bushesPerArea = 3, t.exports.totalRocks = 32,
            t.exports.goldOres = 7, t.exports.riverWidth = 724, t.exports.riverPadding = 114,
            t.exports.waterCurrent = .0011, t.exports.waveSpeed = 1e-4, t.exports.waveMax = 1.3,
            t.exports.treeScales = [ 150, 160, 165, 175 ], t.exports.bushScales = [ 80, 85, 95 ],
            t.exports.rockScales = [ 80, 85, 90 ], t.exports.snowBiomeTop = 2400, t.exports.snowSpeed = .75,
            t.exports.maxNameLength = 15, t.exports.mapScale = 14400, t.exports.mapPingScale = 40,
            t.exports.mapPingTime = 2200;
        }).call(this, n("./node_modules/process/browser.js"));
    },
    "./src/js/data/ai.js": function(t, e) {
        var n = 2 * Math.PI;
        t.exports = function(t, e, i, r, a, o, s, c) {
            this.sid = t, this.isAI = !0, this.nameIndex = a.randInt(0, o.cowNames.length - 1),
            this.init = function(t, e, n, i, r) {
                this.x = t, this.y = e, this.startX = r.fixedSpawn ? t : null, this.startY = r.fixedSpawn ? e : null,
                this.xVel = 0, this.yVel = 0, this.zIndex = 0, this.dir = n, this.dirPlus = 0, this.index = i,
                this.src = r.src, r.name && (this.name = r.name), this.weightM = r.weightM, this.speed = r.speed,
                this.killScore = r.killScore, this.turnSpeed = r.turnSpeed, this.scale = r.scale,
                this.maxHealth = r.health, this.leapForce = r.leapForce, this.health = this.maxHealth,
                this.chargePlayer = r.chargePlayer, this.viewRange = r.viewRange, this.drop = r.drop,
                this.dmg = r.dmg, this.hostile = r.hostile, this.dontRun = r.dontRun, this.hitRange = r.hitRange,
                this.hitDelay = r.hitDelay, this.hitScare = r.hitScare, this.spriteMlt = r.spriteMlt,
                this.nameScale = r.nameScale, this.colDmg = r.colDmg, this.noTrap = r.noTrap, this.spawnDelay = r.spawnDelay,
                this.hitWait = 0, this.waitCount = 1e3, this.moveCount = 0, this.targetDir = 0,
                this.active = !0, this.alive = !0, this.runFrom = null, this.chargeTarget = null,
                this.dmgOverTime = {};
            };
            var l = 0;
            this.update = function(t) {
                if (this.active) {
                    if (this.spawnCounter) return this.spawnCounter -= t, void (this.spawnCounter <= 0 && (this.spawnCounter = 0,
                    this.x = this.startX || a.randInt(0, o.mapScale), this.y = this.startY || a.randInt(0, o.mapScale)));
                    (l -= t) <= 0 && (this.dmgOverTime.dmg && (this.changeHealth(-this.dmgOverTime.dmg, this.dmgOverTime.doer),
                    this.dmgOverTime.time -= 1, this.dmgOverTime.time <= 0 && (this.dmgOverTime.dmg = 0)),
                    l = 1e3);
                    var r = !1;
                    var s = 1;
                    if (!this.zIndex && !this.lockMove && this.y >= o.mapScale / 2 - o.riverWidth / 2 && this.y <= o.mapScale / 2 + o.riverWidth / 2 && (s = .33,
                    this.xVel += o.waterCurrent * t), this.lockMove) this.xVel = 0, this.yVel = 0; else if (this.waitCount > 0) {
                        if (this.waitCount -= t, this.waitCount <= 0) if (this.chargePlayer) {
                            var u, f, d;
                            for (var h = 0; h < i.length; ++h) !i[h].alive || i[h].skin && i[h].skin.bullRepel || (d = a.getDistance(this.x, this.y, i[h].x, i[h].y)) <= this.viewRange && (!u || d < f) && (f = d,
                            u = i[h]);
                            u ? (this.chargeTarget = u, this.moveCount = a.randInt(8e3, 12e3)) : (this.moveCount = a.randInt(1e3, 2e3),
                            this.targetDir = a.randFloat(-Math.PI, Math.PI));
                        } else this.moveCount = a.randInt(4e3, 1e4), this.targetDir = a.randFloat(-Math.PI, Math.PI);
                    } else if (this.moveCount > 0) {
                        var m = this.speed * s;
                        if (this.runFrom && this.runFrom.active && (!this.runFrom.isPlayer || this.runFrom.alive) ? (this.targetDir = a.getDirection(this.x, this.y, this.runFrom.x, this.runFrom.y),
                        m *= 1.42) : this.chargeTarget && this.chargeTarget.alive && (this.targetDir = a.getDirection(this.chargeTarget.x, this.chargeTarget.y, this.x, this.y),
                        m *= 1.75, r = !0), this.hitWait && (m *= .3), this.dir != this.targetDir) {
                            this.dir %= n;
                            var p = (this.dir - this.targetDir + n) % n;
                            var v = Math.min(Math.abs(p - n), p, this.turnSpeed * t);
                            var g = p - Math.PI >= 0 ? 1 : -1;
                            this.dir += g * v + n;
                        }
                        this.dir %= n, this.xVel += m * t * Math.cos(this.dir), this.yVel += m * t * Math.sin(this.dir),
                        this.moveCount -= t, this.moveCount <= 0 && (this.runFrom = null, this.chargeTarget = null,
                        this.waitCount = this.hostile ? 1500 : a.randInt(1500, 6e3));
                    }
                    this.zIndex = 0, this.lockMove = !1;
                    var b = a.getDistance(0, 0, this.xVel * t, this.yVel * t);
                    var k = Math.min(4, Math.max(1, Math.round(b / 40)));
                    var y = 1 / k;
                    for (h = 0; h < k; ++h) {
                        this.xVel && (this.x += this.xVel * t * y), this.yVel && (this.y += this.yVel * t * y),
                        M = e.getGridArrays(this.x, this.y, this.scale);
                        for (var w = 0; w < M.length; ++w) for (var _ = 0; _ < M[w].length; ++_) M[w][_].active && e.checkCollision(this, M[w][_], y);
                    }
                    var x = !1;
                    if (this.hitWait > 0 && (this.hitWait -= t, this.hitWait <= 0)) {
                        x = !0, this.hitWait = 0, this.leapForce && !a.randInt(0, 2) && (this.xVel += this.leapForce * Math.cos(this.dir),
                        this.yVel += this.leapForce * Math.sin(this.dir));
                        var M = e.getGridArrays(this.x, this.y, this.hitRange);
                        for (var j = 0; j < M.length; ++j) for (w = 0; w < M[j].length; ++w) (S = M[j][w]).health && (A = a.getDistance(this.x, this.y, S.x, S.y)) < S.scale + this.hitRange && (S.changeHealth(5 * -this.dmg) && e.disableObj(S),
                        e.hitObj(S, a.getDirection(this.x, this.y, S.x, S.y)));
                        for (w = 0; w < i.length; ++w) i[w].canSee(this) && c.send(i[w].id, "J", this.sid);
                    }
                    var S, A, T;
                    if (r || x) for (h = 0; h < i.length; ++h) (S = i[h]) && S.alive && (A = a.getDistance(this.x, this.y, S.x, S.y),
                    this.hitRange ? !this.hitWait && A <= this.hitRange + S.scale && (x ? (T = a.getDirection(S.x, S.y, this.x, this.y),
                    S.changeHealth(-this.dmg), S.xVel += .6 * Math.cos(T), S.yVel += .6 * Math.sin(T),
                    this.runFrom = null, this.chargeTarget = null, this.waitCount = 3e3, this.hitWait = a.randInt(0, 2) ? 0 : 600) : this.hitWait = this.hitDelay) : A <= this.scale + S.scale && (T = a.getDirection(S.x, S.y, this.x, this.y),
                    S.changeHealth(-this.dmg), S.xVel += .55 * Math.cos(T), S.yVel += .55 * Math.sin(T)));
                    this.xVel && (this.xVel *= Math.pow(o.playerDecel, t)), this.yVel && (this.yVel *= Math.pow(o.playerDecel, t));
                    var D = this.scale;
                    this.x - D < 0 ? (this.x = D, this.xVel = 0) : this.x + D > o.mapScale && (this.x = o.mapScale - D,
                    this.xVel = 0), this.y - D < 0 ? (this.y = D, this.yVel = 0) : this.y + D > o.mapScale && (this.y = o.mapScale - D,
                    this.yVel = 0);
                }
            }, this.canSee = function(t) {
                if (!t) return !1;
                if (t.skin && t.skin.invisTimer && t.noMovTimer >= t.skin.invisTimer) return !1;
                var e = Math.abs(t.x - this.x) - t.scale;
                var n = Math.abs(t.y - this.y) - t.scale;
                return e <= o.maxScreenWidth / 2 * 1.3 && n <= o.maxScreenHeight / 2 * 1.3;
            };
            var u = 0;
            var f = 0;
            this.animate = function(t) {
                this.animTime > 0 && (this.animTime -= t, this.animTime <= 0 ? (this.animTime = 0,
                this.dirPlus = 0, u = 0, f = 0) : 0 == f ? (u += t / (this.animSpeed * o.hitReturnRatio),
                this.dirPlus = a.lerp(0, this.targetAngle, Math.min(1, u)), u >= 1 && (u = 1, f = 1)) : (u -= t / (this.animSpeed * (1 - o.hitReturnRatio)),
                this.dirPlus = a.lerp(0, this.targetAngle, Math.max(0, u))));
            }, this.startAnim = function() {
                this.animTime = this.animSpeed = 600, this.targetAngle = .8 * Math.PI, u = 0, f = 0;
            }, this.changeHealth = function(t, e, n) {
                if (this.active && (this.health += t, n && (this.hitScare && !a.randInt(0, this.hitScare) ? (this.runFrom = n,
                this.waitCount = 0, this.moveCount = 2e3) : this.hostile && this.chargePlayer && n.isPlayer ? (this.chargeTarget = n,
                this.waitCount = 0, this.moveCount = 8e3) : this.dontRun || (this.runFrom = n, this.waitCount = 0,
                this.moveCount = 2e3)), t < 0 && this.hitRange && a.randInt(0, 1) && (this.hitWait = 500),
                e && e.canSee(this) && t < 0 && c.send(e.id, "8", Math.round(this.x), Math.round(this.y), Math.round(-t), 1),
                this.health <= 0 && (this.spawnDelay ? (this.spawnCounter = this.spawnDelay, this.x = -1e6,
                this.y = -1e6) : (this.x = this.startX || a.randInt(0, o.mapScale), this.y = this.startY || a.randInt(0, o.mapScale)),
                this.health = this.maxHealth, this.runFrom = null, e && (s(e, this.killScore), this.drop)))) for (var i = 0; i < this.drop.length; ) e.addResource(o.resourceTypes.indexOf(this.drop[i]), this.drop[i + 1]),
                i += 2;
            };
        };
    },
    "./src/js/data/aiManager.js": function(t, e) {
        t.exports = function(t, e, n, i, r, a, o, s, c) {
            this.aiTypes = [ {
                id: 0,
                src: "cow_1",
                killScore: 150,
                health: 500,
                weightM: .8,
                speed: 95e-5,
                turnSpeed: .001,
                scale: 72,
                drop: [ "food", 50 ]
            }, {
                id: 1,
                src: "pig_1",
                killScore: 200,
                health: 800,
                weightM: .6,
                speed: 85e-5,
                turnSpeed: .001,
                scale: 72,
                drop: [ "food", 80 ]
            }, {
                id: 2,
                name: "Bull",
                src: "bull_2",
                hostile: !0,
                dmg: 20,
                killScore: 1e3,
                health: 1800,
                weightM: .5,
                speed: 94e-5,
                turnSpeed: 74e-5,
                scale: 78,
                viewRange: 800,
                chargePlayer: !0,
                drop: [ "food", 100 ]
            }, {
                id: 3,
                name: "Bully",
                src: "bull_1",
                hostile: !0,
                dmg: 20,
                killScore: 2e3,
                health: 2800,
                weightM: .45,
                speed: .001,
                turnSpeed: 8e-4,
                scale: 90,
                viewRange: 900,
                chargePlayer: !0,
                drop: [ "food", 400 ]
            }, {
                id: 4,
                name: "Wolf",
                src: "wolf_1",
                hostile: !0,
                dmg: 8,
                killScore: 500,
                health: 300,
                weightM: .45,
                speed: .001,
                turnSpeed: .002,
                scale: 84,
                viewRange: 800,
                chargePlayer: !0,
                drop: [ "food", 200 ]
            }, {
                id: 5,
                name: "Quack",
                src: "chicken_1",
                dmg: 8,
                killScore: 2e3,
                noTrap: !0,
                health: 300,
                weightM: .2,
                speed: .0018,
                turnSpeed: .006,
                scale: 70,
                drop: [ "food", 100 ]
            }, {
                id: 6,
                name: "MOOSTAFA",
                nameScale: 50,
                src: "enemy",
                hostile: !0,
                dontRun: !0,
                fixedSpawn: !0,
                spawnDelay: 6e4,
                noTrap: !0,
                colDmg: 100,
                dmg: 40,
                killScore: 8e3,
                health: 18e3,
                weightM: .4,
                speed: 7e-4,
                turnSpeed: .01,
                scale: 80,
                spriteMlt: 1.8,
                leapForce: .9,
                viewRange: 1e3,
                hitRange: 210,
                hitDelay: 1e3,
                chargePlayer: !0,
                drop: [ "food", 100 ]
            }, {
                id: 7,
                name: "Treasure",
                hostile: !0,
                nameScale: 35,
                src: "crate_1",
                fixedSpawn: !0,
                spawnDelay: 12e4,
                colDmg: 200,
                killScore: 5e3,
                health: 2e4,
                weightM: .1,
                speed: 0,
                turnSpeed: 0,
                scale: 70,
                spriteMlt: 1
            }, {
                id: 8,
                name: "MOOFIE",
                src: "wolf_2",
                hostile: !0,
                fixedSpawn: !0,
                dontRun: !0,
                hitScare: 4,
                spawnDelay: 3e4,
                noTrap: !0,
                nameScale: 35,
                dmg: 10,
                colDmg: 100,
                killScore: 3e3,
                health: 7e3,
                weightM: .45,
                speed: .0015,
                turnSpeed: .002,
                scale: 90,
                viewRange: 800,
                chargePlayer: !0,
                drop: [ "food", 1e3 ]
            }, {
                id: 9,
                name: "??MOOFIE",
                src: "wolf_2",
                hostile: !0,
                fixedSpawn: !0,
                dontRun: !0,
                hitScare: 50,
                spawnDelay: 6e4,
                noTrap: !0,
                nameScale: 35,
                dmg: 12,
                colDmg: 100,
                killScore: 3e3,
                health: 9e3,
                weightM: .45,
                speed: .0015,
                turnSpeed: .0025,
                scale: 94,
                viewRange: 1440,
                chargePlayer: !0,
                drop: [ "food", 3e3 ],
                minSpawnRange: .85,
                maxSpawnRange: .9
            }, {
                id: 10,
                name: "??Wolf",
                src: "wolf_1",
                hostile: !0,
                fixedSpawn: !0,
                dontRun: !0,
                hitScare: 50,
                spawnDelay: 3e4,
                dmg: 10,
                killScore: 700,
                health: 500,
                weightM: .45,
                speed: .00115,
                turnSpeed: .0025,
                scale: 88,
                viewRange: 1440,
                chargePlayer: !0,
                drop: [ "food", 400 ],
                minSpawnRange: .85,
                maxSpawnRange: .9
            }, {
                id: 11,
                name: "??Bully",
                src: "bull_1",
                hostile: !0,
                fixedSpawn: !0,
                dontRun: !0,
                hitScare: 50,
                dmg: 20,
                killScore: 5e3,
                health: 5e3,
                spawnDelay: 1e5,
                weightM: .45,
                speed: .00115,
                turnSpeed: .0025,
                scale: 94,
                viewRange: 1440,
                chargePlayer: !0,
                drop: [ "food", 800 ],
                minSpawnRange: .85,
                maxSpawnRange: .9
            } ], this.spawn = function(l, u, f, d) {
                var h;
                for (var m = 0; m < t.length; ++m) if (!t[m].active) {
                    h = t[m];
                    break;
                }
                return h || (h = new e(t.length, r, n, i, o, a, s, c), t.push(h)), h.init(l, u, f, d, this.aiTypes[d]),
                h;
            };
        };
    },
    "./src/js/data/gameObject.js": function(t, e) {
        t.exports = function(t) {
            this.sid = t, this.init = function(t, e, n, i, r, a, o) {
                a = a || {}, this.sentTo = {}, this.gridLocations = [], this.active = !0, this.doUpdate = a.doUpdate,
                this.x = t, this.y = e, this.dir = n, this.xWiggle = 0, this.yWiggle = 0, this.scale = i,
                this.type = r, this.id = a.id, this.owner = o, this.name = a.name, this.isItem = null != this.id,
                this.group = a.group, this.health = a.health, this.maxHealth = a.health, this.layer = 2,
                null != this.group ? this.layer = this.group.layer : 0 == this.type ? this.layer = 3 : 2 == this.type ? this.layer = 0 : 4 == this.type && (this.layer = -1),
                this.colDiv = a.colDiv || 1, this.blocker = a.blocker, this.ignoreCollision = a.ignoreCollision,
                this.dontGather = a.dontGather, this.hideFromEnemy = a.hideFromEnemy, this.friction = a.friction,
                this.projDmg = a.projDmg, this.dmg = a.dmg, this.pDmg = a.pDmg, this.pps = a.pps,
                this.zIndex = a.zIndex || 0, this.turnSpeed = a.turnSpeed, this.req = a.req, this.trap = a.trap,
                this.healCol = a.healCol, this.teleport = a.teleport, this.boostSpeed = a.boostSpeed,
                this.projectile = a.projectile, this.shootRange = a.shootRange, this.shootRate = a.shootRate,
                this.shootCount = this.shootRate, this.spawnPoint = a.spawnPoint;
            }, this.changeHealth = function(t, e) {
                return this.health += t, this.health <= 0;
            }, this.getScale = function(t, e) {
                return t = t || 1, this.scale * (this.isItem || 2 == this.type || 3 == this.type || 4 == this.type ? 1 : .6 * t) * (e ? 1 : this.colDiv);
            }, this.visibleToPlayer = function(t) {
                return !this.hideFromEnemy || this.owner && (this.owner == t || this.owner.team && t.team == this.owner.team);
            }, this.update = function(t) {
                this.active && (this.xWiggle && (this.xWiggle *= Math.pow(.99, t)), this.yWiggle && (this.yWiggle *= Math.pow(.99, t)));
            };
        };
    },
    "./src/js/data/items.js": function(t, e) {
        t.exports.groups = [ {
            id: 0,
            name: "food",
            layer: 0
        }, {
            id: 1,
            name: "walls",
            place: !0,
            limit: 30,
            layer: 0
        }, {
            id: 2,
            name: "spikes",
            place: !0,
            limit: 15,
            layer: 0
        }, {
            id: 3,
            name: "mill",
            place: !0,
            limit: 7,
            sandboxLimit: 299,
            layer: 1
        }, {
            id: 4,
            name: "mine",
            place: !0,
            limit: 1,
            layer: 0
        }, {
            id: 5,
            name: "trap",
            place: !0,
            limit: 6,
            layer: -1
        }, {
            id: 6,
            name: "booster",
            place: !0,
            limit: 12,
            sandboxLimit: 299,
            layer: -1
        }, {
            id: 7,
            name: "turret",
            place: !0,
            limit: 2,
            layer: 1
        }, {
            id: 8,
            name: "watchtower",
            place: !0,
            limit: 12,
            layer: 1
        }, {
            id: 9,
            name: "buff",
            place: !0,
            limit: 4,
            layer: -1
        }, {
            id: 10,
            name: "spawn",
            place: !0,
            limit: 1,
            layer: -1
        }, {
            id: 11,
            name: "sapling",
            place: !0,
            limit: 2,
            layer: 0
        }, {
            id: 12,
            name: "blocker",
            place: !0,
            limit: 3,
            layer: -1
        }, {
            id: 13,
            name: "teleporter",
            place: !0,
            limit: 2,
            sandboxLimit: 299,
            layer: -1
        } ], e.projectiles = [ {
            indx: 0,
            layer: 0,
            src: "arrow_1",
            dmg: 25,
            speed: 1.6,
            scale: 103,
            range: 1e3
        }, {
            indx: 1,
            layer: 1,
            dmg: 25,
            scale: 20
        }, {
            indx: 0,
            layer: 0,
            src: "arrow_1",
            dmg: 35,
            speed: 2.5,
            scale: 103,
            range: 1200
        }, {
            indx: 0,
            layer: 0,
            src: "arrow_1",
            dmg: 30,
            speed: 2,
            scale: 103,
            range: 1200
        }, {
            indx: 1,
            layer: 1,
            dmg: 16,
            scale: 20
        }, {
            indx: 0,
            layer: 0,
            src: "bullet_1",
            dmg: 50,
            speed: 3.6,
            scale: 160,
            range: 1400
        } ], e.weapons = [ {
            id: 0,
            type: 0,
            name: "tool hammer",
            desc: "tool for gathering all resources",
            src: "hammer_1",
            length: 140,
            width: 140,
            xOff: -3,
            yOff: 18,
            dmg: 25,
            range: 65,
            gather: 1,
            speed: 300
        }, {
            id: 1,
            type: 0,
            age: 2,
            name: "hand axe",
            desc: "gathers resources at a higher rate",
            src: "axe_1",
            length: 140,
            width: 140,
            xOff: 3,
            yOff: 24,
            dmg: 30,
            spdMult: 1,
            range: 70,
            gather: 2,
            speed: 400
        }, {
            id: 2,
            type: 0,
            age: 8,
            pre: 1,
            name: "great axe",
            desc: "deal more damage and gather more resources",
            src: "great_axe_1",
            length: 140,
            width: 140,
            xOff: -8,
            yOff: 25,
            dmg: 35,
            spdMult: 1,
            range: 75,
            gather: 4,
            speed: 400
        }, {
            id: 3,
            type: 0,
            age: 2,
            name: "short sword",
            desc: "increased attack power but slower move speed",
            src: "sword_1",
            iPad: 1.3,
            length: 130,
            width: 210,
            xOff: -8,
            yOff: 46,
            dmg: 35,
            spdMult: .85,
            range: 110,
            gather: 1,
            speed: 300
        }, {
            id: 4,
            type: 0,
            age: 8,
            pre: 3,
            name: "katana",
            desc: "greater range and damage",
            src: "samurai_1",
            iPad: 1.3,
            length: 130,
            width: 210,
            xOff: -8,
            yOff: 59,
            dmg: 40,
            spdMult: .8,
            range: 118,
            gather: 1,
            speed: 300
        }, {
            id: 5,
            type: 0,
            age: 2,
            name: "polearm",
            desc: "long range melee weapon",
            src: "spear_1",
            iPad: 1.3,
            length: 130,
            width: 210,
            xOff: -8,
            yOff: 53,
            dmg: 45,
            knock: .2,
            spdMult: .82,
            range: 142,
            gather: 1,
            speed: 700
        }, {
            id: 6,
            type: 0,
            age: 2,
            name: "bat",
            desc: "fast long range melee weapon",
            src: "bat_1",
            iPad: 1.3,
            length: 110,
            width: 180,
            xOff: -8,
            yOff: 53,
            dmg: 20,
            knock: .7,
            range: 110,
            gather: 1,
            speed: 300
        }, {
            id: 7,
            type: 0,
            age: 2,
            name: "daggers",
            desc: "really fast short range weapon",
            src: "dagger_1",
            iPad: .8,
            length: 110,
            width: 110,
            xOff: 18,
            yOff: 0,
            dmg: 20,
            knock: .1,
            range: 65,
            gather: 1,
            hitSlow: .1,
            spdMult: 1.13,
            speed: 100
        }, {
            id: 8,
            type: 0,
            age: 2,
            name: "stick",
            desc: "great for gathering but very weak",
            src: "stick_1",
            length: 140,
            width: 140,
            xOff: 3,
            yOff: 24,
            dmg: 1,
            spdMult: 1,
            range: 70,
            gather: 7,
            speed: 400
        }, {
            id: 9,
            type: 1,
            age: 6,
            name: "hunting bow",
            desc: "bow used for ranged combat and hunting",
            src: "bow_1",
            req: [ "wood", 4 ],
            length: 120,
            width: 120,
            xOff: -6,
            yOff: 0,
            projectile: 0,
            spdMult: .75,
            speed: 600
        }, {
            id: 10,
            type: 1,
            age: 6,
            name: "great hammer",
            desc: "hammer used for destroying structures",
            src: "great_hammer_1",
            length: 140,
            width: 140,
            xOff: -9,
            yOff: 25,
            dmg: 10,
            spdMult: .88,
            range: 75,
            sDmg: 7.5,
            gather: 1,
            speed: 400
        }, {
            id: 11,
            type: 1,
            age: 6,
            name: "wooden shield",
            desc: "blocks projectiles and reduces melee damage",
            src: "shield_1",
            length: 120,
            width: 120,
            shield: .2,
            xOff: 6,
            yOff: 0,
            spdMult: .7
        }, {
            id: 12,
            type: 1,
            age: 8,
            pre: 9,
            name: "crossbow",
            desc: "deals more damage and has greater range",
            src: "crossbow_1",
            req: [ "wood", 5 ],
            aboveHand: !0,
            armS: .75,
            length: 120,
            width: 120,
            xOff: -4,
            yOff: 0,
            projectile: 2,
            spdMult: .7,
            speed: 700
        }, {
            id: 13,
            type: 1,
            age: 9,
            pre: 12,
            name: "repeater crossbow",
            desc: "high firerate crossbow with reduced damage",
            src: "crossbow_2",
            req: [ "wood", 10 ],
            aboveHand: !0,
            armS: .75,
            length: 120,
            width: 120,
            xOff: -4,
            yOff: 0,
            projectile: 3,
            spdMult: .7,
            speed: 230
        }, {
            id: 14,
            type: 1,
            age: 6,
            name: "mc grabby",
            desc: "steals resources from enemies",
            src: "grab_1",
            length: 130,
            width: 210,
            xOff: -8,
            yOff: 53,
            dmg: 0,
            steal: 250,
            knock: .2,
            spdMult: 1.05,
            range: 125,
            gather: 0,
            speed: 700
        }, {
            id: 15,
            type: 1,
            age: 9,
            pre: 12,
            name: "musket",
            desc: "slow firerate but high damage and range",
            src: "musket_1",
            req: [ "stone", 10 ],
            aboveHand: !0,
            rec: .35,
            armS: .6,
            hndS: .3,
            hndD: 1.6,
            length: 205,
            width: 205,
            xOff: 25,
            yOff: 0,
            projectile: 5,
            hideProjectile: !0,
            spdMult: .6,
            speed: 1500
        } ], t.exports.list = [ {
            group: t.exports.groups[0],
            name: "apple",
            desc: "restores 20 health when consumed",
            req: [ "food", 10 ],
            consume: function(t) {
                return t.changeHealth(20, t);
            },
            heal: 20,
            scale: 22,
            holdOffset: 15
        }, {
            age: 3,
            group: t.exports.groups[0],
            name: "cookie",
            desc: "restores 40 health when consumed",
            req: [ "food", 15 ],
            consume: function(t) {
                return t.changeHealth(40, t);
            },
            heal: 40,
            scale: 27,
            holdOffset: 15
        }, {
            age: 7,
            group: t.exports.groups[0],
            name: "cheese",
            desc: "restores 30 health and another 50 over 5 seconds",
            req: [ "food", 25 ],
            consume: function(t) {
                return !!(t.changeHealth(30, t) || t.health < 100) && (t.dmgOverTime.dmg = -10,
                t.dmgOverTime.doer = t, t.dmgOverTime.time = 5, !0);
            },
            heal: 30,
            scale: 27,
            holdOffset: 15
        }, {
            group: t.exports.groups[1],
            name: "wood wall",
            desc: "provides protection for your village",
            req: [ "wood", 10 ],
            projDmg: !0,
            health: 380,
            scale: 50,
            holdOffset: 20,
            placeOffset: -5
        }, {
            age: 3,
            group: t.exports.groups[1],
            name: "stone wall",
            desc: "provides improved protection for your village",
            req: [ "stone", 25 ],
            health: 900,
            scale: 50,
            holdOffset: 20,
            placeOffset: -5
        }, {
            age: 7,
            group: t.exports.groups[1],
            name: "castle wall",
            desc: "provides powerful protection for your village",
            req: [ "stone", 35 ],
            health: 1500,
            scale: 52,
            holdOffset: 20,
            placeOffset: -5
        }, {
            group: t.exports.groups[2],
            name: "spikes",
            desc: "damages enemies when they touch them",
            req: [ "wood", 20, "stone", 5 ],
            health: 400,
            dmg: 20,
            scale: 49,
            spritePadding: -23,
            holdOffset: 8,
            placeOffset: -5
        }, {
            age: 5,
            group: t.exports.groups[2],
            name: "greater spikes",
            desc: "damages enemies when they touch them",
            req: [ "wood", 30, "stone", 10 ],
            health: 500,
            dmg: 35,
            scale: 52,
            spritePadding: -23,
            holdOffset: 8,
            placeOffset: -5
        }, {
            age: 9,
            group: t.exports.groups[2],
            name: "poison spikes",
            desc: "poisons enemies when they touch them",
            req: [ "wood", 35, "stone", 15 ],
            health: 600,
            dmg: 30,
            pDmg: 5,
            scale: 52,
            spritePadding: -23,
            holdOffset: 8,
            placeOffset: -5
        }, {
            age: 9,
            group: t.exports.groups[2],
            name: "spinning spikes",
            desc: "damages enemies when they touch them",
            req: [ "wood", 30, "stone", 20 ],
            health: 500,
            dmg: 45,
            turnSpeed: .003,
            scale: 52,
            spritePadding: -23,
            holdOffset: 8,
            placeOffset: -5
        }, {
            group: t.exports.groups[3],
            name: "windmill",
            desc: "generates gold over time",
            req: [ "wood", 50, "stone", 10 ],
            health: 400,
            pps: 1,
            turnSpeed: .0016,
            spritePadding: 25,
            iconLineMult: 12,
            scale: 45,
            holdOffset: 20,
            placeOffset: 5
        }, {
            age: 5,
            group: t.exports.groups[3],
            name: "faster windmill",
            desc: "generates more gold over time",
            req: [ "wood", 60, "stone", 20 ],
            health: 500,
            pps: 1.5,
            turnSpeed: .0025,
            spritePadding: 25,
            iconLineMult: 12,
            scale: 47,
            holdOffset: 20,
            placeOffset: 5
        }, {
            age: 8,
            group: t.exports.groups[3],
            name: "power mill",
            desc: "generates more gold over time",
            req: [ "wood", 100, "stone", 50 ],
            health: 800,
            pps: 2,
            turnSpeed: .005,
            spritePadding: 25,
            iconLineMult: 12,
            scale: 47,
            holdOffset: 20,
            placeOffset: 5
        }, {
            age: 5,
            group: t.exports.groups[4],
            type: 2,
            name: "mine",
            desc: "allows you to mine stone",
            req: [ "wood", 20, "stone", 100 ],
            iconLineMult: 12,
            scale: 65,
            holdOffset: 20,
            placeOffset: 0
        }, {
            age: 5,
            group: t.exports.groups[11],
            type: 0,
            name: "sapling",
            desc: "allows you to farm wood",
            req: [ "wood", 150 ],
            iconLineMult: 12,
            colDiv: .5,
            scale: 110,
            holdOffset: 50,
            placeOffset: -15
        }, {
            age: 4,
            group: t.exports.groups[5],
            name: "pit trap",
            desc: "pit that traps enemies if they walk over it",
            req: [ "wood", 30, "stone", 30 ],
            trap: !0,
            ignoreCollision: !0,
            hideFromEnemy: !0,
            health: 500,
            colDiv: .2,
            scale: 50,
            holdOffset: 20,
            placeOffset: -5
        }, {
            age: 4,
            group: t.exports.groups[6],
            name: "boost pad",
            desc: "provides boost when stepped on",
            req: [ "stone", 20, "wood", 5 ],
            ignoreCollision: !0,
            boostSpeed: 1.5,
            health: 150,
            colDiv: .7,
            scale: 45,
            holdOffset: 20,
            placeOffset: -5
        }, {
            age: 7,
            group: t.exports.groups[7],
            doUpdate: !0,
            name: "turret",
            desc: "defensive structure that shoots at enemies",
            req: [ "wood", 200, "stone", 150 ],
            health: 800,
            projectile: 1,
            shootRange: 700,
            shootRate: 2200,
            scale: 43,
            holdOffset: 20,
            placeOffset: -5
        }, {
            age: 7,
            group: t.exports.groups[8],
            name: "platform",
            desc: "platform to shoot over walls and cross over water",
            req: [ "wood", 20 ],
            ignoreCollision: !0,
            zIndex: 1,
            health: 300,
            scale: 43,
            holdOffset: 20,
            placeOffset: -5
        }, {
            age: 7,
            group: t.exports.groups[9],
            name: "healing pad",
            desc: "standing on it will slowly heal you",
            req: [ "wood", 30, "food", 10 ],
            ignoreCollision: !0,
            healCol: 15,
            health: 400,
            colDiv: .7,
            scale: 45,
            holdOffset: 20,
            placeOffset: -5
        }, {
            age: 9,
            group: t.exports.groups[10],
            name: "spawn pad",
            desc: "you will spawn here when you die but it will dissapear",
            req: [ "wood", 100, "stone", 100 ],
            health: 400,
            ignoreCollision: !0,
            spawnPoint: !0,
            scale: 45,
            holdOffset: 20,
            placeOffset: -5
        }, {
            age: 7,
            group: t.exports.groups[12],
            name: "blocker",
            desc: "blocks building in radius",
            req: [ "wood", 30, "stone", 25 ],
            ignoreCollision: !0,
            blocker: 300,
            health: 400,
            colDiv: .7,
            scale: 45,
            holdOffset: 20,
            placeOffset: -5
        }, {
            age: 7,
            group: t.exports.groups[13],
            name: "teleporter",
            desc: "teleports you to a random point on the map",
            req: [ "wood", 60, "stone", 60 ],
            ignoreCollision: !0,
            teleport: !0,
            health: 200,
            colDiv: .7,
            scale: 45,
            holdOffset: 20,
            placeOffset: -5
        } ];
        for (var n = 0; n < t.exports.list.length; ++n) t.exports.list[n].id = n;
        if ("undefined" != typeof window) ;
    },
    "./src/js/data/mapManager.js": function(t, e) {
        t.exports = {};
    },
    "./src/js/data/objectManager.js": function(t, e) {
        var n = Math.floor;
        var i = Math.abs;
        var r = Math.cos;
        var a = Math.sin;
        Math.pow;
        var o = Math.sqrt;
        t.exports = function(t, e, s, c, l, u) {
            var f, d;
            this.objects = e, this.grids = {}, this.updateObjects = [];
            var h = c.mapScale / c.colGrid;
            this.setObjectGrids = function(t) {
                var e = Math.min(c.mapScale, Math.max(0, t.x));
                var n = Math.min(c.mapScale, Math.max(0, t.y));
                for (var i = 0; i < c.colGrid; ++i) {
                    f = i * h;
                    for (var r = 0; r < c.colGrid; ++r) d = r * h, e + t.scale >= f && e - t.scale <= f + h && n + t.scale >= d && n - t.scale <= d + h && (this.grids[i + "_" + r] || (this.grids[i + "_" + r] = []),
                    this.grids[i + "_" + r].push(t), t.gridLocations.push(i + "_" + r));
                }
            }, this.removeObjGrid = function(t) {
                var e;
                for (var n = 0; n < t.gridLocations.length; ++n) (e = this.grids[t.gridLocations[n]].indexOf(t)) >= 0 && this.grids[t.gridLocations[n]].splice(e, 1);
            }, this.disableObj = function(t) {
                if (t.active = !1, u) {
                    t.owner && t.pps && (t.owner.pps -= t.pps), this.removeObjGrid(t);
                    var e = this.updateObjects.indexOf(t);
                    e >= 0 && this.updateObjects.splice(e, 1);
                }
            }, this.hitObj = function(t, e) {
                for (var n = 0; n < l.length; ++n) l[n].active && (t.sentTo[l[n].id] && (t.active ? l[n].canSee(t) && u.send(l[n].id, "L", s.fixTo(e, 1), t.sid) : u.send(l[n].id, "Q", t.sid)),
                t.active || t.owner != l[n] || l[n].changeItemCount(t.group.id, -1));
            };
            var m = [];
            var p;
            var v;
            this.getGridArrays = function(t, e, i) {
                return f = n(t / h), d = n(e / h), m.length = 0, t + i >= (f + 1) * h && ((p = this.grids[f + 1 + "_" + d]) && m.push(p),
                d && e - i <= d * h ? (p = this.grids[f + 1 + "_" + (d - 1)]) && m.push(p) : e + i >= (d + 1) * h && (p = this.grids[f + 1 + "_" + (d + 1)]) && m.push(p)),
                f && t - i <= f * h && ((p = this.grids[f - 1 + "_" + d]) && m.push(p), d && e - i <= d * h ? (p = this.grids[f - 1 + "_" + (d - 1)]) && m.push(p) : e + i >= (d + 1) * h && (p = this.grids[f - 1 + "_" + (d + 1)]) && m.push(p)),
                e + i >= (d + 1) * h && (p = this.grids[f + "_" + (d + 1)]) && m.push(p), d && e - i <= d * h && (p = this.grids[f + "_" + (d - 1)]) && m.push(p),
                m;
            }, this.add = function(n, i, r, a, o, s, c, l, f) {
                v = null;
                for (var d = 0; d < e.length; ++d) if (e[d].sid == n) {
                    v = e[d];
                    break;
                }
                if (!v) for (d = 0; d < e.length; ++d) if (!e[d].active) {
                    v = e[d];
                    break;
                }
                v || (v = new t(n), e.push(v)), l && (v.sid = n), v.init(i, r, a, o, s, c, f), u && (this.setObjectGrids(v),
                v.doUpdate && this.updateObjects.push(v));
            }, this.disableBySid = function(t) {
                for (const n of e) if (n.sid == t) {
                    e.splice(e.indexOf(n), 1);
                    break;
                }
            }, this.removeAllItems = function(t, n) {
                const i = e.filter(e => e.owner && e.owner.sid == t);
                for (const t of i) e.splice(e.indexOf(t), 1);
            }, this.fetchSpawnObj = function(t) {
                var n = null;
                for (var i = 0; i < e.length; ++i) if ((v = e[i]).active && v.owner && v.owner.sid == t && v.spawnPoint) {
                    n = [ v.x, v.y ], this.disableObj(v), u.broadcast("Q", v.sid), v.owner && v.owner.changeItemCount(v.group.id, -1);
                    break;
                }
                return n;
            }, this.checkItemLocation = function(t, e, n, i, r, a, o, l) {
                for (var u = 0; u < l.length; ++u) {
                    var f = l[u].blocker ? l[u].blocker : l[u].getScale(i, l[u].isItem);
                    if (l[u].active && s.getDistance(t, e, l[u].x, l[u].y) < n + f) return !1;
                }
                return !(!a && 18 != r && e >= c.mapScale / 2 - c.riverWidth / 2 && e <= c.mapScale / 2 + c.riverWidth / 2);
            }, this.addProjectile = function(t, e, n, i, r) {
                var a = items.projectiles[r];
                var o;
                for (var c = 0; c < projectiles.length; ++c) if (!projectiles[c].active) {
                    o = projectiles[c];
                    break;
                }
                o || (o = new Projectile(l, s), projectiles.push(o)), o.init(r, t, e, n, a.speed, i, a.scale);
            }, this.checkCollision = function(t, e, n) {
                n = n || 1;
                var l = t.x - e.x;
                var u = t.y - e.y;
                var f = t.scale + e.scale;
                if (i(l) <= f || i(u) <= f) {
                    f = t.scale + (e.getScale ? e.getScale() : e.scale);
                    var d = o(l * l + u * u) - f;
                    if (d <= 0) {
                        if (e.ignoreCollision) !e.trap || t.noTrap || e.owner == t || e.owner && e.owner.team && e.owner.team == t.team ? e.boostSpeed ? (t.xVel += n * e.boostSpeed * (e.weightM || 1) * r(e.dir),
                        t.yVel += n * e.boostSpeed * (e.weightM || 1) * a(e.dir)) : e.healCol ? t.healCol = e.healCol : e.teleport && (t.x = s.randInt(0, c.mapScale),
                        t.y = s.randInt(0, c.mapScale)) : (t.lockMove = !0, e.hideFromEnemy = !1); else {
                            var h = s.getDirection(t.x, t.y, e.x, e.y);
                            s.getDistance(t.x, t.y, e.x, e.y);
                            if (e.isPlayer ? (d = -1 * d / 2, t.x += d * r(h), t.y += d * a(h), e.x -= d * r(h),
                            e.y -= d * a(h)) : (t.x = e.x + f * r(h), t.y = e.y + f * a(h), t.xVel *= .75, t.yVel *= .75),
                            e.dmg && e.owner != t && (!e.owner || !e.owner.team || e.owner.team != t.team)) {
                                t.changeHealth(-e.dmg, e.owner, e);
                                var m = 1.5 * (e.weightM || 1);
                                t.xVel += m * r(h), t.yVel += m * a(h), !e.pDmg || t.skin && t.skin.poisonRes || (t.dmgOverTime.dmg = e.pDmg,
                                t.dmgOverTime.time = 5, t.dmgOverTime.doer = e.owner), t.colDmg && e.health && (e.changeHealth(-t.colDmg) && this.disableObj(e),
                                this.hitObj(e, s.getDirection(t.x, t.y, e.x, e.y)));
                            }
                        }
                        return e.zIndex > t.zIndex && (t.zIndex = e.zIndex), !0;
                    }
                }
                return !1;
            };
        };
    },
    "./src/js/data/player.js": function(t, e, n) {
        var i = new (n("./node_modules/bad-words/lib/badwords.js"));
        i.addWords('jew', 'black', 'baby', 'child', 'white', 'porn', 'pedo', 'trump', 'clinton', 'hitler', 'nazi', 'gay', 'pride', 'sex', 'pleasure', 'touch', 'poo', 'kids', 'rape', 'white power', 'nigga', 'nig nog', 'doggy', 'rapist', 'boner', 'nigger', 'nigg', 'finger', 'nogger', 'nagger', 'nig', 'fag', 'gai', 'pole', 'stripper', "penis", 'vagina', 'pussy', 'nazi', 'hitler', 'stalin', 'burn', 'chamber', 'cock', 'peen', 'dick', 'spick', 'nieger', 'die', 'satan', 'n|ig', 'nlg', 'cunt', 'c0ck', 'fag', 'lick', 'condom', 'anal', 'shit', 'phile', 'little', 'kids', 'free KR', 'tiny', 'sidney', 'ass', 'kill', '.io', '(dot)', '[dot]', 'mini', 'whiore', 'whore', 'faggot', 'github', '1337', '666', 'satan', 'senpa', 'discord', 'd1scord', 'mistik', '.io', 'senpa.io', 'sidney', 'sid', 'senpaio', 'vries', 'asa');
        var r = Math.abs;
        var a = Math.cos;
        var o = Math.sin;
        var s = Math.pow;
        var c = Math.sqrt;
        t.exports = function(t, e, n, l, u, f, d, h, m, p, v, g, b, k) {
            this.id = t, this.sid = e, this.tmpScore = 0, this.team = null, this.skinIndex = 0,
            this.tailIndex = 0, this.hitTime = 0, this.tails = {};
            for (let t = 0; t < v.length; ++t) v[t].price <= 0 && (this.tails[v[t].id] = 1);
            this.skins = {};
            for (let t = 0; t < p.length; ++t) p[t].price <= 0 && (this.skins[p[t].id] = 1);
            this.points = 0, this.dt = 0, this.hidden = !1, this.itemCounts = {}, this.dist2 = 0,
            this.isPlayer = !0, this.pps = 0, this.moveDir = void 0, this.skinRot = 0, this.lastPing = 0,
            this.iconIndex = 0, this.skinColor = 0, this.spawn = function(t) {
                this.weaponVariants = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], this.spikeDamage = 0,
                this.active = !0, this.alive = !0, this.lockMove = !1, this.lockDir = !1, this.chatCountdown = 0,
                this.shameCount = 0, this.shameTimer = 0, this.sentTo = {}, this.gathering = 0,
                this.shooting = {}, this.autoGather = 0, this.animTime = 0, this.animSpeed = 0,
                this.mouseState = 0, this.buildIndex = -1, this.weaponIndex = 0, this.weaponVariant = 0,
                this.dmgOverTime = {}, this.noMovTimer = 0, this.maxXP = 300, this.XP = 0, this.age = 1,
                this.kills = 0, this.upgrAge = 2, this.upgradePoints = 0, this.x = 0, this.y = 0,
                this.zIndex = 0, this.xVel = 0, this.yVel = 0, this.slowMult = 1, this.dir = 0,
                this.dirPlus = 0, this.targetDir = 0, this.targetAngle = 0, this.maxHealth = 100,
                this.health = this.maxHealth, this.scale = n.playerScale, this.speed = n.playerSpeed,
                this.resetMoveDir(), this.resetResources(t), this.items = [ 0, 3, 6, 10 ], this.weapons = [ 0 ],
                this.shootCount = 0, this.weaponXP = [], this.reloads = {
                    0: 0,
                    1: 0,
                    2: 0,
                    3: 0,
                    4: 0,
                    5: 0,
                    6: 0,
                    7: 0,
                    8: 0,
                    9: 0,
                    10: 0,
                    11: 0,
                    12: 0,
                    13: 0,
                    14: 0,
                    15: 0,
                    53: 0
                };
            }, this.getItemType = function(t) {
                let e = this.items.findIndex(e => e == t);
                return -1 != e ? e : m.checkItem.index(t, this.items);
            }, this.resetMoveDir = function() {
                this.moveDir = void 0;
            }, this.resetResources = function(t) {
                for (var e = 0; e < n.resourceTypes.length; ++e) this[n.resourceTypes[e]] = t ? 100 : 0;
            }, this.addItem = function(t) {
                var e = m.list[t];
                if (e) {
                    for (var n = 0; n < this.items.length; ++n) if (m.list[this.items[n]].group == e.group) return this.buildIndex == this.items[n] && (this.buildIndex = t),
                    this.items[n] = t, !0;
                    return this.items.push(t), !0;
                }
                return !1;
            }, this.setUserData = function(t) {
                if (t) {
                    this.name = "unknown";
                    var e = t.name + "";
                    var r = !1;
                    var a = (e = (e = (e = (e = e.slice(0, n.maxNameLength)).replace(/[^\w:\(\)\/? -]+/gim, " ")).replace(/[^\x00-\x7F]/g, " ")).trim()).toLowerCase().replace(/\s/g, "").replace(/1/g, "i").replace(/0/g, "o").replace(/5/g, "s");
                    for (var o of i.list) if (-1 != a.indexOf(o)) {
                        r = !0;
                        break;
                    }
                    e.length > 0 && !r && (this.name = e), this.skinColor = 0, n.skinColors[t.skin] && (this.skinColor = t.skin);
                }
            }, this.getData = function() {
                return [ this.id, this.sid, this.name, l.fixTo(this.x, 2), l.fixTo(this.y, 2), l.fixTo(this.dir, 3), this.health, this.maxHealth, this.scale, this.skinColor ];
            }, this.setData = function(t) {
                this.id = t[0], this.sid = t[1], this.name = t[2], this.x = t[3], this.y = t[4],
                this.dir = t[5], this.health = t[6], this.maxHealth = t[7], this.scale = t[8], this.skinColor = t[9];
            };
            var y = 0;
            this.findID = function(t, e) {
                return t.find(t => t.id == e);
            }, this.update = function(t) {
                if (this.alive) {
                    if (this.shameTimer > 0 && (this.shameTimer -= t, this.shameTimer <= 0 && (this.shameTimer = 0,
                    this.shameCount = 0)), (y -= t) <= 0) {
                        var e = (this.skin && this.skin.healthRegen ? this.skin.healthRegen : 0) + (this.tail && this.tail.healthRegen ? this.tail.healthRegen : 0);
                        e && this.changeHealth(e, this), this.dmgOverTime.dmg && (this.changeHealth(-this.dmgOverTime.dmg, this.dmgOverTime.doer),
                        this.dmgOverTime.time -= 1, this.dmgOverTime.time <= 0 && (this.dmgOverTime.dmg = 0)),
                        this.healCol && this.changeHealth(this.healCol, this), y = 1e3;
                    }
                    if (this.alive) {
                        if (this.slowMult < 1 && (this.slowMult += 8e-4 * t, this.slowMult > 1 && (this.slowMult = 1)),
                        this.noMovTimer += t, (this.xVel || this.yVel) && (this.noMovTimer = 0), this.lockMove) this.xVel = 0,
                        this.yVel = 0; else {
                            let e = {
                                skin: this.findID(p, this.skinIndex),
                                tail: this.findID(v, this.tailIndex)
                            };
                            let s = (this.buildIndex >= 0 ? .5 : 1) * (m.weapons[this.weaponIndex].spdMult || 1) * (e.skin && e.skin.spdMult || 1) * (e.tail && e.tail.spdMult || 1) * (this.y <= n.snowBiomeTop ? e.skin && e.skin.coldM ? 1 : n.snowSpeed : 1) * this.slowMult;
                            !this.zIndex && this.y >= n.mapScale / 2 - n.riverWidth / 2 && this.y <= n.mapScale / 2 + n.riverWidth / 2 && (this.skin && this.skin.watrImm ? (s *= .75,
                            this.xVel += .4 * n.waterCurrent * t) : (s *= .33, this.xVel += n.waterCurrent * t));
                            var i = null != this.moveDir ? a(this.moveDir) : 0;
                            var r = null != this.moveDir ? o(this.moveDir) : 0;
                            var h = c(i * i + r * r);
                            0 != h && (i /= h, r /= h), i && (this.xVel += i * this.speed * s * t), r && (this.yVel += r * this.speed * s * t);
                        }
                        var g;
                        this.zIndex = 0, this.lockMove = !1, this.healCol = 0;
                        var b = l.getDistance(0, 0, this.xVel * t, this.yVel * t);
                        var k = Math.min(4, Math.max(1, Math.round(b / 40)));
                        var w = 1 / k;
                        for (var _ = 0; _ < k; ++_) {
                            this.xVel && (this.x += this.xVel * t * w), this.yVel && (this.y += this.yVel * t * w),
                            g = f.getGridArrays(this.x, this.y, this.scale);
                            for (var x = 0; x < g.length; ++x) for (var M = 0; M < g[x].length; ++M) g[x][M].active && f.checkCollision(this, g[x][M], w);
                        }
                        for (_ = (S = d.indexOf(this)) + 1; _ < d.length; ++_) d[_] != this && d[_].alive && f.checkCollision(this, d[_]);
                        if (this.xVel && (this.xVel *= s(n.playerDecel, t), this.xVel <= .01 && this.xVel >= -.01 && (this.xVel = 0)),
                        this.yVel && (this.yVel *= s(n.playerDecel, t), this.yVel <= .01 && this.yVel >= -.01 && (this.yVel = 0)),
                        this.x - this.scale < 0 ? this.x = this.scale : this.x + this.scale > n.mapScale && (this.x = n.mapScale - this.scale),
                        this.y - this.scale < 0 ? this.y = this.scale : this.y + this.scale > n.mapScale && (this.y = n.mapScale - this.scale),
                        this.buildIndex < 0) if (this.reloads[this.weaponIndex] > 0) this.reloads[this.weaponIndex] -= t,
                        this.gathering = this.mouseState; else if (this.gathering || this.autoGather) {
                            var j = !0;
                            if (null != m.weapons[this.weaponIndex].gather) this.gather(d); else if (null != m.weapons[this.weaponIndex].projectile && this.hasRes(m.weapons[this.weaponIndex], this.skin ? this.skin.projCost : 0)) {
                                this.useRes(m.weapons[this.weaponIndex], this.skin ? this.skin.projCost : 0), this.noMovTimer = 0;
                                var S = m.weapons[this.weaponIndex].projectile;
                                var A = 2 * this.scale;
                                var T = this.skin && this.skin.aMlt ? this.skin.aMlt : 1;
                                m.weapons[this.weaponIndex].rec && (this.xVel -= m.weapons[this.weaponIndex].rec * a(this.dir),
                                this.yVel -= m.weapons[this.weaponIndex].rec * o(this.dir)), u.addProjectile(this.x + A * a(this.dir), this.y + A * o(this.dir), this.dir, m.projectiles[S].range * T, m.projectiles[S].speed * T, S, this, null, this.zIndex);
                            } else j = !1;
                            this.gathering = this.mouseState, j && (this.reloads[this.weaponIndex] = m.weapons[this.weaponIndex].speed * (this.skin && this.skin.atkSpd || 1));
                        }
                    }
                }
            }, this.addWeaponXP = function(t) {
                this.weaponXP[this.weaponIndex] || (this.weaponXP[this.weaponIndex] = 0), this.weaponXP[this.weaponIndex] += t;
            }, this.earnXP = function(t) {
                this.age < n.maxAge && (this.XP += t, this.XP >= this.maxXP ? (this.age < n.maxAge ? (this.age++,
                this.XP = 0, this.maxXP *= 1.2) : this.XP = this.maxXP, this.upgradePoints++, g.send(this.id, "U", this.upgradePoints, this.upgrAge),
                g.send(this.id, "T", this.XP, l.fixTo(this.maxXP, 1), this.age)) : g.send(this.id, "T", this.XP));
            }, this.changeHealth = function(t, e) {
                if (t > 0 && this.health >= this.maxHealth) return !1;
                t < 0 && this.skin && (t *= this.skin.dmgMult || 1), t < 0 && this.tail && (t *= this.tail.dmgMult || 1),
                t < 0 && (this.hitTime = Date.now()), this.health += t, this.health > this.maxHealth && (t -= this.health - this.maxHealth,
                this.health = this.maxHealth), this.health <= 0 && this.kill(e);
                for (var n = 0; n < d.length; ++n) this.sentTo[d[n].id] && g.send(d[n].id, "O", this.sid, Math.round(this.health));
                return !e || !e.canSee(this) || e == this && t < 0 || g.send(e.id, "8", Math.round(this.x), Math.round(this.y), Math.round(-t), 1),
                !0;
            }, this.kill = function(t) {
                t && t.alive && (t.kills++, t.skin && t.skin.goldSteal ? b(t, Math.round(this.points / 2)) : b(t, Math.round(100 * this.age * (t.skin && t.skin.kScrM ? t.skin.kScrM : 1))),
                g.send(t.id, "N", "kills", t.kills, 1)), this.alive = !1, g.send(this.id, "P"),
                k();
            }, this.addResource = function(t, e, i) {
                !i && e > 0 && this.addWeaponXP(e), 3 == t ? b(this, e, !0) : (this[n.resourceTypes[t]] += e,
                g.send(this.id, "N", n.resourceTypes[t], this[n.resourceTypes[t]], 1));
            }, this.changeItemCount = function(t, e) {
                this.itemCounts[t] = this.itemCounts[t] || 0, this.itemCounts[t] += e, g.send(this.id, "S", t, this.itemCounts[t]);
            }, this.buildItem = function(t) {
                var e = this.scale + t.scale + (t.placeOffset || 0);
                var n = this.x + e * a(this.dir);
                var i = this.y + e * o(this.dir);
                if (this.canBuild(t) && !(t.consume && this.skin && this.skin.noEat) && (t.consume || f.checkItemLocation(n, i, t.scale, .6, t.id, !1, this))) {
                    var r = !1;
                    if (t.consume) {
                        if (this.hitTime) {
                            var s = Date.now() - this.hitTime;
                            this.hitTime = 0, s <= 120 ? (this.shameCount++, this.shameCount >= 8 && (this.shameTimer = 3e4,
                            this.shameCount = 0)) : (this.shameCount -= 2, this.shameCount <= 0 && (this.shameCount = 0));
                        }
                        this.shameTimer <= 0 && (r = t.consume(this));
                    } else r = !0, t.group.limit && this.changeItemCount(t.group.id, 1), t.pps && (this.pps += t.pps),
                    f.add(f.objects.length, n, i, this.dir, t.scale, t.type, t, !1, this);
                    r && (this.useRes(t), this.buildIndex = -1);
                }
            }, this.hasRes = function(t, e) {
                for (var n = 0; n < t.req.length; ) {
                    if (this[t.req[n]] < Math.round(t.req[n + 1] * (e || 1))) return !1;
                    n += 2;
                }
                return !0;
            }, this.useRes = function(t, e) {
                if (!n.inSandbox) for (var i = 0; i < t.req.length; ) this.addResource(n.resourceTypes.indexOf(t.req[i]), -Math.round(t.req[i + 1] * (e || 1))),
                i += 2;
            }, this.canBuild = function(t) {
                return !!n.inSandbox || !(t.group.limit && this.itemCounts[t.group.id] >= t.group.limit) && this.hasRes(t);
            }, this.gather = function() {
                this.noMovTimer = 0, this.slowMult -= m.weapons[this.weaponIndex].hitSlow || .3,
                this.slowMult < 0 && (this.slowMult = 0);
                var t = n.fetchVariant(this);
                var e = t.poison;
                var i = t.val;
                var r = {};
                var s, c, u;
                var p = f.getGridArrays(this.x, this.y, m.weapons[this.weaponIndex].range);
                for (var v = 0; v < p.length; ++v) for (var g = 0; g < p[v].length; ++g) if ((c = p[v][g]).active && !c.dontGather && !r[c.sid] && c.visibleToPlayer(this) && l.getDistance(this.x, this.y, c.x, c.y) - c.scale <= m.weapons[this.weaponIndex].range && (s = l.getDirection(c.x, c.y, this.x, this.y),
                l.getAngleDist(s, this.dir) <= n.gatherAngle)) {
                    if (r[c.sid] = 1, c.health) {
                        if (c.changeHealth(-m.weapons[this.weaponIndex].dmg * i * (m.weapons[this.weaponIndex].sDmg || 1) * (this.skin && this.skin.bDmg ? this.skin.bDmg : 1), this)) {
                            for (var b = 0; b < c.req.length; ) this.addResource(n.resourceTypes.indexOf(c.req[b]), c.req[b + 1]),
                            b += 2;
                            f.disableObj(c);
                        }
                    } else {
                        this.earnXP(4 * m.weapons[this.weaponIndex].gather);
                        var k = m.weapons[this.weaponIndex].gather + (3 == c.type ? 4 : 0);
                        this.skin && this.skin.extraGold && this.addResource(3, 1), this.addResource(c.type, k);
                    }
                    u = !0, f.hitObj(c, s);
                }
                for (g = 0; g < d.length + h.length; ++g) if ((c = d[g] || h[g - d.length]) != this && c.alive && (!c.team || c.team != this.team) && l.getDistance(this.x, this.y, c.x, c.y) - 1.8 * c.scale <= m.weapons[this.weaponIndex].range && (s = l.getDirection(c.x, c.y, this.x, this.y),
                l.getAngleDist(s, this.dir) <= n.gatherAngle)) {
                    var y = m.weapons[this.weaponIndex].steal;
                    y && c.addResource && (y = Math.min(c.points || 0, y), this.addResource(3, y), c.addResource(3, -y));
                    var w = i;
                    null != c.weaponIndex && m.weapons[c.weaponIndex].shield && l.getAngleDist(s + Math.PI, c.dir) <= n.shieldAngle && (w = m.weapons[c.weaponIndex].shield);
                    var _ = m.weapons[this.weaponIndex].dmg * (this.skin && this.skin.dmgMultO ? this.skin.dmgMultO : 1) * (this.tail && this.tail.dmgMultO ? this.tail.dmgMultO : 1);
                    var x = .3 * (c.weightM || 1) + (m.weapons[this.weaponIndex].knock || 0);
                    c.xVel += x * a(s), c.yVel += x * o(s), this.skin && this.skin.healD && this.changeHealth(_ * w * this.skin.healD, this),
                    this.tail && this.tail.healD && this.changeHealth(_ * w * this.tail.healD, this),
                    c.skin && c.skin.dmg && 1 == w && this.changeHealth(-_ * c.skin.dmg, c), c.tail && c.tail.dmg && 1 == w && this.changeHealth(-_ * c.tail.dmg, c),
                    !(c.dmgOverTime && this.skin && this.skin.poisonDmg) || c.skin && c.skin.poisonRes || (c.dmgOverTime.dmg = this.skin.poisonDmg,
                    c.dmgOverTime.time = this.skin.poisonTime || 1, c.dmgOverTime.doer = this), !c.dmgOverTime || !e || c.skin && c.skin.poisonRes || (c.dmgOverTime.dmg = 5,
                    c.dmgOverTime.time = 5, c.dmgOverTime.doer = this), c.skin && c.skin.dmgK && (this.xVel -= c.skin.dmgK * a(s),
                    this.yVel -= c.skin.dmgK * o(s)), c.changeHealth(-_ * w, this, this);
                }
                this.sendAnimation(u ? 1 : 0);
            }, this.sendAnimation = function(t) {
                for (var e = 0; e < d.length; ++e) this.sentTo[d[e].id] && this.canSee(d[e]) && g.send(d[e].id, "K", this.sid, t ? 1 : 0, this.weaponIndex);
            };
            var w = 0;
            var _ = 0;
            this.animate = function(t) {
                this.animTime > 0 && (this.animTime -= t, this.animTime <= 0 ? (this.animTime = 0,
                this.dirPlus = 0, w = 0, _ = 0) : 0 == _ ? (w += t / (this.animSpeed * n.hitReturnRatio),
                this.dirPlus = l.lerp(0, this.targetAngle, Math.min(1, w)), w >= 1 && (w = 1, _ = 1)) : (w -= t / (this.animSpeed * (1 - n.hitReturnRatio)),
                this.dirPlus = l.lerp(0, this.targetAngle, Math.max(0, w))));
            }, this.startAnim = function(t, e) {
                this.animTime = this.animSpeed = m.weapons[e].speed, this.targetAngle = t ? -n.hitAngle : -Math.PI,
                w = 0, _ = 0;
            }, this.canSee = function(t) {
                if (!t) return !1;
                if (t.skin && t.skin.invisTimer && t.noMovTimer >= t.skin.invisTimer) return !1;
                var e = r(t.x - this.x) - t.scale;
                var i = r(t.y - this.y) - t.scale;
                return e <= n.maxScreenWidth / 2 * 1.3 && i <= n.maxScreenHeight / 2 * 1.3;
            };
        };
    },
    "./src/js/data/projectile.js": function(t, e) {
        t.exports = function(t, e, n, i, r, a, o) {
            this.init = function(t, e, n, i, r, a, s, c, l) {
                this.active = !0, this.indx = t, this.x = e, this.y = n, this.dir = i, this.skipMov = !0,
                this.speed = r, this.dmg = a, this.scale = c, this.range = s, this.owner = l, o && (this.sentTo = {});
            };
            var s = [];
            var c;
            this.update = function(l) {
                if (this.active) {
                    var u = this.speed * l;
                    var f;
                    if (this.skipMov ? this.skipMov = !1 : (this.x += u * Math.cos(this.dir), this.y += u * Math.sin(this.dir),
                    this.range -= u, this.range <= 0 && (this.x += this.range * Math.cos(this.dir),
                    this.y += this.range * Math.sin(this.dir), u = 1, this.range = 0, this.active = !1)),
                    o) {
                        for (var d = 0; d < t.length; ++d) !this.sentTo[t[d].id] && t[d].canSee(this) && (this.sentTo[t[d].id] = 1,
                        o.send(t[d].id, "X", a.fixTo(this.x, 1), a.fixTo(this.y, 1), a.fixTo(this.dir, 2), a.fixTo(this.range, 1), this.speed, this.indx, this.layer, this.sid));
                        s.length = 0;
                        for (d = 0; d < t.length + e.length; ++d) !(c = t[d] || e[d - t.length]).alive || c == this.owner || this.owner.team && c.team == this.owner.team || a.lineInRect(c.x - c.scale, c.y - c.scale, c.x + c.scale, c.y + c.scale, this.x, this.y, this.x + u * Math.cos(this.dir), this.y + u * Math.sin(this.dir)) && s.push(c);
                        var h = n.getGridArrays(this.x, this.y, this.scale);
                        for (var m = 0; m < h.length; ++m) for (var p = 0; p < h[m].length; ++p) f = (c = h[m][p]).getScale(),
                        c.active && this.ignoreObj != c.sid && this.layer <= c.layer && s.indexOf(c) < 0 && !c.ignoreCollision && a.lineInRect(c.x - f, c.y - f, c.x + f, c.y + f, this.x, this.y, this.x + u * Math.cos(this.dir), this.y + u * Math.sin(this.dir)) && s.push(c);
                        if (s.length > 0) {
                            var v = null;
                            var g = null;
                            var b = null;
                            for (d = 0; d < s.length; ++d) b = a.getDistance(this.x, this.y, s[d].x, s[d].y),
                            (null == g || b < g) && (g = b, v = s[d]);
                            if (v.isPlayer || v.isAI) {
                                var k = .3 * (v.weightM || 1);
                                v.xVel += k * Math.cos(this.dir), v.yVel += k * Math.sin(this.dir), null != v.weaponIndex && i.weapons[v.weaponIndex].shield && a.getAngleDist(this.dir + Math.PI, v.dir) <= r.shieldAngle || v.changeHealth(-this.dmg, this.owner, this.owner);
                            } else {
                                v.projDmg && v.health && v.changeHealth(-this.dmg) && n.disableObj(v);
                                for (d = 0; d < t.length; ++d) t[d].active && (v.sentTo[t[d].id] && (v.active ? t[d].canSee(v) && o.send(t[d].id, "L", a.fixTo(this.dir, 2), v.sid) : o.send(t[d].id, "Q", v.sid)),
                                v.active || v.owner != t[d] || t[d].changeItemCount(v.group.id, -1));
                            }
                            this.active = !1;
                            for (d = 0; d < t.length; ++d) this.sentTo[t[d].id] && o.send(t[d].id, "Y", this.sid, a.fixTo(g, 1));
                        }
                    }
                }
            };
        };
    },
    "./src/js/data/projectileManager.js": function(t, e) {
        t.exports = function(t, e, n, i, r, a, o, s, c) {
            this.addProjectile = function(l, u, f, d, h, m, p, v, g) {
                var b = a.projectiles[m];
                var k;
                for (var y = 0; y < e.length; ++y) if (!e[y].active) {
                    k = e[y];
                    break;
                }
                return k || ((k = new t(n, i, r, a, o, s, c)).sid = e.length, e.push(k)), k.init(m, l, u, f, h, b.dmg, d, b.scale, p),
                k.ignoreObj = v, k.layer = g || b.layer, k.src = b.src, k;
            };
        };
    },
    "./src/js/data/store.js": function(t, e) {
        t.exports.hats = [ {
            id: 45,
            name: "Shame!",
            dontSell: !0,
            price: 0,
            scale: 120,
            desc: "hacks are for losers"
        }, {
            id: 51,
            name: "Moo Cap",
            price: 0,
            scale: 120,
            desc: "coolest mooer around"
        }, {
            id: 50,
            name: "Apple Cap",
            price: 0,
            scale: 120,
            desc: "apple farms remembers"
        }, {
            id: 28,
            name: "Moo Head",
            price: 0,
            scale: 120,
            desc: "no effect"
        }, {
            id: 29,
            name: "Pig Head",
            price: 0,
            scale: 120,
            desc: "no effect"
        }, {
            id: 30,
            name: "Fluff Head",
            price: 0,
            scale: 120,
            desc: "no effect"
        }, {
            id: 36,
            name: "Pandou Head",
            price: 0,
            scale: 120,
            desc: "no effect"
        }, {
            id: 37,
            name: "Bear Head",
            price: 0,
            scale: 120,
            desc: "no effect"
        }, {
            id: 38,
            name: "Monkey Head",
            price: 0,
            scale: 120,
            desc: "no effect"
        }, {
            id: 44,
            name: "Polar Head",
            price: 0,
            scale: 120,
            desc: "no effect"
        }, {
            id: 35,
            name: "Fez Hat",
            price: 0,
            scale: 120,
            desc: "no effect"
        }, {
            id: 42,
            name: "Enigma Hat",
            price: 0,
            scale: 120,
            desc: "join the enigma army"
        }, {
            id: 43,
            name: "Blitz Hat",
            price: 0,
            scale: 120,
            desc: "hey everybody i'm blitz"
        }, {
            id: 49,
            name: "Bob XIII Hat",
            price: 0,
            scale: 120,
            desc: "like and subscribe"
        }, {
            id: 57,
            name: "Pumpkin",
            price: 50,
            scale: 120,
            desc: "Spooooky"
        }, {
            id: 8,
            name: "Bummle Hat",
            price: 100,
            scale: 120,
            desc: "no effect"
        }, {
            id: 2,
            name: "Straw Hat",
            price: 500,
            scale: 120,
            desc: "no effect"
        }, {
            id: 15,
            name: "Winter Cap",
            price: 600,
            scale: 120,
            desc: "allows you to move at normal speed in snow",
            coldM: 1
        }, {
            id: 5,
            name: "Cowboy Hat",
            price: 1e3,
            scale: 120,
            desc: "no effect"
        }, {
            id: 4,
            name: "Ranger Hat",
            price: 2e3,
            scale: 120,
            desc: "no effect"
        }, {
            id: 18,
            name: "Explorer Hat",
            price: 2e3,
            scale: 120,
            desc: "no effect"
        }, {
            id: 31,
            name: "Flipper Hat",
            price: 2500,
            scale: 120,
            desc: "have more control while in water",
            watrImm: !0
        }, {
            id: 1,
            name: "Marksman Cap",
            price: 3e3,
            scale: 120,
            desc: "increases arrow speed and range",
            aMlt: 1.3
        }, {
            id: 10,
            name: "Bush Gear",
            price: 3e3,
            scale: 160,
            desc: "allows you to disguise yourself as a bush"
        }, {
            id: 48,
            name: "Halo",
            price: 3e3,
            scale: 120,
            desc: "no effect"
        }, {
            id: 6,
            name: "Soldier Helmet",
            price: 4e3,
            scale: 120,
            desc: "reduces damage taken but slows movement",
            spdMult: .94,
            dmgMult: .75
        }, {
            id: 23,
            name: "Anti Venom Gear",
            price: 4e3,
            scale: 120,
            desc: "makes you immune to poison",
            poisonRes: 1
        }, {
            id: 13,
            name: "Medic Gear",
            price: 5e3,
            scale: 110,
            desc: "slowly regenerates health over time",
            healthRegen: 3
        }, {
            id: 9,
            name: "Miners Helmet",
            price: 5e3,
            scale: 120,
            desc: "earn 1 extra gold per resource",
            extraGold: 1
        }, {
            id: 32,
            name: "Musketeer Hat",
            price: 5e3,
            scale: 120,
            desc: "reduces cost of projectiles",
            projCost: .5
        }, {
            id: 7,
            name: "Bull Helmet",
            price: 6e3,
            scale: 120,
            desc: "increases damage done but drains health",
            healthRegen: -5,
            dmgMultO: 1.5,
            spdMult: .96
        }, {
            id: 22,
            name: "Emp Helmet",
            price: 6e3,
            scale: 120,
            desc: "turrets won't attack but you move slower",
            antiTurret: 1,
            spdMult: .7
        }, {
            id: 12,
            name: "Booster Hat",
            price: 6e3,
            scale: 120,
            desc: "increases your movement speed",
            spdMult: 1.16
        }, {
            id: 26,
            name: "Barbarian Armor",
            price: 8e3,
            scale: 120,
            desc: "knocks back enemies that attack you",
            dmgK: .6
        }, {
            id: 21,
            name: "Plague Mask",
            price: 1e4,
            scale: 120,
            desc: "melee attacks deal poison damage",
            poisonDmg: 5,
            poisonTime: 6
        }, {
            id: 46,
            name: "Bull Mask",
            price: 1e4,
            scale: 120,
            desc: "bulls won't target you unless you attack them",
            bullRepel: 1
        }, {
            id: 14,
            name: "Windmill Hat",
            topSprite: !0,
            price: 1e4,
            scale: 120,
            desc: "generates points while worn",
            pps: 1.5
        }, {
            id: 11,
            name: "Spike Gear",
            topSprite: !0,
            price: 1e4,
            scale: 120,
            desc: "deal damage to players that damage you",
            dmg: .45
        }, {
            id: 53,
            name: "Turret Gear",
            topSprite: !0,
            price: 1e4,
            scale: 120,
            desc: "you become a walking turret",
            turret: {
                proj: 1,
                range: 700,
                rate: 2500
            },
            spdMult: .7
        }, {
            id: 20,
            name: "Samurai Armor",
            price: 12e3,
            scale: 120,
            desc: "increased attack speed and fire rate",
            atkSpd: .78
        }, {
            id: 58,
            name: "Dark Knight",
            price: 12e3,
            scale: 120,
            desc: "restores health when you deal damage",
            healD: .4
        }, {
            id: 27,
            name: "Scavenger Gear",
            price: 15e3,
            scale: 120,
            desc: "earn double points for each kill",
            kScrM: 2
        }, {
            id: 40,
            name: "Tank Gear",
            price: 15e3,
            scale: 120,
            desc: "increased damage to buildings but slower movement",
            spdMult: .3,
            bDmg: 3.3
        }, {
            id: 52,
            name: "Thief Gear",
            price: 15e3,
            scale: 120,
            desc: "steal half of a players gold when you kill them",
            goldSteal: .5
        }, {
            id: 55,
            name: "Bloodthirster",
            price: 2e4,
            scale: 120,
            desc: "Restore Health when dealing damage. And increased damage",
            healD: .25,
            dmgMultO: 1.2
        }, {
            id: 56,
            name: "Assassin Gear",
            price: 2e4,
            scale: 120,
            desc: "Go invisible when not moving. Can't eat. Increased speed",
            noEat: !0,
            spdMult: 1.1,
            invisTimer: 1e3
        } ], t.exports.accessories = [ {
            id: 12,
            name: "Snowball",
            price: 1e3,
            scale: 105,
            xOff: 18,
            desc: "no effect"
        }, {
            id: 9,
            name: "Tree Cape",
            price: 1e3,
            scale: 90,
            desc: "no effect"
        }, {
            id: 10,
            name: "Stone Cape",
            price: 1e3,
            scale: 90,
            desc: "no effect"
        }, {
            id: 3,
            name: "Cookie Cape",
            price: 1500,
            scale: 90,
            desc: "no effect"
        }, {
            id: 8,
            name: "Cow Cape",
            price: 2e3,
            scale: 90,
            desc: "no effect"
        }, {
            id: 11,
            name: "Monkey Tail",
            price: 2e3,
            scale: 97,
            xOff: 25,
            desc: "Super speed but reduced damage",
            spdMult: 1.35,
            dmgMultO: .2
        }, {
            id: 17,
            name: "Apple Basket",
            price: 3e3,
            scale: 80,
            xOff: 12,
            desc: "slowly regenerates health over time",
            healthRegen: 1
        }, {
            id: 6,
            name: "Winter Cape",
            price: 3e3,
            scale: 90,
            desc: "no effect"
        }, {
            id: 4,
            name: "Skull Cape",
            price: 4e3,
            scale: 90,
            desc: "no effect"
        }, {
            id: 5,
            name: "Dash Cape",
            price: 5e3,
            scale: 90,
            desc: "no effect"
        }, {
            id: 2,
            name: "Dragon Cape",
            price: 6e3,
            scale: 90,
            desc: "no effect"
        }, {
            id: 1,
            name: "Super Cape",
            price: 8e3,
            scale: 90,
            desc: "no effect"
        }, {
            id: 7,
            name: "Troll Cape",
            price: 8e3,
            scale: 90,
            desc: "no effect"
        }, {
            id: 14,
            name: "Thorns",
            price: 1e4,
            scale: 115,
            xOff: 20,
            desc: "no effect"
        }, {
            id: 15,
            name: "Blockades",
            price: 1e4,
            scale: 95,
            xOff: 15,
            desc: "no effect"
        }, {
            id: 20,
            name: "Devils Tail",
            price: 1e4,
            scale: 95,
            xOff: 20,
            desc: "no effect"
        }, {
            id: 16,
            name: "Sawblade",
            price: 12e3,
            scale: 90,
            spin: !0,
            xOff: 0,
            desc: "deal damage to players that damage you",
            dmg: .15
        }, {
            id: 13,
            name: "Angel Wings",
            price: 15e3,
            scale: 138,
            xOff: 22,
            desc: "slowly regenerates health over time",
            healthRegen: 3
        }, {
            id: 19,
            name: "Shadow Wings",
            price: 15e3,
            scale: 138,
            xOff: 22,
            desc: "increased movement speed",
            spdMult: 1.1
        }, {
            id: 18,
            name: "Blood Wings",
            price: 2e4,
            scale: 178,
            xOff: 26,
            desc: "restores health when you deal damage",
            healD: .2
        }, {
            id: 21,
            name: "Corrupt X Wings",
            price: 2e4,
            scale: 178,
            xOff: 26,
            desc: "deal damage to players that damage you",
            dmg: .25
        } ];
    },
    "./src/js/libs/animText.js": function(t, e) {
        t.exports.AnimText = function() {
            this.init = function(t, e, n, i, r, a, o) {
                this.x = t, this.y = e, this.color = o, this.scale = n, this.startScale = this.scale,
                this.maxScale = 1.5 * n, this.scaleSpeed = .7, this.speed = i, this.life = r, this.text = a;
            }, this.update = function(t) {
                this.life && (this.life -= t, this.y -= this.speed * t, this.scale += this.scaleSpeed * t,
                this.scale >= this.maxScale ? (this.scale = this.maxScale, this.scaleSpeed *= -1) : this.scale <= this.startScale && (this.scale = this.startScale,
                this.scaleSpeed = 0), this.life <= 0 && (this.life = 0));
            }, this.render = function(t, e, n) {
                t.fillStyle = this.color, t.font = this.scale + "px Hammersmith One", t.fillText(this.text, this.x - e, this.y - n);
            };
        }, t.exports.TextManager = function() {
            this.texts = [], this.update = function(t, e, n, i) {
                e.textBaseline = "middle", e.textAlign = "center";
                for (var r = 0; r < this.texts.length; ++r) this.texts[r].life && (this.texts[r].update(t),
                this.texts[r].render(e, n, i));
            }, this.showText = function(e, n, i, r, a, o, s) {
                var c;
                for (var l = 0; l < this.texts.length; ++l) if (!this.texts[l].life) {
                    c = this.texts[l];
                    break;
                }
                c || (c = new t.exports.AnimText, this.texts.push(c)), c.init(e, n, i, r, a, o, s);
            };
        };
    },
    "./src/js/libs/io-client.js": function(t, e, n) {
        var i = n("./node_modules/msgpack-lite/lib/browser.js");
        n("./src/js/config.js");
        var r = window.WebSocket;
        var a = window.WebSocket && window.WebSocket.prototype.send;
        var o = [ "M", "D", "9", "e", "F", "z", "H", "K", "L", "N", "b", "P", "Q", "c", "6", "S", "0" ];
        var s = [ "A", "B", "C", "D", "E", "a", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "X", "Y", "Z", "g", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" ];
        var c = new Uint32Array([ 1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993, 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206, 2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, 2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350, 2456956037, 2730485921, 2820302411, 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, 1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187, 3204031479, 3329325298 ]);
        function l(t) {
            var e = new Uint32Array([ 1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225 ]);
            var n = t.length, i = 8 * n, r = n + 9;
            var a = new Uint8Array(64 * Math.ceil(r / 64));
            a.set(t), a[n] = 128;
            var o = new DataView(a.buffer);
            o.setUint32(a.length - 4, i >>> 0, !1), o.setUint32(a.length - 8, Math.floor(i / 4294967296), !1);
            var s = new Uint32Array(64);
            for (var l = 0; l < a.length; l += 64) {
                for (var f = 0; f < 16; f++) s[f] = o.getUint32(l + 4 * f, !1);
                for (f = 16; f < 64; f++) {
                    var d = u(s[f - 15], 7) ^ u(s[f - 15], 18) ^ s[f - 15] >>> 3;
                    var h = u(s[f - 2], 17) ^ u(s[f - 2], 19) ^ s[f - 2] >>> 10;
                    s[f] = s[f - 16] + d + s[f - 7] + h | 0;
                }
                var m = e[0], p = e[1], v = e[2], g = e[3], b = e[4], k = e[5], y = e[6], w = e[7];
                for (f = 0; f < 64; f++) {
                    var _ = w + (d = u(b, 6) ^ u(b, 11) ^ u(b, 25)) + (h = b & k ^ ~b & y) + c[f] + s[f] | 0;
                    var x = m & p ^ m & v ^ p & v;
                    w = y, y = k, k = b, b = g + _ | 0, g = v, v = p, p = m, m = _ + ((u(m, 2) ^ u(m, 13) ^ u(m, 22)) + x | 0) | 0;
                }
                e[0] = e[0] + m | 0, e[1] = e[1] + p | 0, e[2] = e[2] + v | 0, e[3] = e[3] + g | 0,
                e[4] = e[4] + b | 0, e[5] = e[5] + k | 0, e[6] = e[6] + y | 0, e[7] = e[7] + w | 0;
            }
            var M = new Uint8Array(32);
            var j = new DataView(M.buffer);
            for (l = 0; l < 8; l++) j.setUint32(4 * l, e[l], !1);
            return M;
        }
        function u(t, e) {
            return t >>> e | t << 32 - e;
        }
        function f(t) {
            var e = new Uint8Array(t.length / 2);
            for (var n = 0; n < e.length; n++) e[n] = parseInt(t.substr(2 * n, 2), 16);
            return e;
        }
        function d(t, e) {
            var n = t.length, i = t.map(function(t, e) {
                return e;
            }), r = function(t) {
                return function() {
                    t = (t |= 0) + 1831565813 | 0;
                    var e = Math.imul(t ^ t >>> 15, 1 | t);
                    return (((e = e + Math.imul(e ^ e >>> 7, 61 | e) ^ e) ^ e >>> 14) >>> 0) / 4294967296;
                };
            }(e >>> 0);
            for (var a = n - 1; a > 0; a--) {
                var o = Math.floor(r() * (a + 1)), s = i[a];
                i[a] = i[o], i[o] = s;
            }
            var c = {}, l = {};
            for (a = 0; a < n; a++) c[t[a]] = i[a], l[i[a]] = t[a];
            return {
                enc: c,
                dec: l
            };
        }
        window._ioEncryptState = null, t.exports = {
            socket: null,
            connected: !1,
            socketId: -1,
            connect: function(t, e, n) {
                if (!this.socket) {
                    var a = this;
                    try {
                        var c = !1;
                        var l = t;
                        this.socket = new r(l), this.socket.binaryType = "arraybuffer";
                        let u = !1;
                        this.socket.onmessage = function(t) {
                            var r = new Uint8Array(t.data);
                            var c = i.decode(r);
                            var l = c[0];
                            var h = c[1];
                            if ("io-init" === l) return a.socketId = h[0], 1 === h[3] ? window._ioEncryptState = {
                                mode: 1,
                                key: f(h[2]),
                                tables: (m = h[1] >>> 0, p = (m ^ Math.imul(1, 2654435761)) >>> 0, {
                                    c2s: d(o, p),
                                    s2c: d(s, (2246822507 ^ p) >>> 0)
                                }),
                                seq: 0
                            } : window._ioEncryptState = null, void (u || (u = !0, e()));
                            var m, p;
                            window._ioEncryptState && "number" == typeof l && void 0 === (l = window._ioEncryptState.tables.s2c.dec[l]) || n[l] && n[l].apply(void 0, h);
                        }, this.socket.onopen = function() {
                            a.connected = !0;
                        }, this.socket.onclose = function(t) {
                            a.connected = !1, window._ioEncryptState = null, 4001 == t.code ? e("Invalid Connection") : c || e("disconnected");
                        }, this.socket.onerror = function(t) {
                            this.socket && this.socket.readyState != WebSocket.OPEN && (c = !0, e("Socket error"));
                        };
                    } catch (t) {
                        e(t);
                    }
                }
            },
            send: function(t) {
                var e = [].slice.call(arguments, 1);
                if (this.socket) {
                    if (Q++, void 0 === tt && (tt = setInterval(function() {
                        et = Q, Q = 0;
                    }, 1e3)), window._ioEncryptState && 1 === window._ioEncryptState.mode) {
                        const n = window._ioEncryptState;
                        const r = n.tables.c2s.enc[t];
                        if (void 0 === r) return;
                        const o = ++n.seq;
                        const s = i.encode([ r, e, o ]);
                        const c = function(t, e) {
                            var n = t;
                            n.length > 64 && (n = l(n));
                            var i = new Uint8Array(64);
                            i.set(n);
                            var r = new Uint8Array(64 + e.length);
                            var a = new Uint8Array(96);
                            for (var o = 0; o < 64; o++) r[o] = 54 ^ i[o], a[o] = 92 ^ i[o];
                            return r.set(e, 64), a.set(l(r), 64), l(a).subarray(0, 6);
                        }(n.key, s);
                        const u = new Uint8Array(6 + s.length);
                        return u.set(c, 0), u.set(s, 6), void a.call(this.socket, u);
                    }
                    var n = i.encode([ t, e ]);
                    a.call(this.socket, n);
                }
            },
            socketReady: function() {
                return this.socket && this.connected;
            },
            close: function() {
                this.socket && this.socket.close(), this.socket = null, this.connected = !1, window._ioEncryptState = null;
            }
        };
    },
    "./src/js/libs/modernizr.js": function(t, e) {
        !function(t, e) {
            function n(t, e) {
                return typeof t === e;
            }
            var i = [], r = [], a = {
                W: "3.5.0",
                tt: {
                    classPrefix: "",
                    enableClasses: !0,
                    enableJSClass: !0,
                    usePrefixes: !0
                },
                et: [],
                on: function(t, e) {
                    var n = this;
                    setTimeout(function() {
                        e(n[t]);
                    }, 0);
                },
                addTest: function(t, e, n) {
                    r.push({
                        name: t,
                        fn: e,
                        options: n
                    });
                },
                addAsyncTest: function(t) {
                    r.push({
                        name: null,
                        fn: t
                    });
                }
            }, o = function() {};
            o.prototype = a, o = new o;
            var s = e.documentElement, c = "svg" === s.nodeName.toLowerCase();
            o.addTest("passiveeventlisteners", function() {
                var e = !1;
                try {
                    var n = Object.defineProperty({}, "passive", {
                        get: function() {
                            e = !0;
                        }
                    });
                    t.addEventListener("test", null, n);
                } catch (t) {}
                return e;
            }), function() {
                var t, e, a, s, c, l;
                for (var u in r) if (r.hasOwnProperty(u)) {
                    if (t = [], (e = r[u]).name && (t.push(e.name.toLowerCase()), e.options && e.options.aliases && e.options.aliases.length)) for (a = 0; a < e.options.aliases.length; a++) t.push(e.options.aliases[a].toLowerCase());
                    for (s = n(e.fn, "function") ? e.fn() : e.fn, c = 0; c < t.length; c++) 1 === (l = t[c].split(".")).length ? o[l[0]] = s : (!o[l[0]] || o[l[0]] instanceof Boolean || (o[l[0]] = new Boolean(o[l[0]])),
                    o[l[0]][l[1]] = s), i.push((s ? "" : "no-") + l.join("-"));
                }
            }(), function(t) {
                var e = s.className, n = o.tt.classPrefix || "";
                if (c && (e = e.baseVal), o.tt.enableJSClass) {
                    var i = new RegExp("(^|\\s)" + n + "no-js(\\s|$)");
                    e = e.replace(i, "$1" + n + "js$2");
                }
                o.tt.enableClasses && (e += " " + n + t.join(" " + n), c ? s.className.baseVal = e : s.className = e);
            }(i), delete a.addTest, delete a.addAsyncTest;
            for (var l = 0; l < o.et.length; l++) o.et[l]();
            t.Modernizr = o;
        }(window, document);
    },
    "./src/js/libs/soundManager.js": function(t, e) {
        t.exports.obj = function(t, e) {
            var n;
            this.sounds = [], this.active = !0, this.play = function(e, i, r) {
                i && this.active && ((n = this.sounds[e]) || (n = new Howl({
                    src: ".././sound/" + e + ".mp3"
                }), this.sounds[e] = n), r && n.isPlaying || (n.isPlaying = !0, n.play(), n.volume((i || 1) * t.volumeMult),
                n.loop(r)));
            }, this.toggleMute = function(t, e) {
                (n = this.sounds[t]) && n.mute(e);
            }, this.stop = function(t) {
                (n = this.sounds[t]) && (n.stop(), n.isPlaying = !1);
            };
        };
    },
    "./src/js/libs/utils.js": function(t, e) {
        var n = Math.abs;
        Math.cos;
        Math.sin;
        Math.pow;
        var i = Math.sqrt;
        Math.hypot;
        var r = Math.atan2;
        var a = Math.PI;
        t.exports.toRad = function(t) {
            return t * (Math.PI / 180);
        }, t.exports.toAng = function(t) {
            return t / (Math.PI / 180);
        }, t.exports.randInt = function(t, e) {
            return Math.floor(Math.random() * (e - t + 1)) + t;
        }, t.exports.randFloat = function(t, e) {
            return Math.random() * (e - t + 1) + t;
        }, t.exports.lerp = function(t, e, n) {
            return t + (e - t) * n;
        }, t.exports.decel = function(t, e) {
            return t > 0 ? t = Math.max(0, t - e) : t < 0 && (t = Math.min(0, t + e)), t;
        }, t.exports.getDistance = function(t, e, n, r) {
            return i((n -= t) * n + (r -= e) * r);
        }, t.exports.getDist = function(t, e) {
            return i((e.x -= t.x) * e.x + (e.y -= t.y) * e.y);
        }, t.exports.getDirection = function(t, e, n, i) {
            return r(e - i, t - n);
        }, t.exports.getDirect = function(t, e) {
            return r(t.y - e.y, t.x - e.x);
        }, t.exports.getAngleDist = function(t, e) {
            var i = n(e - t) % (2 * a);
            return i > a ? 2 * a - i : i;
        }, t.exports.isNumber = function(t) {
            return "number" == typeof t && !isNaN(t) && isFinite(t);
        }, t.exports.isString = function(t) {
            return t && "string" == typeof t;
        }, t.exports.kFormat = function(t) {
            return t > 999 ? (t / 1e3).toFixed(1) + 'k' : t;
        }, t.exports.capitalizeFirst = function(t) {
            return t.charAt(0).toUpperCase() + t.slice(1);
        }, t.exports.fixTo = function(t, e) {
            return parseFloat(t.toFixed(e));
        }, t.exports.sortByPoints = function(t, e) {
            return parseFloat(e.points) - parseFloat(t.points);
        }, t.exports.lineInRect = function(t, e, n, i, r, a, o, s) {
            var c = r;
            var l = o;
            if (r > o && (c = o, l = r), l > n && (l = n), c < t && (c = t), c > l) return !1;
            var u = a;
            var f = s;
            var d = o - r;
            if (Math.abs(d) > 1e-7) {
                var h = (s - a) / d;
                var m = a - h * r;
                u = h * c + m, f = h * l + m;
            }
            if (u > f) {
                var p = f;
                f = u, u = p;
            }
            return f > i && (f = i), u < e && (u = e), !(u > f);
        }, t.exports.containsPoint = function(t, e, n) {
            var i = t.getBoundingClientRect();
            var r = i.left + window.scrollX;
            var a = i.top + window.scrollY;
            var o = i.width;
            var s = i.height;
            return e > r && e < r + o && (n > a && n < a + s);
        }, t.exports.mousifyTouchEvent = function(t) {
            var e = t.changedTouches[0];
            t.screenX = e.screenX, t.screenY = e.screenY, t.clientX = e.clientX, t.clientY = e.clientY,
            t.pageX = e.pageX, t.pageY = e.pageY;
        }, t.exports.hookTouchEvents = function(e, n) {
            var i = !n;
            var r = !1;
            var a = !1;
            function o(n) {
                t.exports.mousifyTouchEvent(n), window.setUsingTouch(!0), i && (n.preventDefault(),
                n.stopPropagation()), r && (e.onclick && e.onclick(n), e.onmouseout && e.onmouseout(n),
                r = !1);
            }
            e.addEventListener("touchstart", t.exports.checkTrusted(function(n) {
                t.exports.mousifyTouchEvent(n), window.setUsingTouch(!0), i && (n.preventDefault(),
                n.stopPropagation());
                e.onmouseover && e.onmouseover(n);
                r = !0;
            }), a), e.addEventListener("touchmove", t.exports.checkTrusted(function(n) {
                t.exports.mousifyTouchEvent(n), window.setUsingTouch(!0), i && (n.preventDefault(),
                n.stopPropagation());
                t.exports.containsPoint(e, n.pageX, n.pageY) ? r || (e.onmouseover && e.onmouseover(n),
                r = !0) : r && (e.onmouseout && e.onmouseout(n), r = !1);
            }), a), e.addEventListener("touchend", t.exports.checkTrusted(o), a), e.addEventListener("touchcancel", t.exports.checkTrusted(o), a),
            e.addEventListener("touchleave", t.exports.checkTrusted(o), a);
        }, t.exports.removeAllChildren = function(t) {
            for (;t.hasChildNodes(); ) t.removeChild(t.lastChild);
        }, t.exports.generateElement = function(e) {
            var n = document.createElement(e.tag || "div");
            function i(t, i) {
                e[t] && (n[i] = e[t]);
            }
            for (var r in i("text", "textContent"), i("html", "innerHTML"), i("class", "className"),
            e) {
                switch (r) {
                  case "tag":
                  case "text":
                  case "html":
                  case "class":
                  case "style":
                  case "hookTouch":
                  case "parent":
                  case "children":
                    continue;

                  default:
                    break;
                }
                n[r] = e[r];
            }
            if (n.onclick && (n.onclick = t.exports.checkTrusted(n.onclick)), n.onmouseover && (n.onmouseover = t.exports.checkTrusted(n.onmouseover)),
            n.onmouseout && (n.onmouseout = t.exports.checkTrusted(n.onmouseout)), e.style && (n.style.cssText = e.style),
            e.hookTouch && t.exports.hookTouchEvents(n), e.parent && e.parent.appendChild(n),
            e.children) for (var a = 0; a < e.children.length; a++) n.appendChild(e.children[a]);
            return n;
        }, t.exports.eventIsTrusted = function(t) {
            return !t || "boolean" != typeof t.isTrusted || t.isTrusted;
        }, t.exports.checkTrusted = function(e) {
            return function(n) {
                n && n instanceof Event && t.exports.eventIsTrusted(n) && e(n);
            };
        }, t.exports.randomString = function(t) {
            var e = "";
            var n = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
            for (var i = 0; i < t; i++) e += n.charAt(Math.floor(62 * Math.random()));
            return e;
        }, t.exports.countInArray = function(t, e) {
            var n = 0;
            for (var i = 0; i < t.length; i++) t[i] === e && n++;
            return n;
        };
        var o = function(t, e) {
            return t.concat(e);
        };
        Array.prototype.flatMap = function(t) {
            return function(t, e) {
                return e.map(t).reduce(o, []);
            }(t, this);
        };
    }
}), function() {
    try {
        var t = 0;
        var e = setInterval(function() {
            try {
                if ('undefined' != typeof window && void 0 !== Z) {
                    try {
                        window.settings = Z;
                    } catch (t) {}
                    return void clearInterval(e);
                }
                ++t >= 100 && clearInterval(e);
            } catch (t) {
                clearInterval(e);
            }
        }, 100);
    } catch (t) {}
}();

let ct = document.createElement("div");

ct.id = "mod_menu", ct.style.display = "none", ct.innerHTML = `\n<div id="name_block">\n    <div id="name_text">Laffer by God - Menu</div>\n</div>\n<div id="category_block">\n    <div id="combat" class="category">\n        <div class="category_element"></div>\n        <i class="material-icons category_icon">local_fire_department</i>\n        <div class="category_text">Combat</div>\n    </div>\n    <div id="visual" class="category">\n        <div class="category_element"></div>\n        <i class="material-icons category_icon">visibility</i>\n        <div class="category_text">Visual</div>\n    </div>\n    \x3c!-- Bots category removed --\x3e\n    <div id="movement" class="category">\n        <div class="category_element"></div>\n        <i class="material-icons category_icon">directions_run</i>\n        <div class="category_text">Movement</div>\n    </div>\n    <div id="placers" class="category">\n        <div class="category_element"></div>\n        <i class="material-icons category_icon">layers</i>\n        <div class="category_text">Placers</div>\n    </div>\n    <div id="labels" class="category">\n        <div class="category_element"></div>\n        <i class="material-icons category_icon">label</i>\n        <div class="category_text">Labels</div>\n    </div>\n    <div id="extra" class="category">\n        <div class="category_element"></div>\n        <i class="material-icons category_icon">extension</i>\n        <div class="category_text">Extra</div>\n    </div>\n    <div id="themes" class="category">\n        <div class="category_element"></div>\n        <i class="material-icons category_icon">palette</i>\n        <div class="category_text">Themes</div>\n    </div>\n    <div id="exit" class="category">\n        <div class="category_element"></div>\n        <i id="exit_icon" class="material-icons category_icon">close</i>\n        <div class="category_text">Exit</div>\n    </div>\n</div>\n<div id="combat_settings" class="settings_block">\n    \x3c!-- Placer toggles moved to Placers category --\x3e\n    <div class="settings_title">Sync</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Primary Sync</div>${it("x18ksync")}\n        </div>\n    </div>\n\n\n\n\n    <div class="settings_title">Accessory toggle based on enemy distance detection</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Accessory trigger distance (pixels, default: 300)</div>${rt("combat_acc_dist", 6)}\n        </div>\n    </div>\n       <div class="settings_title">Combat Features</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Auto Velocity Tick </div>${it("autoVelocityTick")}\n        </div>\n    </div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Unified SpikeTick</div>${it("unifiedSpikeTick")}\n        </div>\n    </div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">\u2514 Break Trap (Hammer)</div>${it("unifiedSpikeTick_breakTrap")}\n        </div>\n    </div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">\u2514 Place Spike + Tick</div>${it("unifiedSpikeTick_placeSpike")}\n        </div>\n    </div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">\u2514 Retrap Break</div>${it("unifiedSpikeTick_retrapBreak")}\n        </div>\n    </div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">\u2514 Adaptive Timing (Ping)</div>${it("unifiedSpikeTick_adaptiveTiming")}\n        </div>\n    </div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">\u2514 Cooldown (ms, default: 300)</div>${rt("unifiedSpikeTick_cooldown", 6)}\n        </div>\n    </div>\n     <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Auto Trap-Escape Knockback </div>${it("evadeKnockback")}\n        </div>\n    </div>\n     <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Auto Knockback enemy into Trap </div>${it("TrapKnockback")}\n        </div>\n    </div>\n    <div class="setting2">\n    <div class="setting_element">\n        <div class="setting_name">Knockback Enemy into the Midpoint of 2 Spikes</div>\n        ${it("SpikeMidKnockback")}\n    </div>\n</div>\n\n<div class="setting2">\n  <div class="setting_element">\n    <div class="setting_name">Auto Insta-Counter</div>\n    ${it("autoInstaCounter")}\n  </div>\n</div>\n<div class="setting2">\n  <div class="setting_element">\n    <div class="setting_name">Smart Dodge</div>\n    ${it("smartDodge")}\n  </div>\n</div>\n<div class="setting2">\n  <div class="setting_element">\n    <div class="setting_name">Auto Bull on Damage</div>\n    ${it("autoBullOnDamage")}\n  </div>\n</div>\n<div class="setting2">\n  <div class="setting_element">\n    <div class="setting_name">Predictive Knockback</div>\n    ${it("predictiveKnockback")}\n  </div>\n</div>\n<div class="setting2">\n  <div class="setting_element">\n    <div class="setting_name">Smart Trap Priority</div>\n    ${it("smartTrapPriority")}\n  </div>\n</div>\n<div class="setting2">\n  <div class="setting_element">\n    <div class="setting_name">Death Marker (show where killed)</div>\n    ${it("deathMarker")}\n  </div>\n</div>\n<div class="setting2">\n  <div class="setting_element">\n    <div class="setting_name">Banned Angles (no repeat spike)</div>\n    ${it("bannedAngles")}\n  </div>\n</div>\n<div class="setting2">\n  <div class="setting_element">\n    <div class="setting_name">Filtered Cache (perf boost)</div>\n    ${it("filteredCache")}\n  </div>\n</div>\n<div class="setting2">\n  <div class="setting_element">\n    <div class="setting_name">Spike Avoidance</div>\n    ${it("spikeAvoidance")}\n  </div>\n</div>\n<div class="setting2">\n  <div class="setting_element">\n    <div class="setting_name">\u2514 Avoid Distance (px, default: 70)</div>\n    ${rt("spikeAvoidance_dist", 4)}\n  </div>\n</div>\n<div class="setting2">\n  <div class="setting_element">\n    <div class="setting_name">Smart Auto-Bull</div>\n    ${it("smartAutoBull")}\n  </div>\n</div>\n\n    \x3c!-- secondary break threshold is hard-coded (default 0.6) and removed from menu --\x3e\n    \x3c!-- primary almost-reload threshold is hard-coded; no menu input --\x3e\n    \x3c!-- Inner/Outer Offset inputs removed from menu; values hard-coded to 10 --\x3e\n\n    \x3c!-- Kill chat options moved to Extra tab --\x3e\n</div>\n</div>\n<div id="visual_settings" class="settings_block">\n    <div class="settings_title">Visual</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Game Zoom</div>${ot("gamezoom", [ 1, 1.2, 1.4, 1.5, 1.6, 1.8, 2 ], 1.5)}\n        </div>\n    </div>\n    <div class="settings_title">Debug</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Chat Log</div>${it("chatlog")}\n        </div>\n    </div>\n    <div class="settings_title">Debug</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Render Grid</div>${it("renderGrid")}\n        </div>\n    </div>\n       <div class="settings_title">Spike AutoStop Radius</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Show the red circle around spikes</div>${it("visual_spike_overlay")}\n        </div>\n    </div>\n       <div class="settings_title">Velocity Tick Distance Radius</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Show velocity-tick radius</div>${it("visual_veltick_radius")}\n        </div>\n    </div>\n    <div class="settings_title">Advanced Panel</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">(myPlayer Stats)</div>${it("myplayer_stats")}\n        </div>\n    </div>\n    \x3c!-- Placement labels moved to Labels category --\x3e\n    <div class="settings_title"></div>\n</div>\n<div id="labels_settings" class="settings_block" style="display:none;">\n    <div class="settings_title">Labels global settings</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Size (15 default)</div>${rt("label_size", 4)}\n        </div>\n    </div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Speed(0.11 default)</div>${rt("label_speed", 6)}\n        </div>\n    </div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Life (300ms default)</div>${rt("label_life", 6)}\n        </div>\n    </div>\n    <div class="settings_title">Manual Place</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Manual Place Label</div>${it("label_place_enabled")}\n        </div>\n    </div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Manual Color</div>${at("label_place_color")}\n        </div>\n    </div>\n    <div class="settings_title">AutoPlace</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">AutoPlace Label</div>${it("label_autoplace_enabled")}\n        </div>\n    </div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Auto Color</div>${at("label_autoplace_color")}\n        </div>\n    </div>\n    <div class="settings_title">PrePlace</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Preplace Label</div>${it("label_preplace_enabled")}\n        </div>\n    </div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Preplace Color</div>${at("label_preplace_color")}\n        </div>\n    </div>\n    <div class="settings_title">RePlace</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Replace Label</div>${it("label_replace_enabled")}\n        </div>\n    </div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Replace Color</div>${at("label_replace_color")}\n        </div>\n    </div>\n    <div class="settings_title">AutoStop Label</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Autostop Label</div>${it("label_autostop_enabled")}\n        </div>\n    </div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Autostop Color</div>${at("label_autostop_color")}\n        </div>\n    </div>\n    <div id="label_tickbreak_row" style="display:none">\n    <div class="settings_title">Tick Labels</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Tick breaking enemy label</div>${it("label_tickbreak_enabled")}\n        </div>\n    </div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Tick label color</div>${at("label_tickbreak_color")}\n        </div>\n    </div>\n    </div>\n    <div class="settings_title"></div>\n</div>\n<div id="extra_settings" class="settings_block" style="display:none;">\n    <div class="settings_title">Kill Chat</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Kill Chat (send on kill)</div>${it("killchat")}\n        </div>\n    </div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Kill Chat Message</div>${rt("killchat_message", 20)}\n        </div>\n    </div>\n    <div class="settings_title">Automatic Buy</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Autobuy (auto purchase by gold)</div>${it("autobuy")}\n        </div>\n    </div>\n    <div class="settings_title"></div>\n</div>\n<div id="themes_settings" class="settings_block" style="display:none;">\n    <div class="settings_title">Color Theme</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Theme</div>\n            <select id="theme_select" class="menu_select" style="padding:8px 12px;border-radius:8px;background:rgba(255,255,255,0.06);color:#f3f6ff;border:1px solid rgba(255,255,255,0.1);min-width:180px;font-weight:600;">\n                <option value="default">Default (Purple)</option>\n                <option value="neon">Neon (Cyan)</option>\n                <option value="red">Red</option>\n                <option value="blue">Blue</option>\n                <option value="green">Green</option>\n                <option value="bw">Black & White</option>\n                <option value="dark">Pure Dark</option>\n            </select>\n        </div>\n    </div>\n    <div class="settings_title" style="margin-top:16px;">Preview</div>\n    <div id="theme_preview" style="display:flex;gap:8px;flex-wrap:wrap;padding:12px 0;">\n    </div>\n</div>\n\x3c!-- Bots settings removed --\x3e\n\n<div id="placers_settings" class="settings_block" style="display:none;">\n    <div class="settings_title">PrePlacer</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">PrePlacer</div>${it("preplacer")}\n        </div>\n    </div>\n      <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">PrePlacer Activation Distance(default 300)</div>${rt("preplacer_activation_distance", 4)}\n        </div>\n    </div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">PrePlacer Mode</div>${ot("preplacer_mode", [ "Fast", "Balanced", "Accurate" ], "Fast")}\n        </div>\n    </div>\n    <div class="settings_title">AutoPlacer</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">AutoPlacer</div>${it("autoPlace")}\n        </div>\n    </div>\n\n      <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">AutoPlacer Activation Distance (default 400)</div>${rt("autoplace_activation_distance", 4)}\n        </div>\n\n    </div>\n\n    \x3c!-- trap placement options removed (now always follow code defaults) --\x3e\n\n    <div class="settings_title">Logs</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">PrePlacer Debug</div>${it("preplacer_debug")}\n        </div>\n    </div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">AutoPlacer Debug</div>${it("autoplacer_debug")}\n        </div>\n    </div>\n</div>\n<div id="movement_settings" class="settings_block" style="display: none;">\n    <div class="settings_title">Auto Stop before Collision</div>\n    <div class="setting2">\n        <div class="setting_element">\n            <div class="setting_name">Auto Stop</div>${it("autostop_before_collision")}\n        </div>\n    </div>\n\n\n    <div class="settings_title"></div>\n</div>\n\n`,
document.body.appendChild(ct);

const lt = document.createElement("style");

lt.innerHTML = "\n/* === DARK MODE (SAFE) === */\n\n#mod_menu {\n    background: #121212 !important;\n    color: #e0e0e0 !important;\n}\n\n#name_block {\n    background: #181818 !important;\n    border-bottom: 1px solid #2a2a2a;\n}\n\n#name_text {\n    color: #ffffff !important;\n}\n\n/* Categories */\n#category_block {\n    background: #141414 !important;\n}\n\n.category {\n    background: transparent !important;\n}\n\n.category:hover {\n    background: #1e1e1e !important;\n}\n\n.category_icon {\n    color: #b0b0b0 !important;\n}\n\n.category_text {\n    color: #d0d0d0 !important;\n}\n\n/* Settings panels */\n.settings_block {\n    background: #121212 !important;\n}\n\n/* Titles */\n.settings_title {\n    color: #9e9e9e !important;\n}\n\n/* Setting rows */\n.setting_element {\n    background: #1a1a1a !important;\n    border: 1px solid #2a2a2a;\n}\n\n.setting_name {\n    color: #e0e0e0 !important;\n}\n\n/* Inputs */\ninput, select {\n    background: #101010 !important;\n    color: #ffffff !important;\n    border: 1px solid #333 !important;\n}\n\n/* Checkboxes */\ninput[type=\"checkbox\"] {\n    accent-color: #888 !important;\n}\n\n/* Scrollbar */\n.settings_block::-webkit-scrollbar {\n    width: 6px;\n}\n\n.settings_block::-webkit-scrollbar-thumb {\n    background: #333;\n}\n\n/* Exit icon */\n#exit_icon {\n    color: #ff6666 !important;\n}\n",
document.head.appendChild(lt);

const ut = document.createElement("style");

ut.id = "theme-css", ut.innerHTML = "", document.head.appendChild(ut);

const ft = {
    default: {
        accent: '#6b6fe0',
        accentGlow: 'rgba(107,111,224,0.35)',
        bg: '#121212',
        sidebar: '#141414',
        card: '#1a1a1a',
        text: '#e0e0e0',
        title: '#9e9e9e',
        border: 'rgba(255,255,255,0.12)',
        checkbox: '#888',
        hover: 'rgba(107,111,224,0.07)',
        name: 'Default (Purple)'
    },
    neon: {
        accent: '#00e5ff',
        accentGlow: 'rgba(0,229,255,0.35)',
        bg: '#0a0e14',
        sidebar: '#0c1018',
        card: '#111822',
        text: '#e0f7ff',
        title: '#4dd0e1',
        border: 'rgba(0,229,255,0.15)',
        checkbox: '#00bcd4',
        hover: 'rgba(0,229,255,0.08)',
        name: 'Neon (Cyan)'
    },
    red: {
        accent: '#ff1744',
        accentGlow: 'rgba(255,23,68,0.35)',
        bg: '#120c0c',
        sidebar: '#140e0e',
        card: '#1c1212',
        text: '#ffebee',
        title: '#ef5350',
        border: 'rgba(255,23,68,0.15)',
        checkbox: '#d32f2f',
        hover: 'rgba(255,23,68,0.08)',
        name: 'Red'
    },
    blue: {
        accent: '#2979ff',
        accentGlow: 'rgba(41,121,255,0.35)',
        bg: '#0c1020',
        sidebar: '#0e1224',
        card: '#141a30',
        text: '#e3f2fd',
        title: '#64b5f6',
        border: 'rgba(41,121,255,0.15)',
        checkbox: '#1565c0',
        hover: 'rgba(41,121,255,0.08)',
        name: 'Blue'
    },
    green: {
        accent: '#00e676',
        accentGlow: 'rgba(0,230,118,0.35)',
        bg: '#0c140e',
        sidebar: '#0e1610',
        card: '#141e16',
        text: '#e8f5e9',
        title: '#66bb6a',
        border: 'rgba(0,230,118,0.15)',
        checkbox: '#2e7d32',
        hover: 'rgba(0,230,118,0.08)',
        name: 'Green'
    },
    bw: {
        accent: '#ffffff',
        accentGlow: 'rgba(255,255,255,0.2)',
        bg: '#0a0a0a',
        sidebar: '#0e0e0e',
        card: '#161616',
        text: '#f5f5f5',
        title: '#bdbdbd',
        border: 'rgba(255,255,255,0.18)',
        checkbox: '#ffffff',
        hover: 'rgba(255,255,255,0.06)',
        name: 'Black & White'
    },
    dark: {
        accent: '#424242',
        accentGlow: 'rgba(66,66,66,0.3)',
        bg: '#000000',
        sidebar: '#050505',
        card: '#0a0a0a',
        text: '#cccccc',
        title: '#757575',
        border: 'rgba(255,255,255,0.06)',
        checkbox: '#616161',
        hover: 'rgba(255,255,255,0.03)',
        name: 'Pure Dark'
    }
};

function dt(t) {
    const e = ft[t];
    if (!e) return;
    document.documentElement.style.setProperty('--accent', e.accent), ut.innerHTML = `\n        :root { --accent: ${e.accent}; }\n        #mod_menu { background: ${e.bg} !important; }\n        #name_block { background: ${e.sidebar} !important; border-bottom: 1px solid ${e.border} !important; }\n        #name_text { color: ${e.text} !important; }\n        #category_block { background: ${e.sidebar} !important; }\n        .category { background: transparent !important; }\n        .category:hover { background: ${e.hover} !important; }\n        .category.active { background: ${e.hover} !important; }\n        .category_icon { color: ${e.accent} !important; }\n        .category_text { color: ${e.text} !important; }\n        .settings_block { background: ${e.bg} !important; }\n        .settings_title { color: ${e.title} !important; }\n        .setting_element { background: ${e.card} !important; border: 1px solid ${e.border} !important; }\n        .setting_name { color: ${e.text} !important; }\n        .menu_checkbox { accent-color: ${e.checkbox} !important; }\n        .menu_checkbox:checked { background: linear-gradient(90deg, ${e.accent}, ${e.accent}) !important; }\n        input, select { background: ${e.card} !important; color: ${e.text} !important; border: 1px solid ${e.border} !important; }\n        #exit .category_text { color: #ff6666 !important; }\n        #exit_icon { color: #ff6666 !important; }\n        .setting_element:hover { box-shadow: 0 6px 18px ${e.accentGlow} !important; }\n        .settings_block::-webkit-scrollbar-thumb { background: ${e.border} !important; }\n    `,
    localStorage.setItem('godLafferTheme', t);
}

document.getElementById('theme_select').addEventListener('change', function() {
    dt(this.value);
});

const ht = localStorage.getItem('godLafferTheme') || 'default';

document.getElementById('theme_select').value = ht, dt(ht);

try {
    const t = document.getElementById('theme_preview');
    if (t) for (let [e, n] of Object.entries(ft)) {
        const i = document.createElement('div');
        i.style.cssText = `width:40px;height:40px;border-radius:10px;background:${n.accent};cursor:pointer;border:2px solid transparent;transition:all .2s;box-shadow:0 0 12px ${n.accentGlow};`,
        i.title = n.name, i.addEventListener('click', () => {
            document.getElementById('theme_select').value = e, dt(e);
        }), i.addEventListener('mouseenter', () => {
            i.style.transform = 'scale(1.15)', i.style.borderColor = '#fff';
        }), i.addEventListener('mouseleave', () => {
            i.style.transform = 'scale(1)', i.style.borderColor = 'transparent';
        }), t.appendChild(i);
    }
} catch (t) {}

function mt() {
    let t = document.getElementById('myplayer_stats_hud');
    return t || (t = document.createElement('div'), t.id = 'myplayer_stats_hud', t.style.position = 'fixed',
    t.style.left = '12px', t.style.top = '56px', t.style.width = '260px', t.style.minHeight = '64px',
    t.style.zIndex = 99999, t.style.padding = '10px', t.style.boxSizing = 'border-box',
    t.style.fontFamily = 'Inter, Arial, sans-serif', t.style.fontSize = '13px', t.style.lineHeight = '1.25',
    t.style.background = 'linear-gradient(180deg, rgba(8,10,14,0.96), rgba(6,8,12,0.92))',
    t.style.borderRadius = '10px', t.style.border = '1px solid rgba(255,255,255,0.04)',
    t.style.boxShadow = '0 8px 24px rgba(0,0,0,0.6), 0 0 18px rgba(115,79,255,0.06)',
    t.style.color = '#e6e6ff', t.style.overflow = 'hidden', t.style.transition = 'opacity 180ms cubic-bezier(.2,.9,.2,1), transform 180ms cubic-bezier(.2,.9,.2,1)',
    t.style.opacity = '0', t.style.transform = 'translateY(-6px)', t.innerHTML = "\n            <div id=\"myplayer_stats_hud_header\" style=\"display:flex;align-items:center;justify-content:space-between;padding-bottom:6px;\">\n                <div style=\"display:flex;align-items:center;gap:8px;\">\n                    <div style=\"width:10px;height:10px;border-radius:3px;background:linear-gradient(135deg,#8f7bff,#5ce1ff);box-shadow:0 0 10px rgba(143,123,255,0.35);\"></div>\n                    <div style=\"font-weight:600;color:#fff;font-size:13px\">MyPlayer</div>\n                </div>\n                <div style=\"font-size:11px;opacity:0.7;color:#cfcfff\">Stats</div>\n            </div>\n            <pre id=\"myplayer_stats_hud_body\" style=\"margin:0;padding:0;font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, monospace;color:#cfe9ff;white-space:pre-wrap;\">Loading...</pre>\n        ",
    document.body.appendChild(t)), t;
}

document.head.appendChild(lt), function() {
    !function() {
        const t = localStorage.getItem('modSettings');
        if (t) {
            const e = JSON.parse(t);
            Z = {
                ...Z,
                ...e
            };
        }
        for (let t in Z) {
            const e = document.getElementById(t);
            e && ('checkbox' === e.type ? e.checked = Z[t] : e.value = Z[t]);
        }
    }(), function() {
        for (let t in Z) {
            const e = document.getElementById(t);
            e && (e.addEventListener('change', st), e.addEventListener('input', st));
        }
    }();
    try {
        r = !!Z.autoVelocityTick;
    } catch (t) {}
    setTimeout(function() {
        var t = document.getElementById('gamezoom');
        if (t) {
            if (Z.gamezoom) {
                var e = parseFloat(Z.gamezoom);
                var n = !1;
                for (var i = 0; i < t.options.length; i++) if (parseFloat(t.options[i].value) == e) {
                    t.selectedIndex = i, n = !0;
                    break;
                }
                n || (t.value = e);
            }
            t.addEventListener('change', function() {
                var t = parseFloat(this.value);
                Z.gamezoom = t, resetZoom(), st();
                try {
                    _t('Zoom set to x' + t, '#ffff66');
                } catch (t) {}
            }), resetZoom();
        }
        var r = document.getElementById('preplacer_mode');
        if (r) {
            if (Z.preplacer_mode) try {
                r.value = Z.preplacer_mode;
            } catch (t) {}
            r.addEventListener('change', function() {
                Z.preplacer_mode = this.value;
                try {
                    st();
                } catch (t) {}
                try {
                    _t('PrePlacer mode set to: ' + this.value, '#cfe9ff');
                } catch (t) {}
            });
        }
    }, 50);
    try {
        var t = document.getElementById('preplacer_debug');
        (t && 'checkbox' === t.type ? t.checked : Z.preplacer_debug) && [ 'preplacer_activation_distance', 'preplacer_max_range', 'preplacer_projection_distance', 'preplacer_trap_range', 'preplacer_spike_distance', 'preplacer_spike_limit' ].forEach(t => {});
    } catch (t) {}
    try {
        var e = document.getElementById('autoplacer_debug');
        (e && 'checkbox' === e.type ? e.checked : Z.autoplacer_debug) && [ 'spiketrick_distance', 'spiketrick_linelength', 'spiketrick_areascale', 'trap_detection_range', 'player_enemy_maxdist', 'spike_min_distance', 'max_spike_count', 'anglesvalue' ].forEach(t => {});
    } catch (t) {}
}();

let pt = null;

let vt = null;

function gt() {
    const t = mt();
    const e = {
        45: "Shame!",
        51: "Moo Cap",
        50: "Apple Cap",
        28: "Moo Head",
        29: "Pig Head",
        30: "Fluff Head",
        36: "Pandou Head",
        37: "Bear Head",
        38: "Monkey Head",
        44: "Polar Head",
        35: "Fez Hat",
        42: "Enigma Hat",
        43: "Blitz Hat",
        49: "Bob XIII Hat",
        57: "Pumpkin",
        8: "Bummle Hat",
        2: "Straw Hat",
        15: "Winter Cap",
        5: "Cowboy Hat",
        4: "Ranger Hat",
        18: "Explorer Hat",
        31: "Flipper Hat",
        1: "Marksman Cap",
        10: "Bush Gear",
        48: "Halo",
        6: "Soldier Helmet",
        23: "Anti Venom Gear",
        13: "Medic Gear",
        9: "Miners Helmet",
        32: "Musketeer Hat",
        7: "Bull Helmet",
        22: "Emp Helmet",
        12: "Booster Hat",
        26: "Barbarian Armor",
        21: "Plague Mask",
        46: "Bull Mask",
        14: "Windmill Hat",
        11: "Spike Gear",
        53: "Turret Gear",
        20: "Samurai Armor",
        58: "Dark Knight",
        27: "Scavenger Gear",
        40: "Tank Gear",
        52: "Thief Gear",
        55: "Bloodthirster",
        56: "Assassin Gear"
    };
    const n = {
        12: "Snowball",
        9: "Tree Cape",
        10: "Stone Cape",
        3: "Cookie Cape",
        8: "Cow Cape",
        11: "Monkey Tail",
        17: "Apple Basket",
        6: "Winter Cape",
        4: "Skull Cape",
        5: "Dash Cape",
        2: "Dragon Cape",
        1: "Super Cape",
        7: "Troll Cape",
        14: "Thorns",
        15: "Blockades",
        20: "Devils Tail",
        16: "Sawblade",
        13: "Angel Wings",
        19: "Shadow Wings",
        18: "Blood Wings",
        21: "Corrupt X Wings"
    };
    const i = !!Z.myplayer_stats;
    if (!i) return t.style.opacity = '0', t.style.transform = 'translateY(-6px)', setTimeout(() => {
        Z.myplayer_stats || (t.style.display = 'none');
    }, 200), void (pt && (clearInterval(pt), pt = null));
    t.style.display = 'block', requestAnimationFrame(() => {
        t.style.opacity = '1', t.style.transform = 'translateY(0)';
    }), i && !pt && (pt = setInterval(() => {
        gt();
    }, 250));
    let r = '';
    const a = 'undefined' != typeof window && window.__myPlayer ? window.__myPlayer : 'undefined' != typeof myPlayer && myPlayer ? myPlayer : 'undefined' != typeof player && player ? player : 'undefined' != typeof localPlayer && localPlayer ? localPlayer : null;
    const o = !(!a || !1 === a.alive);
    if (!vt && o && kt('Reminder: press G to enable AutoGrind', 2200), vt = o, a) if (!1 === a.alive) r += 'No live player object detected.\nThis is a styled placeholder.'; else {
        let it = null;
        if (void 0 !== a.x2 && void 0 !== a.y2) {
            const ot = (a.xVel || 0) - (a.x2 || 0);
            const st = (a.yVel || 0) - (a.y2 || 0);
            it = Math.sqrt(ot * ot + st * st);
        } else void 0 !== a.xVel && void 0 !== a.yVel && (it = Math.sqrt(Math.pow(a.xVel || 0, 2) + Math.pow(a.yVel || 0, 2)));
        r += 'number' == typeof it ? 'Speed: ' + Math.round(it) : 'Speed: N/A';
        var s = 'Equipped: Unknown';
        function u(t) {
            return 0 === t ? 'Not Grinded' : 1 === t ? 'Gold' : 2 === t ? 'Diamond' : 3 === t ? 'Ruby' : 'Unknown';
        }
        a && a.weapons && void 0 !== a.weaponIndex && (a.weaponIndex === a.weapons[0] ? s = 'Equipped: Primary' : a.weaponIndex === a.weapons[1] && (s = 'Equipped: Secondary')),
        r += '\n' + s;
        var f = 'Unknown';
        var d = 'Unknown';
        if (a && a.weapons && a.weaponVariants) {
            var h = a.weapons[0];
            var m = a.weapons[1];
            var v = void 0 !== a.weaponVariants[h] ? a.weaponVariants[h] : null;
            var g = void 0 !== a.weaponVariants[m] ? a.weaponVariants[m] : null;
            f = u(v), d = u(g);
        }
        r += '\nPrimary: ' + f + '\nSecondary: ' + d;
        const rt = 'undefined' != typeof window && window.items && window.items.weapons ? window.items.weapons : 'undefined' != typeof items && items.weapons ? items.weapons : null;
        const at = {
            0: 'tool hammer',
            1: 'hand axe',
            2: 'great axe',
            3: 'short sword',
            4: 'katana',
            5: 'polearm',
            6: 'bat',
            7: 'daggers',
            8: 'stick',
            9: 'hunting bow',
            10: 'great hammer',
            11: 'wooden shield',
            12: 'crossbow',
            13: 'repeater crossbow',
            14: 'mc grabby',
            15: 'musket'
        };
        if (a && Array.isArray(a.weapons) && a.weapons.length) {
            const ct = a.weapons.map(function(t) {
                var e = null;
                if (rt && Array.isArray(rt)) for (var n = 0; n < rt.length; n++) {
                    var i = rt[n];
                    if (i && (i.id === t || i.indx === t)) {
                        e = i.name;
                        break;
                    }
                }
                return !e && at[t] && (e = at[t]), e ? (r = e) ? ('' + r).split(/\s+/).map(function(t) {
                    return t.charAt(0).toUpperCase() + t.slice(1);
                }).join(' ') : r : 'id:' + t;
                var r;
            }).filter(Boolean);
            ct.length && (r += '\nWeapons: ' + ct.join(', '));
            const lt = [ [ '__gold600Logged', 'Winter Cap' ], [ '__gold2000Logged', 'Monkey Tail' ], [ '__gold2500Logged', 'Flipper' ], [ '__gold4000Logged', 'Soldier' ], [ '__gold6000Logged', 'Bull' ], [ '__gold6Logged', 'Booster' ], [ '__gold10Logged', 'Turret' ], [ '__gold15Logged', 'Tank' ], [ '__gold101Logged', 'Shadow' ]['Corrupt X Wings'] ];
            const ut = [];
            for (var b = 0; b < lt.length; b++) {
                var k = lt[b][0];
                var y = lt[b][1];
                a && a[k] && ut.push(y);
            }
            ut.length === lt.length ? r += '\nAll Hats and Accessories Bought' : r += '\nBought Hats / Accessories: ' + (ut.length ? ut.join(', ') : 'None');
            var w = 'Unknown';
            var _ = 'Unknown';
            if (void 0 !== a.latestSkin && (w = a.latestSkin), void 0 !== a.latestTail && (_ = a.latestTail),
            'Unknown' === w || 'Unknown' === _) {
                var x = (tt = a, et = {
                    hat: null,
                    acc: null,
                    found: []
                }, Object.keys(tt || {}).forEach(function(t) {
                    var e = t.toLowerCase();
                    /latest|current|equipp?ed|skin|hat/.test(e) && null === et.hat && (et.hat = tt[t],
                    et.found.push(t + ':' + tt[t])), /latest|current|equipp?ed|tail|access|acc|t?ail/.test(e) && null === et.acc && (et.acc = tt[t],
                    et.found.push(t + ':' + tt[t]));
                }), et);
                'Unknown' === w && null !== x.hat && (w = x.hat), 'Unknown' === _ && null !== x.acc && (_ = x.acc),
                'Unknown' !== w && 'Unknown' !== _ || !x.found.length || (r += '\n[Detected fields: ' + x.found.slice(0, 6).join(', ') + (x.found.length > 6 ? '...' : '') + ']');
            }
            function M(t, i, r) {
                if (null == t) return 'Unknown';
                var a = t;
                var o = ('' + t).match(/-?\d+/);
                if (o && (a = Number(o[0])), 'number' == typeof a && 0 === a) return 'None';
                if ('hat' === i && e[a]) return e[a];
                if ('acc' === i && n[a]) return n[a];
                var s = [];
                'hat' === i && 'undefined' != typeof window && window.items && window.items.hats && s.push(window.items.hats),
                'acc' === i && 'undefined' != typeof window && window.items && window.items.accessories && s.push(window.items.accessories),
                'undefined' != typeof hats && s.push(hats), 'undefined' != typeof accessories && s.push(accessories),
                'undefined' != typeof store && store.hats && s.push(store.hats), Array.isArray(r) && (s = r.concat(s)),
                'acc' === i && s.sort(function(t, e) {
                    return 0;
                });
                for (var c = 0; c < s.length; c++) {
                    var l = s[c];
                    if (Array.isArray(l)) for (var u = 0; u < l.length; u++) {
                        var f = l[u];
                        if (f && (f.id === a || f.id == a || f.indx === a)) return f.name;
                    }
                }
                return 'number' == typeof a ? 'id:' + a : '' + t;
            }
            r += '\nHat: ' + M(w, 'hat') + '\nAccessory: ' + M(_, 'acc'), Y && (r += '\nAutogrind: Enabled',
            X ? (r += '\nPlayer has Turrets', R ? r += '\nStopping, Enemy Nearby' : C && (r += '\nTurret 1 HP: ' + H,
            r += '\nTurret 2 HP: ' + E, r += '\nTurret 1 ID: ' + p, r += '\nTurret 2 ID: ' + T,
            N && (r += '\nAutogrinding Primary'), F && (r += '\nAutogrinding Hammer'), L && (r += '\nAutogrinding Primary with Hammer'))) : r += '\nPlayer doesnt have Turrets'),
            c && (r += 'Performing a velocity tick.'), r += '\nDamage Prediction: ' + l, S && (r += '\nEnemy currently trapped.');
        }
    } else if ('undefined' != typeof players && Array.isArray(players)) {
        const ft = players.find(t => t && (t.isSelf || t.id === playerId)) || players[0];
        if (ft) if (!1 === ft.alive) r += 'No live player object detected.\nThis is a styled placeholder.'; else {
            let dt = null;
            if (void 0 !== ft.x2 && void 0 !== ft.y2) {
                const _t = (ft.xVel || 0) - (ft.x2 || 0);
                const xt = (ft.yVel || 0) - (ft.y2 || 0);
                dt = Math.sqrt(_t * _t + xt * xt);
            } else void 0 !== ft.xVel && void 0 !== ft.yVel && (dt = Math.sqrt(Math.pow(ft.xVel || 0, 2) + Math.pow(ft.yVel || 0, 2)));
            r += 'number' == typeof dt ? 'Speed: ' + Math.round(dt) : 'Speed: N/A';
            var j = 'Equipped: Unknown';
            function A(t) {
                return 0 === t ? 'Not Grinded' : 1 === t ? 'Gold' : 2 === t ? 'Diamond' : 3 === t ? 'Ruby' : 'Unknown';
            }
            ft && ft.weapons && void 0 !== ft.weaponIndex && (ft.weaponIndex === ft.weapons[0] ? j = 'Equipped: Primary' : ft.weaponIndex === ft.weapons[1] && (j = 'Equipped: Secondary')),
            r += '\n' + j;
            var D = 'Unknown';
            var P = 'Unknown';
            if (ft && ft.weapons && ft.weaponVariants) {
                var B = ft.weapons[0];
                var I = ft.weapons[1];
                var O = void 0 !== ft.weaponVariants[B] ? ft.weaponVariants[B] : null;
                var z = void 0 !== ft.weaponVariants[I] ? ft.weaponVariants[I] : null;
                D = A(O), P = A(z);
            }
            r += '\nPrimary: ' + D + '\nSecondary: ' + P;
            const ht = [ [ '__gold600Logged', 'Winter Cap' ], [ '__gold2000Logged', 'Monkey Tail' ], [ '__gold2500Logged', 'Flipper' ], [ '__gold4000Logged', 'Soldier' ], [ '__gold6000Logged', 'Bull' ], [ '__gold6Logged', 'Booster' ], [ '__gold10Logged', 'Turret' ], [ '__gold15Logged', 'Tank' ], [ '__gold101Logged', 'Shadow' ]['Corrupt X Wings'] ];
            const bt = [];
            for (var $ = 0; $ < ht.length; $++) {
                var U = ht[$][0];
                var q = ht[$][1];
                ft && ft[U] && bt.push(q);
            }
            r += '\nBought Hats / Accessories: ' + (bt.length ? bt.join(', ') : 'None');
            const yt = 'undefined' != typeof window && window.items && window.items.weapons ? window.items.weapons : 'undefined' != typeof items && items.weapons ? items.weapons : null;
            const wt = {
                0: 'tool hammer',
                1: 'hand axe',
                2: 'great axe',
                3: 'short sword',
                4: 'katana',
                5: 'polearm',
                6: 'bat',
                7: 'daggers',
                8: 'stick',
                9: 'hunting bow',
                10: 'great hammer',
                11: 'wooden shield',
                12: 'crossbow',
                13: 'repeater crossbow',
                14: 'mc grabby',
                15: 'musket'
            };
            if (ft && Array.isArray(ft.weapons) && ft.weapons.length) {
                const Mt = ft.weapons.map(function(t) {
                    var e = null;
                    if (yt && Array.isArray(yt)) for (var n = 0; n < yt.length; n++) {
                        var i = yt[n];
                        if (i && (i.id === t || i.indx === t)) {
                            e = i.name;
                            break;
                        }
                    }
                    return !e && wt[t] && (e = wt[t]), e ? (r = e) ? ('' + r).split(/\s+/).map(function(t) {
                        return t.charAt(0).toUpperCase() + t.slice(1);
                    }).join(' ') : r : 'id:' + t;
                    var r;
                }).filter(Boolean);
                Mt.length && (r += '\nWeapons: ' + Mt.join(', '));
                const jt = [ [ '__gold600Logged', 'Winter Cap' ], [ '__gold2000Logged', 'Monkey Tail' ], [ '__gold2500Logged', 'Flipper' ], [ '__gold4000Logged', 'Soldier' ], [ '__gold6000Logged', 'Bull' ], [ '__gold6Logged', 'Booster' ], [ '__gold10Logged', 'Turret' ], [ '__gold20000Logged', 'Accessory 21' ], [ '__gold15Logged', 'Tank' ], [ '__gold101Logged', 'Shadow' ]['Corrupt X Wings'] ];
                const St = [];
                for ($ = 0; $ < jt.length; $++) {
                    var G = jt[$][0];
                    var W = jt[$][1];
                    ft && ft[G] && St.push(W);
                }
                St.length === jt.length ? r += '\nAll Hats and Accessories Bought' : r += '\nBought Hats / Accessories: ' + (St.length ? St.join(', ') : 'None');
                var K = 'Unknown';
                var V = 'Unknown';
                if (void 0 !== ft.latestSkin && (K = ft.latestSkin), void 0 !== ft.latestTail && (V = ft.latestTail),
                'Unknown' === K || 'Unknown' === V) {
                    var J = function(t) {
                        var e = {
                            hat: null,
                            acc: null,
                            found: []
                        };
                        return Object.keys(t || {}).forEach(function(n) {
                            var i = n.toLowerCase();
                            /latest|current|equipp?ed|skin|hat/.test(i) && null === e.hat && (e.hat = t[n],
                            e.found.push(n + ':' + t[n])), /latest|current|equipp?ed|tail|access|acc|t?ail/.test(i) && null === e.acc && (e.acc = t[n],
                            e.found.push(n + ':' + t[n]));
                        }), e;
                    }(ft);
                    'Unknown' === K && null !== J.hat && (K = J.hat), 'Unknown' === V && null !== J.acc && (V = J.acc),
                    'Unknown' !== K && 'Unknown' !== V || !J.found.length || (r += '\n[Detected fields: ' + J.found.slice(0, 6).join(', ') + (J.found.length > 6 ? '...' : '') + ']');
                }
                function Q(t, i) {
                    if (null == t) return 'Unknown';
                    var r = t;
                    var a = ('' + t).match(/-?\d+/);
                    if (a && (r = Number(a[0])), e[r]) return e[r];
                    if (n[r]) return n[r];
                    var o = [];
                    'undefined' != typeof window && window.items && window.items.hats && o.push(window.items.hats),
                    'undefined' != typeof window && window.items && window.items.accessories && o.push(window.items.accessories),
                    'undefined' != typeof hats && o.push(hats), 'undefined' != typeof accessories && o.push(accessories),
                    'undefined' != typeof store && store.hats && o.push(store.hats), Array.isArray(i) && (o = i.concat(o));
                    for (var s = 0; s < o.length; s++) {
                        var c = o[s];
                        if (Array.isArray(c)) for (var l = 0; l < c.length; l++) {
                            var u = c[l];
                            if (u && (u.id === r || u.id == r || u.indx === r)) return u.name;
                        }
                    }
                    return 'number' == typeof r ? 'id:' + r : '' + t;
                }
                r += '\nHat: ' + Q(K, 'hat') + '\nAccessory: ' + Q(V, 'acc');
            }
        }
    } else r += 'No player data available.';
    var tt, et;
    const nt = document.getElementById('myplayer_stats_hud_body');
    nt && (nt.textContent = r);
}

mt(), gt(), document.getElementById("exit").addEventListener("mousedown", function() {
    ct.style.display = "none";
}), document.getElementById("combat").addEventListener("mousedown", function() {
    document.getElementById("visual_settings").style.display = "none", document.getElementById("placers_settings").style.display = "none",
    document.getElementById("movement_settings").style.display = "none", document.getElementById("combat_settings").style.display = "block",
    document.getElementById("labels_settings").style.display = "none", document.getElementById("extra_settings").style.display = "none",
    document.getElementById("themes_settings").style.display = "none";
    try {
        document.querySelectorAll('.category').forEach(function(t) {
            t.classList && t.classList.remove('active');
        });
    } catch (t) {}
    try {
        this.classList && this.classList.add('active');
    } catch (t) {}
}), document.getElementById("visual").addEventListener("mousedown", function() {
    document.getElementById("combat_settings").style.display = "none", document.getElementById("placers_settings").style.display = "none",
    document.getElementById("movement_settings").style.display = "none", document.getElementById("visual_settings").style.display = "block",
    document.getElementById("labels_settings").style.display = "none", document.getElementById("extra_settings").style.display = "none",
    document.getElementById("themes_settings").style.display = "none";
    try {
        document.querySelectorAll('.category').forEach(function(t) {
            t.classList && t.classList.remove('active');
        });
    } catch (t) {}
    try {
        this.classList && this.classList.add('active');
    } catch (t) {}
}), document.getElementById("placers").addEventListener("mousedown", function() {
    document.getElementById("combat_settings").style.display = "none", document.getElementById("visual_settings").style.display = "none",
    document.getElementById("movement_settings").style.display = "none", document.getElementById("placers_settings").style.display = "block",
    document.getElementById("labels_settings").style.display = "none", document.getElementById("extra_settings").style.display = "none",
    document.getElementById("themes_settings").style.display = "none";
    try {
        document.querySelectorAll('.category').forEach(function(t) {
            t.classList && t.classList.remove('active');
        });
    } catch (t) {}
    try {
        this.classList && this.classList.add('active');
    } catch (t) {}
}), document.getElementById("movement").addEventListener("mousedown", function() {
    document.getElementById("combat_settings").style.display = "none", document.getElementById("visual_settings").style.display = "none",
    document.getElementById("placers_settings").style.display = "none", document.getElementById("movement_settings").style.display = "block",
    document.getElementById("labels_settings").style.display = "none", document.getElementById("extra_settings").style.display = "none",
    document.getElementById("themes_settings").style.display = "none";
    try {
        document.querySelectorAll('.category').forEach(function(t) {
            t.classList && t.classList.remove('active');
        });
    } catch (t) {}
    try {
        this.classList && this.classList.add('active');
    } catch (t) {}
}), document.getElementById("extra").addEventListener("mousedown", function() {
    document.getElementById("combat_settings").style.display = "none", document.getElementById("visual_settings").style.display = "none",
    document.getElementById("placers_settings").style.display = "none", document.getElementById("movement_settings").style.display = "none",
    document.getElementById("labels_settings").style.display = "none", document.getElementById("extra_settings").style.display = "block",
    document.getElementById("themes_settings").style.display = "none";
    try {
        document.querySelectorAll('.category').forEach(function(t) {
            t.classList && t.classList.remove('active');
        });
    } catch (t) {}
    try {
        this.classList && this.classList.add('active');
    } catch (t) {}
}), document.getElementById("labels").addEventListener("mousedown", function() {
    document.getElementById("combat_settings").style.display = "none", document.getElementById("visual_settings").style.display = "none",
    document.getElementById("placers_settings").style.display = "none", document.getElementById("movement_settings").style.display = "none",
    document.getElementById("labels_settings").style.display = "block", document.getElementById("extra_settings").style.display = "none",
    document.getElementById("themes_settings").style.display = "none";
    try {
        document.querySelectorAll('.category').forEach(function(t) {
            t.classList && t.classList.remove('active');
        });
    } catch (t) {}
    try {
        this.classList && this.classList.add('active');
    } catch (t) {}
}), document.getElementById("themes").addEventListener("mousedown", function() {
    document.getElementById("combat_settings").style.display = "none", document.getElementById("visual_settings").style.display = "none",
    document.getElementById("placers_settings").style.display = "none", document.getElementById("movement_settings").style.display = "none",
    document.getElementById("labels_settings").style.display = "none", document.getElementById("extra_settings").style.display = "none",
    document.getElementById("themes_settings").style.display = "block";
    try {
        document.querySelectorAll('.category').forEach(function(t) {
            t.classList && t.classList.remove('active');
        });
    } catch (t) {}
    try {
        this.classList && this.classList.add('active');
    } catch (t) {}
}), document.addEventListener("keydown", function(t) {
    try {
        if (t.nt) return;
    } catch (t) {}
    if (27 == t.keyCode) try {
        var e = void 0 !== ct && ct ? ct : document.getElementById('mod_menu');
        if (!e) return;
        e.style.display = 'block' == window.getComputedStyle(e).display ? 'none' : 'block';
    } catch (t) {}
}), window.addEventListener('keydown', function(t) {
    if ('Escape' === t.key || 27 == t.keyCode) {
        var e = document.activeElement;
        if (e && ('INPUT' === e.tagName || 'TEXTAREA' === e.tagName || 'true' === e.contentEditable)) return;
        try {
            t.nt = !0;
        } catch (t) {}
        try {
            var n = void 0 !== ct && ct ? ct : document.getElementById('mod_menu');
            n || ((n = document.createElement('div')).id = 'mod_menu', n.innerText = 'Mod menu (temporary)',
            document.body.appendChild(n), window.menu = n);
            try {} catch (t) {}
            if ('block' == n.style.display || 'block' == window.getComputedStyle(n).display) n.style.display = 'none'; else {
                n.style.position = 'fixed', n.style.left = '50%', n.style.top = '50%', n.style.transform = 'translate(-50%, -50%)',
                n.style.background = 'rgba(39, 39, 39, 1)', n.style.padding = '0px', n.style.zIndex = '2147483647',
                n.style.pointerEvents = 'auto', n.style.maxWidth = '90vw', n.style.maxHeight = '90vh',
                n.style.overflow = 'auto', n.style.display = 'block', n.style.visibility = 'visible';
                try {
                    n.scrollIntoView({
                        block: 'center'
                    });
                } catch (t) {}
                try {
                    void 0 === n.tabIndex && (n.tabIndex = -1), n.focus();
                } catch (t) {}
                try {
                    if (!J) {
                        [ "combat_settings", "visual_settings", "placers_settings", "movement_settings", "labels_settings", "extra_settings", "themes_settings" ].forEach(function(t) {
                            var e = document.getElementById(t);
                            e && (e.style.display = "combat_settings" === t ? 'block' : 'none');
                        });
                        try {
                            document.querySelectorAll('.category').forEach(function(t) {
                                t.classList && t.classList.remove('active');
                            });
                            var i = document.getElementById('combat');
                            i && i.classList && i.classList.add('active');
                        } catch (t) {}
                        J = !0;
                    }
                } catch (t) {}
            }
            try {} catch (t) {}
        } catch (t) {}
    }
}, !0);

for (let t in Z) try {
    var bt = document.getElementById(t);
    if (!bt) continue;
    bt.addEventListener("change", function() {
        try {
            "boolean" == typeof Z[t] ? ("chatlog" == t && ("none" == yt.style.display ? yt.style.display = "block" : yt.style.display = "none"),
            Z[t] = document.getElementById(t).checked) : Z[t] = document.getElementById(t).value;
            try {
                st();
            } catch (t) {}
            try {
                var e = document.getElementById('mod_saved_box');
                e || ((e = document.createElement('div')).id = 'mod_saved_box', e.innerText = 'Saved',
                Object.assign(e.style, {
                    position: 'fixed',
                    left: '12px',
                    top: '12px',
                    padding: '8px 12px',
                    background: 'rgba(0,0,0,0.78)',
                    color: '#d49a9aff',
                    borderRadius: '8px',
                    fontSize: '13px',
                    pointerEvents: 'none',
                    zIndex: '2147483647',
                    opacity: '0',
                    transform: 'translateY(-6px)',
                    transition: 'opacity 200ms ease, transform 200ms ease'
                }), document.body.appendChild(e)), e.innerText = 'Saved';
                try {
                    e.it && (clearTimeout(e.it), e.it = null);
                } catch (t) {}
                requestAnimationFrame(function() {
                    e.style.opacity = '1', e.style.transform = 'translateY(0)';
                }), e.it = setTimeout(function() {
                    try {
                        e.style.opacity = '0', e.style.transform = 'translateY(-6px)';
                    } catch (t) {}
                }, 1100);
            } catch (t) {}
        } catch (t) {}
    });
} catch (t) {}

function kt(t, e) {
    try {
        e = 'number' == typeof e ? e : 1200;
        var n = 'mod_toast_box';
        var i = document.getElementById(n);
        i || ((i = document.createElement('div')).id = n, Object.assign(i.style, {
            position: 'fixed',
            left: '75px',
            top: '12px',
            transform: 'translateY(-6px)',
            padding: '8px 12px',
            background: 'rgba(0,0,0,0.78)',
            color: '#ffffff',
            borderRadius: '8px',
            fontSize: '13px',
            pointerEvents: 'none',
            zIndex: '2147483647',
            opacity: '0',
            transition: 'opacity 200ms ease, transform 200ms ease'
        }), document.body.appendChild(i));
        try {
            i.style.left = '12px';
        } catch (t) {}
        i.textContent = t;
        try {
            i.it && (clearTimeout(i.it), i.it = null);
        } catch (t) {}
        requestAnimationFrame(function() {
            i.style.opacity = '1', i.style.transform = 'translateY(0)';
        }), i.it = setTimeout(function() {
            try {
                i.style.opacity = '0', i.style.transform = 'translateY(-6px)';
            } catch (t) {}
        }, e);
    } catch (t) {}
}

let yt = document.createElement("div");

function wt(t) {
    var e = document.getElementById('chat_pin');
    e && (e.textContent = t ? '\u0440\u045f\u201c\u040a' : '\u0440\u045f\u201c\u040c');
}

function _t(t, e) {
    let n = new Date;
    let i = n.getMinutes();
    let r = n.getHours();
    let a = n.getSeconds();
    let o = document.createElement("div");
    o.className = "chat_message", o.style.color = `${e}`, o.innerText = `[${r}:${i < 10 ? "0" + i : i}:${a < 10 ? "0" + a : a}] - ${t}`,
    document.getElementById("chat_box").appendChild(o), o.scrollIntoView({
        behavior: 'auto',
        block: 'end'
    });
}

yt.id = "chat_log", yt.style.display = "none", yt.innerHTML = "\n<div id=\"chat_header\" style=\"display:flex;align-items:center;justify-content:space-between;margin-bottom:6px;\">\n    <div id=\"chat_name\">Chat Log</div>\n    <div style=\"display:flex;gap:6px;align-items:center;\">\n        <button id=\"chat_pin\" title=\"Pin chat\" style=\"background:transparent;border:none;color:#fff;cursor:pointer;font-size:14px;\">\u0440\u045f\u201c\u040a</button>\n    </div>\n</div>\n<div id=\"chat_box\"></div>\n",
yt.style.position = 'fixed', yt.style.right = '10px', yt.style.bottom = '10px',
yt.style.width = '320px', yt.style.maxHeight = '40vh', yt.style.overflow = 'auto',
yt.style.background = 'rgba(0,0,0,0.6)', yt.style.border = '4px solid rgba(255, 255, 255, 1)',
yt.style.padding = '8px', yt.style.zIndex = '2147483647', yt.style.pointerEvents = 'auto',
function() {
    try {
        var t = document.getElementById('touch-controls-fullscreen') || document.getElementById('gameCanvas') && document.getElementById('gameCanvas').parentElement;
        t && t.appendChild ? (t.appendChild(yt), yt.style.position = 'absolute', yt.style.right = '10px',
        yt.style.bottom = '10px') : (yt.parentNode || document.body.appendChild(yt), yt.style.position = 'fixed');
    } catch (t) {
        yt.parentNode || document.body.appendChild(yt);
    }
}(), document.addEventListener('fullscreenchange', function() {
    try {
        var t = document.fullscreenElement || document.getElementById('touch-controls-fullscreen');
        t && t.appendChild ? (t.appendChild(yt), yt.style.position = 'absolute') : (document.body.contains(yt) || document.body.appendChild(yt),
        yt.style.position = 'fixed');
    } catch (t) {}
}), function() {
    try {
        var t = document.getElementById('chatlog');
        if (t) {
            yt.style.display = t.checked || Z.chatlog ? 'block' : 'none';
            try {
                document.getElementById('chat_pin') && wt(Z.chatPinned), null !== Z.chatLeft && null !== Z.chatTop && (yt.style.right = 'auto',
                yt.style.left = Z.chatLeft + 'px', yt.style.top = Z.chatTop + 'px', yt.style.bottom = 'auto');
            } catch (t) {}
            t.addEventListener('change', function() {
                yt.style.display = this.checked ? 'block' : 'none', Z.chatlog = this.checked;
                try {
                    st();
                } catch (t) {}
            });
        }
    } catch (t) {}
}(), document.addEventListener('DOMContentLoaded', function() {}), function() {
    var t = document.getElementById('chat_pin');
    if (t) {
        var e = !1;
        var n = 0, i = 0;
        wt(Z.chatPinned), t.addEventListener('click', function(t) {
            Z.chatPinned = !Z.chatPinned, wt(Z.chatPinned);
            try {
                st();
            } catch (t) {}
        });
        var r = document.getElementById('chat_header');
        r.style.cursor = 'move', r.addEventListener('pointerdown', function(t) {
            Z.chatPinned || (e = !0, n = t.clientX - (yt.getBoundingClientRect().left || 0),
            i = t.clientY - (yt.getBoundingClientRect().top || 0), r.setPointerCapture(t.pointerId));
        }), r.addEventListener('pointermove', function(t) {
            if (e) {
                var r = t.clientX - n;
                var a = t.clientY - i;
                yt.style.left = r + 'px', yt.style.top = a + 'px', yt.style.right = 'auto', yt.style.bottom = 'auto';
            }
        }), r.addEventListener('pointerup', function(t) {
            if (e) {
                e = !1;
                try {
                    Z.chatLeft = parseInt(yt.style.left, 10) || 0, Z.chatTop = parseInt(yt.style.top, 10) || 0,
                    st();
                } catch (t) {}
                try {
                    r.releasePointerCapture(t.pointerId);
                } catch (t) {}
            }
        });
    }
}(), _t("Welcome, God!", "#fffafaff");

let xt = document.createElement("style");

xt.type = "text/css", xt.appendChild(document.createTextNode("\n/* ------------------\n   MOD MENU \u0432\u0402\u201d Improved UI\n   Responsive glassmorphism, cleaner typography and fixed scrollbars\n   ------------------ */\n:root{\n    --menu-bg: rgba(12,14,24,0.55);\n    --panel: rgba(20,22,32,0.65);\n    --sidebar: rgba(255,255,255,0.02);\n    --accent: #6b6fe0;\n    --muted: rgba(255,255,255,0.75);\n}\n\n#mod_menu{\n    position: fixed;\n    z-index: 1000000;\n    left: 50%;\n    top: 50%;\n    transform: translate(-50%, -50%);\n    width: min(1100px, 95vw);\n    height: min(800px, 90vh);\n    max-width: 1100px;\n    max-height: 900px;\n    border-radius: 14px;\n    overflow: hidden;\n    background: linear-gradient(180deg, rgba(18,20,30,0.72), rgba(10,12,18,0.52));\n    backdrop-filter: blur(12px) saturate(120%);\n    box-shadow: 0 18px 60px rgba(0,0,0,0.6), inset 0 1px 0 rgba(255,255,255,0.02);\n    border: 1px solid rgba(255,255,255,0.04);\n    animation: modmenu-fade 320ms ease;\n    font-family: Inter, system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial;\n    color: var(--muted);\n}\n\n/* header area (title + close) */\n#name_text{\n    display:flex;\n    align-items:center;\n    justify-content:space-between;\n    gap:12px;\n    padding: 14px 18px;\n    font-size: 20px;\n    font-weight: 700;\n    color: #fff;\n    letter-spacing: 1px;\n    text-transform: uppercase;\n}\n\n#name_text .subtitle{font-weight:400; font-size:12px; opacity:0.85; text-transform:none; letter-spacing:0}\n\n/* sidebar */\n#category_block{\n    position: absolute;\n    top: 55px;\n    left: 12px;\n    width: 260px;\n    bottom: 12px;\n    padding: 12px;\n    background: var(--sidebar);\n    border-radius: 10px;\n    overflow-y: auto;\n    border: 1px solid rgba(255, 255, 255, 0.12);\n}\n\n.category{\n    display:flex;\n    align-items:center;\n    gap:12px;\n    padding:10px 12px;\n    margin:8px 4px;\n    border-radius:10px;\n    cursor:pointer;\n    transition: all 180ms ease;\n    color: #e6e9ff;\n}\n\n.category_icon{ color: var(--accent); font-size:20px }\n.category_text{ font-size:14px; font-weight:600 }\n\n.category:hover{ background: linear-gradient(90deg, rgba(107,111,224,0.07), rgba(255,255,255,0.02)); transform: translateX(6px); box-shadow: 0 6px 18px rgba(12,14,30,0.45) }\n\n.category.active{ background: linear-gradient(90deg, rgba(107,111,224,0.12), rgba(255,255,255,0.03)); box-shadow: 0 8px 24px rgba(15,16,40,0.5); transform: translateX(6px) }\n\n#exit{ position: absolute; left:12px; right:12px; bottom:12px; height:48px; display:flex; align-items:center; justify-content:center; background: transparent; border-radius:10px; }\n#exit .category_text{ color: #ffbdbd }\n\n/* content panel */\n.settings_block{\n    position: absolute;\n    top: 5px;\n    left: 310px; /* sidebar 260 + margin */\n    right: 12px;\n    bottom: 12px;\n    padding: 18px;\n    overflow-y: auto;\n    background: var(--sidebar);\n    border-radius: 10px;\n    border: 1px solid rgba(255, 255, 255, 0.12);\n}\n\n.settings_title{ color: #8b8b8bff; font-weight:700; margin-bottom:8px; font-size:20px }\n\n.setting2{ margin-bottom:8px }\n\n.setting_element{\n    display:flex; align-items:center; justify-content:space-between; gap:12px; padding:10px 12px; border-radius:10px; background: rgba(56, 56, 56, 1);\n}\n.setting_element:hover{ background: rgba(107,111,224,0.04); box-shadow: 0 6px 18px rgba(12,14,30,0.35) }\n\n.setting_name{ font-size:13px; color: #edf2ff; font-weight:600 }\n\n/* improved toggles */\n.menu_checkbox{ appearance:none; width:48px; height:26px; border-radius:999px; background: rgba(255,255,255,0.12); position:relative; cursor:pointer; border:1px solid rgba(0,0,0,0.25) }\n.menu_checkbox::after{ content:\"\"; position:absolute; width:20px; height:20px; left:3px; top:3px; border-radius:50%; background:#fff; transition: all 200ms cubic-bezier(.2,.9,.2,1); box-shadow: 0 4px 10px rgba(0,0,0,0.35) }\n.menu_checkbox:checked{ background: linear-gradient(90deg,var(--accent), #8f93f9) }\n.menu_checkbox:checked::after{ transform: translateX(22px); }\n\n/* inputs & buttons */\ninput[type='text'], input[type='number'], input[type='color'], select, .menu_button {\n    font-family: inherit;\n    outline: none;\n}\n\n/* pretty form controls aligned to right side of setting rows */\n.setting_element input[type='text'], .setting_element input[type='number'], .setting_element select, .setting_element input[type='color']{\n    min-width: 220px;\n    max-width: 420px;\n    width: 36%;\n    padding: 8px 10px;\n    border-radius: 8px;\n    border: 1px solid rgba(255,255,255,0.04);\n    background: rgba(255,255,255,0.02);\n    color: #f3f6ff;\n    box-shadow: inset 0 1px 0 rgba(255,255,255,0.02);\n}\n.setting_element input[type='color']{ padding:4px; width:64px }\n.setting_element input[type='text']::placeholder, .setting_element input[type='number']::placeholder{ color: rgba(255,255,255,0.35) }\n\n/* make native select dropdowns readable on dark menu background */\n.setting_element select{\n    /* keep the selected value readable */\n    color: #f3f6ff;\n    background: rgba(255,255,255,0.02);\n    border-radius: 8px;\n    border: 1px solid rgba(255,255,255,0.04);\n    padding-right: 30px; /* leave room for native arrow */\n    -webkit-appearance: none;\n    appearance: none;\n}\n.setting_element select option{\n    /* dropdown option list (most browsers honor color/background for options) */\n    background: #0b1220; /* dark option background */\n    color: #f3f6ff; /* light option text */\n}\n.setting_element select option:checked{\n    /* highlighted/selected option in list */\n    background: rgba(255,255,255,0.04);\n    color: #111827;\n}\n.setting_element select::-ms-expand{ display: none; }\n\n/* Normalize focus rings \u0432\u0402\u201d some platforms/browsers show a green system focus outline\n   (Windows accent color). Remove it and provide a subtle, consistent focus style. */\n#mod_menu input:focus, #mod_menu select:focus, #mod_menu .menu_checkbox:focus, #mod_menu .menu_color:focus, #mod_menu .menu_select:focus {\n    outline: none !important;\n    box-shadow: none !important;\n    border-color: rgba(255,255,255,0.04) !important;\n}\n#mod_menu input:focus-visible, #mod_menu select:focus-visible, #mod_menu .menu_checkbox:focus-visible {\n    outline: none !important;\n    /* subtle bluish halo so keyboard users still see focus */\n    box-shadow: 0 0 0 4px rgba(107,111,224,0.09) !important;\n}\n\n.menu_button{ background: linear-gradient(135deg, rgba(107,111,224,0.14), rgba(60,64,85,0.12)); color:#fff; border-radius:10px; border:1px solid rgba(255,255,255,0.03); padding:10px 14px; cursor:pointer }\n.menu_button:hover{ box-shadow: 0 10px 30px rgba(107,111,224,0.12); transform: translateY(-2px) }\n\n/* scrollbars (fixed syntax) */\n#mod_menu::-webkit-scrollbar, .settings_block::-webkit-scrollbar, #category_block::-webkit-scrollbar, #chat_box::-webkit-scrollbar { width:10px; height:10px }\n#mod_menu::-webkit-scrollbar-track, .settings_block::-webkit-scrollbar-track, #category_block::-webkit-scrollbar-track, #chat_box::-webkit-scrollbar-track { background: transparent }\n#mod_menu::-webkit-scrollbar-thumb, .settings_block::-webkit-scrollbar-thumb, #category_block::-webkit-scrollbar-thumb, #chat_box::-webkit-scrollbar-thumb {\n    background: linear-gradient(180deg, rgba(110, 110, 110, 0.85), rgba(102, 102, 102, 0.32)); border-radius:10px; box-shadow: inset 0 0 6px rgba(0,0,0,0.4)\n}\n\n\n@keyframes modmenu-fade{ from{ opacity:0; transform: translate(-50%,-52%) scale(.98) } to{ opacity:1; transform: translate(-50%,-50%) scale(1) } }\n\n/* responsive tweaks */\n@media (max-width:720px){\n    #category_block{ display:flex; flex-direction:row; gap:6px; width:calc(100% - 48px); left:12px; top:52px }\n    .settings_block{ left:12px; top:96px; right:12px }\n}\n\n")),
document.head.appendChild(xt);

const Mt = document.createElement("style");

Mt.innerHTML = "\n/* Menu open animation */\n@keyframes menuSlideIn {\n    0% { opacity: 0; transform: translate(-50%, -48%) scale(0.96); }\n    60% { opacity: 1; transform: translate(-50%, -50%) scale(1.005); }\n    100% { transform: translate(-50%, -50%) scale(1); }\n}\n#mod_menu { animation: menuSlideIn 400ms cubic-bezier(0.16, 1, 0.3, 1) !important; border-radius: 18px !important; }\n\n/* Title shimmer */\n@keyframes shimmer {\n    0% { background-position: -200% center; }\n    100% { background-position: 200% center; }\n}\n#name_text {\n    background: linear-gradient(90deg, #fff 0%, rgba(255,255,255,0.65) 50%, #fff 100%) !important;\n    background-size: 200% auto !important;\n    -webkit-background-clip: text !important;\n    -webkit-text-fill-color: transparent !important;\n    animation: shimmer 4s linear infinite !important;\n    letter-spacing: 2px !important;\n}\n\n/* Sidebar item animations */\n@keyframes iconBounce {\n    0%, 100% { transform: translateY(0); }\n    50% { transform: translateY(-3px); }\n}\n.category { border-radius: 12px !important; transition: all 250ms cubic-bezier(0.16, 1, 0.3, 1) !important; }\n.category:hover { transform: translateX(4px) !important; box-shadow: 0 4px 20px rgba(107,111,224,0.15) !important; }\n.category:hover .category_icon { transform: scale(1.15); transition: transform 250ms cubic-bezier(0.16, 1, 0.3, 1); }\n.category.active .category_icon { animation: iconBounce 600ms ease; }\n#exit:hover { background: rgba(255,50,50,0.1) !important; }\n#exit:hover .category_icon { color: #ff3333 !important; animation: iconBounce 300ms ease; }\n\n/* Setting row reveal */\n@keyframes settingRowReveal {\n    from { opacity: 0; transform: translateX(-8px); }\n    to { opacity: 1; transform: translateX(0); }\n}\n.setting2 { animation: settingRowReveal 300ms ease backwards !important; }\n.setting2:nth-child(2) { animation-delay: 30ms; }\n.setting2:nth-child(3) { animation-delay: 60ms; }\n.setting2:nth-child(4) { animation-delay: 90ms; }\n.setting2:nth-child(5) { animation-delay: 120ms; }\n.setting2:nth-child(6) { animation-delay: 150ms; }\n\n/* Setting element hover */\n.setting_element {\n    border: 1px solid rgba(255,255,255,0.03) !important;\n    border-radius: 12px !important;\n    background: rgba(40, 42, 56, 0.6) !important;\n    transition: all 250ms cubic-bezier(0.16, 1, 0.3, 1) !important;\n}\n.setting_element:hover {\n    background: rgba(107,111,224,0.06) !important;\n    box-shadow: 0 4px 20px rgba(107,111,224,0.1) !important;\n    border-color: rgba(107,111,224,0.15) !important;\n    transform: translateY(-1px) !important;\n}\n\n/* Settings title accent color */\n.settings_title {\n    color: var(--accent) !important;\n    text-transform: uppercase !important;\n    letter-spacing: 0.5px !important;\n    border-bottom: 1px solid rgba(255,255,255,0.04) !important;\n    padding-bottom: 8px !important;\n    font-size: 16px !important;\n}\n\n/* Toggle glow on check */\n@keyframes checkboxGlow {\n    0% { box-shadow: 0 0 0 rgba(107,111,224,0); }\n    50% { box-shadow: 0 0 12px rgba(107,111,224,0.4); }\n    100% { box-shadow: 0 0 0 rgba(107,111,224,0); }\n}\n.menu_checkbox:checked { animation: checkboxGlow 400ms ease !important; }\n.menu_checkbox::after { transition: all 300ms cubic-bezier(0.34, 1.56, 0.64, 1) !important; }\n\n/* Input focus glow */\n.setting_element input:focus, .setting_element select:focus {\n    border-color: var(--accent) !important;\n    box-shadow: 0 0 0 3px rgba(107,111,224,0.15), inset 0 2px 4px rgba(0,0,0,0.2) !important;\n}\n\n/* Thinner scrollbar */\n.settings_block::-webkit-scrollbar, #category_block::-webkit-scrollbar { width: 5px !important; }\n.settings_block::-webkit-scrollbar-thumb, #category_block::-webkit-scrollbar-thumb {\n    background: rgba(255,255,255,0.1) !important;\n    border-radius: 999px !important;\n}\n.settings_block::-webkit-scrollbar-thumb:hover, #category_block::-webkit-scrollbar-thumb:hover {\n    background: rgba(255,255,255,0.2) !important;\n}\n\n/* Sidebar border glow */\n#category_block {\n    border: 1px solid rgba(255,255,255,0.06) !important;\n    border-radius: 14px !important;\n}\n",
document.head.appendChild(Mt);