From b8b5b1c3f7d651145f9ec7f1676aa1dddbedd0e7 Mon Sep 17 00:00:00 2001
From: Bye <bye@byecorps.com>
Date: Sat, 3 Sep 2022 18:56:09 +0100
Subject: [PATCH] something is happening!!!

---
 bkg.aseprite     | Bin 0 -> 1467 bytes
 bkg.png          | Bin 0 -> 661 bytes
 favicon.aseprite | Bin 1181 -> 1707 bytes
 favicon.ico      | Bin 3262 -> 3262 bytes
 game.js          | 192 ++++++++++++++++++++++++++++++++++++-----------
 index.html       |   1 +
 letters.js       |  13 +++-
 t.aseprite       | Bin 3191 -> 3880 bytes
 t.png            | Bin 1390 -> 2095 bytes
 9 files changed, 163 insertions(+), 43 deletions(-)
 create mode 100644 bkg.aseprite
 create mode 100644 bkg.png

diff --git a/bkg.aseprite b/bkg.aseprite
new file mode 100644
index 0000000000000000000000000000000000000000..563b90219f2f574817bd30001852452e4e3cb5c9
GIT binary patch
literal 1467
zcmdnZ%E0hoDI<dd7&0<2Fr+Xb0}BR5kRXEqg8;HH)!5do3=F?Ma)NE;WME(rV_;xl
zR{&dyWJeYw1B0Z31ysZwN<*lB|NsAIV1SSd7A*MBzz`G^^q+xY-?hL085lC>{rS(p
zAm=srKLZ1!RN#LGhBIeC>O0#(q=osO{|pTL{HgyL815bciL5IFkr5g@{xdKrvnBs$
zV0d-l=YIx<bGaY?Gcc4YPWjKkV8-nIpMl}i!TbLi7#<XC`p>}7q8#&|fx&@A?LPy<
z$K!|oGceq%DfrL8(4?pGpMk-iljT1H!;1^6{xdL~m}vK(fg#_X;Xea|kuZq7c?;yW
zWy@9nGcW`OfkfmLK;+3s^Zqk1H15*)&%j`q3=-ki0+D;3t^3cwkbK1LKLdkQHtT-|
z1_phQ_?D-~|1&Uz9IXA%z`&QO2NKug`p>|y_5PFp3=CnL5Bz6f5QxbDiL2@UXJA;l
za^-&p1{)h2kO%|F1O^6%|C<;X7+4q>85k`7{r~^(|NjLG76b(a?Ys6jbKW00uepp;
zfoIPA?`;2XVZMi-KlSdB|Le;BM`-L&W=no`;ODvAkEM!J%$U7D9lZabU{i~7j020>
z$K!|Y)f6=8sn~O}ytuIH#6-J%dyv;}-kQ5?xoTh#gS-O6$w%`VcWD?VGjMA$?0L2>
z`G}iTHY<ZZ!<MJVLk`yRW$H2Lac#Z-By95mftU;iHQkjfSK8RvK;mB><YEOT2nS4p
zJjBl6lUSKrq+ke<W(G?@2xMs^{L;ptq{gZM)d#l&lvyg~ygkgw$-uzFvha0$)$5NM
z5wWXQt$Ou^{p069dUlKq46M*p{2xu*+$jfnoeX)Lw<imJOKz%95xd5~$;s)u@$VgH
z)?aI9J-PYrYt^3h8{eJ3UH<o9{{H{Zp9NKKKDK7}+m*#ntaqk=dzE$O=C=2@?ILgg
z>@B@jZoJx3nE$xqSNGqGc<%i56n~z6{qeJxPYS1U9zScSGN<F7Z`#V|mt{|CpPT&T
zZlUC&nL)NocmjA&>X>Z5(!TEbkxQAbU)29}=zFR~$*q0Y621Cmr@LtRa@Sw`J}OiR
z?3D>W^>B;X$NEd_ZZ6JuoxIxZ^0D$&(~{TidHLtH(Gm%(`Q|^Bi?`Z&#@*XA!)9*H
z`gdXX7W|sr6ZCAA`Ke21cb<KA!*bq|`BOB5!hgPhGH3PtAIp6%RK}d|<gV1e6XR9=
z$;>or?ibfDN<C5Wrk|I7Wn3n*<d8Zz^dP~89(r3R-{d`Pz~gM~cl}IM?7Fl54Nd|p
z-Itms-1xZg!>5l``{dKD&uuK*I&a?YZ?8S7%lECb<O|>ZdH<Jp-&Z_)XY=&A#r5h~
z-=$~W)<?Y$oOSpo_qt#`8Me^&wDeD#Z!1ff+pVa4YL!@W&sU=JyR=?be64o;WFNsh
zcV$m)JiOXw=8vVnN_T0VwW{m%%koVu{kn2`^#4h>zN~p{R_OcpZrRh)Lvz>V7VOxw
zTuSX`LHVoblKhOtscYYF`Qe@?{HO1;8MBG>O0_34Uke^R+vI7o+H!%-t{lJrr4m7P
zE1#EdepI6NPhfv0-?lsIF}L>!_MLKmq<fP0>BL_i_uS^H&%1xr-FBXl`)2p=cAq-g
F3jl9AEad<I

literal 0
HcmV?d00001

diff --git a/bkg.png b/bkg.png
new file mode 100644
index 0000000000000000000000000000000000000000..c340d9c47979438c06b19873b83a77ff70f4b1be
GIT binary patch
literal 661
zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>VDk5L
zaSVxQog2QpkjYRWHcuv2kgJ1Z9rM$7jW;+=EtCU!OB~!7c^1BGnBl;vI$<93?~|*a
zdRkSc+lWmn`<`j<zw7G1Jv0A`JgNFEqP?_IyRhWZyp22gs&Bo^s=s$emz}4hG|IZA
z<HX0h1q$txoORD^Fm1EF(7U+$=KJLnu6?X8t(^1h^;=_Z;o>`7#?}qI=H0hmeX=<F
zX3Ac^!j899)8}l~h}bK_m{!nvfV1a%R`X5SzVFRHG(BWujh0<ZUaRs>@~Ca{t!9n~
z-#^x!I9BERWIMM>R&~?7kQaM(zSnVax^ywHZTs~2MV!{QXAvsr4gKCNpKz5`sqHT_
zn?v`}w^h?cvivrNH@5^Y%RU&SbSd}9wHr284(qpe-SmH`&a{i6be_)2BNvx4ZFOC>
zIAiW+k)+xNqtz+ha-VPTZ&<68>ToGGq4Pu;i;U6BhuxF>Rx!^0{(sy3pywaHhuykk
zbc0!7k$>OE1?ncu*KYVTr#Q^W>-3IWmwcA_%#3#o+${AvMoXhkGHlS=8onjX=*17s
zlmiDFrp=j=;u2EzGecq5+lc93#NIDbkK~lOtsL}DrAk)ca7FK{%4qpp8&AZicwKq7
z{DPn3YsbLLsqG5|H{@HW6_$K)Y`p*N?}=l##E(e|Zz~GdHYk%eiVo{?y>a^Uuf@(w
z?tBm1BtEh3|J6$epGltGb|WO^;B>)c+lCc$Cl#_(xGc|FA<D^<bA7kVSphM{(=#qy
z%-mS&w4dAL*1djV>6t;&%l$X^um2voI4Y`U@6oVHj-RXE{>+{KV#mIl^JeXvntw~m
W_;=(-wId7+3=E#GelF{r5}E*^&o<%!

literal 0
HcmV?d00001

diff --git a/favicon.aseprite b/favicon.aseprite
index 48ff697b9d0632f855b71e7547f5056f29bf8188..2d148083edd8d75b94c32f6b338c0d85d4b51266 100644
GIT binary patch
delta 860
zcmbQsxtdpTH5&uNgQbiN3Sh{{z`&5gfD9}rD#kNuvrTML;V)ohV31U>gvwfM+#1a&
zz`$^Ib>{!A3=9k`42%p6mXoEJRxn>(ojLg-licJ7O!ka>CMz(@)L-}JYcddVd$?Ci
ziRn_%uY|n;36lG_H<mQCP3+_-FF1DpM@e|2-IM@x%jrSirR=5z_D^U!ztSmDLyAZB
zYs@MWHb>9iK&c+nrPHLk1EYNu9~<0Mb>FJHOZjKh-@89de_zbM(Z4V9=XBxUc~8~<
zKm2X{L-Y5=^EdkI>cryneq<@g*Zn+sU3#DGy7-OqwLfL|+c&Mh(a--OJAVIf{X#~8
z3zN4q*VlV6F)*+yFflMPa5DU7f_jrdj)9+{VovRp=RqQlBCWNiy538DSPlkgZAvT?
z3<wM{=x$n|;n;d;j=_V^K2h?^Y|X!vozF22F8$~8^-OsD-F?sR|1-R7*&*ZDr=*^(
zChz1nq1bfu`RYv{+fJ%Y%s%0Bc**wJYI|?%%&GUBraXC%%eCm%?_ZAGzpeJK_02Zl
z=L`|;6YQQ?7%|+_e8N+-FYZYk+k37e*`1v4WOjV_z9XKnPDz^a9p8-o6Zb!URCS|R
zwq)JU)?Fu$zf#NQ+W)%h@XlrY6Dm^-9~r;db<ODHY=-a4cNkqS)}4Ra{ovYWY0c>|
z%a2~2=PBR#Q>1=P`l-<CDaHpv!=FW67v37Dx6^FGwxab`*Y&2yh#!awTenLsn(^Jb
z<6Dd0@)u-3@+wYUw`<vEx$mASK|3zR%v`<hV_Cy$pJ%JG(>F}dj@``pbkb|xA9p|Q
zcr|N{MtJPw?<drM)H-LZtDmD?+~28v_o1BL&P(rnG|Sy$E?1v$K2pES&OJ`^``R7H
z<R|JU{Jn7Z<BT(**J~^e<aTPGoqG4m)H3zjHN~-AUDY9FcVCvK=I#G><RwFRY-afk
z>(#ptuiIpO?dmrdr*-m2wifMUel%-7Z-IJ@zd`xAon?Q+wy4K(o7X*$S-s=h);pbN
zzFJM(d9C!`<1F<{F+cCW@|qiQQr4$z?u__L^D<7p`!V-KOwm@`jVimH*R|G9ejPqD
zTlIR`BiHMlk+;9@|3CMBXZ6?mKanvn`NE6VzRoyMy6ebStHSmFwy(R=8G7gcg3C6a
E00n)RWdHyG

delta 328
zcmZ3@JC{>&E(-(0gQbiN3Sh{{z`&5gfD9}qD#kO(vP^7J;m=}ZV31U>fXbS0+#1cu
zwTXd&frWvQfx%+30@I4gr<r0IXH3>)mZ?AdmhDgiL&L?bTW_setGE2xs;&K5;*&j8
z)Y8s$xFjhhAG_h3H~r(E7q)XY%-p*0$9Dd&B74{Sd|B5b&Sv$)_rgE%dHomfrMHyb
zfAiKm-QIM|=Y;%Ciq^6Vu5(t4uFm*<FWvpkQ(wpE@R_xV`sZxF{88E1zv#qU2D6<`
ztLhmT7$(19u1-&9U|?WXU}9io;AHsE1a&uq90NZ?#T@M#o0s*9a%UP?JVFmQuzk2`
z9P!50tU1K=$gOUFSv_O-x3U%0Cp~vRnc<mV-O1@)^{afrqw)>6z4K-rd>&TxR@HP4
M+wQ##W-SGB0F`8Vpa1{>

diff --git a/favicon.ico b/favicon.ico
index fa7a2f455053d6613cc6331b624505947c30b2e4..290e4e9e6a2ec962646b66f20dc5fa0978d70a79 100644
GIT binary patch
literal 3262
zcmZQzU}RuqP*4ET5)3PN7#PGD7#K7d7#I{77#JKFAmR)R3}87Bjg0e?9_1%L&QEz<
zkn*@7^>INO2o<J3F3fmRnDL}2^GQ(_7-c^x&Up$#xlc>-z$pJ|Nx`$yf@h_L&q|A)
zl@&cJD}Gj1@~o`nd3ovc^0MdU<<Be1pHtubQkt6oyljY?UknL<BHa&)T+-r~M&=j7
z(hm;vU*iQunNM)Zm*hW1lLDvD=V*ejU%yU@xS1StGdccda`MgO^cyKzH&XI$q!iwG
z{rWY;{M3f)X)V{&+OMT`UrX!1mOkm)>({R#=4ULtnz8h1#)_-2U%!T%pSk)f1VQXd
z3cHyUbu&5cW^&@q<kTA}88=dLZln}|%!epQt-GGubUm%@dRphTwBBp!6OqiHe>G$A
z)r{qM%@4f^^+E!w7m9AAl!9zYt-TKQLI>0f5PM(0ew{JzD#Q!;+#h^1DIDYlxUSc)
zUqif*QUW%=`g&?T$O{k!5HF-p1^FU<&ee<sATQuEKk!yk=*^_ao3CHLE=YS^nD!WC
zel|E3iooVqUI%%h@jBG}9&jv72Ae<YD##0q@P<#ott7A)P|VM~k&+9Ih181csSqzT
zgJYrVT3R187Sd;4gLnaAHH3sjZsux`rJ(fVcPl9f<OO8&K?y1QMoK=|{bkovtDs&;
zYrUS<0dhISsPyUA(q}`x07^(Jp(zJq1w>7v&#k0@TS*}(;gg(pBL(aQP*|1R0C}MX
z6bot1*VEdsr-8lj`t|Gdsn^nHUQM41j)f(lgak1eLPE{=zLf;_0*d=nZX{>iNXZ7d
zKc)CaD%cAU^&l^FUQ6o%`67MFH54x_yPARI1&I1Y&s&MUATL18PY1<sa?(wZ7qY<S
z7lIOMY6UEQAztVPn?LDV`ZSOiAVxt*h~wempXh!o5$pvN^Am3-gS`L>pZpsjFO);g
z2j#U^P+kLt&xC6bFCeGSj8)KBfLNF4b_?PK2p2*^i;Fa{`@zKpB(J@G{TiCr+ClDz
z6c_2!Kx}yVkg)>Qe3x5LFZka|3c3j`E@Gj@1<3v2;sW9YP(p<j7q4Hx2IV!d7f{^4
z>?*_y5T_<O-GX}|DG-#9AjJhl7Gyr8!~+)>so=Z@mqIS_5bg(;c!=<Kyq)NBE71cS
z3;y7|1}^d7<tHeiLcCCNBefiq*Wl$Ra*2m9A6(*Ptb*n*xMMIGkn$N*9Bw|c6x@7d
z!Te-c`zICJ{sA?9(!up(CanFF{iHY>+W0Akw14uSmgGN$Hhv)OA6WebZTvvmKNZiZ
mX+Cn}Y6zKM1a2RqH4drh{vm390WAH{$o<5bkK7j+2sQw95y@5n

literal 3262
zcmZQzU}RuqP*4ET5)3PN7#PGD7#K7d7#I{77#JKFAmR)R3}87Bje>J67)H@B4uO0N
z23jJ<B1@X0*LVR_i4`t+Oev-kD@?)HuU}7kT!<CDe*K!M9ArMGET$Ah1Wi4}ZJ632
zA`n@u4tV|gHFKpkvJ^xFQxI7V#8@;Es{%}`U%!6MQe(qXV}q<7q6}^zgbN{&1(Dfk
z+L5JL>TFo*2$;{>Xv^AYi^mW=Qdsq(sb_1pV{5iU6NEbwje({N;&DttxUSc)U$eE@
zv$ffysevniGcb*UOCd8L%HSfeU%zJWuxIZeY(7K_vNIqeXe6fj9Ni8a-44ha(b#BQ
zGy~DNSj_Kp<mhw6WeBEvxPcHU2#F?$%;lWm$T@*b^Renhb1K9EXoAQNz$3*q*@<hi
z6Pf~KF5Dbs1|9{-Qm<dX=9=ovHPsnS5Sfc??4-wqn0|pPz?6FZ`Zf0q7w#D@$Ob}`
z!F8cAUcY|LGYdsMTmhyOL<CJe#C$v?&s<krvY1jlb6qh7dFQ*)6!9%`qb*wE&PPkc
WzubeSNMM!cC>p>JK<Nt%00#iDtPC>%

diff --git a/game.js b/game.js
index 18eb1db..7eed968 100644
--- a/game.js
+++ b/game.js
@@ -3,16 +3,11 @@
     Theme: death
 */
 
-// Functions for my little game engine thing
-const log = (logType, msg) => {
-    console.log(`[${logType}] ${msg}`);
-}
-
-
 // CONFIG
 const fontStack = '"Comic Sans MS"';
-var id = 0;
-var pi = Math.PI;
+let id = 0;
+const pi = Math.PI;
+let o = {showFPS:true}
 gPar = (key) => {
 
     // Address of the current window
@@ -26,7 +21,7 @@ gPar = (key) => {
     return parameterList.get(key)
 }
 
-var customLv = gPar("lv");
+const customLv = gPar("lv");
 
 class Canvas {
     constructor(id) {
@@ -37,11 +32,9 @@ class Canvas {
         // get the width and height of the canvas from CSS
         this.tW = this.c.offsetWidth;
         this.tH = this.c.offsetHeight;
-        this.scale = this.tW / this.w;
         this.camera = {x: 0, y: 0};
 
         this.mousePos = {x: 0, y: 0};
-        this.realMousePos = {x: 0, y: 0};
 
     }
 
@@ -52,9 +45,9 @@ class Canvas {
 
     // Mouse position crap
     getMousePos(evt) {
-        var rect = this.c.getBoundingClientRect(), // abs. size of element
-        scaleX = this.c.width / rect.width,    // relationship bitmap vs. element for x
-        scaleY = this.c.height / rect.height;  // relationship bitmap vs. element for y
+        const rect = this.c.getBoundingClientRect(), // abs. size of element
+            scaleX = this.c.width / rect.width,    // relationship bitmap vs. element for x
+            scaleY = this.c.height / rect.height;  // relationship bitmap vs. element for y
 
         this.mousePos.x = ((evt.clientX - rect.left) * scaleX) + this.camera.x;
         this.mousePos.y = ((evt.clientY - rect.top) * scaleY) + this.camera.y;
@@ -105,12 +98,6 @@ class Canvas {
         this.ctx.strokeRect(x-this.camera.x, y-this.camera.y, w, h);
     }
 
-    drawFont(string, x, y, color, align="start") {
-        this.ctx.fillStyle = color;
-        this.ctx.textAlign = align;
-        this.ctx.fillText(string, x-this.camera.x, y-this.camera.y);
-    }
-
     dT(string, x, y, scaley, scalex, color, align="start", vAliign="top", ops={}) {
 
         // console.log(ops);
@@ -269,8 +256,7 @@ class Room {
         id += 1;
         this.name = name;
         this.objects = [];
-        this.hitboxes = [];
-        this.background = [];
+        this.background = "#151f1f";
         this.w = c.w;
         this.h = c.h;
     }
@@ -324,7 +310,7 @@ if(!c.ctx) {
     alert("Your browser does not support the canvas element");
 }
 gameCtx = c.ctx;
-c.fill("#1c1c1c");
+c.fill("#151f1f");
 c.setFont(fontStack);
 gameCtx.imageSmoothingEnabled = false;
 var gameStart = false;
@@ -410,11 +396,11 @@ for (var key in images) {
 var levels = [
     {
         "name": "Tutorial",
-        "data": "[[1,1,2],[1,1,3],[5,1,4],[1,1,1],[2,0,3],[2,0,2],[2,0,1],[4,0,0],[5,1,0],[5,2,0],[5,3,0],[5,4,0],[5,6,0],[5,5,0],[5,7,0],[6,8,0],[0,9,0],[0,10,0],[2,8,1],[2,8,2],[2,8,3],[8,8,4],[5,7,4],[5,5,4],[5,6,4],[5,4,4],[5,2,4],[5,3,4],[7,0,4],[1,2,3],[9,2,2],[1,2,1],[1,3,1],[1,3,2],[1,3,3],[1,4,3],[1,4,2],[1,4,1],[1,5,1],[1,5,2],[1,5,3],[1,6,3],[10,6,2],[1,6,1],[1,7,1],[1,7,2],[1,7,3]]"
+        "data": "[[1,1,2],[1,1,3],[5,1,4],[1,1,1],[2,0,3],[2,0,2],[2,0,1],[4,0,0],[5,1,0],[5,2,0],[5,3,0],[5,4,0],[5,6,0],[5,5,0],[5,7,0],[6,8,0],[1,2,3],[1,3,3],[1,4,3],[1,6,3],[1,7,3],[1,7,2],[1,7,1],[1,6,1],[1,5,2],[1,6,2],[1,5,3],[1,5,1],[1,4,1],[1,4,2],[9,2,2],[1,3,2],[1,3,1],[1,2,1],[7,0,4],[5,2,4],[1,8,3],[1,8,4],[1,7,4],[1,9,4],[1,8,5],[1,9,5],[1,7,5],[1,9,3],[1,8,2],[1,6,4],[1,10,4],[1,10,5],[10,10,6],[1,9,6],[1,8,6],[6,6,5],[6,7,6],[6,5,4],[7,5,5],[7,6,6],[7,8,1],[6,9,1],[7,9,2],[6,10,2],[7,10,3],[5,3,4],[5,4,4],[2,7,7],[5,11,3],[5,12,3],[6,13,3],[2,13,4],[2,13,5],[2,13,6],[2,13,7],[2,13,8],[2,13,9],[2,7,8],[2,7,9],[7,7,10],[8,13,10],[5,12,10],[5,11,10],[5,10,10],[5,9,10],[5,8,10],[1,8,8],[1,8,9],[1,8,7],[1,9,7],[1,10,7],[1,11,7],[1,11,6],[1,11,4],[1,11,5],[1,12,4],[1,12,6],[1,12,5],[1,12,7],[1,12,8],[1,12,9],[1,11,9],[1,11,8],[1,10,8],[1,9,8],[1,9,9],[1,10,9]]"
     },
     {
         "name": "First Floor",
-        "data": "[[1,1,1],[4,0,0],[5,1,0],[5,2,0],[5,3,0],[6,4,0],[7,4,1],[5,5,1],[5,6,1],[5,7,1],[5,8,1],[5,9,1],[5,10,1],[5,11,1],[5,12,1],[5,13,1],[5,14,1],[5,15,1],[5,16,1],[6,17,1],[2,17,2],[2,17,3],[2,17,4],[2,17,5],[9,2,2],[2,0,1],[2,0,2],[2,0,3],[2,0,4],[2,0,5],[2,0,6],[7,0,7],[5,1,7],[5,2,7],[5,3,7],[5,4,7],[5,5,7],[5,6,7],[5,7,7],[5,8,7],[5,10,7],[5,9,7],[5,12,7],[5,11,7],[5,13,7],[5,15,7],[5,14,7],[5,16,7],[8,17,7],[2,17,6],[1,2,1],[1,3,1],[1,3,2],[1,1,2],[1,1,3],[1,2,3],[1,3,3],[1,6,2],[1,8,4],[1,10,6],[1,11,4],[1,13,2],[1,15,4],[10,13,5],[10,9,5],[10,11,5],[1,12,3],[1,10,3],[1,14,5],[1,12,5],[1,8,6],[1,7,6],[1,4,6],[1,1,4],[1,2,4],[1,4,4],[1,4,3],[1,4,2],[1,5,2],[1,5,3],[1,5,4],[1,10,5],[1,10,4],[1,9,4],[10,9,3],[1,7,3],[1,8,3],[1,7,2],[1,8,2],[1,9,2],[1,10,2],[1,11,2],[10,11,3],[1,12,2],[1,7,5],[1,8,5],[1,6,3],[1,6,4],[1,7,4],[1,6,5],[1,6,6],[1,5,6],[1,4,5],[1,5,5],[1,3,4],[1,3,5],[1,3,6],[1,2,6],[1,2,5],[1,1,5],[1,1,6],[1,9,6],[1,11,6],[1,12,6],[1,13,6],[1,14,6],[1,12,4],[1,13,4],[10,13,3],[1,14,3],[1,14,4],[1,14,2],[1,15,2],[1,15,3],[1,15,5],[1,15,6],[1,16,6],[1,16,5],[1,16,4],[1,16,3],[1,16,2]]"
+        "data": "[[1,1,1],[4,0,0],[5,1,0],[5,2,0],[5,3,0],[6,4,0],[7,4,1],[5,5,1],[12,6,1],[5,7,1],[5,8,1],[5,9,1],[5,10,1],[5,11,1],[5,12,1],[5,13,1],[5,14,1],[5,15,1],[5,16,1],[6,17,1],[2,17,2],[2,17,3],[2,17,4],[2,17,5],[9,2,2],[2,0,1],[2,0,2],[2,0,3],[2,0,4],[2,0,5],[2,0,6],[7,0,7],[5,1,7],[5,2,7],[5,3,7],[5,4,7],[5,5,7],[11,6,7],[5,7,7],[5,8,7],[5,10,7],[5,9,7],[5,12,7],[5,11,7],[5,13,7],[5,15,7],[5,14,7],[5,16,7],[8,17,7],[2,17,6],[1,2,1],[1,3,1],[1,3,2],[1,1,2],[1,1,3],[1,2,3],[1,3,3],[13,6,2],[1,8,4],[1,10,6],[1,11,4],[1,13,2],[1,15,4],[10,13,5],[10,9,5],[10,11,5],[1,12,3],[1,10,3],[1,14,5],[1,12,5],[1,8,6],[1,7,6],[1,4,6],[1,1,4],[1,2,4],[1,4,4],[1,4,3],[1,4,2],[1,5,2],[1,5,3],[1,5,4],[1,10,5],[1,10,4],[1,9,4],[10,9,3],[1,7,3],[1,8,3],[1,7,2],[1,8,2],[1,9,2],[1,10,2],[1,11,2],[10,11,3],[1,12,2],[1,7,5],[1,8,5],[1,6,3],[1,6,4],[1,7,4],[1,6,5],[3,6,6],[1,5,6],[1,4,5],[1,5,5],[1,3,4],[1,3,5],[1,3,6],[1,2,6],[1,2,5],[1,1,5],[1,1,6],[1,9,6],[1,11,6],[1,12,6],[1,13,6],[1,14,6],[1,12,4],[1,13,4],[10,13,3],[1,14,3],[1,14,4],[1,14,2],[1,15,2],[1,15,3],[1,15,5],[1,15,6],[1,16,6],[1,16,5],[1,16,4],[1,16,3],[1,16,2]]"
     },
 ]
 
@@ -498,7 +484,19 @@ var levelRef = {
         { // human
             "x": 32,
             "type": "floor"
-        }
+        },
+        {
+            "x": 352,
+            "type": "wall"
+        },
+        {
+            "x": 384,
+            "type": "wall"
+        },
+        {
+            "x": 416,
+            "type": "wall"
+        },
     ]
 }
 
@@ -535,6 +533,10 @@ menu.o = [
     {
         "t": "Editor",
         "a": _=>{ setRoom(3) } // go to level editor
+    },
+    {
+        "t": "Settings",
+        "a": _=>{ setRoom(5) }
     }
 ]
 
@@ -598,14 +600,13 @@ menu.keyDown = (key) => {
 }
 
 var gameRoom = new Room("Game");
-gameRoom.level = levels[0];
+gameRoom.humans = 0
 var player   = new Entity("Player", 0,0);
 player.speed = 0;
 player.maxSpeed = 20;
 player.direction = 0;
-player.accel = 2;
+player.accel = 1.5;
 player.sprite = images.player.car;
-console.debug(player.sprite);
 player.crop = hamsterRef.nl;
 player.x = 0;
 player.y = 0;
@@ -735,6 +736,7 @@ player.shoot = () => {
                 if (ent != player) {
                     cRoom.objects.splice(i, 1);
                     cRoom.objects.splice(cRoom.objects.indexOf(bullet), 1);
+                    gameRoom.humans -= 1;
                     return;
                 }
             }
@@ -833,6 +835,11 @@ gameRoom.start = () =>{
     }
     gameRoom.level = JSON.parse(gameRoom.level);
 
+    if (gameRoom.tutorial) {
+        player.accel = .7
+    }
+
+
     for (let tile of gameRoom.level) {
         if (tile[0] === 9) {
             player.x = (tile[1]*64)+32
@@ -885,16 +892,41 @@ gameRoom.start = () =>{
             }
             pooman.timer = 90;
             gameRoom.spawn(pooman);
+            gameRoom.humans += 1;
         }
     }
 }
 
+gameRoom.step = _=> {
+    if (gameRoom.humans == 0){
+        setRoom(0)
+    }
+    // step all objects in the room
+    for (let obj of gameRoom.objects) {
+        obj.step();
+    }
+}
+
 gameRoom.draw = () => {
+
     for (let tile of gameRoom.level) {
         // [index, x, y]
         c.sliceImage(levelRef.file, (tile[1]*32)*2, (tile[2]*32)*2, 32*2,32*2, levelRef.tiles[tile[0]].x, 0, 32, 32);
     }
-    
+
+    if (gameRoom.tutorial) {
+        c.dT("Welcome to", 3*64, 64+15, 1, 1, "black");
+        c.dT("Death by Hamster", (3*64)+32, 64+25, 2,2, "black", "middle");
+
+        c.dT("Use WASD/arrows to move", 128, 2*64, 1,1, "black");
+        c.dT("Aim with the mouse and click to shoot!", 128, 2*64+10, 1,1, "black");
+
+        c.dT("As a member of the hamster uprising,", 6*64, 3*64+25, 1,1, "black");
+        c.dT("you might want to kill any humans", 6*64, 3*64+35, 1,1, "black");
+        c.dT("you find!", 10*64-16, 3*64+45, 1,1, "black", "right");
+
+
+    }
     for (let i = 0; i < cRoom.objects.length; i++) {
         cRoom.objects[i].draw();
     }
@@ -927,10 +959,15 @@ editor.step = _=>{
 }
 editor.generate = _=>{
     editor.saving=1
-    let encodedLevel = encodeURIComponent(JSON.stringify(editor.l))
+    for (let tile of editor.l) {
+        if (tile[0] == 0){
+            editor.l.splice(editor.l.indexOf(tile))
+        }
+    }
+    let encodedLevel = JSON.stringify(editor.l)
     if (encodedLevel != editor.data){
-        encodedLevel = "?lvl=" + encodedLevel;
-        document.getElementById("leveltext").innerText = encodedLevel
+        document.getElementById("leveltext").innerText = encodedLevel;
+        document.getElementById("levelLink").innerHTML = `<a href="/?lv=${encodedLevel}&goto=2">Play</a>`
     }
     editor.data = encodedLevel;
     editor.saving=0;
@@ -1028,15 +1065,73 @@ lvlS.keyDown = (key) => {
     }
     if (key == "Space" || key == "Enter") {
         gameRoom.level = lvlS.o[lvlS.s].data;
+        if (lvlS.s === 0){
+            gameRoom.tutorial = 1;
+        }
         setRoom(2)
     }
+    if (key == "KeyE") {
+        editor.l = JSON.parse(lvlS.o[lvlS.s].data);
+        setRoom(3)
+    }
+}
+
+var options = new Room("Settings")
+options.s = 0
+options.ops = o;
+options.o = [{
+    "t": "Show FPS",
+    "a": _=>{ o.showFPS = !o.showFPS },
+    "v": "showFPS"
+}, {
+    "t": "Menu",
+    "a": _=>{ setRoom(0) }
+}]
+
+options.drawGUI = () => {
+    c.dT("Settings", c.w/2, 25, 2, 2, "#fff", "middle", "top");
+    for (let o in options.o) {
+        let s = options.o[o]
+        let txt = c.dT(`${options.o[o].t}`, 150, 50+(o*20), 2,2,"#fff","left","top");
+        if (options.s == o) {
+            let a = images.ui.a;
+            c.drawImg(a, 136, 50 + (o * 20), a.width * 2, a.height * 2)
+        }
+        let v = options.ops[s.v]
+        if (!(v==undefined)){
+            c.dT(`${v}`, 450, 50+(o*20), 2,2,"#fff", "right");
+
+        }
+    }
+}
+
+options.keyDown = (key) => {
+    if (key == "ArrowUp"||key=="ArrowRight"||key == "KeyW") {
+        options.s -= 1
+        if (options.s < 0) {
+            options.s = options.o.length-1
+        }
+    }
+    if (key == "ArrowDown" ||key=="ArrowLeft"||key == "KeyW") {
+        options.s += 1
+        if (options.s > options.o.length-1) {
+            options.s = 0
+        }
+    }
+    if (key == "Space" || key == "Enter") {
+        if (options.o[options.s].a){
+            options.o[options.s].a()
+        }
+    }
 }
 
+
 rooms.push(loader);
 rooms.push(menu);
 rooms.push(gameRoom);
 rooms.push(editor);
 rooms.push(lvlS);
+rooms.push(options)
 var roomI = !gPar("goto") ? 0 : gPar("goto");
 
 var cRoom = rooms[roomI];
@@ -1057,8 +1152,8 @@ var lastTime = 0;
 
 var mse = {x: 0, y: 0};
 var lastClick = {x: 0, y: 0};
-var startclicked = false;
-var endclicked = false
+var leftclicked = false;
+var rightclicked = false
 
 c.c.addEventListener('mousemove', (e) => {
     mse = c.getMousePos(e);
@@ -1066,16 +1161,24 @@ c.c.addEventListener('mousemove', (e) => {
 
 c.c.addEventListener("mousedown", (e) => {
     // console.log(e);
+    e.preventDefault()
     lastClick = c.getMousePos(e);
     mse = c.getMousePos(e);
-    startclicked = true;
+    switch (e.button) {
+        case 0: // left
+            leftclicked=1;
+            break;
+        case 1:
+            rightclicked=1;
+            break;
+    }
 });
 c.c.addEventListener("mouseup", (e)=>{
     // console.log(e);
     lastClick = c.getMousePos(e);
     mse = c.getMousePos(e);
-    endclicked = true;
 })
+c.c.oncontextmenu = _=>{return 0;}
 
 window.onwheel = (e)=>{
     if (e.deltaY > 0) {
@@ -1094,7 +1197,7 @@ cRoom.start();
         c.tH = c.c.offsetHeight;
         c.scale = c.tW / c.w;
         frame++;
-        c.fill("#151f1f");
+        c.fill(cRoom.background);
     
         for (let key in keysPressed) {
             if (keysPressed[key]) {
@@ -1106,9 +1209,9 @@ cRoom.start();
                 }
             }
         }
-        if (startclicked) {
+        if (leftclicked) {
             cRoom.click(lastClick.x, lastClick.y);
-            startclicked = false;
+            leftclicked = 0;
         }
     
         cRoom.step();
@@ -1116,14 +1219,19 @@ cRoom.start();
         cRoom.drawGUI(); 
     
         /* BEDUG INFO */
-        c.dT(`FPS:${Math.round(1000 / (Date.now() - lastTime))}`, 0+c.camera.x, 0+c.camera.y, 1, 1, "#fafafa", "left", "top");
-    
+        if (o.showFPS){
+            c.dT(`FPS:${Math.round(1000 / (Date.now() - lastTime))}`, 0+c.camera.x, 0+c.camera.y, 1, 1, "#fafafa", "left", "top");
+        }
+
+
+
         switch (cRoom.name) {
             case "menu":
             case "Editor":
                 c.ctx.drawImage(images.mouse.cursor, Math.round(mse.x), Math.round(mse.y), images.mouse.cursor.width*2, images.mouse.cursor.height*2);
                 break;
             case "Game":
+                c.dT(`Humans:${gameRoom.humans}`, (c.w)+c.camera.x, 0+c.camera.y, 1,1,"#fff", "end")
                 c.ctx.drawImage(images.mouse.ingame, Math.round(mse.x)-16, Math.round(mse.y)-16, 32, 32);
                 break;
         }
diff --git a/index.html b/index.html
index 15b0ec2..bf4e4d4 100644
--- a/index.html
+++ b/index.html
@@ -33,6 +33,7 @@ cursor: none;
 </style>
 <aside >
 <pre id="leveltext"></pre>
+    <p id="levelLink"></p>
 </aside>
 <canvas width="600" height="400" id="gameCanvas">
 </canvas>
diff --git a/letters.js b/letters.js
index 760a285..a0b8d2f 100644
--- a/letters.js
+++ b/letters.js
@@ -448,6 +448,17 @@ const fntNeg = [
    [],
 ];
 
+const fntExclaim = [
+    [, , 1, 1],
+    [, , 1, 1],
+    [, , 1, 1],
+    [, 1, 1, 1],
+    [, 1, 1],
+    [],
+    [, 1, 1],
+];
+
+
 
 const fntINDEX = {
    'A': fntA, 'B': fntB, 'C': fntC, 'D': fntD, 'E': fntE, 'F': fntF,
@@ -456,6 +467,6 @@ const fntINDEX = {
    'S': fntS, 'T': fntT, 'U': fntU, 'V': fntV, 'W': fntW, 'X': fntX,
    'Y': fntY, 'Z': fntZ, '1': fnt1, '2': fnt2, '3': fnt3, '4': fnt4,
    '5': fnt5, '6': fnt6, '7': fnt7, '8': fnt8, '9': fnt9, '0': fnt0,
-   '/': fntSlash, ':': fntColon, '.': fntDot, '-': fntNeg,
+   '/': fntSlash, ':': fntColon, '.': fntDot, '-': fntNeg, '!': fntExclaim
 }
 
diff --git a/t.aseprite b/t.aseprite
index 52c9e7b9b68564b35e02721e04dabb65ee07f358..88533f274d87786feac38b38e560a1341ee21ea1 100644
GIT binary patch
delta 1643
zcmew^u|iH!gP(!n!BRd31u$e}U|>jLKn7M572_E<PHa@=FJok2kW{dON?LB*8qFxi
zz#t<d^Php?>gvq@I~W)kSQr=?7_25sF|A;ek&(H&I&<<vCb`KEm^v8eOtxcnXAGGv
z$SGrSb|Wu?0uQqz+sA**DF-h!v;+muTbf_%Y32WV&8lDN-^~xt{`j-TZvOe_pTX4s
z_xVwA92_&iMg)M2FgbgWlR<%p#gTjGKW>lakI9^Df@z8OCof5!f4yM;kI<{;P_55D
z|NL|PAKQl;qK*r}+9N^QZLe?SWH8`icI035m;FMM-(<4~UM){p<KuNbbr;39maop=
zE&T8?6zqR_J#qif%l{kae-xkigM(ut*c?xgIl9*!c|qoEWaO-8P`z>R#A3UXGLuxK
z&s80tJ(HE;LEpE3IoJQmm(+rsj~oK$Hu5qsa4<QtC;n%Q2vFZ(s%CTYdixTwqhZH?
zKf7(mDGvqz+v86M{dvn@*Jf|&$-%K4Y;`=yYG<?%SS-Nw&!y>R^WS?OMXkqX&HQ=x
z+xkh<5C6Y?{`I5zhmJ$R`iJ|YOy^gbGFBIJaI65EmH;v>6l9tK2P8Z<IDYn2;P~0e
z0XB^*_U63Z?y1kiPo94G{nxh}`gL2I`=P-8_V#DKpI^QgQ#!)Iv6qQ~;nzoIaQb0p
zU|{HHoNUM}RX_Li)vzN5A`Tb*kKMg{H+COGdO>;ljDxal<@_d@mzMcDJ-2&PI*;#@
zi4x0~$9W$dZ8y5syk0OrV(#5#4^J->`@@;rab<x&>x=favqOvRQm&bV@_d<GnXc6t
zYWgC5g+u<8Q}w6bF1SDcdg@H0ovM#q+5g5(^O_rZWs1Rhu?zkg^$R0jc&^}RuDh}4
zmU38zd3r<L9;Rmpv#x2)Xa2k9-AYNV^O7&VKhLwe?rwQRq;R$9kCUmN)hf;B=zLH&
zRh-nhPIZC2S>Ck7VpZd1p2ru=@0#xEd@s=SMY_jPy_FOHFZr-w{=1|ImB`!<i|br}
zI#klxOgnGPWc?!S?U2r#wA`uw<AeT})2$Cadh?6t!g;-EmfK!!?MhrQ|El0sXIE?H
zza{N=1MNCgc6BhXJ>aj~^!(A=*$(?_!*@h1_mH?XxuMRdJ#xj_bw1S`Y=1+_EDmNY
z_vQQbv1vo@s!-Jl%zrifyL}p>HuL@1X;_~=OT#|r^b_$rS6+NN#=yY9s=&y=#ITu_
zON3Eq%V^vTnz-2qkDJM?TtbuUxPLOP2Is_NP)>Bej#{!UR%lwWKq-;`+3UK+D&fjg
zXU?1-azFI?>x=cb{hRN;TK_Kee+fGS14I4oz21v+zsWo1NFKiW>%aoAi4h<ZZLV+R
zWia4iKFIUvFZ+k46s9F66Aty4eBJIA#JSP$$4xy328Jg$Znf?&&%FNfU*pPuukD@c
zm)A4iiu!c`sm!zi6%h(N&VlSFL8W$8poVR@;Gf3&vy(-<dQER%y!kKmW7ZEOu>Egv
O_1)$BXWa@Gbp!x=oa__;

delta 1137
zcmZ1>_gzA<oQHwo!BTDp1u$e}U|>jLKn4~Q72_G_Pi$1>&tha?kW{dMN}6xn8qLVH
ziGhKEg@KWQ!D6x+(~8Mgn3geqnf#E|opH@%13u~cyH^~!8Vq<`F5dZXu`?l7J8bsJ
znj>6yIp1$@aXHfQS+jnoW!m#+-&d>u_Sbvcz3r&@-EH@G6yG-AF)4r7<|oYC&WgvZ
zzMt{q?C<qv6F$ekRH#j6-&g<gZ~RMzzf;>{{~qIc@Y(;&{DV_#7Ds<;yqo>C`(4?-
z8x3dVpN3m`+`n;A=-&SLH}+ebzl2NO`@<YLt?ceYu;XS<HsF(~pX$hUK!Jzl^Z(~h
zn!iQ7SXyR$TfyZ-U|MflPlsr5aQV*bAIyKw+}R=ZZ|0x7Jm+ooy{rBwuvPwB5I5!d
z{uzuP{TGVQ_<w|FN4@pWxzFFf+W*3~h2P@9qy7ARNB+M5wEp3H$Dd5nPs``uul>JF
z=F=Z%%ev3^IsffvxSHQT>jeYD<j1V8j0?annQq9(pvb}U^MCP=1>rG?seCtLcQOgR
ziVQrSk#>67^78xZ9?JiCx9^JWpZ}j0OP*4HzxKjU@idP6_7`<7eV;#P;S>2sI;Z|A
zr#Ae(ee!)w{q;Y>dEFsh`UMO}>l>I8|F8a2{qSw$4;Hf{@8kAY{dcuI^`Aee&uIP>
z=4a_eH6P_!ZwI%zJphNy42XLixegd`u>AdB{3pRHe`&&|w5{7h68%q}Vapess5sYt
z`SOC0(m9DYV%ZPhk6hoJxcOJ$y`(^Q)%{7z6{j0FN&a~w_uAoy{<nBp>*pHM8|Bl?
z1NpYyf83F#TyexO`J#EsxAihS{TuRMY?tAApI9w7_tk&*<p%7n`G;TKXJBBM{Djqo
zaXQ!~R~-2o6nI=N-urK{cR^n4j2nFQ0?I0}`!%Py9TD99FJ|-kZ~9Ybe!KN=*S`}A
zoMz9s^&WNGD*s!c{oCRECjQ$i?w1tCpZT!z_xiMgbM@-&m)nbcZtj2g_x{O;U$iCX
z{EPk@et-Xi$G=}Z<oB?9;AQvX)}KYyujjjNY;$|Uz`*cp@>5o4#yMb@T#MyvFyLTL
zcvml@XEEPYP5T0$aO5TT&sXOgp3S*w`=RLj*3+j`{q^4{uREl_D|7ynw%SeI-#CA=
zZhs^EX43k7^;?=>{dKR_s7>U*`6u}2L^&_{mkYj?%TB3#{`vi%f4jcT&tMCD7JsPq
z4|BS})Bnn|Kkk1mANAP3ZZ@~ZgElwDSK#<r1a`|6L%stFJj@6F{I{%`pck8PurK+R
z;zXOUbS)2;GZCB5NF>kOR9`&f?&R7{>`$eumi##+HzoZ=;3H$(Id+#0zN{~;d&qZc
z-w(FSbr<;-)qegrIrqZWA4_6islN&Of9$_`$%ei5+xtrxs$y>L&y#=I@TR_GyJqJ9
z{dVP#y_Ws;doFyId9r?+TRI~H!>^Cb;PQfbvK_O{<}6M*M&3AdVa9!vvpJ<FJM;Vm
E0OrLk{r~^~

diff --git a/t.png b/t.png
index bd2c211e511e380f3b330f03afbe694c702de509..63a041b1c6a136ddcd52123eea4325d9387ec85d 100644
GIT binary patch
literal 2095
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

literal 1390
zcmeAS@N?(olHy`uVBq!ia0y~yU`$|OU{K&-V_;y=@mn;7fq{XsILO_JVcj{ImkbQ7
z8lEnWAr*7p&OMv^*g&B5<x#N(YBlFo+eIdpBrq0oYO1KJG+c5FYT@7c<el1;#_t;@
zC>s8mshDn|TxplEahlJ^K(4<wQj<QN<1Du17x(;ocVB!C|KWypi(l`0QT^CLZ`<#E
z{ZmYMV*Y!7-OZWv|MORGlb|2JrW^nJyiN6=mwCcj2dm|Y0gKn(_kDX%;^Un4zpo$t
z_V~MZ>1+e5<ChaR{(t+h+0}kYGFuEsX-a~GrNJ@ptKXMZDcsuXR?|I$QGCMdo@<P}
zUMfB2VfxDj?R)M2$G@px?y2|uVfe0sTlR+a_ET=nc=i9yyQW|7|GxYGzwx`qm*v0a
zr$>exC$Q))x;IJ2ge`~f!U9%fwgZWKw${gYcVrqevn2(tUnsb;uHEpFO#glTgD->*
zmB^$SywCg-Ii<e(N5-oE_uj92dbYthV%_x%U2S#deab%<C>%MHq}jOj<!nav31;!D
z`eJV#o3{9^YVMcY?Q0ib{aN^R;=0#Id}lnC`gKgq$fe`w)1pmMU;Z~lr|L)?58U%P
zpYsj7Wr$pG`?i%aiVA;MzqXoK-1y4LUU})~M*ZiFDS8{H?2{}|%>Kb3{hIxk>-|mk
zPQBB$93Fa^W?a}V;=(GG$GDy4OVu(ShM?n8`)w4P<L+$c+Yww;r!v#Xu1~Z?=vUeS
zP6cM3IdkQ#4ji=nJ~{gS`uV@T*P7+eS*6YLb*IM{&llohy>g{fUS6NRI^OGkkbvZp
zd`87za|GvZsp|||!;@;Qcv;ADzeM!clh<Ch30%l94mo!}eA4EpSIn8&m`s)Yl&4+F
zTYEln!Ia#~M(Q!nzr3BLuk|cdnBcKYbwQ=W$)_tK{@(by#+JYD^@5`nwZ1Fom_7aJ
z^!(nmDG%4|4!f`PfXQTuYSFIf&NkBpny=<6*Unw}wfuM8$NXF3+UEEB_RhQhSYAB4
z`M=e6{iU<B<`<_O2=%yE=jrd8wb0()E-c))Z`LcBC1=dpU3W))-yG9dw*CG3)Sxsg
zee?CRC(Uqdzm?uxAnj6R$T8J!dgC%BlT~HeCh@Pzw#sz0x~vqin6C9(%G7(hE_+PJ
zwCJ3dWdVBA*G1k{o5-DO%O7JUbv`z^Ya@Th%+_gK?LkZnEBC5?U4B3(m~ZQ4r3953
zd&IxD7i&MWZj{}Vy>Rm4tM?s>Zb^r=|DM%yNo2yy)C((ilvNr&tLScM%&5@#*78N1
zVR~Ke-U%8Kx7A)AwYU_R@3r~rsy%m<<(>KW&YYc_`)>LsJ$d5?JhOVPTmIx%S-$Vd
zlvN@Z((eZ?S6Oh~>9OhT12MucoY?-Co)Ixj4L<(lmf&jpt@(#|EE-FeSf-yo_WJt7
zOQ$lI^sUdG-}c;4;`Sk)9Zb5%Uf=n3i8tHLN_V4c5Oem<#&vhzZ<=azfBV#ZyoWU1
zs$};~sna?hU1j4gz4Up~eXWhI0vFgHT=DZ?d}TYw4yKpK1HIhC?*z|N=|BF$V{OG9
zr5TRvuIP&<fAfA7%`%5U>Y<0L<)w>Lx9nqkBXz-PtAKLY_TtRRxoh*;<~aUd`|R30
z_6=frU-wx4*i~OT|88vX-u1t)zy9{Iq~QGFr8ED1EGamC`JiRGCWnEL@`DR6{bg>&
z{HoRe{n^N}O|h2yl&x;y@2?M+l^oCxySIL~3hTj@`GN*Qom*Ja7IZ5cO}=)Wp^Wv3
z?z8;tpKsoYP0ZvuA#>+Knck&3Ilb#Ara0S+WJa^ZG+a6IN7wDht&7_Po=@|5nx)vS
z|EE@<`1uw4d3Dpxnb$dFJrz5~v3<pQUgLXKa{J?5O7F?p&3e&Z@{h4y-7jnH-ctt|
Q7#J8lUHx3vIVCg!0A%)~yZ`_I

-- 
GitLab