Talk:Cursors.io hacks (cheats)/@comment-206.248.121.213-20200915192503/@comment-160.202.39.105-20201122163355


 * 1) // ==UserScript==
 * 2) // @name cursors.io hack --working-- (2019)
 * 3) // @namespace q1k
 * 4) // @version 1.1.0
 * 5) // @description cursorsio hack - drawing, texting, player ids, & more
 * 6) // @author q1k
 * 7) // @match http://cursors.io/
 * 8) // @grant none
 * 9) // @run-at document-idle
 * 10) // ==/UserScript==
 * 11) ___ _ _ _ __ ___ ___ _ __ ___ _ ___
 * 12) / __| | | | `__/ __|/ _ \| `__/ __| | |/ _ \
 * (__| |_| | | \__ \ (_) | | \__ \_| | (_) |
 * 1) \___|\__,_|_| |___/\___/|_| |___(_)_|\___/
 * 2) for a more updated version, go here:
 * 3) https://greasyfork.org/scripts/369975
 * 4) /* How to use:
 * 5) 1. Go to cursors.io, open console (ctrl + shift + j or F12)
 * 6) and paste this entire script into the console, then hit enter
 * 7) -if you experience problems running the script, make sure to block "cursors.io/client_out.js"
 * 8) 2. To type: type message and hit enter (shift+enter for new row)
 * 9) -all ascii characters are available
 * 10) 3. To move your cursor only when clicking: press numpad . OR delete
 * 11) -Pathfinder will be active in this mode. (CTRL+click to ignore pathfinder)
 * 12) -try not to use a too low value of the delay, or you may get disconnected on some levels
 * 13) --make sure 'no cursor lock' is marked so pathfinder works correctly
 * 14) To move your cursor normally: press numpad . again
 * 15) 4. To draw a circle: press numpad 0 OR insert
 * 16) To stop drawing a circle: press numpad 0 again
 * 17) 5. To draw arrows, use the arrow keys
 * 18) 6. To draw different images press numpad 1 - numpad 9 keys
 * 19) 7. To make drawings bigger/smaller use numpad + and -
 * 20) 8. Reset drawing size with numpad *
 * 21) 9. To show/hide cursors ids: press F8
 * 22) 10. Change ids position with: F9
 * 23) 11. To show this help: press F1
 * 24) var _tempOnClose;
 * 25) var _tempChangeCanvasID = undefined;
 * 26) var canvas = document.getElementById("canvas"),
 * 27) _tempEvt = function {
 * 28) _tempOnClose;
 * };
 * 1) if (_tempChangeCanvasID != undefined) canvas.setAttribute("id", _tempChangeCanvasID);
 * 2) if (canvas.style.cursor == "none") {
 * 3) var _tempWSSend = WebSocket.prototype.send;
 * 4) WebSocket.prototype.send = function(send) {
 * 5) return function(data) {
 * 6) if (this.readyState == 1) {
 * 7) this.onclose = _tempEvt;
 * 8) this.close;
 * }
 * 1) if (this.readyState > 0) {
 * 2) clearInterval(_tempInterval);
 * 3) WebSocket.prototype.send = _tempWSSend;
 * }
 * 1) return {}
 * }
 * 1) }(WebSocket.prototype.send);
 * 2) var _tempCanvasEvent = function(_mevt) {
 * 3) var _tempMouseEvent;
 * 4) if (document.createEvent) {
 * 5) _tempMouseEvent = document.createEvent("HTMLEvents");
 * 6) _tempMouseEvent.initEvent(_mevt, true, true);
 * 7) } else {
 * 8) _tempMouseEvent = document.createEventObject;
 * 9) _tempMouseEvent.eventType = _mevt;
 * }
 * 1) _tempMouseEvent.eventName = _mevt;
 * 2) if (document.createEvent) {
 * 3) canvas.dispatchEvent(_tempMouseEvent);
 * 4) } else {
 * 5) canvas.fireEvent("on" + _tempMouseEvent.eventType, _tempMouseEvent);
 * }
 * };
 * 1) var _tempInterval = setInterval(function {
 * 2) _tempCanvasEvent("mousedown");
 * 3) _tempCanvasEvent("mousedown");
 * }, 100)
 * 1) } else {
 * 2) setTimeout(_tempEvt, 0);
 * }
 * 1) _tempOnClose = function {
 * 2) var A = window;
 * 3) var E = document;
 * 4) var posX, posY;
 * 5) var lastX, lastY;
 * 6) var serverPosX, serverPosY;
 * 7) var initialLoad = true;
 * 8) var clicksCount = 3;
 * 9) var auraEnabled = false;
 * 10) var auraTime = 0;
 * 11) var auraRadius = 10;
 * 12) var movementEnabled = true;
 * 13) var imgSizeShow = false;
 * 14) var showcursorsid = false;
 * 15) var hideExtraInfo = false;
 * 16) var fontthin = false;
 * 17) var fontSize = 2;
 * 18) var kerning = 3;
 * 19) var alphabet = {
 * 33:0,1,1.5,1],[2,1,2.5,1,//!
 * 34:0,0.5,1,0.5],[0,1.25,1,1.25,//"
 * 35:0.5,-0.25,0.5,2.3],[1.5,-0.25,1.5,2.3],[-0.25,0.5,2.3,0.5],[-0.25,1.5,2.3,1.5,//#
 * 36:0,0,0,2],[1,0,1,2],[2,0,2,2],[0,0,1,0],[1,2,2,2],[-0.5,1,0,1],[2,1,2.5,1,//$
 * 37:1,0,0,0],[0,0,0,1],[0,1,2,1],[2,1,2,2],[2,2,1,2],[1,2,1,0],[2,0,0,2,//% v1
 * 1) //37:0,0,0,0.75],[0,0.75,0.75,0.75],[0.75,0.75,0.75,0],[0.75,0,0,0],[2,0,0,2],[1.25,1.25,1.25,2],[1.25,2,2,2],[2,2,2,1.25],[2,1.25,1.25,1.25,//% v2
 * 2) //37:1,0.5,0.5,0],[0.5,0,0,0.5],[0,0.5,0.5,1],[0.5,1,1,0.5],[2,0,0,2],[2,1.5,1.5,1],[1.5,1,1,1.5],[1,1.5,1.5,2],[1.5,2,2,1.5,//% v3
 * 38:0.5,1,0,1],[0,1,0,0],[0,0,2,0],[2,0,2,0.5],[2,0.5,1,1.5],[1,0,1,0.5],[1,0.5,2,1.5,//&
 * 39:0,0.5,1,0.5, // '
 * 40:0,2,0.5,1],[0.5,1,1.5,1],[1.5,1,2,2,//(
 * 41:0,0,0.5,1],[0.5,1,1.5,1],[1.5,1,2,0,//)
 * 42:0.5,0,1.5,2],[1.5,0,0.5,2],[0,1,2,1,//*
 * 43:0,1,2,1],[1,0,1,2,//+
 * 44:2,0,3,0,//,
 * 45:0.6,0.3,0.6,1.7,//-
 * 46:1.5,0,2,0,//.
 * 47:2,0.4,0,1.6,// /
 * 48:2,0,0,0],[0,0,0,2],[0,2,2,2],[2,2,2,0],[2,0,0,2,//0
 * 49:0,1,2,1],[1,0,0,1],[2,0,2,2,//1
 * 50:0,0,0,2],[0,2,1,2],[1,2,1,0],[1,0,2,0],[2,0,2,2,//2
 * 51:0,0,0,2],[0,2,2,2],[2,2,2,0],[1,0,1,2,
 * 52:0,0,1,0],[1,0,1,2],[0,2,2,2,
 * 53:0,2,0,0],[0,0,1,0],[1,0,1,2],[1,2,2,2],[2,2,2,0,
 * 54:0,2,0,0],[0,0,2,0],[2,0,2,2],[2,2,1,2],[1,2,1,0,
 * 55:0,0,0,2],[0,2,2,0,
 * 56:0,0,0,2],[0,2,2,2],[2,2,2,0],[2,0,0,0],[1,0,1,2,
 * 57:0,0,1,0],[1,0,1,2],[0,2,2,2],[0,0,0,2],[2,0,2,2,//9
 * 58:0,1,0.5,1],[1.5,1,2,1,//:
 * 59:0,1,0.5,1],[2,1,3,1,//;
 * 60:0,2,1,0],[1,0,2,2,//<
 * 61:0.5,0,0.5,2],[1.5,0,1.5,2,//=
 * 62:0,0,1,2],[1,2,2,0,//>
 * 63:[[1,0,0,0],[0,0,0,2],[0,2,1,2],[1,2,1,1],[1,1,1.5,1],[2,1,2.5,1] ],//?
 * 64:2.5,2,2.5,0],[2.5,0,-0.5,0],[-0.5,0,-0.5,2],[-0.5,2,1.5,2],[1.5,2,1.5,1],[1.5,1,0.5,1],[0.5,1,0.5,2,//@
 * 91:0,1.5,0,0.5],[0,0.5,2,0.5],[2,0.5,2,1.5,// [
 * 92:0,0.4,2,1.6,// backslash
 * 93:0,0.5,0,1.5],[0,1.5,2,1.5],[2,1.5,2,0.5,// ]
 * 94:1.5,0,0,1],[0,1,1.5,2,//^
 * 95:[[2,0,2,2] ],//_
 * 96:0,0.5,1,0.5, // ` display same as 39
 * 97:2,0,0,0],[0,2,0,0],[0,2,2,2],[1,0,1,2,//a
 * 98:2,0,0,0],[0,0,0,1],[1,0,1,1],[2,0,2,1],[0,1,0.5,2],[0.5,2,1,1],[1,1,1.5,2],[1.5,2,2,1,//b
 * 99:2,2,2,0],[2,0,0,0],[0,0,0,2,//c
 * 100:2,0,0,0],[0,0,0,1],[0,1,1,2],[1,2,2,1],[2,1,2,0,
 * 101:2,2,2,0],[2,0,0,0],[0,0,0,2],[1,0,1,2,
 * 102:2,0,0,0],[0,0,0,2],[1,0,1,2,
 * 103:1,1,1,2],[1,2,2,2],[2,2,2,0],[2,0,0,0],[0,0,0,2,
 * 104:0,0,2,0],[0,2,2,2],[1,0,1,2,
 * 105:0,0,0,2],[0,1,2,1],[2,0,2,2,
 * 1) //106:0,0,0,2],[0,1,2,1],[2,0,2,1, //j v1
 * 106:1.5,0,2,0],[2,0,2,1.5],[0,1.5,2,1.5],[0,0.85,0,2.25, //j v2
 * 107:0,0,2,0],[1,0,0,2],[1,0,2,2,
 * 108:0,0,2,0],[2,0,2,2,
 * 109:0,0,2,0],[0,0,2,1],[2,1,0,2],[0,2,2,2,
 * 110:0,0,2,0],[0,0,2,2],[0,2,2,2,
 * 111:2,0,0,0],[0,0,0,2],[0,2,2,2],[2,2,2,0,
 * 112:2,0,0,0],[0,0,0,2],[0,2,1,2],[1,2,1,0,
 * 113:2,0,0,0],[0,0,0,2],[0,2,2,2],[2,2,2,0],[1,1,2,2,
 * 114:2,0,0,0],[0,0,0,2],[0,2,1,2],[1,2,1,0],[1,1,2,2,
 * 115:0,0,0,2],[1,0,1,2],[2,0,2,2],[0,0,1,0],[1,2,2,2,
 * 116:0,0,0,2],[0,1,2,1,
 * 117:0,0,2,0],[0,2,2,2],[2,0,2,2,
 * 118:0,0,2,1],[0,2,2,1,
 * 119:0,0,2,0],[0,2,2,2],[2,0,1,1],[2,2,1,1,
 * 120:0,0,2,2],[2,0,0,2,
 * 121:0,0,1,1],[0,2,1,1],[2,1,1,1,
 * 122:0,0,0,2],[0,2,2,0],[2,0,2,2,//z
 * 123:0,1.5,0,0.5],[0,0.5,0.5,0.5],[0.5,0.5,1,0],[1,0,1.5,0.5],[1.5,0.5,2,0.5],[2,0.5,2,1.5,// {
 * 124:0,1,2,1,// |
 * 125:0,0.5,0,1.5],[0,1.5,0.5,1.5],[0.5,1.5,1,2],[1,2,1.5,1.5],[1.5,1.5,2,1.5],[2,1.5,2,0.5,// }
 * 126:0.5,0,0,0.75],[0,0.75,0.5,1.5],[0.5,1.5,0,2.25,// ~
 * };
 * 1) var imageScale = 1.0;
 * 2) var imgData = [
 * 3) /* arrow left */
 * 0,0,0,9],[0,0,-3,3],[0,0,3,3,
 * 1) /* arrow up */
 * 0,0,9,0],[0,0,3,-3],[0,0,3,3,
 * 1) /* arrow right */
 * 0,0,0,-9],[0,0,-3,-3],[0,0,3,-3,
 * 1) /* arrow down */
 * 0,0,-9,0],[0,0,-3,-3],[0,0,-3,3,
 * 1) /*star 5*/
 * 8,0,8,24],[8,24,24,4],[24,4,0,12],[0,12,24,20],[24,20,8,0,
 * 1) /* reversed star */
 * 0,4,24,12],[24,12,0,20],[0,20,16,0],[16,0,16,24],[16,24,0,4,
 * 1) /*tictactoe*/
 * 2) 72,24,0,24],[0,48,72,48],[24,0,24,72],[48,0,48,72],[0,0,0,72],[0,72,72,72],[72,72,72,0],[72,0,0,0,
 * 3) /*triforce*/
 * 4) 20,0,0,10],[0,10,20,20],[20,20,20,0],[10,5,10,15],[10,15,20,10],[20,10,10,5],[2,9,2,11],[3,9,3,11],[4,8,4,12],[5,8,5,12],[6,7,6,13],[7,7,7,13],[8,6,8,14],[9,6,9,14],[12,4,12,6],[12,14,12,16],[13,4,13,6],[13,14,13,16],[14,3,14,7],[14,13,14,17],[15,3,15,7],[15,13,15,17],[16,2,16,8],[16,12,16,18],[17,2,17,8],[17,12,17,18],[18,1,18,9],[18,11,18,19],[19,1,19,9],[19,11,19,19,
 * 5) /*pentashot*/
 * 6) 50,16,66,17],[66,17,65,32],[51,26,72,36],[65,32,65,33],[72,36,64,52],[49,35,69,58],[69,58,54,71],[54,71,35,48],[49,65,33,70],[33,70,25,49],[16,46,16,63],[16,63,30,63],[50,16,51,19],[51,19,51,26],[51,26,49,35],[49,35,46,40],[46,40,43,43],[43,43,38,47],[38,47,32,49],[32,49,27,49],[27,49,24,49],[24,49,21,48],[21,48,16,46],[16,46,13,44],[13,44,10,41],[10,41,8,38],[8,38,5,32],[5,32,4,24],[4,24,5,18],[5,18,8,11],[8,11,12,7],[12,7,16,4],[16,4,21,2],[21,2,25,1],[25,1,31,1],[31,1,35,2],[35,2,40,4],[40,4,45,8],[45,8,48,13],[48,13,50,16,
 * 7) /*heart*/
 * 9,5,4,0],[4,0,2,0],[2,0,1,1],[4,10,9,5],[1,1,1,3],[1,3,3,5],[3,5,1,7],[1,7,1,9],[1,9,2,10],[2,10,4,10,
 * 1) /*penrose*/
 * 2) 33,34,42,40],[36,36,27,42],[33,38,33,26],[27,22,48,36],[48,36,27,50],[27,50,27,22],[42,40,42,52],[48,36,48,56],[48,56,39,50],[42,48,33,54],[33,54,54,68],[54,68,46,72],[48,28,39,22],[42,20,33,26],[42,24,42,12],[42,12,27,22],[48,28,48,0],[48,0,54,4],[54,4,54,68],[27,42,18,36],[21,38,21,26],[21,34,12,40],[27,50,12,40],[21,26,0,40],[0,40,0,32],[0,32,48,0],[0,40,46,72,
 * 3) /*boxception*/
 * 4) 60,0,0,0],[0,0,0,60],[0,60,60,60],[60,60,60,0],[60,0,0,3],[0,3,3,60],[3,60,60,57],[60,57,57,0],[57,0,0,6],[0,6,6,60],[6,60,60,54],[60,54,54,0],[54,0,0,9],[0,9,9,60],[9,60,60,51],[60,51,51,0],[51,0,0,12],[0,12,12,60],[12,60,60,48],[60,48,48,0],[48,0,0,15],[0,15,15,60],[15,60,60,45],[60,45,45,0],[45,0,0,18],[0,18,18,60],[18,60,60,42],[60,42,42,0],[42,0,0,21],[0,21,21,60],[21,60,60,39],[60,39,39,0],[39,0,0,24],[0,24,24,60],[24,60,60,36],[60,36,36,0],[36,0,0,27],[0,27,27,60],[27,60,60,33],[60,33,33,0],[33,0,0,30],[0,30,30,60],[30,60,60,30],[60,30,30,0],[30,0,0,33],[0,33,33,60],[33,60,60,27],[60,27,27,0],[27,0,0,36],[0,36,36,60],[36,60,60,24],[60,24,24,0],[24,0,0,39],[0,39,39,60],[39,60,60,21],[60,21,21,0],[21,0,0,42],[0,42,42,60],[42,60,60,18],[60,18,18,0],[18,0,0,45],[0,45,45,60],[45,60,60,15],[60,15,15,0],[15,0,0,48],[0,48,48,60],[48,60,60,12],[60,12,12,0],[12,0,0,51],[0,51,51,60],[51,60,60,9],[60,9,9,0],[9,0,0,54],[0,54,54,60],[54,60,60,6],[60,6,6,0],[6,0,0,57],[0,57,57,60],[57,60,60,3],[60,3,3,0],[3,0,0,60,
 * 5) /*cursor*/
 * 0,0,7,7],[7,7,7,3],[7,3,9.5,0],[9.5,0,0,0,
 * 1) /*dickbutt*/
 * 2) 105,27,81,12],[81,12,45,5],[45,5,39,2],[39,2,29,8],[29,8,30,15],[30,15,35,19],[35,19,43,15],[43,15,45,5],[45,5,40,12],[40,12,34,13],[34,13,29,8],[22,38,33,32],[33,32,39,35],[39,35,37,47],[37,47,29,50],[29,50,24,46],[24,46,22,38],[22,38,28,43],[28,43,35,40],[35,40,39,35],[33,24,46,17],[46,17,49,20],[49,20,46,28],[41,52,60,8],[29,8,14,14],[14,14,6,23],[6,23,3,37],[3,37,5,47],[5,47,15,55],[15,55,48,63],[48,63,71,74],[71,74,63,81],[63,81,58,91],[58,91,59,99],[59,99,29,103],[29,103,27,109],[27,109,31,115],[31,115,60,114],[60,114,55,123],[55,123,57,127],[57,127,63,127],[63,127,65,120],[63,127,66,132],[66,132,73,132],[73,132,78,121],[78,121,69,116],[69,116,66,105],[66,105,67,96],[67,96,59,99],[67,96,70,89],[70,89,68,83],[70,89,77,84],[78,121,86,122],[86,122,103,114],[103,114,110,104],[110,104,111,97],[111,97,138,103],[138,103,132,85],[132,85,125,81],[125,81,127,94],[127,94,113,91],[113,91,120,79],[120,79,122,64],[122,64,152,62],[152,62,144,46],[144,46,138,44],[138,44,141,57],[141,57,122,58],[122,58,119,43],[119,43,105,27],[61,50,91,59],[91,59,96,57],[96,57,102,58],[102,58,102,62],[102,62,95,61],[95,61,102,65],[102,65,101,68],[101,68,94,66],[94,66,94,75],[94,75,91,75],[91,75,88,64],[88,64,60,56],[73,82,74,80],[79,97,82,95],[92,96,94,94],[96,100,98,98],[100,105,101,104],[48,111,49,109],[52,111,53,109,
 * ];
 * 1) function sa(f) {
 * 2) return f << 1;
 * }
 * 1) function ta(f) {
 * 2) return f << 1;
 * }
 * 1) function U {
 * 2) return E.pointerLockElement === y || E.mozPointerLockElement === y || E.webkitPointerLockElement === y;
 * }
 * 1) function ba {
 * 2) a.fillStyle = "#000000";
 * 3) a.font = "35px NovaSquare";
 * 4) a.fillText("Please do not embed our website, thank you.", 400 - a.measureText("Please do not embed our website, thank you.").width / 2, 300);
 * 5) a.font = "16px NovaSquare";
 * 6) a.fillText("Play http://cursors.io/", 400 - a.measureText("Play http://cursors.io/").width /
 * 2, 330);
 * 1) top.location = "http://cursors.io";
 * 2) throw "Please do not embed our website, thank you.";
 * }
 * 1) function ua(f) {
 * 2) V(f);
 * }
 * 1) function W(f, b) {
 * 2) J = f;
 * 3) K = b;
 * 4) posX = k = v = f;
 * 5) posY = q = w = b;
 * 6) B = v << 1;
 * 7) C = w << 1;
 * }
 * 1) function unfocus {
 * 2) elm.forEach(function(i) { i.blur });
 * }
 * 1) window.changedelay = function(d) {
 * 2) d = Math.floor(parseInt(d));
 * 3) var dd = document.getElementById('delay');
 * 4) if (d >= 0) {dd.value = delay = d;}
 * 5) else dd.value = delay = 0;
 * }
 * 1) window.changefontsize = function(d) {
 * 2) d = parseFloat(d);
 * 3) var dd = document.getElementById('fontsize');
 * 4) if (d >0) {dd.value = fontSize = d;}
 * 5) else dd.value = fontSize = 2;
 * }
 * 1) window.changefontwidth = function(d) {
 * 2) if (d.checked) { textwidth=2/3; fontthin=true; d.blur; }
 * 3) else { textwidth=1; fontthin=false; d.blur; }
 * }
 * 1) window.cmessage = "by q1k";
 * 2) window.changecmessage = function(d) {
 * 3) var dd = document.getElementById('cmessage');
 * 4) cmessage = d;
 * }
 * 1) window.changeImgSize = function(d) {
 * 2) d = Math.floor(parseInt(d));
 * 3) var tmp = d/100;
 * 4) var dd = document.getElementById('imgsize');
 * 5) if (d > 0) {
 * 6) dd.value = d;
 * 7) imageScale = tmp;
 * 8) imgSizeDisplay;
 * }
 * 1) else {
 * 2) dd.value = 10;
 * 3) imageScale = 0.1;
 * 4) imgSizeDisplay;
 * }
 * }
 * 1) window.disablemovement = function(d) {
 * 2) if (d.checked) { movementEnabled = false; d.blur }
 * 3) else { movementEnabled = true; d.blur }
 * }
 * 1) window.changeextrainfo = function(d) {
 * 2) if (d.checked) { hideExtraInfo = true; d.blur; }
 * 3) else { hideExtraInfo = false; d.blur; }
 * }
 * 1) window.toggler = function {
 * 2) var dd = document.getElementById('toggle');
 * 3) dd.classList.toggle('open');
 * 4) if (dd.classList.contains('open')) dd.innerHTML = "hide advanced options ";
 * 5) else dd.innerHTML = "show advanced options ";
 * }
 * 1) var elm=[];
 * 2) function Ma {
 * 3) var el1 = document.querySelectorAll("a[href='https://m28.studio/']");
 * 4) var par = el1[0].parentElement;
 * 5) var add = " "
 * 6) +" show advanced options "
 * 7) +" delay:  "
 * 8) +" "
 * 9) +" font size:  "
 * 10) +" "
 * 11) +" message:  "
 * 12) +" image size:  "
 * 13) +" always hide extra labels:  "
 * 14) par.appendChild(document.createElement('div')).setAttribute('id','h-options');
 * 15) document.getElementById('h-options').innerHTML = add;
 * 16) elm = Array.from(document.querySelectorAll("input"));
 * }
 * 1) var css = " #options,#options>div{margin-top:.5em;position:relative}#help,#toggle{cursor:pointer}#options,#options>div,#toggle span{position:relative}#help span,#toggle span::after{background-size:100% 100%;width:100%}#options>div span.info::before,#toggle span::after{content:'';background-repeat:no-repeat}a[href*=m28],a[href*=m28]~br,div[style*='height: 90px']{display:none}*{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{opacity:1}#h-options{float:right;margin-bottom:1em}#help{float:right;width:1.75em;height:1.75em}#help span{display:block;background-color:#bfeaf8;background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMTAwMCAxMDAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAwIDEwMDAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxnPjxwYXRoIGQ9Ik01MDAsOTkwQzIyOS44LDk5MCwxMCw3NzAuMiwxMCw1MDBDMTAsMjI5LjgsMjI5LjgsMTAsNTAwLDEwYzI3MC4yLDAsNDkwLDIxOS44LDQ5MCw0OTBDOTkwLDc3MC4yLDc3MC4yLDk5MCw1MDAsOTkweiBNNTAwLDYwLjRDMjU3LjYsNjAuNCw2MC40LDI1Ny42LDYwLjQsNTAwYzAsMjQyLjQsMTk3LjIsNDM5LjYsNDM5LjYsNDM5LjZjMjQyLjQsMCw0MzkuNi0xOTcuMSw0MzkuNi00MzkuNkM5MzkuNiwyNTcuNiw3NDIuNCw2MC40LDUwMCw2MC40eiIvPjxwYXRoIGQ9Ik00NTAuMyw2NTIuNHYtMzIuM2MwLTEzLjYsMS0yNS44LDMtMzYuNWMyLTEwLjcsNS0yMC45LDkuMy0zMC41YzQuMy05LjYsOS45LTE5LDE3LTI4YzcuMS05LjEsMTYtMTguNywyNi43LTI4LjlsMzguMi0zNi41YzEwLjctOS42LDE5LjktMjAuNCwyNy42LTMyLjNjNy43LTExLjksMTEuNS0yNi4zLDExLjUtNDMuM2MwLTIyLjEtNy00MC42LTIwLjgtNTUuNmMtMTMuOS0xNS0zMy42LTIyLjUtNTkuMS0yMi41Yy0xMywwLTI0LjcsMi40LTM1LjIsNy4yYy0xMC40LDQuOC0xOS41LDExLjMtMjcuMSwxOS41Yy03LjcsOC4yLTEzLjUsMTcuNy0xNy40LDI4LjRjLTMuOSwxMC44LTYuMiwyMS44LTYuOCwzMy4xTDMxMi45LDM4NWMzLjMtMjcuMiwxMC42LTUxLjQsMjEuNi03Mi42YzExLTIxLjIsMjUuMy0zOS4yLDQyLjgtNTMuOWMxNy42LTE0LjcsMzcuNy0yNS45LDYwLjMtMzMuNWMyMi42LTcuNyw0Ny0xMS40LDczLTExLjRjMjQuMywwLDQ3LjQsMy42LDY5LjIsMTAuNmMyMS44LDcuMSw0MSwxNy42LDU3LjcsMzEuNGMxNi43LDEzLjgsMjkuOCwzMSwzOS40LDUxLjRjOS42LDIwLjMsMTQuNCw0My45LDE0LjQsNzAuNGMwLDE4LjEtMiwzMy45LTUuOSw0Ny41Yy0zLjksMTMuNi05LjYsMjYtMTcsMzcuNGMtNy4zLDExLjMtMTYuMiwyMi4yLTI2LjcsMzIuNmMtMTAuNCwxMC40LTIyLjIsMjEuNC0zNS4yLDMyLjZjLTExLjMsOS42LTIwLjUsMTguMi0yNy42LDI1LjVjLTcuMSw3LjMtMTIuNywxNC43LTE3LDIyLjFjLTQuMyw3LjMtNy4yLDE1LjItOC45LDIzLjdjLTEuNyw4LjUtMi42LDE4LjktMi42LDMxLjR2MjIuMUg0NTAuM3ogTTQzMy4zLDc3MC4zYzAtMTgsNi42LTMzLjYsMjAtNDYuNmMxMy4yLTEzLDI5LjMtMTkuNSw0Ny45LTE5LjVjMTguMSwwLDM0LDYuMiw0Ny41LDE4LjdjMTMuNiwxMi40LDIwLjQsMjcuNywyMC40LDQ1LjhjMCwxOC4xLTYuNywzMy43LTIwLDQ2LjdjLTEzLjMsMTMtMjkuMywxOS41LTQ4LDE5LjVjLTkuMSwwLTE3LjctMS44LTI1LjktNS4xYy04LjEtMy40LTE1LjQtNy45LTIxLjUtMTMuNmMtNi4yLTUuNi0xMS4yLTEyLjQtMTQuOS0yMC4zQzQzNS4xLDc4Ny44LDQzMy4zLDc3OS4zLDQzMy4zLDc3MC4zeiIvPjwvZz48L3N2Zz4=);border-radius:100%;height:100%}#options,#options::after{border:1px solid #AAA;background-color:#FCFCFC}#options-cont{float:right;text-align:right;margin-right:1.5em}#options{visibility:hidden;opacity:0;transition:all 250ms;text-align:right;display:flex;flex-direction:column;width:auto}#options>div,#toggle,#toggle span{display:inline-block}#options::after{content:'';border-width:1px 0 0 1px;border-radius:0 0 100%;width:8px;height:8px;position:absolute;right:.75em;top:-5px;transform:rotate(45deg)}#options>div{padding-right:1.75em}#options>:first-child{margin-top:0}#options label input:not([type=checkbox]){width:10em}#options #delay,#options #fontsize{width:8.5em}#options #fontwidth,#options #pathfinder{padding:0;margin:0 .1em 0 .4em;width:1em}#toggle.open~#options::after{opacity:1}#toggle.open~#options{visibility:visible;padding:.5em;opacity:1}#toggle{-webkit-appearance:button;-moz-appearance:button;-ms-appearance:button;appearance:button;height:1.25em;line-height:1.25em;padding:.25em .5em}#toggle span{margin-left:.25em;height:0;width:1.125em}#toggle span::after{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMSAzMSI+PHBvbHlnb24gZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEuNSIgcG9pbnRzPSIxIDEsMTYgMzAsMzAgMSwxNiAxMCwxIDEiLz48L3N2Zz4=);position:absolute;height:1em;bottom:0;right:0;margin-bottom:-.25em}#toggle.open span::after{transform:rotate(180deg)}#options>div span.info{display:inline-block;position:absolute;width:1.25em;right:0;top:0}#options>div span.info::before{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTYwIiB3aWR0aD0iMTYwIiB2ZXJzaW9uPSIxLjAiPjxnIGZpbGw9IiM0YjRiNGIiPjxwYXRoIGQ9Im04MCAxNWMtMzUuODggMC02NSAyOS4xMi02NSA2NXMyOS4xMiA2NSA2NSA2NSA2NS0yOS4xMiA2NS02NS0yOS4xMi02NS02NS02NXptMCAxMGMzMC4zNiAwIDU1IDI0LjY0IDU1IDU1cy0yNC42NCA1NS01NSA1NS01NS0yNC42NC01NS01NSAyNC42NC01NSA1NS01NXoiLz48cGF0aCBkPSJtNTcuMzczIDE4LjIzMWE5LjM4MzQgOS4xMTUzIDAgMSAxIC0xOC43NjcgMCA5LjM4MzQgOS4xMTUzIDAgMSAxIDE4Ljc2NyAweiIgdHJhbnNmb3JtPSJtYXRyaXgoMS4xOTg5IDAgMCAxLjIzNDIgMjEuMjE0IDI4Ljc1KSIvPjxwYXRoIGQ9Im05MC42NjUgMTEwLjk2Yy0wLjA2OSAyLjczIDEuMjExIDMuNSA0LjMyNyAzLjgybDUuMDA4IDAuMXY1LjEyaC0zOS4wNzN2LTUuMTJsNS41MDMtMC4xYzMuMjkxLTAuMSA0LjA4Mi0xLjM4IDQuMzI3LTMuODJ2LTMwLjgxM2MwLjAzNS00Ljg3OS02LjI5Ni00LjExMy0xMC43NTctMy45Njh2LTUuMDc0bDMwLjY2NS0xLjEwNSIvPjwvZz48L3N2Zz4=);background-size:contain;background-position:center right;width:100%;padding-top:80%;position:absolute;top:0;right:0;cursor:help}span.info::after{pointer-events:none;text-align:center;white-space:pre;font-size:85%;font-family:Arial,sans-serif;background-color:#FCFCFC;border:1px solid #AAA;box-shadow:0 0 10px 1px #AAA;padding:.35em;position:absolute;bottom:0;left:50%;transform:translateX(calc(-50% + .125em));z-index:2;display:none}span.info:hover::after{display:block}span.info.pf::after{content:'Enter your prefered delay for the pathfinder.\\A But beware of using too small values,\\A the server may kick you on some levels\\A if you pass a large distance too quickly.\\A\\A Use CTRL+click to ignore pathfinder.\\A Toggle with numpad dot OR delete'}span.info.font::after{content:'Enter font size for writing.\\A\\A Mark the checkbox for thin text\\A Hotkey: F10'}span.info.msg::after{content:'Enter your own message to spam.\\A\\A Hotkey: Page Up'}span.info.img::after{content:'Enter image size (%).\\A\\A Draw images with numpad 1 to 9\\A\\A Increase img size: numpad +\\A Descrease img size: numpad -\\A Reset img size: numpad *'}span.info.einfo::after{content:'Hide the top corners indicators\\A of movement/pathfinder and aura\\A\\A Hotkey: F11'} ";
 * 2) function va(f) {
 * 3) if (D) return L = !1, V(f), !1;
 * 4) U ? X || (X = !0, W(k, q)) : (X = !1, D || M.checked || y.requestPointerLock && y.requestPointerLock);
 * 5) if (L) L = !1, Q;
 * 6) else if (V(f), (f.ctrlKey || f.shiftKey) && !H.checked) Y = !0, R = k, S = q;
 * 7) else if (100 < t - ca && v == k && w == q) {
 * 8) ca = t;
 * 9) I.push([v << 1, w << 1, t]);
 * 10) wa(v, w, clicksCount);
 * 11) var b = [v, w];
 * 12) N.push(b);
 * 13) setTimeout(function {
 * 14) N.remove(b);
 * }, 1E3);
 * }
 * 1) return !1;
 * }
 * 1) function xa(f) {
 * 2) Y = !1;
 * }
 * 1) function ya {
 * 2) A.localStorage && M && (A.localStorage.setItem("noCursorLock", M.checked ? "1" : "0"), A.localStorage.setItem("noDrawings", H.checked ? "1" : "0"));
 * }
 * 1) function V(f) {
 * 2) if (U) {
 * 3) var b = f.webkitMovementX || f.mozMovementX || f.movementX || 0;
 * 4) f = f.webkitMovementY || f.mozMovementY || f.movementY || 0;
 * 5) 300 > Math.abs(b) + Math.abs(f) && (B += b, C += f, v = B >> 1, w = C >> 1);
 * 6) } else f.offsetX ? (B = f.offsetX, C = f.offsetY) : f.layerX && (B = f.layerX, C = f.layerY), v = B >> 1, w = C >> 1;
 * 7) lastX = posX;
 * 8) lastY = posY;
 * 9) posX = k;
 * 10) posY = q;
 * 11) if (Z, !U || v == k && w == q || (f = b = 0, v > k && (b = 1),
 * 12) w > q && (f = 1), v = k, w = q, B = (v << 1) + b, C = (w << 1) + f), Y && (R != k || S != q) && 50 < t - da) {
 * 13) b = R;
 * 14) f = S;
 * 15) var a = k,
 * 16) d = q;
 * 17) if (!D && null != u && u.readyState == WebSocket.OPEN) {
 * 18) var g = new ArrayBuffer(9),
 * 19) e = new DataView(g);
 * 20) e.setUint8(0, 3);
 * 21) e.setUint16(1, b, !0);
 * 22) e.setUint16(3, f, !0);
 * 23) e.setUint16(5, a, !0);
 * 24) e.setUint16(7, d, !0);
 * 25) u.Send(g);
 * }
 * 1) R = k;
 * 2) S = q;
 * 3) da = t;
 * }
 * }
 * 1) function Z {
 * 2) ea(k, q) && Q;
 * 3) if (z(k, q)) {
 * 4) var a;
 * a: {
 * 1) a = k;
 * 2) var b = q,
 * 3) c = [],
 * 4) d = new Uint8Array(12E4);
 * 5) c.push([a, b]);
 * 6) d[a + 400 * b] = 1;
 * 7) do {
 * 8) var g = c.shift,
 * 9) e = g[0],
 * 10) g = g[1];
 * 11) if (!(0 > e || 0 > g || 400 <= e || 300 <= g)) {
 * 12) if (!z(e, g)) {
 * 13) a = {
 * x: e,
 * y: g
 * };
 * 1) break a;
 * }
 * 1) d[e - 1 + 400 * g] || (c.push([e - 1, g]), d[e - 1 + 400 * g] = 1);
 * 2) d[e + 1 + 400 * g] || (c.push([e + 1, g]), d[e + 1 + 400 * g] = 1);
 * 3) d[e + 400 * (g - 1)] || (c.push([e, g - 1]), d[e + 400 * (g - 1)] = 1);
 * 4) d[e + 400 * (g + 1)] || (c.push([e, g + 1]), d[e + 400 * (g + 1)] = 1);
 * }
 * 1) } while (0 < c.length);
 * 2) a = {
 * x: a,
 * y: b
 * };
 * }
 * 1) k = a.x;
 * 2) q = a.y;
 * }
 * 1) if (k != v || q != w) a = fa(k, q, v, w), k = a.x, q = a.y;
 * 2) ea(k, q) && Q;
 * }
 * 1) var countlevels=-2;
 * 2) function next {
 * 3) console.log("Next map");
 * 4) initialLoad = true;
 * 5) T.set(za);
 * 6) r = [];
 * 7) I = [];
 * 8) O = [];
 * 9) countlevels+=1;
 * }
 * 1) function ga(f) {
 * 2) a.imageSmoothingEnabled = f;
 * 3) a.mozImageSmoothingEnabled = f;
 * 4) a.oImageSmoothingEnabled = f;
 * 5) a.webkitImageSmoothingEnabled = f;
 * }
 * 1) function Aa {
 * 2) next;
 * 3) console.log("Connected!");
 * }
 * 1) function Ba(a) {
 * 2) next;
 * 3) console.log("Socket closed: " + a.reason);
 * }
 * 1) function Ca(a) {
 * 2) console.log("Socket error");
 * }
 * 1) function Da(a, b) {
 * 2) for (var c = "", d = 0, g = 0; 0 != (g = a.getUint8(b)); ++b) d <<= 8, d |= g, g & 128 || (c += String.fromCharCode(d), d = 0);
 * 3) 0 != d && (c += String.fromCharCode(d));
 * 4) return [c, b + 1];
 * }
 * 1) function Ea(a, b) {
 * 2) setTimeout(function {
 * 3) var c = a.getUint16(b, !0),
 * 4) d = 0;
 * a: for (d < c; d++) {
 * 1) for (var g = a.getUint16(b + 2 + 4 * d, !0), e = a.getUint16(b + 4 + 4 * d, !0), n = 0; n < N.length; n++) {
 * 2) var l = N[n];
 * 3) if (l[0] == g && l[1] == e) {
 * 4) N.splice(n, 1);
 * 5) continue a;
 * }
 * }
 * 1) I.push([g << 1, e << 1, t]);
 * }
 * }, 100);
 * 1) return b + 2 + 4 * a.getUint16(b, !0);
 * }
 * 1) function Fa(a, b) {
 * 2) !H.checked && setTimeout(function {
 * 3) for (var c = a.getUint16(b, !0), d = 0; d < c; d++) {
 * 4) var g = a.getUint16(b + 2 + 8 * d, !0),
 * 5) e = a.getUint16(b + 4 + 8 * d, !0),
 * 6) n = a.getUint16(b + 6 + 8 * d, !0),
 * 7) l = a.getUint16(b + 8 + 8 * d, !0);
 * 8) O.push([g << 1, e << 1, n << 1, l << 1, t]);
 * }
 * }, 50);
 * 1) return b + 2 + 8 * a.getUint16(b, !0);
 * }
 * 1) function Ga(a) {
 * 2) buttonIndex = 0;
 * 3) initialLoad = false;
 * 4) a = a.data;
 * 5) var b = new DataView(a);
 * 6) switch (b.getUint8(0)) {
 * 7) case 0:
 * 8) ha = b.getUint32(1, !0);
 * 9) break;
 * 10) case 1:
 * 11) var c;
 * 12) ia = c = b.getUint16(1, !0);
 * 13) ja = 100 <= c;
 * 14) var d = [],
 * g;
 * 1) for (g in F) F.hasOwnProperty(g) && d.push(g);
 * 2) for (var e =
 * 3) 0; e < c; e++) {
 * 4) g = b.getUint32(3 + 8 * e, !0);
 * 5) var n = b.getUint16(7 + 8 * e, !0),
 * 6) l = b.getUint16(9 + 8 * e, !0);
 * 7) if (g != ha) {
 * 8) if (null != F[g]) {
 * 9) for (var p = 0; p < d.length; p++)
 * 10) if (d[p] == g) {
 * 11) d.splice(p, 1);
 * 12) break;
 * }
 * 1) g = F[g];
 * 2) g.oldX = g.getX;
 * 3) g.oldY = g.getY;
 * 4) g.newX = n;
 * 5) g.newY = l;
 * 6) g.time = t;
 * 7) } else F[g] = new ka(n, l);
 * 8) } else {
 * 9) serverPosX = n;
 * 10) serverPosY = l;
 * }
 * }
 * 1) for (e = 0; e < d.length; e++) delete F[d[e]];
 * 2) c = Ea(b, 3 + 8 * c);
 * 3) g = b.getUint16(c, !0);
 * 4) c += 2;
 * 5) for (d = 0; d < g; d++) {
 * a: for (n = b.getUint32(c, !0), e = 0; e < r.length; e++)
 * 1) if (r[e].id == n) {
 * 2) var k = r[e];
 * 3) if (1 == k.type)
 * 4) for (var n = k.x | 0, l = k.y | 0, p = k.width | 0, k = k.height | 0, m = l; m < l + k; ++m)
 * 5) for (var h =
 * 6) n; h < n + p; ++h) --T[h + 400 * m];
 * 7) r.splice(e, 1);
 * 8) break a;
 * 9) }c += 4;
 * }
 * 1) g = b.getUint16(c, !0);
 * 2) c += 2;
 * 3) for (d = 0; d < g; d++) {
 * a: {
 * 1) e = b.getUint32(c, !0);
 * 2) for (n = 0; n < r.length; n++)
 * 3) if (r[n].id == e) {
 * 4) e = r[n];
 * 5) break a;
 * }
 * 1) e = {
 * id: e
 * };
 * 1) r.push(e);
 * }
 * 1) c += 4;c = la(b, c, e);
 * }
 * 1) c = Fa(b, c);
 * 2) if (a.byteLength < c + 4) break;
 * 3) aa = b.getUint32(c, !0);
 * 4) break;
 * 5) case 4:
 * 6) next;
 * 7) W(b.getUint16(1, !0), b.getUint16(3, !0));
 * 8) g = b.getUint16(5, !0);
 * 9) c = 7;
 * 10) for (d = 0; d < g; d++) e = {}, e.id = b.getUint32(c, !0), c += 4, c = la(b, c, e), r.push(e);
 * 11) a.byteLength >= c + 4 ? G = Math.max(G, b.getUint32(c, !0)) : a.byteLength >= c + 2 && (G = Math.max(G, b.getUint16(c, !0)));
 * 12) Z;
 * 13) break;
 * 14) case 5:
 * 15) W(b.getUint16(1, !0), b.getUint16(3, !0)), 9 <= b.byteLength ? G = Math.max(G, b.getUint32(5, !0)) : 7 <= b.byteLength && (G = Math.max(G, b.getUint16(5, !0))), Z;
 * }
 * }
 * 1) function Q {
 * 2) if (!(D || L || null == u || u.readyState != WebSocket.OPEN || k == J && q == K) && movementEnabled) {
 * 3) var a = new ArrayBuffer(9);
 * 4) b = new DataView(a);
 * 5) b.setUint8(0, 1);
 * 6) b.setUint16(1, k, !0);
 * 7) b.setUint16(3, q, !0);
 * 8) b.setUint32(5, G, !0);
 * 9) u.send(a);
 * 10) J = k;
 * 11) K = q;
 * }
 * }
 * 1) function Au {
 * 2) Throttler.sendOut;
 * 3) if (auraEnabled) drawAura(J, K);
 * }
 * 1) function wa(a, b, numClicks) {
 * 2) if (!D && null != u && u.readyState == WebSocket.OPEN) {
 * 3) var c = new ArrayBuffer(9),
 * 4) d = new DataView(c);
 * 5) d.setUint8(0, 2);
 * 6) d.setUint16(1, a, !0);
 * 7) d.setUint16(3, b, !0);
 * 8) d.setUint32(5, G, !0);
 * 9) for (var i = 0; i < numClicks; i++) { u.Send(c); }
 * }
 * }
 * 1) function la(f, b, c) {
 * 2) function d {
 * 3) c.x = f.getUint16(b, !0);
 * 4) b += 2;
 * 5) c.y = f.getUint16(b, !0);
 * 6) b += 2;
 * 7) c.width = f.getUint16(b, !0);
 * 8) b += 2;
 * 9) c.height = f.getUint16(b, !0);
 * 10) b += 2;
 * }
 * 1) function g {
 * 2) for (var a = f.getUint32(b, !0).toString(16); 6 > a.length;) a = "0" + a;
 * 3) b += 4;
 * 4) c.color = "#" + a;
 * }
 * 1) var e = f.getUint8(b);
 * 2) b += 1;
 * 3) c.type = e;
 * 4) switch (e) {
 * 5) case 255:
 * 6) break;
 * 7) case 0:
 * 8) c.x = f.getUint16(b, !0);
 * 9) b += 2;
 * 10) c.y = f.getUint16(b, !0);
 * 11) b += 2;
 * 12) c.size = f.getUint8(b);
 * 13) b += 1;
 * 14) c.isCentered = !!f.getUint8(b);
 * 15) b += 1;
 * 16) e = Da(f, b);
 * 17) c.text = e[0];
 * 18) b = e[1];
 * 19) break;
 * 20) case 1:
 * 21) d;
 * 22) var n = !c.color;
 * 23) g;
 * 24) var e = c.x | 0,
 * 25) l = c.y | 0,
 * 26) p = c.width | 0,
 * 27) k = c.height | 0;
 * 28) if (n)
 * 29) for (n = l; n < l + k; ++n)
 * 30) for (var m = e; m < e + p; ++m) ++T[m + 400 * n];
 * 31) break;
 * 32) case 2:
 * 33) d;
 * 34) c.isBad = !!f.getUint8(b);
 * 35) b += 1;
 * 36) break;
 * 37) case 3:
 * 38) d;
 * 39) c.count = f.getUint16(b, !0);
 * 40) b += 2;
 * 41) g;
 * 42) break;
 * 43) case 4:
 * 44) d;
 * 45) c.count ? c.count > f.getUint16(b, !0) && (c.lastClickAt = t) : c.lastClickAt = 0;
 * 46) c.count = f.getUint16(b, !0);
 * 47) b += 2;
 * 48) g;
 * 49) break;
 * 50) case 5:
 * 51) c.x = f.getUint16(b, !0);
 * 52) b += 2;
 * 53) c.y = f.getUint16(b, !0);
 * 54) b += 2;
 * 55) c.queue = [ [0, c.x, c.y]];
 * 56) c.potentialQueue = [];
 * 57) c.explored = new Uint8Array(12E4);
 * 58) c.img = a.createImageData(400, 300);
 * 59) e = E.createElement("canvas");
 * 60) e.width = 400;
 * 61) e.height = 300;
 * 62) c.canvas = e;
 * 63) c.ctx = c.canvas.getContext("2d");
 * 64) break;
 * 65) default:
 * 66) throw Error("Unknown object type " + e);
 * }
 * 1) return b;
 * }
 * 1) function ea(a, b) {
 * 2) if (-1 != J && -1 != K) {
 * 3) var c = fa(J, K, a, b);
 * 4) if (c.x != a || c.y != b) return !0;
 * }
 * 1) for (c = 0; c < r.length; c++) {
 * 2) var d = r[c];
 * 3) if (2 == d.type && !(k < d.x || q < d.y || k >= d.x + d.width || q >= d.y + d.height)) return !0;
 * }
 * 1) return !1;
 * }
 * 1) //var cursorsonline=0;
 * 2) window.showHelp = false;
 * 3) function ma {
 * 4) a.clearRect(0, 0, a.canvas.width, a.canvas.height);
 * 5) a.save;
 * 6) if (null != u && u.readyState != WebSocket.OPEN || L) {
 * 7) var f;
 * 8) if (null == u) f = "Click to begin";
 * 9) else switch (u.readyState) {
 * 10) case WebSocket.CONNECTING:
 * 11) f = "Connecting";
 * 12) break;
 * 13) case WebSocket.CLOSING:
 * 14) case WebSocket.CLOSED:
 * 15) f = "Lost connection to server";
 * 16) break;
 * 17) default:
 * 18) f = "Click to begin";
 * }
 * 1) a.font = 60 + "px NovaSquare";
 * 2) a.fillText(f, 400 - a.measureText(f).width / 2, 300);
 * 3) a.font = 20 + "px NovaSquare";
 * 4) f = "-> script remastered by q1k <-";
 * 5) a.fillText(f, 400 - a.measureText(f).width / 2, 345);
 * 6) na;
 * 7) oa(!1);
 * 8) } else {
 * 9) a.fillStyle = "#000000";
 * 10) a.save;
 * 11) a.globalAlpha = 1;
 * 12) var typeZeroCount = 0;
 * 13) var typeOneCount = 0;
 * 14) var typeTwoCount = 0;
 * 15) var typeThreeCount = 0;
 * 16) var typeFourCount = 0;
 * 17) for (f = 0; f < r.length; f++) {
 * 18) var b = r[f];
 * 19) if (0 == b.type) {
 * 20) a.font = b.size + "px NovaSquare";
 * 21) var c = b.x << 1,
 * 22) d = b.y << 1;
 * 23) b.isCentered && (c -= a.measureText(b.text).width / 2);
 * 24) a.fillStyle = "#000000";
 * 25) a.fillText(b.text, c, d);
 * 26) typeZeroCount++;
 * 27) } else if (1 == b.type) {
 * 28) a.fillStyle = b.color, a.fillRect(b.x << 1, b.y << 1, b.width << 1, b.height << 1);
 * 29) a.strokeStyle = "#000000", a.globalAlpha = .2, a.lineWidth = 2;
 * 30) a.strokeRect((b.x << 1) + 1, (b.y << 1) + 1, (b.width << 1) - 2, (b.height << 1) - 2);
 * 31) a.globalAlpha = 1;
 * 32) typeOneCount++;
 * 33) } else if (2 == b.type) {
 * 34) a.fillStyle = b.isBad ? "#FF0000" : "#00FF00", a.globalAlpha = .2;
 * 35) a.fillRect(b.x << 1, b.y << 1, b.width << 1, b.height << 1);
 * 36) a.globalAlpha = 1;
 * 37) typeTwoCount++;
 * 38) } else if (3 == b.type) {
 * 39) var c = b.x << 1,
 * 40) d = b.y << 1,
 * 41) g = b.width << 1,
 * 42) e = b.height << 1;
 * 43) a.fillStyle = b.color;
 * 44) a.globalAlpha = .2;
 * 45) a.fillRect(c, d, g, e);
 * 46) a.globalAlpha = .5;
 * 47) a.fillStyle = "#000000";
 * 48) if (40 > b.width || 40 > b.height) {
 * 49) a.font = 30 + "px NovaSquare", a.fillText(b.count, c + g / 2 - a.measureText(b.count).width / 2, d + e / 2 + 10);
 * 50) } else {
 * 51) a.font = 60 + "px NovaSquare", a.fillText(b.count, c + g / 2 - a.measureText(b.count).width / 2, d + e / 2 + 20);
 * };
 * 1) a.globalAlpha = 1;
 * 2) typeThreeCount++;
 * 3) } else if (4 == b.type) {
 * 4) c = b.x << 1;
 * 5) d = b.y << 1;
 * 6) g = b.width << 1;
 * 7) e = b.height << 1;
 * 8) a.fillStyle = b.color;
 * 9) a.strokeStyle = b.color;
 * 10) a.globalAlpha = 1;
 * 11) a.fillRect(c, d, g, e);
 * 12) a.globalAlpha = .2;
 * 13) a.fillStyle = "#000000";
 * 14) a.fillRect(c, d, g, e);
 * 15) a.globalAlpha = 1;
 * 16) a.fillStyle = b.color;
 * 17) var n = 150 > t - b.lastClickAt, l = n ? 8 : 12;
 * 18) a.fillRect(c + l, d + l, g - 2 * l, e - 2 * l);
 * 19) a.strokeStyle = "#000000";
 * 20) a.globalAlpha = .1;
 * 21) a.beginPath;
 * 22) a.moveTo(c, d);
 * 23) a.lineTo(c + l, d + l);
 * 24) a.moveTo(c + g, d);
 * 25) a.lineTo(c + g - l, d + l);
 * 26) a.moveTo(c, d + e);
 * 27) a.lineTo(c + l, d + e - l);
 * 28) a.moveTo(c + g, d + e);
 * 29) a.lineTo(c + g - l, d + e - l);
 * 30) a.moveTo(c, d);
 * 31) a.rect(c, d, g, e);
 * 32) a.rect(c + l, d + l, g - 2 * l, e - 2 * l);
 * 33) a.stroke;
 * 34) a.fillStyle = "#000000";
 * 35) a.globalAlpha = .5;
 * 36) if (50 > b.width || 50 > b.height) {
 * 37) a.font = 35 + "px NovaSquare", a.fillText(b.count, c + g / 2 - a.measureText(b.count).width / 2, d + e / 2 + 13);
 * 38) } else {
 * 39) a.font = 45 + "px NovaSquare", a.fillText(b.count, c + g / 2 - a.measureText(b.count).width / 2, d + e / 2 + 16);
 * }
 * 1) n && (a.fillStyle = "#000000", a.globalAlpha = .15, a.fillRect(c + l, d + l, g - 2 * l, e - 2 * l));
 * 2) a.globalAlpha = 1;
 * 3) typeFourCount++;
 * 4) } else 5 == b.type && (ga(!1), a.drawImage(b.canvas, 0, 0, 400, 300, 0, 0, 800, 600, ga(!0)));
 * }
 * 1) if (r.length == 8 && typeZeroCount == 4 && typeOneCount == 3 && typeTwoCount == 1 && typeThreeCount == 0 && typeFourCount == 0) {
 * 2) a.globalAlpha = 1;
 * 3) f = "(Or just play cursors.io)", a.font = 15 + "px NovaSquare", a.fillStyle = "#000000";
 * 4) a.fillText(f, 400 - a.measureText(f).width / 2, 408);
 * }
 * 1) a.restore;
 * 2) if (!D) {
 * 3) a.font = 12 + "px NovaSquare", a.strokeStyle = "#000000", a.fillStyle = "#FFFFFF", a.lineWidth = 2.5;
 * 4) f = ja ? "Area too full, not all cursors are shown" : 30 < ia ? "Area too full, drawing is disabled" : "Use shift+click to draw";
 * 5) a.globalAlpha = .5, a.strokeText(f, 10, 590), a.globalAlpha = 1;
 * 6) a.fillText(f, 10, 590);
 * 7) if (aa != 0) {
 * 8) //f = (cursorsonline+1) + "/" +
 * 9) f = aa + " players online", b = a.measureText(f).width, a.globalAlpha = .5, a.strokeText(f, 790 - b, 590), a.globalAlpha = 1;
 * 10) a.fillText(f, 790 - b, 590);
 * };
 * 1) if (!movementEnabled && !hideExtraInfo) {
 * 2) f = "movement disabled / pathfinder enabled";
 * 3) a.globalAlpha = .5, a.strokeText(f, 10, 15), a.globalAlpha = 1;
 * 4) a.fillText(f, 10, 15);
 * 5) f = "press numpad . OR delete to toggle";
 * 6) a.globalAlpha = .5, a.strokeText(f, 10, 30), a.globalAlpha = 1;
 * 7) a.fillText(f, 10, 30);
 * }
 * 1) if (auraEnabled && !hideExtraInfo) {
 * 2) f = "aura enabled", b = a.measureText(f).width, a.globalAlpha = .5, a.strokeText(f, 790 - b, 15), a.globalAlpha = 1;
 * 3) a.fillText(f, 790 - b, 15);
 * 4) f = "press numpad 0 OR insert to disable", b = a.measureText(f).width, a.globalAlpha = .5, a.strokeText(f, 790 - b, 30), a.globalAlpha = 1;
 * 5) a.fillText(f, 790 - b, 30);
 * }
 * 1) if (imgSizeShow) {
 * 2) f = "image size: " + imgSizePrcnt + "%"; a.globalAlpha = .5, a.strokeText(f, 10, 560), a.globalAlpha = 1;
 * 3) a.fillText(f, 10, 560);
 * 4) //f = "image size: " + imgSizePrcnt + "%", b = a.measureText(f).width, a.globalAlpha = .5, a.strokeText(f, 790 - b, 560), a.globalAlpha = 1;
 * 5) //a.fillText(f, 790 - b, 560);
 * }
 * 1) if (countlevels>0) {
 * 2) f = "level: "+countlevels, b = a.measureText(f).width, a.globalAlpha = .5, a.strokeText(f, 790 - b, 560), a.globalAlpha = 1;
 * 3) a.fillText(f, 790 - b, 560);
 * }
 * }
 * 1) na;
 * 2) if (!H.checked) {
 * 3) a.save;
 * 4) a.strokeStyle = "#000000";
 * 5) a.lineWidth = 1;
 * 6) t = +new Date;
 * 7) a.beginPath;
 * 8) for (f = 0; f < O.length; f++) {
 * 9) b = O[f];
 * 10) c = 10 - (t - b[4]) / 1E3;
 * 11) if (c <= 0) {
 * 12) O.splice(f, 1),
 * 13) --f;
 * 14) } else {
 * 15) 1 < c && (c = 1), a.globalAlpha = .3 * c;
 * 16) a.moveTo(b[0] - .5, b[1] - .5);
 * 17) a.lineTo(b[2] - .5, b[3] - .5);
 * }
 * }
 * 1) a.stroke;
 * 2) a.restore;
 * }
 * 1) a.save;
 * 2) //for (var p in F) F.hasOwnProperty(p) && a.drawImage(P, scale(sa(F[p].getX) - 6), scale(ta(F[p].getY) - 6), scale(P.width), scale(P.height));
 * 3) //cursorsonline=0;
 * 4) for (var p in F) {
 * 5) F.hasOwnProperty(p) && a.drawImage(P, sa(F[p].getX) - 6, ta(F[p].getY) - 6);
 * 6) //cursorsonline+=1;
 * 7) // show ids?
 * 8) if (showcursorsid) {
 * 9) if(cursorIDPos==2) {
 * 10) cp=a.measureText(p).width;
 * 11) a.globalAlpha = .5; a.strokeText( p, sa(F[p].getX) - cp + cursorIDX, ta(F[p].getY) + cursorIDY );
 * 12) a.globalAlpha= 1; a.fillText( p, sa(F[p].getX) - cp + cursorIDX, ta(F[p].getY) + cursorIDY );
 * }
 * 1) else{
 * 2) a.globalAlpha = .5; a.strokeText( p, sa(F[p].getX) + cursorIDX, ta(F[p].getY) + cursorIDY );
 * 3) a.globalAlpha= 1; a.fillText( p, sa(F[p].getX) + cursorIDX, ta(F[p].getY) + cursorIDY );
 * }
 * }
 * }
 * 1) if (showcursorsid) {
 * 2) if(cursorIDPos==2) {
 * 3) cp=a.measureText(ha).width;
 * 4) a.globalAlpha = .5; a.strokeText( ha, sa(k) - cp + cursorIDX, ta(q) + cursorIDY ) ;
 * 5) a.globalAlpha= 1; a.fillText( ha, sa(k) - cp + cursorIDX, ta(q) + cursorIDY ) ;
 * }
 * 1) else{
 * 2) a.globalAlpha = .5; a.strokeText( ha, sa(k) + cursorIDX, ta(q) + cursorIDY ) ;
 * 3) a.globalAlpha= 1; a.fillText( ha, sa(k) + cursorIDX, ta(q) + cursorIDY ) ;
 * }
 * }
 * 1) a.restore;
 * 2) oa(!0);
 * 3) if (!D) {
 * 4) a.font = 15 + "px NovaSquare", a.strokeStyle = "#000000", a.fillStyle = "#FFFFFF", a.lineWidth = 2.5;
 * 5) if (message.length>0) {
 * 6) b = a.measureText(message).width/2;
 * 7) a.globalAlpha = .5, a.strokeText(message, 400 - b, 580), a.globalAlpha = 1;
 * 8) a.fillText(message, 400 - b, 580);
 * }
 * 1) for (var i=0; i < messages.length; i++) {
 * 2) b = a.measureText(messages[i]).width/2;
 * 3) a.globalAlpha = .5, a.strokeText(messages[i], 400 - b, 580 - messages.length*15 + i*15 ), a.globalAlpha = 1;
 * 4) a.fillText(messages[i], 400 - b, 580 - messages.length*15 + i*15);
 * }
 * 1) if (showHelp) {
 * 2) var oo = a.measureText("->").width;
 * 3) a.font = 12 + "px NovaSquare";
 * 4) f = "How to use (press F1 to hide):", a.globalAlpha = .5, a.strokeText(f, 10, 45), a.globalAlpha = 1, a.fillText(f, 10, 45);
 * 5) f = "-> To type: type message and hit enter (shift+enter for new row)", a.globalAlpha = .5, a.strokeText(f, 10, 60), a.globalAlpha = 1, a.fillText(f, 10, 60);
 * 6) f = "-> To enable or disable movement: press numpad . OR delete", a.globalAlpha = .5, a.strokeText(f, 10, 75), a.globalAlpha = 1, a.fillText(f, 10, 75);
 * 7) f = "pathfiner will be active in this mode", a.globalAlpha = .5, a.strokeText(f, 10+oo, 90), a.globalAlpha = 1, a.fillText(f, 10+oo, 90);
 * 8) f = "-> To start/stop drawing circle: press numpad 0 OR insert", a.globalAlpha = .5, a.strokeText(f, 10, 105), a.globalAlpha = 1, a.fillText(f, 10, 105);
 * 9) f = "-> To draw arrows, use the arrow keys", a.globalAlpha = .5, a.strokeText(f, 10, 120), a.globalAlpha = 1, a.fillText(f, 10, 120);
 * 10) f = "-> To draw images: press numpad 1 - numpad 9", a.globalAlpha = .5, a.strokeText(f, 10, 135), a.globalAlpha = 1, a.fillText(f, 10, 135);
 * 11) f = "-> To make images bigger/smaller use numpad + and -", a.globalAlpha = .5, a.strokeText(f, 10, 150), a.globalAlpha = 1, a.fillText(f, 10, 150);
 * 12) f = "-> To reset image size press numpad *", a.globalAlpha = .5, a.strokeText(f, 10, 165), a.globalAlpha = 1, a.fillText(f, 10, 165);
 * 13) f = "-> To show/hide cursors ids: press F8", a.globalAlpha = .5, a.strokeText(f, 10, 180), a.globalAlpha = 1, a.fillText(f, 10, 180);
 * 14) f = "-> Change ids position: press F9", a.globalAlpha = .5, a.strokeText(f, 10, 195), a.globalAlpha = 1, a.fillText(f, 10, 195);
 * }
 * }
 * }
 * 1) a.restore;
 * 2) A.requestAnimationFrame(ma)
 * }
 * 1) function scale(z) {
 * 2) return Math.round(z/600*a.canvas.height);
 * }
 * 1) function na {
 * 2) a.save;
 * 3) a.strokeStyle = "#000000";
 * 4) t = +new Date;
 * 5) for (var f = 0; f < I.length; f++) {
 * 6) var b = I[f],
 * 7) c = (t - b[2]) / 1E3,
 * 8) d = 1 - 2 * c;
 * 9) 0 >= d ? (I.splice(f, 1), --f) : (c *= 50, a.beginPath, a.globalAlpha = .3 * d, a.arc(b[0], b[1], c, 0, 2 * Math.PI, !1), a.stroke);
 * }
 * 1) a.restore
 * }
 * 1) function oa(f) {
 * 2) if (D) a.save, a.globalAlpha = 1, a.drawImage(P, B - 5, C - 5, P.width, P.height);
 * 3) else {
 * 4) var b = 0,
 * 5) c = 0;
 * 6) if (v != k || w != q) {
 * 7) a.save;
 * 8) if (f) {
 * 9) a.globalAlpha = .2, a.fillStyle = "#FF0000", a.beginPath;
 * 10) a.arc(B + 2, C + 8, 20, 0, 2 * Math.PI, !1);
 * 11) a.fill;
 * }
 * 1) a.globalAlpha = .5;
 * 2) a.drawImage(P, B - 5, C - 5, P.width, P.height);
 * 3) a.restore;
 * 4) } else {
 * 5) b = B & 1, c = C & 1;
 * }
 * 1) a.save;
 * 2) if (f) {
 * 3) a.globalAlpha = .2, a.fillStyle = "#FFFF00", a.beginPath;
 * 4) a.arc((k << 1) + b + 2, (q << 1) + c + 8, 20, 0, 2 * Math.PI, !1);
 * 5) a.fill;
 * }
 * 1) a.globalAlpha = 1;
 * 2) a.drawImage(Ia, (k << 1) + b - 5, (q << 1) + c - 5, Ia.width, Ia.height);
 * 3) if (!movementEnabled) {
 * 4) a.strokeStyle = "#DD4444", a.lineWidth = 1;
 * 5) a.beginPath;
 * 6) a.arc(serverPosX << 1, serverPosY << 1, 4, 0, 2*Math.PI);
 * 7) a.stroke;
 * }
 * }
 * 1) a.restore;
 * }
 * 1) function ka(a, b) {
 * 2) this.oldX = this.newX = a;
 * 3) this.oldY = this.newY = b;
 * 4) this.time = t
 * }
 * 1) function pa(a) {
 * 2) return a * a * (3 - 2 * a)
 * }
 * 1) function fa(a, b, c, d) {
 * a |= 0;
 * b |= 0;
 * c |= 0;
 * d |= 0;
 * 1) if (z(a, b)) return {
 * x: a,
 * y: b
 * };
 * 1) if (a == c && b == d) return {
 * x: c,
 * y: d
 * };
 * 1) var g = a,
 * 2) e = b;
 * 3) c = c - a | 0;
 * 4) d = d - b | 0;
 * 5) var n =
 * 0,
 * 1) l = 0,
 * 2) p = 0,
 * 3) k = 0;
 * 4) 0 > c ? n = -1 : 0 < c && (n = 1);
 * 5) 0 > d ? l = -1 : 0 < d && (l = 1);
 * 6) 0 > c ? p = -1 : 0 < c && (p = 1);
 * 7) var m = Math.abs(c) | 0,
 * 8) h = Math.abs(d) | 0;
 * 9) m <= h && (m = Math.abs(d) | 0, h = Math.abs(c) | 0, 0 > d ? k = -1 : 0 < d && (k = 1), p = 0);
 * 10) c = m >> 1;
 * 11) for (d = 0; d <= m && !z(a, b); d++) g = a, e = b, c += h, c >= m ? (c -= m, a += n, b += l) : (a += p, b += k);
 * 12) return {
 * x: g,
 * y: e
 * }
 * }
 * 1) function z(a, b) {
 * 2) return 0 > a || 400 <= a || 0 > b || 300 <= b ? !0 : T[a + 400 * b]
 * }
 * 1) function Ja {
 * 2) for (var a = 0; a < r.length; a++) {
 * 3) var b = r[a];
 * 4) 5 == b.type && Ka(b)
 * }
 * }
 * 1) function Ka(a) {
 * 2) function b(a, b, c) {
 * 3) e.push([c, a, b]);
 * 4) l[a + 400 * b] = !0;
 * g(a, b)
 * }
 * 1) function c(a, b, c) {
 * 2) p.push([c,
 * a, b
 * ]);
 * 1) l[a + 400 * b] = !0
 * }
 * 1) function d(a, b) {
 * 2) return 255 != k[4 * (a + 400 * b) + 3] && !l[a + 400 * b]
 * }
 * 1) function g(a, b) {
 * 2) var c = 4 * (a + 400 * b);
 * 3) k[c + 0] = 255;
 * 4) k[c + 1] = 153;
 * 5) k[c + 2] = 153;
 * 6) k[c + 3] = 255
 * }
 * 1) for (var e = a.queue, k = a.img.data, l = a.explored, p = a.potentialQueue, r = e.length, m = 0; m < p.length; m++) z(p[m][1], p[m][2]) || (g(p[m][1], p[m][2]), e.push(p[m]), p.splice(m, 1), --m);
 * 2) for (m = 0; m < r; ++m) z(e[m][1], e[m][2]) && (p.push(e[m]), e.splice(m, 1), --m, --r);
 * 3) for (r = 0; 50 > r && 0 != e.length; ++r) {
 * 4) for (var h = Number.POSITIVE_INFINITY, q = [e[0]], m = 1; m < e.length; ++m) {
 * 5) var x = e[m][0];
 * 6) .01 > Math.abs(x - h) ? q.push(e[m]) : x < h && (h = x, q = [e[m]])
 * }
 * 1) for (m = 0; m < q.length; ++m) {
 * 2) var x = q[m][0],
 * 3) h = q[m][1],
 * 4) s = q[m][2],
 * 5) qa = e.indexOf(q[m]); - 1 != qa && e.splice(qa, 1);
 * 6) 0 < h && d(h - 1, s) && (z(h - 1, s) ? c(h - 1, s, x + 1) : b(h - 1, s, x + 1));
 * 7) 0 < s && d(h, s - 1) && (z(h, s - 1) ? c(h, s - 1, x + 1) : b(h, s - 1, x + 1));
 * 8) 400 > h + 1 && d(h + 1, s) && (z(h + 1, s) ? c(h + 1, s, x + 1) : b(h + 1, s, x + 1));
 * 9) 300 > s + 1 && d(h, s + 1) && (z(h, s + 1) ? c(h, s + 1, x + 1) : b(h, s + 1, x + 1));
 * 10) 0 < h && 0 < s && d(h - 1, s - 1) && (z(h - 1, s - 1) ? c(h - 1, s - 1, x + Math.SQRT2) : b(h - 1, s - 1, x + Math.SQRT2));
 * 11) 0 < h && 300 > s + 1 && d(h - 1, s + 1) && (z(h - 1, s + 1) ? c(h - 1, s + 1, x + Math.SQRT2) :
 * 12) b(h - 1, s + 1, x + Math.SQRT2));
 * 13) 400 > h + 1 && 0 < s && d(h + 1, s - 1) && (z(h + 1, s - 1) ? c(h + 1, s - 1, x + Math.SQRT2) : b(h + 1, s - 1, x + Math.SQRT2));
 * 14) 400 > h + 1 && 300 > s + 1 && d(h + 1, s + 1) && (z(h + 1, s + 1) ? c(h + 1, s + 1, x + Math.SQRT2) : b(h + 1, s + 1, x + Math.SQRT2))
 * }
 * }
 * 1) a.ctx.putImageData(a.img, 0, 0)
 * }
 * 1) var y, a, ia = 0,
 * 2) Rat = A.devicePixelRatio;
 * 3) cp = 0,
 * 4) v = 0,
 * 5) w = 0,
 * 6) B = 0,
 * 7) C = 0,
 * 8) k = 0,
 * 9) q = 0,
 * 10) J = -1,
 * 11) K = -1,
 * 12) M = null,
 * 13) H = null,
 * 14) P = new Image;
 * 15) P.src = "img/cursor.png";
 * 16) var Ia = P,
 * 17) D = -1 != A.location.search.indexOf("editor"),
 * 18) I = [],
 * 19) O = [],
 * 20) t = 0,
 * 21) ca = 0,
 * 22) u = null,
 * 23) ha = -1,
 * 24) F = {},
 * 25) aa = 0,
 * 26) ja = !1,
 * 27) Y = !1,
 * 28) R = 0,
 * 29) S = 0,
 * 30) da = 0,
 * 31) X = !1,
 * 32) L = !D && !0,
 * 33) T = new Uint8Array(12E4),
 * 34) r = [],
 * 35) N = [];
 * 36) Array.prototype.remove =
 * 37) function(a) {
 * 38) a = this.indexOf(a);
 * 39) return -1 != a ? (this.splice(a, 1), !0) : !1
 * };
 * 1) var G = 0;
 * 2) ka.prototype = {
 * 3) oldX: 0,
 * 4) oldY: 0,
 * 5) newX: 0,
 * 6) newY: 0,
 * 7) time: 0,
 * 8) getX: function {
 * 9) var a = this.newX - this.oldX,
 * 10) b = (t - this.time) / 100,
 * 11) b = pa(0 >= b ? 0 : 1 <= b ? 1 : b);
 * 12) return this.oldX + b * a
 * },
 * 1) getY: function {
 * 2) var a = this.newY - this.oldY,
 * 3) b = (t - this.time) / 100,
 * 4) b = pa(0 >= b ? 0 : 1 <= b ? 1 : b);
 * 5) return this.oldY + b * a
 * }
 * };
 * 1) var za = new Uint8Array(12E4);
 * 2) Array.prototype.remove = function(a) {
 * 3) a = this.indexOf(a);
 * 4) return -1 != a ? (this.splice(a, 1), !0) : !1
 * };
 * 1) var imgSizeShowDur;
 * 2) var imgSizePrcnt=100;
 * 3) function imgSizeDisplay {
 * 4) clearTimeout(imgSizeShowDur);
 * 5) imgSizePrcnt = Math.round(imageScale*100);
 * 6) imgSizeInput(imgSizePrcnt);
 * 7) imgSizeShow = true;
 * 8) imgSizeShowDur = setTimeout(function { imgSizeShow = false; }, 3000);
 * }
 * 1) function imgSizeInput(d) {
 * 2) var dd = document.getElementById('imgsize');
 * 3) dd.value=d;
 * }
 * 1) function imgSizeUp {
 * 2) imageScale += 0.1;
 * 3) imgSizeDisplay;
 * }
 * 1) function imgSizeDown {
 * 2) if(imageScale > 0.19) imageScale -= 0.1;
 * 3) imgSizeDisplay;
 * }
 * 1) function imgSizeReset {
 * 2) imageScale = 1.0;
 * 3) imgSizeDisplay;
 * }
 * 1) function pathfinderbox {
 * 2) dd = document.getElementById('pathfinder');
 * 3) movementEnabled = !movementEnabled;
 * 4) if (movementEnabled) dd.checked = false;
 * 5) else dd.checked = true;
 * }
 * 1) function fontwidth {
 * 2) dd = document.getElementById('fontwidth');
 * 3) fontthin = !fontthin;
 * 4) if (fontthin) { textwidth=2/3; dd.checked = true; }
 * 5) else { textwidth=1; dd.checked = false; }
 * }
 * 1) function hideExtraInfoLbls {
 * 2) dd = document.getElementById('extrainfo');
 * 3) hideExtraInfo=!hideExtraInfo;
 * 4) if (hideExtraInfo) dd.checked = true;
 * 5) else dd.checked = false;
 * }
 * 1) var taploop, tapchk=false;
 * 2) function tap {// send a click every 3 seconds
 * 3) if (tapchk) { clearInterval(taploop); tapchk=false; }
 * 4) else { taploop = setInterval(function { wa(k,q,1); }, 3000); tapchk=true; }
 * }
 * 1) var message = new String;
 * 2) var messages = new Array;
 * 3) function drawM(m,d,x,y) {
 * 4) setTimeout(function {
 * 5) drawWord(m, x, y );
 * }, d);
 * }
 * 1) function handleKeypress(e) {
 * 2) if (e.target.tagName.toUpperCase == 'INPUT') return;
 * 3) if ((e.which >= 32 && e.which <= 64) ||
 * 4) (e.which >= 65 && e.which <= 90) ||
 * 5) (e.which >= 91 && e.which <= 126) ) {
 * 6) e.preventDefault;
 * 7) message = message.concat(String.fromCharCode(e.which));
 * 8) return;
 * }
 * 1) switch(e.which) {
 * 2) case 13:
 * 3) e.preventDefault;
 * 4) if (e.shiftKey) { //add new row
 * 5) messages.push(message);
 * 6) message = "";
 * }
 * 1) else { //print all rows
 * 2) messages.push(message);
 * 3) for(var i=0; i < messages.length; i++) {
 * 4) if (i>0) var del = messages[i-1].length*i*50;
 * 5) else var del=0;
 * 6) drawM(messages[i],del,k,q+i*kerning*fontSize);//not ideal printing, but better than printing as columns
 * }
 * 1) message = "";
 * 2) messages = [];
 * }
 * 1) break;
 * 2) default:
 * 3) return;
 * }
 * }
 * 1) function handleKeydown(e) {
 * 2) if (e.target.tagName.toUpperCase == 'INPUT') return;
 * 3) if (e.keyCode == 8 || e.keyCode == 9 || (e.keyCode >=33 && e.keyCode <= 40)
 * (e.keyCode >= 96 && e.keyCode <= 122)
 * //|| e.keyCode == 12 || e.keyCode == 45 || (e.keyCode >= 33 && e.keyCode <= 36)
 * 1) e.preventDefault;
 * }
 * 1) if (e.keyCode == 8) {
 * 2) if (message.length > 0) {
 * 3) message = message.substring(0, message.length - 1);
 * }
 * 1) else if (messages.length > 0) {
 * 2) message = messages.pop;
 * }
 * }
 * 1) switch(e.keyCode) {
 * 2) case 37: // left arrow
 * 3) drawImage(0, posX, posY); // draw arrow pointing left
 * 4) break;
 * 5) case 38: // up arrow
 * 6) drawImage(1, posX, posY); // draw arrow pointing up
 * 7) break;
 * 8) case 39: // right arrow
 * 9) drawImage(2, posX, posY); // draw arrow right
 * 10) break;
 * 11) case 40: // down arrow
 * 12) drawImage(3, posX, posY); // draw arrow down
 * 13) break;
 * 14) case 106: //numpad *
 * 15) imgSizeReset; // reset drawings size
 * 16) break;
 * 17) case 107: //numpad +
 * 18) imgSizeUp; // make drawings bigger
 * 19) break;
 * 20) case 109: //numpad -
 * 21) imgSizeDown; // make drawings smaller
 * 22) break;
 * 23) case 33: // Page Up
 * 24) drawWord(cmessage, posX, posY); //print message
 * 25) break;
 * 26) case 46: case 110: // numpad.
 * 27) pathfinderbox; // disable/enable movement by click
 * 28) break;
 * 29) case 45: case 96: // numpad 0
 * 30) auraEnabled = !auraEnabled; // start/stop drawing circle
 * 31) break;
 * 32) case 97: //case 35: // numpad 1
 * 33) drawImage(4, posX, posY); // star
 * 34) break;
 * 35) case 98: //case 40: // numpad 2
 * 36) drawImage(5, posX, posY); // reversed star
 * 37) break;
 * 38) case 99: //case 34: // numpad 3
 * 39) drawImage(6, posX, posY); // tictactoe
 * 40) break;
 * 41) case 100: //case 37: // numpad 4
 * 42) drawImage(7, posX, posY); // triforce
 * 43) break;
 * 44) case 101: //case 12: // numpad 5
 * 45) drawImage(8, posX, posY); // cannon - pentashot
 * 46) break;
 * 47) case 102: //case 39: // numpad 6
 * 48) drawImage(9, posX,posY); // heart
 * 49) break;
 * 50) case 103: //case 36: // numpad 7
 * 51) imageScale/=1.25;
 * 52) drawImage(10, posX, posY); // penrose
 * 53) imageScale*=1.25;
 * 54) break;
 * 55) case 104: //case 38: // numpad 8
 * 56) //imageScale/=2.5;
 * 57) drawImage(11, posX, posY); // boxception
 * 58) //imageScale*=2.5;
 * 59) break;
 * 60) case 105: // numpad 9
 * 61) drawImage(12, posX, posY); // cursor
 * 62) break;
 * 63) case 111: // numpad /
 * 64) imageScale/=2.5;
 * 65) drawImage(13, posX, posY); // dickboob
 * 66) imageScale*=2.5;
 * 67) break;
 * 68) case 112: // F1
 * 69) showHelp = !showHelp; // show/hide help
 * 70) break;
 * 71) case 115: // F4
 * 72) //tap;
 * 73) break;
 * 74) case 119: // F8
 * 75) showcursorsid = !showcursorsid; // show/hide cursors ids
 * 76) break;
 * 77) case 120: // F9
 * 78) cursorIDPos+=1;
 * 79) changeCursorIDpos(cursorIDPos);
 * 80) break;
 * 81) case 121: // F10
 * 82) fontwidth;
 * 83) break;
 * 84) case 122: // F11
 * 85) hideExtraInfoLbls;
 * 86) break;
 * 87) default:
 * 88) return;
 * }
 * }
 * 1) var cursorIDPos=1;
 * 2) var cursorIDX=-2;
 * 3) var cursorIDY=24;
 * 4) function changeCursorIDpos(c) {
 * 5) switch(c) {
 * 6) case 1: cursorIDX=-2; cursorIDY=24; break;
 * 7) case 2: cursorIDX=-3; cursorIDY=14; break;
 * 8) case 3: cursorIDX=-2; cursorIDY=-3; break;
 * 9) case 4: cursorIDX=10; cursorIDY=14; break;
 * 10) default: cursorIDX=-2; cursorIDY=24; cursorIDPos=1;
 * }
 * }
 * 1) function drawAura(x, y) {
 * 2) var dt = 360/(1000/40)/2;
 * 3) if (u != null && u.readyState == WebSocket.OPEN) {
 * 4) var g = new ArrayBuffer(9),
 * 5) e = new DataView(g);
 * 6) e.setUint8(0, 3);
 * 7) e.setUint16(1, x+Math.sin(degToRad(auraTime+dt))*auraRadius, !0);
 * 8) e.setUint16(3, y+Math.cos(degToRad(auraTime+dt))*auraRadius, !0);
 * 9) e.setUint16(5, x+Math.sin(degToRad(auraTime))*auraRadius, !0);
 * 10) e.setUint16(7, y+Math.cos(degToRad(auraTime))*auraRadius, !0);
 * 11) u.Send(g)
 * }
 * 1) auraTime += dt;
 * }
 * 1) function drawImage(ind, x, y) {
 * 2) if (!imgData[ind]) return;
 * 3) for (var i = 0; i < imgData[ind].length; i++) {
 * 4) var g = new ArrayBuffer(9),
 * 5) e = new DataView(g);
 * 6) e.setUint8(0, 3);
 * 7) e.setUint16(1, x+imgData[ind][i][1]*imageScale, !0);
 * 8) e.setUint16(3, y+imgData[ind][i][0]*imageScale, !0);
 * 9) e.setUint16(5, x+imgData[ind][i][3]*imageScale, !0);
 * 10) e.setUint16(7, y+imgData[ind][i][2]*imageScale, !0);
 * 11) u.Send(g);
 * }
 * }
 * 1) function degToRad(deg) {
 * 2) return deg * (Math.PI / 180);
 * }
 * 1) function radToDeg(rad) {
 * 2) return rad * (180 / Math.PI);
 * }
 * 1) var textwidth = 1; // 1 = full width, 2/3 = thin text
 * 2) function drawLetter(a, x, y) {
 * 3) var letter;
 * 4) var capital = 1;
 * 5) var shift = 0;
 * 6) if (alphabet.hasOwnProperty(a)) {
 * 7) letter = alphabet[a];
 * 8) } else if (a + 32 >= 97 && a + 32 <= 122) {
 * 9) capital = 1.5;
 * 10) shift = -2;
 * 11) letter = alphabet[a + 32];
 * 12) } else return;
 * 13) for (var i = 0; i < letter.length; i++) {
 * 14) var g = new ArrayBuffer(9),
 * 15) e = new DataView(g);
 * 16) e.setUint8(0, 3);
 * 17) e.setUint16(1, x+letter[i][1]*fontSize*textwidth, !0);
 * 18) e.setUint16(3, y+letter[i][0]*fontSize*capital + shift, !0);
 * 19) e.setUint16(5, x+letter[i][3]*fontSize*textwidth, !0);
 * 20) e.setUint16(7, y+letter[i][2]*fontSize*capital + shift, !0);
 * 21) u.Send(g);
 * }
 * }
 * 1) function drawWord(s, x, y) {
 * 2) if (s == null) return;
 * 3) setTimeout(function {
 * 4) if (!z(Math.round(x+fontSize*kerning*textwidth), Math.round(y))) {
 * 5) drawLetter(s.charCodeAt(0), x, y);
 * 6) if (s.length > 0) drawWord(s.substring(1, s.length), x+fontSize*kerning*textwidth, y);
 * }
 * }, 1);
 * }
 * 1) WebSocket.prototype.Send = function(frm) {
 * 2) if (u != null && u.readyState == WebSocket.OPEN) {
 * 3) if (Throttler.check(frm)) this.send(frm);
 * }
 * };
 * 1) var Throttler = {
 * 2) rate: 3,
 * per: 150,
 * 1) storage: [],
 * 2) allowed: 3,
 * 3) lastFrameAt: 0,
 * 4) sendOut: function {
 * 5) if (this.storage.length != 0) {
 * 6) u.Send(this.storage.shift);
 * }
 * },
 * 1) check: function(frm) {
 * 2) var now = Date.now;
 * 3) var allowance = this.allowed;
 * 4) var timeDiff = now - this.lastFrameAt;
 * 5) this.lastFrameAt = now;
 * 6) allowance += timeDiff*(this.rate/this.per);
 * 7) if (allowance > this.rate) allowance = this.rate;
 * 8) this.allowed = allowance;
 * 9) if (this.allowed < 1) {
 * 10) if (this.storage.length < 300) {
 * 11) var dv = new DataView(frm);
 * 12) if (dv.getUint8(0) == 3) this.storage.push(frm);
 * }
 * 1) return false;
 * }
 * 1) this.allowed -= 1;
 * 2) return true;
 * }
 * };
 * 1) var ff = navigator.userAgent.indexOf("Chrome") == -1;
 * 2) function dos(head) {
 * 3) var gridX = 400,
 * 4) gridY = 300;
 * 5) var grid = [];
 * 6) visit = [];
 * 7) for (var i = 0; i < gridY; i++) {
 * 8) grid[i] = [];
 * 9) visit[i] = [];
 * 10) for (var j = 0; j < gridX; j++) grid[i][j] = 0, visit[i][j] = 0;
 * }
 * 1) r.forEach(function(d) {
 * 2) if ((d.type == 1) || (d.type == 2 && d.isBad))
 * 3) for (var j = 0; j < d.height; j++)
 * 4) for (var i = 0; i < d.width; i++) grid[d.y + j][d.x + i] = 3
 * });
 * 1) var bfs = [head],
 * 2) bfs2 = [];
 * 3) while (bfs.length) {
 * 4) bfs.forEach(function(dat) {
 * 5) var x = dat[0],
 * 6) y = dat[1];
 * 7) if (x == null || y == null) return;
 * 8) if (grid[y][x] == 3) return;
 * 9) grid[y][x] = 3;
 * 10) for (var X = x + 1; X < gridX && !(grid[y][X] & 1); X++) {
 * 11) grid[y][X] |= 1;
 * 12) if (!visit[y][X]) {
 * 13) visit[y][X] = [x, y], bfs2.push([X, y]);
 * }
 * }
 * 1) for (var X = x - 1; X >= 0 && !(grid[y][X] & 1); X--) {
 * 2) grid[y][X] |= 1;
 * 3) if (!visit[y][X]) {
 * 4) visit[y][X] = [x, y], bfs2.push([X, y]);
 * }
 * }
 * 1) for (var Y = y + 1; Y < gridY && !(grid[Y][x] & 2); Y++) {
 * 2) grid[Y][x] |= 2;
 * 3) if (!visit[Y][x]) {
 * 4) visit[Y][x] = [x, y], bfs2.push([x, Y]);
 * }
 * }
 * 1) for (var Y = y - 1; Y >= 0 && !(grid[Y][x] & 2); Y--) {
 * 2) grid[Y][x] |= 2;
 * 3) if (!visit[Y][x]) {
 * 4) visit[Y][x] = [x, y], bfs2.push([x, Y]);
 * }
 * }
 * });
 * 1) bfs = bfs2;
 * 2) bfs2 = [];
 * }
 * }
 * 1) window.head=[];
 * 2) window.delay=30;
 * 3) function fm(mov, i=0) {
 * 4) if (!D && null != u && u.readyState == WebSocket.OPEN) {
 * 5) if (i >= mov.length) {
 * 6) var buf = new ArrayBuffer(9),
 * 7) q = new DataView(buf);
 * 8) q.setUint8(0, 2, 1);
 * 9) q.setUint16(1, mov[i-1][0], 1);
 * 10) q.setUint16(3, mov[i-1][1], 1);
 * 11) q.setInt32(5, -1, 1);
 * 12) WebSocket.prototype.send.call(u, buf);
 * 13) WebSocket.prototype.send.call(u, buf);
 * 14) return;
 * }
 * 1) var buf = new ArrayBuffer(9),
 * 2) q = new DataView(buf);
 * 3) q.setUint8(0, 1, 1);
 * 4) q.setUint16(1, mov[i][0], 1);
 * 5) q.setUint16(3, mov[i][1], 1);
 * 6) q.setInt32(5, -1, 1);
 * 7) WebSocket.prototype.send.call(u, buf);
 * 8) W(mov[i][0], mov[i][1]);
 * 9) if(delay == 0) {
 * 10) fm(mov,i+1);
 * 11) } else {
 * 12) setTimeout(function {
 * 13) fm(mov, i + 1)
 * }, delay);
 * }
 * }
 * }
 * 1) function pf(e) {
 * 2) auraEnabled = false;
 * 3) unfocus;
 * 4) if(ff) {e.offsetX = e.pageX - canvas.offsetLeft; e.offsetY = e.pageY - canvas.offsetTop}
 * 5) var xy = [e.offsetX / 2 | 0, e.offsetY / 2 | 0];
 * 6) var mov = [];
 * 7) if (r && !(xy[0] == head[0] && xy[1] == head[1]) && !e.ctrlKey && !movementEnabled) {
 * 8) head = [serverPosX,serverPosY];
 * 9) dos(head);
 * 10) var xy2 = xy.slice(0);
 * 11) while (visit[xy2[1]][xy2[0]]) {
 * 12) mov.push(xy2);
 * 13) xy2 = visit[xy2[1]][xy2[0]]
 * }
 * 1) mov = mov.reverse;
 * 2) if (mov.length == 0) {
 * 3) return;
 * }
 * 1) else fm(mov);
 * 2) } else if (!movementEnabled) {mov.push(xy); fm(mov);}
 * 3) else {}
 * }
 * 1) function connect {
 * 2) if (m28n.findServerPreference) {
 * 3) if (!u) m28n.findServerPreference("cursors", function(e,a) {
 * 4) if (e||0 == a.length) {
 * 5) setTimeout(self.connect, 1E3);
 * 6) } else {
 * 7) var ipv4 = a[0].ipv4;
 * 8) var ipv6 = a[0].ipv6;
 * 9) var port = a[0].port;
 * 10) port = 2828;
 * 11) u = new WebSocket("ws://" + (ipv4 || "[" + ipv6 + "]") + ":" + port);
 * 12) setHandlers;
 * }
 * });
 * 1) } else {
 * 2) if (!u) u = new WebSocket("ws://s1.cursors.io:443/");
 * 3) setHandlers;
 * }
 * 1) function setHandlers {
 * 2) u.binaryType = "arraybuffer";
 * 3) u.onopen = Aa, u.onmessage = Ga, u.onclose = Ba, u.onerror = Ca;
 * }
 * }
 * 1) var messageDisplay;
 * 2) function doit {
 * 3) //document.body.innerHTML += ' ';
 * 4) //messageDisplay = document.getElementById("messageDisplay");
 * 5) var el0 = document.getElementById('h-options');
 * 6) if (el0 != null) { el0.remove; }
 * 7) document.body.innerHTML += css;
 * 8) y = E.getElementById("canvas");
 * 9) a = y.getContext("2d");
 * 10) try {
 * 11) A.top.location.origin != A.location.origin && ba
 * 12) } catch (f) {
 * 13) ba
 * }
 * 1) y.width = 800 * Rat;
 * 2) y.height = 600 * Rat;
 * 3) a.scale(Rat, Rat);
 * 4) y.onmousemove = ua;
 * 5) y.onmousedown = va;
 * 6) y.onmouseup = xa;
 * 7) y.onclick = pf;
 * 8) M = E.getElementById("noCursorLock");
 * 9) H = E.getElementById("noDrawings");
 * 10) null != localStorage && (Ma, M.checked = "1" == A.localStorage.getItem("noCursorLock") ? !0 : !1, H.checked = "1" == A.localStorage.getItem("noDrawings") ? !0 : !1);
 * 11) A.onbeforeunload = ya;
 * 12) y.requestPointerLock = y.requestPointerLock || y.mozRequestPointerLock || y.webkitRequestPointerLock;
 * 13) y.style.cursor = "none";
 * D || connect;
 * 1) setInterval(Q, 40);
 * 2) //setInterval(Ja, 40);
 * 3) setInterval(Au, 50);
 * 4) A.requestAnimationFrame(ma);
 * 5) document.onkeypress = handleKeypress;
 * 6) document.onkeydown = handleKeydown;
 * }
 * 1) doit;
 * }
 * 1) ___ _ _ _ __ ___ ___ _ __ ___ _ ___
 * 2) / __| | | | `__/ __|/ _ \| `__/ __| | |/ _ \
 * (__| |_| | | \__ \ (_) | | \__ \_| | (_) |
 * 1) \___|\__,_|_| |___/\___/|_| |___(_)_|\___/
 * 2) for a more updated version, go here:
 * 3) https://greasyfork.org/en/scripts/369975
 * 4) How to use:
 * 5) -> Go to cursors.io, open console (ctrl + shift + j or F12)
 * 6) and paste this entire script into the console, then hit enter
 * 7) -if you experience problems running the script, make sure to block "cursors.io/client_out.js"
 * 8) -> To type: type message and hit enter; shift+enter for new row;
 * 9) -all ascii characters are available
 * 10) -> To move your cursor only when clicking: press numpad . OR delete
 * 11) -Pathfinder will be active in this mode (CTRL+click to ignore pathfinder)
 * 12) -try not to use a too low value of the delay, or you may get disconnected on some levels
 * 13) --make sure 'no cursor lock' is marked so pathfinder works correctly
 * 14) -> To move your cursor normally: press numpad . again
 * 15) -> To draw a circle: press numpad 0 OR insert
 * 16) -> To stop drawing a circle: press numpad 0 again
 * 17) -> To draw arrows, use the arrow keys
 * 18) -> To draw different images: press numpad 1 - numpad 9 keys
 * 19) -> To make drawings bigger/smaller use numpad + and -
 * 20) -> Reset drawing size with numpad *
 * 21) -> To show/hide cursors ids: press F8
 * 22) -> Change ids position with: F9
 * 23) -> To show this help: press F1
 * 1) function pf(e) {
 * 2) auraEnabled = false;
 * 3) unfocus;
 * 4) if(ff) {e.offsetX = e.pageX - canvas.offsetLeft; e.offsetY = e.pageY - canvas.offsetTop}
 * 5) var xy = [e.offsetX / 2 | 0, e.offsetY / 2 | 0];
 * 6) var mov = [];
 * 7) if (r && !(xy[0] == head[0] && xy[1] == head[1]) && !e.ctrlKey && !movementEnabled) {
 * 8) head = [serverPosX,serverPosY];
 * 9) dos(head);
 * 10) var xy2 = xy.slice(0);
 * 11) while (visit[xy2[1]][xy2[0]]) {
 * 12) mov.push(xy2);
 * 13) xy2 = visit[xy2[1]][xy2[0]]
 * }
 * 1) mov = mov.reverse;
 * 2) if (mov.length == 0) {
 * 3) return;
 * }
 * 1) else fm(mov);
 * 2) } else if (!movementEnabled) {mov.push(xy); fm(mov);}
 * 3) else {}
 * }
 * 1) function connect {
 * 2) if (m28n.findServerPreference) {
 * 3) if (!u) m28n.findServerPreference("cursors", function(e,a) {
 * 4) if (e||0 == a.length) {
 * 5) setTimeout(self.connect, 1E3);
 * 6) } else {
 * 7) var ipv4 = a[0].ipv4;
 * 8) var ipv6 = a[0].ipv6;
 * 9) var port = a[0].port;
 * 10) port = 2828;
 * 11) u = new WebSocket("ws://" + (ipv4 || "[" + ipv6 + "]") + ":" + port);
 * 12) setHandlers;
 * }
 * });
 * 1) } else {
 * 2) if (!u) u = new WebSocket("ws://s1.cursors.io:443/");
 * 3) setHandlers;
 * }
 * 1) function setHandlers {
 * 2) u.binaryType = "arraybuffer";
 * 3) u.onopen = Aa, u.onmessage = Ga, u.onclose = Ba, u.onerror = Ca;
 * }
 * }
 * 1) var messageDisplay;
 * 2) function doit {
 * 3) //document.body.innerHTML += ' ';
 * 4) //messageDisplay = document.getElementById("messageDisplay");
 * 5) var el0 = document.getElementById('h-options');
 * 6) if (el0 != null) { el0.remove; }
 * 7) document.body.innerHTML += css;
 * 8) y = E.getElementById("canvas");
 * 9) a = y.getContext("2d");
 * 10) try {
 * 11) A.top.location.origin != A.location.origin && ba
 * 12) } catch (f) {
 * 13) ba
 * }
 * 1) y.width = 800 * Rat;
 * 2) y.height = 600 * Rat;
 * 3) a.scale(Rat, Rat);
 * 4) y.onmousemove = ua;
 * 5) y.onmousedown = va;
 * 6) y.onmouseup = xa;
 * 7) y.onclick = pf;
 * 8) M = E.getElementById("noCursorLock");
 * 9) H = E.getElementById("noDrawings");
 * 10) null != localStorage && (Ma, M.checked = "1" == A.localStorage.getItem("noCursorLock") ? !0 : !1, H.checked = "1" == A.localStorage.getItem("noDrawings") ? !0 : !1);
 * 11) A.onbeforeunload = ya;
 * 12) y.requestPointerLock = y.requestPointerLock || y.mozRequestPointerLock || y.webkitRequestPointerLock;
 * 13) y.style.cursor = "none";
 * D || connect;
 * 1) setInterval(Q, 40);
 * 2) //setInterval(Ja, 40);
 * 3) setInterval(Au, 50);
 * 4) A.requestAnimationFrame(ma);
 * 5) document.onkeypress = handleKeypress;
 * 6) document.onkeydown = handleKeydown;
 * }
 * 1) doit;
 * }
 * 1) ___ _ _ _ __ ___ ___ _ __ ___ _ ___
 * 2) / __| | | | `__/ __|/ _ \| `__/ __| | |/ _ \
 * (__| |_| | | \__ \ (_) | | \__ \_| | (_) |
 * 1) \___|\__,_|_| |___/\___/|_| |___(_)_|\___/
 * 2) for a more updated version, go here:
 * 3) https://greasyfork.org/en/scripts/369975
 * 4) How to use:
 * 5) -> Go to cursors.io, open console (ctrl + shift + j or F12)
 * 6) and paste this entire script into the console, then hit enter
 * 7) -if you experience problems running the script, make sure to block "cursors.io/client_out.js"
 * 8) -> To type: type message and hit enter; shift+enter for new row;
 * 9) -all ascii characters are available
 * 10) -> To move your cursor only when clicking: press numpad . OR delete
 * 11) -Pathfinder will be active in this mode (CTRL+click to ignore pathfinder)
 * 12) -try not to use a too low value of the delay, or you may get disconnected on some levels
 * 13) --make sure 'no cursor lock' is marked so pathfinder works correctly
 * 14) -> To move your cursor normally: press numpad . again
 * 15) -> To draw a circle: press numpad 0 OR insert
 * 16) -> To stop drawing a circle: press numpad 0 again
 * 17) -> To draw arrows, use the arrow keys
 * 18) -> To draw different images: press numpad 1 - numpad 9 keys
 * 19) -> To make drawings bigger/smaller use numpad + and -
 * 20) -> Reset drawing size with numpad *
 * 21) -> To show/hide cursors ids: press F8
 * 22) -> Change ids position with: F9
 * 23) -> To show this help: press F1
 * 1) --make sure 'no cursor lock' is marked so pathfinder works correctly
 * 2) -> To move your cursor normally: press numpad . again
 * 3) -> To draw a circle: press numpad 0 OR insert
 * 4) -> To stop drawing a circle: press numpad 0 again
 * 5) -> To draw arrows, use the arrow keys
 * 6) -> To draw different images: press numpad 1 - numpad 9 keys
 * 7) -> To make drawings bigger/smaller use numpad + and -
 * 8) -> Reset drawing size with numpad *
 * 9) -> To show/hide cursors ids: press F8
 * 10) -> Change ids position with: F9
 * 11) -> To show this help: press F1