From 0a4c3eacd6692a6404c7cd5bd4ef64b62c6200ce Mon Sep 17 00:00:00 2001
From: KosmX <kosmx.mc@gmail.com>
Date: Sun, 6 Dec 2020 18:59:46 +0100
Subject: [PATCH] windows VT100 enabling for runtime

---
 .gitignore         |   5 ++++-
 multiplatformLib.c |  34 +++++++++++++++++++++++++++++++++-
 multiplatformLib.h |   2 +-
 multiplatformLib.o | Bin 3576 -> 1852 bytes
 snake.c            |  20 +++++++++++++-------
 snake.o            | Bin 22128 -> 15046 bytes
 6 files changed, 51 insertions(+), 10 deletions(-)

diff --git a/.gitignore b/.gitignore
index ddd94d6..f954e6e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,4 +7,7 @@ snake
 
 structs
 multiplatformLib
-debugmalloc
\ No newline at end of file
+debugmalloc
+snake.zip
+multiplatformLib.o
+snake.o
diff --git a/multiplatformLib.c b/multiplatformLib.c
index 2366dea..1f32c55 100644
--- a/multiplatformLib.c
+++ b/multiplatformLib.c
@@ -9,6 +9,11 @@
 #include<termios.h>
 #else
 #include<Windows.h>
+//I need these two from Windows consoleapi.h
+#include<wchar.h>
+#include<WinBase.h>
+#define ENABLE_VIRTUAL_TERMINAL_PROCESSING  0x0004
+#define DISABLE_NEWLINE_AUTO_RETURN         0x0008
 #include<conio.h> // read one char from stdio before pressing enter. essential for contol
 #endif
 
@@ -37,7 +42,7 @@ struct termios term_config;
 /**
  * Init platform dependent stuff, mostly the custom oi control
  */
-void initMultiplatform(void){
+int initMultiplatform(void){
     #ifdef __linux__
     struct termios info;
     tcgetattr(0, &info); //get attr
@@ -46,7 +51,34 @@ void initMultiplatform(void){
     info.c_lflag &= ~ECHO;
     tcsetattr(0, TCSANOW, &info); //set attr
     setbuf(stdin, NULL); //???
+    #else
+    //Enable vt100 emulation. Without this, snake is not working
+    HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
+    if(out == INVALID_HANDLE_VALUE){
+        return -1;// :( it won't work
+    }
+
+    //following code is from docs.microsoft.com
+    //try to enable vt100 emulation
+    DWORD dwRequestedOutModes = ENABLE_VIRTUAL_TERMINAL_PROCESSING | DISABLE_NEWLINE_AUTO_RETURN;
+
+    DWORD dwOriginalOutMode;
+    GetConsoleMode(out, &dwOriginalOutMode);
+
+    DWORD dwOutMode = dwOriginalOutMode | dwRequestedOutModes;
+    if (!SetConsoleMode(out, dwOutMode))
+    {
+        // we failed to set both modes, try to step down mode gracefully.
+        dwRequestedOutModes = ENABLE_VIRTUAL_TERMINAL_PROCESSING;
+        dwOutMode = dwOriginalOutMode | dwRequestedOutModes;
+        if (!SetConsoleMode(out, dwOutMode))
+        {
+            // Failed to set any VT mode, can't do anything here.
+            return EOF;
+        }
+    }
     #endif
+    return 0;
 }
 
 /**
diff --git a/multiplatformLib.h b/multiplatformLib.h
index 510cf1e..02048c1 100644
--- a/multiplatformLib.h
+++ b/multiplatformLib.h
@@ -5,7 +5,7 @@
 
 struct Vec2i getWindowSize(void);
 
-void initMultiplatform(void);
+int initMultiplatform(void);
 
 void endMultiplatformLib(void);
 
diff --git a/multiplatformLib.o b/multiplatformLib.o
index 29833e5dca49440ac71379427a402f2b5de69d01..6a65ac0f4d2f9680741fdaa9df6b2f97ee6a6cbe 100644
GIT binary patch
literal 1852
zcmZuy&1(};5TEVF;uoxnpS98jBev465o(Dd7@KHUXtj`H529((eKD))ZrE%!Ru9Ek
zAxNQue?Tw#2MB^a^&=j%7gG;{dg;N7+N<cvII}O=?wSnDyqVw3n>TNFc2;}R3PhIz
z07o1x0E*2Dwxe?~CIAGGgCe)L;v&QFn4%@^q$jSK8iC;@C6&)N^LeppiYxdNc4L6n
z;*A1`Kq#W*{Ba`~GKX<?t-gI|Q{2hk|MvoXYsfboDN7wOfV3iYJa#r*i>t+r@WQVu
z66FH5_@}Ct%JzslI}+?xOUoR7>KLEZr>7~XxVp3Y>D0%WC0i<0)Z*Ll^_%6ilerdG
zTn+F5>G{g<FK$d}<>v>fBjP##|9Y^RPJSXL--D?;)#@=iQtFtd<qZ`|aP2&dSH0Dj
zmZ@%;r;rx0YH2YR3`vWFL8Yrgz=`6Lpf0b=U2AG-W%h!gZlfEh^?dv^ybOOnGw%!S
zXVyyZ9`5L>6n_X8XO^VcN_q47%?5TOwm_vxvE}j{whjobBDAJjLc$p8WMe}G`fKZ>
z8iqI#`H6NRqYJP#VGj8jGGX(`tH^tiE68oQp&eHl*W<`R)I+!?kULQyh(^!KorQ2;
zqOZ3nXXf=nPo8CZEOs~4E%#6ASzAusmxpv?V6<nnuUF1l=501^cgbPploI0K#eU2a
z0BWcMj)tYfK}UOu@{pswM%m_QUs3WM-%&g4U`MeUs*-L4upL=+bgt1iMRyZnr|Tt~
zd+Da!OJ{P7a&b*|y>xSq(Y?7wUlHFMaxuCG_l8~XITwq#TFmvTE;i_D!>(6J>sf{t
z(cdb-En#9ZYwNje(oUP!#Gsy1#>pp<KoUTP7JMGfh^7$L>%=$#CsEG%kSJR7KIAG|
z6&IN_^n8}F9CZZGGhu4z<$b{s@06obM1lH+-oqw&CtM4{Vw0M^(~SmD(-_ZWqxUZg
z^j7@jooZXqB?==bo%!Pnyiv1gZi~WspRaCY>I$w@H^2i&a={ULqIKfPi@J#`M_x4`
ziw(%S57|IVv1mRAr>3UBVrh%zGx2eYF#~i%w}-rq0nE^R0Co!8V)hmM0Yx)Oi}X?5
z(9C;reTsP#CldNZE-}FDxUH#4L&NrSp{Qx(%`6)-wK^DQb|aX$lgj9JZCe6Q8qYN3
V;Dz^3rqj&2Y^2RvK%ANj{sBQeF&Y2>

literal 3576
zcmbtWU2Gdg5MDbjag)^Nv``rZ5eu1;2y(JXC1?dGzs?1@KO(LQ63DgB=lF<yw(PT-
z6a<k%L`*2^BM*R(=nFjc1%eQ29R-oT5#R-hzp6qIM1=yVp^A{q%-(LizFhhMBdurW
z+nH~7XLk4e@@OpTcDV=_7kPp-ERGWLaa*H5K)VBEAL$@}N%wB8WHPeU{R&0V9*jro
z%G`~UX=TxKe-FS)btI%jYU9<PV%4A5(N9?%356q@k$OfdctY?K3;AQ!>(GgZf=YD{
z`hd%$bLmjWO{tUGQs+K|rOvxhSw4*HaYQ1U+tf;0>9?k?v?_C-og932g^pz|;QEyF
zlmVyz6$6FkTjO&#0+IUVt~eo0Tku9|%K3Q6L#beO9%V5W^1@UdbeEMqFjas}B<2Hh
z5uj|5`tAAVYvu#WBHawzN)!Kn%Ab+CN1z^ckl%i=cGXD#_WCa$fYo2YO757ldYwi|
zOP-Ll6c4$T<!eD@@7irPvy;E4x)s@MVh%uZ)Yav!Zbh$seJtfymTw*ET~pMndTqT0
za;!+ka__2M9~hE|qSn#=LaF|ek#fsYuP4OzI}!>sN{9LEamZ)&)_i^X;E}&yZ0p^a
z``tDFl{E7Ciqt)ewRCM<L50}r3K<(7J{s&fm8uwKC3r;cm&1LLM=I2ey!3Eb4j=Bd
zVB&!wKQugPW5-VsHz75|VChuuWZHG^DdL*;ySh4By%!+87;_IBqo)-5L1<xyy@NXH
z^S|zn`p&ptYxDVseBQx!8V41k!np%rWf?YxTJZ&E+Ne9hG3$mwMcJ5p90teQ>Dar7
zfly9}b4RT}jQf<15ONl^;tRWVYYf-^4IArYdN+k9$wU6AJB_zEz8IK0p1tO%7Mks5
z46PP&$4-#qt-IjfU2tBB#xUl1zpzg3aUa7m7bvt|pbtai7~))>gpL!AdG92D)`QIP
zF{aOecJhCI7reL&j<s{*SpXdObqO>I?i1xLXo#;-3(hpt?}2vWd7t?QvCts&jDh|T
znv?%0fFnQN0TkRn%2jBHZ!nymIl#Vz=EU<Y^Dn}ML)kuu`AW{zi@BtkDU|XtJteE8
zq-9E4IXj`2G|eEop_|7<Cz2S8ofsO7B~C=66Ql7&d~hf>njoe+shLUBED=*H<r8Yb
z$mo-RmKj<$)4D;xN>wr>ktmx<bt<7|rxKZ@o+Fx(ZkhyELK0J{tZov$pqe=X<j1vX
zb2ytUVPD0c)4Gu^oSo3mX{2K4<(#G!iIFr4Rxe+G<n~+Jr8l7i`v2g24sx2|m=65h
zJ;dxu8_xX=8;)Ek6-(heMtS%f^@0t@bB;1gfANkJ;)BNdUu8J*NCN%_!_gn>%KbkO
z@J<0=VmMz9_rEFl<Jsl-0d{_nU*s7TaM3@`aQix+5&RDd{Idcs@_!`YBL6i37yZX^
zLJ(Z%-O%{@RRI_MYv6-o&vTHXgw~6NQiRtBF>L$}J#F*9#O$06Ut>1D6DXV~$o6y5
zg12#gpKCUp-{<daIKQ_<F3;r6WD2xdvUHaBN?I-{n{Y{poKBiaBB#n_BCCabUNZnQ
z3Z^E*H@A;oJ!VfD6}ea{6t$8$LuAUJWfPfFGOw`}{67_ha7=;yi!%Ti%G+WQz~*_U
zgYeS@4Qn_6O_XW&sq(XU{M(H4@Glj9k5LXmL)`v_{N6S%`l7IMSqA*#yMUbkH9i8d
z$Qgzv3ZMT$5rjUUpX;LnCc1j<3u1#jj{D+w6jNp2E{_j#N2YoHIGlnGa@ym2*!=6<
zk!gGUbAUV5Z(*+$P-AgeKaAz^ynaq|V~8I~K^EA;+M$n>_ISjcQuQV~kUzq>DE9o}
To8lC&;DSN;J78Ij`f>YT`N|<;

diff --git a/snake.c b/snake.c
index 7c4a9c4..3263298 100644
--- a/snake.c
+++ b/snake.c
@@ -953,7 +953,7 @@ void _print1char(Matrix *map){
 int core(int argc, char const *argv[])
 {
     if(argc == 1){
-        printf("Usage: snake <map name> [<snek skin>]");
+        printf("Usage: %s <map name>", argv[0]);
         return 0;
     }
 
@@ -1010,14 +1010,20 @@ int core(int argc, char const *argv[])
     _testprint(&map);
     #endif
 
-    initMultiplatform(); // init stuff.
+    if(!initMultiplatform()){ // init stuff.
 
-    printf("\e[7\e[?25l");//save cursor state and turn invisible cursor
-    loop(&map, tickspeed, repeatMap, feedAmount, canBite, foodText, foodLen);
-    printf("\e[8\e[2JGAME OVER...\n");
-    unisleep(2000);
+        printf("\e[7\e[?25l");//save cursor state and turn invisible cursor
+        loop(&map, tickspeed, repeatMap, feedAmount, canBite, foodText, foodLen);
+        printf("\e[0;0H\e[8\e[2JGAME OVER...\n");
+        unisleep(2000);
 
-    endMultiplatformLib();
+        endMultiplatformLib();
+    }
+    else
+    {
+        printf("VT100 not working\n%sthis text should be blue...\n");
+    }
+    
 
 
     //test code
diff --git a/snake.o b/snake.o
index 6f4ef847b7cf4b4640c5af555f362d467957bd4f..8577fad433ea62ecfc82da07de6075682baf0674 100644
GIT binary patch
literal 15046
zcmbt*4Rln;mF9a=BO1BMlQE2$fQRR}y@ml4$rgkL*;b?1@Y=Mn#)zK;Y#~}Lq@cf5
zzc#`qSfsl>dU<Z(WWAF(<2{43$;5jm>t*r_PJ&w!NZ=m~_-AaB_+ZCQ)E4;PAh1pE
zcdOp3?v|51dv^QK{l2<&>(;HRTeoiACz>BDmFRQe7D-ygkV`5zBE1H~{O9CXB<V-8
zB=yhZ<tOn_rTWd~%}qvA9^YSrHBx=Ld`mQ%Ussl2uyG&p^%e@;fIbaxA#;sXQB&Ss
z$TuB)&)$e{1?LUm!T5R#`6`Me>Fj@+D6hWet5t<G6~!`)br<G@K4`|q`_;-NtnB=F
z04nS`acI=<S8uT!+C<{32H$sWaxuz`uc}a94e0t8<ki<$lU%4t9ygScNdOXtD;=bt
zp%!J1CP{XE+E|e|zGJy^__%x=z~_L)4!Feu6%JSkkaA5)q<7347%hpPmE-BjL;JYw
zgEZ`+gQV=xK~iAoAoV_Uu!MeF_O+BNa}t1(v~G<aKR4H!!L&SW9y3GU8VFVr{{@wa
zv|?I#l1_@b2MAS6Hq)})QDv6{b~@lb0IuA2p`4y-AlapQYLnNW>dxx&>!T1U>AsJ2
z^EG2Wn-8jw56O8Iv2$Z(Iel5hK0SV9?#6qD*kH$g!p1qapAB^E5jN7X@3NteS^o9@
zb^f*fhPCV2NS9Qe575820+knZ^BLWI*xOGkn6Hj#-UYNStb_P?)*Mk1yHGwv7SGj5
zrgd{zNleD%>LWF7(510!&@{ivPRNL7ry8TyRGLzZcciBOHmv`YnnYIVm(ez!Emab4
zfzKa5BJ0WXO5zz5bTj6LEZzJhCocAF&3xY<|C4Mrco&=+_she&m0$`7!zavo&y%Es
zW_G(-6Wy{0LwXh|iQhnKAbG*~x*p!-U7(vs{izjMJ!Kqqr)u%sSyQack)9+2cgCPo
z%YdXL`beSF^n)$?`qV4KH7-?;r#-_ppQ*a<WbB+CKkC+f@5Y8IFH~mhlILSLWcnb5
ztzXc(+Z{49@nL%jlV^;rmD!;A2fy;GfK**-yslf1vLTq4_3#Nj<q4hwI32QzscF!f
zei9vj$Gj9Dk>hX3{n~e2)RMp?0!08N1d0JBqbEM}<eAt%SEk2|ecY1!OAfxD&1RFQ
zmBjb1WV3RbEcsQ^@o+j-Ezwe#FQPc`UP=7Va(rYmX2Aax1}&D~@bdk+yx(<O5V~l-
ztg>enWI1yM6N$Zf5S?UUj7v7&(|EUklmBl2J^sd_p!rFr60FLc8Yxa@74ZEjpoBh#
z*=0OJoliao$Kf>Twqvagdarwm_H3qu#HOYKa)l0}Rd(#3Nc-th;<R#jQ0c!3q^HQn
zGPe_={he7vi1v79J|Xe~nd^aa`^Vnzem5=kiCx!Lp3$um-SWI5cAf7Y_XA_P^(DT?
zG7ur<`3td=Ds=Nd*baJGAIPdn*f#k#%y|DeTKIkSZe`EA4E1`HJ#PVBkYy!#4j{E&
z)>7JH86&Jjk*{DX>V{2v7w`qNYF)|GCgx5#d`wCFBe-Y<AE3s}<@MSVrkKxzCJN8y
z7mnu_hVu(UC<wQtr8Z+xFYBo;IVhhSbHTc0cp;`$(05KZ-+>33>iA2pY<$QCucajK
z#N1*OOCgU{kYlRgw&3`8zbk0z6_5BY_RfWw>nYb=`0m!NGPI-f!m7cxzs9WPdpL6z
zE6qG?rWvxCXUlwp5L@YbLTsg15MnD`4U}8o-1=y62Yu*3H&2=`=mX=bfBsCR--AUm
zhyC-rT|24*mOe88*YsuGk~R6|<QW|^?zQ}Gn)qH<^1=@6`w8O#Yd)8M*#`HwUi169
zJ-c4KfW}zirRX8Gj#hZqgcUZtUOlx7%iQi&?PXrUmsw@Y{64g$Wu~cQ%dD7x02He`
z6Ou(?Mt)&henH7E(0C^-^*eg%ZY=fh$5z7s1*{Fz1IaT=Vj8AVlb_*pqx91{V6266
zqV%5wIWrlojy=$}ajYfe`y&oA@{hwXkBdt3S}@w?k()@iqu^W;7@BQ1W6z1QrFrN6
zUl>e-*Gr4Uj4rcB*vu?+$Zh6oLd<4JTW&L-6CbmgkAS#;n{Yn1{;m&7VP6N$m+Q<U
zA@d>cF%ZVCcJz&(mzBiZj^dA8yx(p92h&0iKOaghcn&oZs2<%a4q4U5LgB$xsj3=%
z;7>(C`C`yg{MJg?d&t`W=Z+C<iap`)d%&f}eu9TvjqR^XzGci0nQx3KTtD3kmg%t3
zYnSbC#Xem24{jx~gJzYJV;TPl4M_6$DYDt%t!Ap=w5--s2xR=`N*5H-tXhv|t#aQ{
zTs4<=!)1Notg25LB+myOYOED*4No<M!<9x0tdIWuvuu{Ob8CTX-#5fgx!iu^{#3^f
zGf%M2{U#jipnqU=jy`Z%^~-7hsc~&tt=m{+tt!*7&sor7uJK?{Gb@j4%T~CRM+bcC
zJm#wD%D)UMzdCKMnTdWWzJYyKrhRKXu_I&Wl{tNEpoQ_w2HkufoonWEA#<4ZZw>^_
z!GX-2AbOVv0_LexmzJ%<tbGFq3nrq>T!q1|@mTBKfn?gaE>L;Kcgn9kI;1UI@6pVS
z(}4#A&;m>|eW#R%#?a1M?-`+UNz!~zD|;oF)krPb7PN!^Q1)c8$tb$3GKY1n!d%$=
z?Wi?BoHrOB<bi;1yXS$anzaTF2Z!<rG|;S#Zp|vj<_jR!+VeQ=+BuSSr(5$~QuZEU
z9ILQ55sThW1#?`39*=~qn=W25-`B(Mz^78=KrR(w!?}R@Szz7~l)eq;%DifWcL^=8
z(oe$7Pv&oPDdssQcN^3|+;syAI(FO=O@4_iK?APAGo<vpQ58tOrSxYpkbv*^O6mfD
zZyV0C^8oO58hjm%BehmunbN!yd|kU&3#B?RKo<X70T*T)lB@W6hGy(Mqvmv;DW(A^
zeA`hR+@dg;U!Wsh)ciKTa0mtA=yYs>xpc6FQa$k3r|RU7$ENW343U{~cnUL>I^Ul{
z<_9dEa|M0pmE>yLS$W5qy+pMs*GxZ)fyR}+8{s-|Izx=L#v>2<K2-Kj1ql|rp<t)j
z_WJ*^Y-SL0H7g1mxS%AqLpQ(tEMLZcA9YD9hc%k8ax{p{9jIsHWlRMenR3(#f6FE!
zbD5Jgm^${peKLovRTXe$&aoZj$F^-*<S;_K@uvvnH0)9(`6zrw{Bv2e=4)2ir6f!&
z>aM%vpCcIe0>(ctR+2BED{MY&q&>$7u6FsEN6_Z+P&Ph3N!j}ZXY!}&FafpGSwHY#
z9<vxzpXo<8jz5MOC;J$;NAsOl_83g2+mZPOYszGPgLC=e7)j{NoKT2d#6)8JDZMzE
zR`dbrH85U;n<b1LTXhv2270IczefVEW*)OvyW!->rTFCm|EWvbyyJq|gvd8P#c2bh
zlro)|Abu(}6C%%%`34~t$<z~Kr_u@_bi>B+Q{aI7qCF1tjrps2fW(Hfml(HuXegNM
z+L`8utmpZ)9?oxmXyz0rUDiPtd(zjStzUl55uBO7+Qk|(!Hbz-H|Cw>P8V|R`7D&n
z*5b3vFs8itm|rthePje?h`90uyt6GoYup+iZ-!N1{JWOM$D_tw@$v1kH!6=;p0<i{
zpD>oS?DL&8cE-<s9$Oi|B*#{n>t;KRV?)?tDz?~Ae7xxptVw#3TypG(tZ8h-yk_is
zbY2{PlIDEu348y=$K{v{N6jzeyJlyV#D9iT<~lXgh9}z}ToQ@P^n$ieH+Rj>tYWo&
zAo5%VBKMfPGTpbsr5f@O0k^6=oaW~fRZioSLC%A!>rXoIZ;_U&$L%RyXFe0MLhwrF
zv|Xij<|~<RU!<9vc%Dv-NBq{;U49HAWS$6`&(eMUAhZgYg8?guQ*A1_z&-y45}2^f
z-lJ_cCZm9@_87>?Grb|dZ<E)(D}bY<_o{#|<n<_fe~v1;OOr4SLeqF!dRg*#Y!};&
zUpV-k{U#b&HDz>wp7O)hx^a8to7fhmA;PI(D@Rc{2{(r{jJ_hn+*mv#qpgx?#5}Vr
z<k((EK8eFQe4NWG5aGwsZh5?VcqkY?g-h~Xy5$<cdAE<wI~`F~1EQ)oWpuqsNw_c(
z%CE}IQv+|z8Mrhjc^u?wV`}`(D|DUjFB`6LtJW@;c@F}ld&*b@v>K<?z36+LN2h?8
zE^jP~qHwLk(XX%B+i*qqy>4xDY1THkF~!#jM|UqxJ2~t7J?8x`1UZ@+^$cs?4Y%QE
zQ?;=iF7*z`W8)#0+@M=)Tmj68n}RM{1@h4~sM(~`JfWcbQStz&qc?p--hK@N!PCa-
zfO$nTN6q)Ju`->QK!1Ed&dh*wWA==2JmY4C1cXXbUoT8GITw_^UKh~c0cHNk82YFl
zeN<y9l9Uag#8gfE^Q@t>QIh^@aNup#e1~*uprNRtDeo}7Cg_e}6D*rZTg;YDNrIja
zp)?;hNt)}(+%zw57Lf3<*8P=<D4c^ExHxgutW0Ot!&_;-PB%XRLe~9db;)e(PGqvG
zX=s^mVwi_!0`U&%#$Q{eB))@Y$X~Hct`7I@@SCkJ&1`jB#WdCNv}_h-_CW#+_#|Xd
z*!BiIzdlmSTH5}FO%jD04MD4`j7^arGePUNgv}9|Wew^#ISY-l9<<iGFi$F5>rwrK
zY&K+G3YzcPik`=+EQ$Sy3=DRb`5_c`>~Dg9Kt3;MzKGZtSC$Z>umyT*#$95>;gEL$
zOK>r{LDS`h-~|Z8N*?fxZRGX>x4R~n(<zO;i!4Nkge0Lp@aH0@g7#f7{F0uk`mYc!
z>GB8tn&PrpiVr?xsUN3)%uAUAU%Pj~1OKZs4F^(~6msJC-(jmrWB=-m2g#p7JD}Tf
z$N}3Nu-ySM2Sfo<Rmfmn*m2vyyCujC#)l_|Qq@c^|6vlIQ+hg-KH*2G7LqUP@@2p8
zLceykEB1OOgne_E&fKvhg1flN+pm3XQl^6H=x7;x{4gEWV~-uCb9(FtY`zNSfA_h5
z)abY*l7+z7*R$fo-d9+0##%f=X2N@xJs<MYGT2KDTO3jnqj2B4wGd<}lv=otJr?~p
zJaibPiYEhe9Z=zbB?QJiIPVZoXJ3LJzSbE>b=Dk?WsnQJpXnP)HG9>XzALvXiQQ<!
zij~>1Y0muXh->|Q*;|bke}7fABSep9=lIPLbJ&>Tbnr3>iIt4qR(-3n)Zwen#@@%U
zTS>C{CL0=03GP194_ZM$%<r>@rZ8Rv-tT?%ugdq*v*{v`7zXhWz03)jsJWO|^AL!7
z>eip+G33=!N)xp|qgqPjqIq8Jzwp|_RBLyeS9^%pj!>=LbzbeSS?yHnz!_O)E4%^i
zV!qfj9w8Px`<<cGDCIk86V`x=eMt3eO0el_=(xKHJh`_ZnVGh@vm}SJ3vr)e%Trgj
zAr*9W)~+Mj6Wbjj-<C4GHHX}&#Wuub>i@=)3H&_p_kC7sR5|_l%_F#baubTZ6*NEg
z_g8yS8H^v{*H%$$yp672rXI}?*q~UheArk{T8=aN043nx2OM3Ga1(sVbc~1YnT1e`
z8Aj$!Al9CT#xGC>ZQ9InAlS40o&xuJWE7qcnNLHTka-m0&*)>Hz!}%hra-aCEU{|U
zky;gd70LBcq@8s0l36=jv%WO?>U(q&mmmg0z(@9D(f*Zu3GaS95RI8LsQj&&Xc(k7
z4wo=AqKv+Gp0&h?9!C*EgJy>0(it4SfP8w|95Sw>_X^TT33Y8EZOrd|h~xS|mRLNQ
zW#V)@2+w0`*_S&JbvhBXD>yPjxf4+fny*kwdaa8>j|vUx016B$U_v1}QmmCcBA78o
z>zqrx=Ji2Vn9I-Pz5UsJZa);Xe(R+~HO>pa`LbpnrPGgwqS^TyN@@Ac7ug!!Q0u7+
zKZ{ordKhmdJa?_KrXQoX6S`GOLD6RG4mT13n<?aKjm_x04+*T_^xcPS)-T2VlAXVr
ziIGBm-LagY3BRj(>y^X@P)R?CABmJ;+<vI!rV<@kxfYriXZIknKS>Kf4B`|w%R)%1
zR^z1<k;%!`P@qal471(aO&QnC<WgIyBLeIdu@2WvJ{O#2G$o+#r1l{9gFJQ>>`}AL
z-Q4M&TW4nK%(F;{n+A?<?EE`nv+%uGuaLK%vUJlBi+;V#)*0#KS7YyC5AHs)AL4S(
zaEQmef2NfxI8Wl|bi5<cte^+6I?NvmEkH{+6%0<<a}f~f!^#VACVQSn0s85w1)mTL
z8O^l_jqQXB-e~+iLTp6GyAiIrT$t=?mU?*>yp(S_f~TE&IRt1QuZo$@FFciBps5#Z
zNAn9*BT_GQsTeLR87<YDt&=Z~xq<}=mn$sc68}_=)gwzR`?kB4y*^Ai^T6;r9yWLE
zr4dYifo~=5DpOF8ZKmfY5bv0r^NaI;DjNsbw#;0BQ{}EDie@eQ_`Q28VRjz!+xPlh
znS4WLCCdB`ek*I0w|@%rjmV8Gr2H58*d>&EOl|U3k-b&h`yZQf7Hlbq44wHJR}S~G
z<c(xsVdTG(>E7S#VPxi#r+Z&mw$lBr6UaM$>o~<*mO_`By6`9LUIWjAtIZ1KaOgk@
zezgOW@OHf6fD6Ccfyr1;m77^=>J-T481Y^eGXr=EjYnr8%k?w_)xe;T!0B6VX$Nw~
zupc8KWB5LvwlSmt#VXSwC<?#GFZ_Fc;feghP85VOkQLzgtix={WDS${adY5rm+E{M
zL*|EgyQJpk`wI*0jPh@tQBtg_Bp${(vkCRHfRasV<`6AD3+o=_HbC2%TR;yX3g<Gd
zgxIRz14OU?yOC?ad7~tLjy@`nbMI|CZ#{*}8up>qjJD*nkle*>hO)i5<zN-aPitV%
zQICxZM}R_TIx7I6P!FlhxojX75E|$?`ZFA7bn{w>YCXQwyFpSCoxpU}qNML~!uH=K
zD9Mk}L`M$aK85+LP*Cv?)Erj08OIHo+*N1o0~U^H3#{=K)N^hK-oOxcR%<f7Yj))s
zoJS~ZhPTLj|GCNA`oJi;w9UL7EDT{P!|aCz_uU(L<^nzZ+UWtJ8sPKjq93AEGF^)_
z%uxk(f)gE+2T)J5HrjlN9bf}a+e0TO=l7AJEGGF!3UI(v$#ZL&OSJ5%sf(RvnL#30
z(?Gl4p-t2;?o`m2_zZCCptr?nxWTFC)Hy`8)?lWm?iV$nWiylT0}36Vl3Y?Ol`Jo+
zkT(ODO_9pBcq*>iT-rUQ-kmNv={j44K&XJHv_vYstE6JmW><G{eNkGTSSA^Re?i7y
z>g$Jpfp4-)ntXF{MbT!tTj)q_|C-#trt>wW(lzqc(!?HQ_aw>vLsv!d=Av%79&)dq
zB3&&{mr5(9Y<71~t}jWuP8OZD`}_99*8d0kq#|k3X}JQbN?)cQd{lfN#+SD1eti2d
zAh-Q|5JcKs`|v!9FP)Dk@od4iUjp2X=MTWF1MkQ4c?ABn?@r=*3g2$vvv>v(@*BYQ
zc)q2e58(Ilq(65dcbLZW5BUBF_$;26@qHXvx>}O1$M>gz6?p0h^$q~n<N3_rNYXLj
zlXxz~V9pW`o;|Z9X&kr@&)L^uEEtc9=P&*aPvA73`&H-<Oi%ioHF6p)O>OOwX4U9Y
zo7&sE!c9g*?TB=A_3Thvx_VTj6~!i_r>$3-wXtH^EjM@Id1Ldk8=G|^*rf`6*2Yzw
zp{hf=v03Vo!d;y$ZClI3EnA@zeS&JZsq-d7Rb!pak)Ej0)QL_ZoinN}&|;~2V^oSo
zBaJbmWr?Ihj?ot07VVBiATiP%X)+o+n!2SHlpC8mx?-J%1euLn+Kh<Q($&@6NPm{s
zNRp(UEz;V~ZJk})JJoHG9oxHlnwjv@dz;#0)K6>gg2JCtsVS<4Tbp{C!bYTLsrnV^
zE2IH*SQ~BH%2ZRU(YxB&)DgK&3iR|~cDA>oFSWg^skyClt38tP@^Uub)m@mtE{qX6
z#d;!afa>-LA!y#LwskrUq=~E%5-ycv78Wj%>d+?*N$u=1cvCi#SsTALYvb)VFKWlM
zFPXLR<~vsU>jLVX>jHP#3ao3Wtf*j(F#2uKuk^;K(b^Ve3aQc7u2_4sx+S7+!Gxem
zsZ`qC6NyIErp_HSWn>Uo8l$Z<7GdLYe)zjs`m3&&M~S8*U;io&RJ=;fkX_~bBdQ09
zeOA`iE>-9DE?L~TxN2c{SG28nVKmaZuqSeF#R7GCtgYQpx9m{s+B#RRU$}m8mD=6Y
z_034wn5Ql&uPm?Ne`9z(B)KFHemQ~(+lY1zr_GTiX%XWiOXrA=FOGf&w3yY70DX<2
zw*~D}pz9f}3WpKr+X_T`-X;AHfj$NDG1?a7a5(A#;%)yOh_`)7pj+WRZelH#15tj_
zB|QPe+s;9xz-zrgy!I9#F7HVouKg*2-Ui|=-T~q*u7g+NwD~}sCQo)~B|x0^Wgsqj
z6o^Z9xgEaifjDiopfv*Vwyyy#W7@whP&Ygsr=16)tf))sfXCx#9Ox!Sb6w>~IS<5X
z9|~F#mX&MueITyEFMv27C0@7&k4<%Ie+|TIUkBo~3%?{ux3b<=2((+Ee->y!pmzld
z!87x=tpeRA(2oU53v^nbN$}jav3{2e^cg%imv{R#2bEsq=&S&7opHd~<Cp=&Y4w7(
zR?r><;uibW8II*df%qKs0@2?CxTJpsvMm;fTjHQVuLJRU-u^dE?T-a|7l_OIT%c*!
z(qH3}<Qsu18Cn3u`EC)Y186a;{h2_o3G}w$I}gN1xpJl>B_dE<pvMGyN}v%S-u8^3
z{Sk<d{8K@b{??&Q1LEWTdmyg!&7yXNpsg0PErRw<LHhv^AKPyPdQR}Y1jJ`Z{xV*Y
zu{oF_(1So+gMSj}ae*!Z-OO5KftE9L4bE_`=}kaO8SNfH3k%x+1X{*w4+*5qcC5rN
z&=H_o#`g)3kD(}H1FqE+L<Wl(tx}*SfnEUOx_l(i6(EhZ*fht{FAT)_S_N$<5btBA
z>h!T(pdb)$u^K2Kk%j#d=oW^43$%iv8i?Rh*5JWgYyhfZwf6$8WN5djeGrJx+CCsY
z-X{b)EYMLPF7Ig|uEFy_I+OQDQ9BC6<<0qu)4~hHTa*Lw*}VlQ$lBHlzB_>KV6=6D
zwh@TS`=+3E30hpx`UUN~KztnkUDQ4<YJVqagMv07PM2%osd;ZuL&CC4#h7Uap;Eem
z(coh3TDUM9!R6Ss*jhFXCS)U3)OrPNu0RV!Esk%yMU_BHL~XU8)d)n^#kHcf;5vr{
zsu#5lg0?}RO`>+QpfwBBDr(yWty>^N)b<M6PJ#MFZ9>rc1$s!-?h~|!1^T|IeN@o)
z3-lvV`?#R}RG<T*_7{S7P@vz6+O(h@5$KqxeOAy;3iP6=eMQiIFVI<0`<9@M3Up4?
zzAtDW3p6fjKNB=bcGi;Kob&aidkSA)`YTe7%0#UPZL9EgNwaM!E<7b^9=_a)IdY>s
zpV7)${11rFm8>Lfm7|?a+al#*P7=T5H|Zlws#JvjCVsZGmoK{cYfIQpDMlrIC8-Wy
z6<^j0Pf5BP-~IS<N>8Mzc?F{NK1j4F9d+#fM0d$ttF353H%d<F?rFnahTki5JUyV$
z?UE?G_XM><jFsbg7!<l`<|sb~h3=a<3ca|ZTW5~)J5cEE$ti77e;f5hH_#l<2q<(9
z%~4K+K)2Bx<#kZ#PMV{f2Ze5?oI=+(5ZL`R$3vDuA3m$?U0vN&qI+wOrv&q-!WeRt
zt3jbVET@FKdLq<nzv@srn%X*vLZ8W)v7&<irG>^)u}pW~CmDzHlm9=oiWrYmlY8d>
z?<}UXOx9NT$^V~OWTC|}C434$`Tr|x662x&mlY^rD$n~LSqS1G$4hE`;d7lWeKKl_
zWfi|)WSejEkhaA#?W8Y$=<mqs0~4}&xTP_o{S&l#U{v6_J-<re2AhWnT$3$dp!60{
z8gZA;tr)FWcg&y*xGj??En6c-SoA@Z4wj^FNJI&Lfzr|wVYb1!m}J^tE%~i_kbZE=
zur$b_&x1lk)>l^^i{N><fTtyj3`BwCmaguIFhtg>CEVT>6&jJ`mX`KdwAJaKD6!7A
zXnQ2Wb^_O@KroYo`H4DhY@UK)IHTBKpdn3R;jEGjx(D-*(`vYYauOx>zZ}bvsp&Cd
z-4eI(T#@}3!(5Tst@pnB?vvW0YdhP*UCog|Cw`H5kixBz@HQesj}Rt@xw~3Y%0{uy
zZBmQ`MphtYQr?Xo%PV>18gkyXtvQZ0VJvUwnzs8Qb`wsJFwR=!D|))xp~31dV?FF5
zPpHF8;v~x0G_s6Q6qylLL|f#mSQ@DTUaNc&oWF#GQq<tixsg38*;M{NPE2ECTSs?e
zTQu6;6pl!|)Y#Y*?lBtMy0$d7#5%(c)oAO8EUuz4t#9jW?%K|Vi_&T&li0+yb+#FG
gv38@ayS>RkqOL=VbT$_dLTy{5XvCnD9`a%T8_y)`Jpcdz

literal 22128
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

-- 
GitLab