From 885ceca5f0d7d2c888c2cb626d8cc790b5cc1395 Mon Sep 17 00:00:00 2001 From: lagaffe <> Date: Sat, 18 Apr 2026 14:38:54 +0200 Subject: [PATCH] change file organization, add a generic class Game as parent class for all mini games --- src/assets/img/uradibou.jpg | Bin 0 -> 50423 bytes src/{ => common}/dragAndDrop.js | 11 +-- src/common/index.js | 2 + src/common/layouts.js | 6 ++ src/games/fridge.js | 44 ++++++++++++ src/games/game.js | 12 ++++ src/games/index.js | 2 + src/games/opinator.js | 66 ++++++++++++++++++ src/main.js | 119 ++------------------------------ 9 files changed, 140 insertions(+), 122 deletions(-) create mode 100644 src/assets/img/uradibou.jpg rename src/{ => common}/dragAndDrop.js (87%) create mode 100644 src/common/index.js create mode 100644 src/common/layouts.js create mode 100644 src/games/fridge.js create mode 100644 src/games/game.js create mode 100644 src/games/index.js create mode 100644 src/games/opinator.js diff --git a/src/assets/img/uradibou.jpg b/src/assets/img/uradibou.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e8b2104275f1bbe1c58c6dd062181070a987277d GIT binary patch literal 50423 zcmb6Aby!s2_XZ3fx`rAMhwhT@k{X5%De3O+knSG3OFEPeX+gRhBovTNQBncHXZ(DB z@Adxk{PXNN*I|ZpIQyQp?zPsv_h$cH{re3dP?A%W1CWrA00qPg`1=Kr0Z@>U{~d^i zia5|P(a=y)(XcTv&@n;SAP^2V4h}9Jm;e`#5Dy23fP{dMi1^vFXCVCN5E5btnD`m- zzlR{9ApQmw4GRqoix?LNm-zp4`#S&-Vj@)__n;sV0?33&D1=CVhX4uyKp;b){r@*4 zWCTWZ3{1pTawOp2#s8P9f7byJ3gRjO3IPBhUCs)u9<(nDP>9tu3uwGJ?JDrAakL-N zOyU*f-^kYJEdBVW`uKy*FGhHqA`^~K3|1dxR zZoq;F3PAW#e{vl7&vyL&<^1^@t!!l;fS!`WouSCe-=7GDQ2kVGJLpqY4rCqoJe&nnVvEqPPib}Yc94+#q^0zh5e%h*vQfjSYT+}{xTs^gjH!L(y74Oiu2tVK(+e%miqVQcPnnA4@h)ujW~Ym_SCu^>!@E4WL6 z;}-C%`3}Q+ZkNUaDHPcQ79*V1Kh2Yhz0Ocfkd{EVWPqAWC>vMZXa>+g?`HR@b@JL6 zjqr8z->*fGjg3VTTEWVC<(yyN_#FN^pW%$CNhzS&1+#{tAcfK(eBewJaW@%t+A86B z+&=2au(PU=F&EAur2vn{<5h&A0|3ZM+uipr`JH&k#3lbWEQdx4HICFPh*kiJiH8O$7D4N16pCFcT@1rRSB@LdS#XkrLPl5#4LB_#UL%#pPQ`-^om<6; z$2$MRHMQ6;N!jg;6LefmbW9|k)fiGmZpc~e0J2JgdMY|oC}w4-0yz;nf7H$v0!4&Q zFnQJZ!ttSoHL+gvX%=N_7j7!NY~u^H`H| zzI#dd9tn-U5k%H-uULUynJbH{v8%8r<~H@-lqzX4)3$z_^tlVE2-2Nu7V_Ac1CxOP z0%Y_dkZNRlGra||lm|3|ND5UNhz6l^6ZG2L`F{3G?C@^)bUU9;6m@W$ajl2*Ka)3R z}gl8t)R+EXFuS%<8R=dC*WjWBlvNV5q~?¯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%0AJsF6hO~cTMaM@MQcW4f5{C zfkrUaXDTmZm2#2&zG*9fCTS16u&x?9zz*qC`5mJeL+J>iP`~^6kX$L07h0QinX7kT zgGF@iDO0=aeJ^-CVOik`krBYNnZsG$HcFX(<6yk}W5t{UMOm|dHQ9Z2@`#wOik+~$ z!?IpHWjuf-?L~)6s&N+&ccGu!stU=b%~FxvP5I}V=E~dQG(a>UYcLlsQOzxc3i&&S zx4LmQsoy(Hn_AV%7h3w*!i`Hq8frjFP|jx|Lqu~l!-Y?_^Mqg8JYK9J2Bwd1I@NI%rZtHI&gD!mI2@~Po(Zrhh8?k!%}Cf zAgj?!mH(br&JZ~zw5%?w0G3%vyx8H={W5Zq#Xpp-zKigIU2GE5#3|)F-+Gq z&H_s0*huC_>`=9y!@m&sr}WYe;_dv@;$Qx0j@;*zfk9|(pwGUUOnUs|?!y=zB@x-L zMg2b9;5}UhtnuOn@n=und`@U*7sMv#Px)1Yluzh@Cr(ZXchw7#`-hU!&jHZRggpZN zfx4kJO+%$rcR(kKTjPjwf%46f+BXVvta0KsGBI0;gyxlXJ01fhO~zuyw|_sLO%|!? z{*>;|VE-Ebmd(*BV};*P1;`bRn_(nzStyLw9=S)EGPypw@3iYD^P)5Vzk|S2*~-Vu z9EFrMu^kf6Zw#EElB1CQs_Hs~ImESqZeCUQ-$PuzRuk_|5M~igXM^>h@`S2l3L^tn zp0~SLZXHe9T%Vz-r&(RDpRW>efPVZhhgSzK9|rA`4VXtl-ZBya&cXosO!z3kQ_LIo{W zCfL&BxbPiuBX2MtFO=ARh>&+v_c+EFrV>N2r2!jHbY5kqcSsN>TfG^ayx{30qU}Kso1W61jL~>7MSl~ z10^vv2=zm5dmq9`W3&ZMp4!D`v;Cuhnpt0k!hPAjzZ1Tb;dQQbkjD9-Iyv>tMrBlN zbKS#1M71$q+;zgLw5^YK-d)2bguIVUbZwN;AWJJ-`*?Dtr2Es@w*~tTU8(FB;Et&G zZ4{W$N-t%vGmcW>|Vl4S!?)2 z_7quiM_6n2$l7B&8zaQ;BS-P>)oN$DVW?}$uvSZ`tWh^H+g_$d$3v;Pq^GSW!zpUP z?rt@ko`+`DO4+>NC*4f&&+L(xhrE1kwJ=Wd&uK(dPwWzR8pK6cCxo+UFR8Fo^*c3v zY9b9{!xBD3z8zmWGUa^eRpy+(XWbvDQ|D(&2h|&u%anscE@1l}crOdtNTc%Wu=+r+ zpU#WRN2QWm>D%$vgLyH3O1_K<%X+lqC97KaZMh@mlW-Mz>c?f6{lmvSa^ zviFm)V-uB37eIsXyw=Ygyr#Q)i|Xoc70PZt**t zZIkzUBbZFSKL=oJBK)k=OVTvFYTY55V+(yBQasfn)+cD z7N?7U=59qF+N75|DiG}3i+DI%uN!eV;^@Y--M+R?r;y({v5bIN3Vo+{1}iEGep_)a%W5+JUG7`WOaFk+vYH6x_@s?Ntq(2 z9bsO-E9PPr)Dt7KHxQu&K>ZRlVwzV?DAJy{H&D#tV)QGoA*Bc#D{$vW1P0Drckq|g z5Q_MAc6M|V%t`B&5>B}du!orbIRHQyzqsR1Py7mZ^^}=(E;ZVVYKIg?H9fufWd=1; zV=qQAk7}bKi{>a?#4JrsVzx&El};Gd8W4EW3i#uXqKfaIHqee*PO|L04JAFvF+W9# zkztO;ka;Q%ugI#6pfe}p&F>{jKne@rM2b)%&PLn7e*e)jH-Jv_`=@E%TISqeN+Fmb z2-dR)W>}ZBPRoEHYXo45|b(qhnoztV)>2u$6?kn6ET%qUa&v4)bqvf5LU(0&ArG*Pv z5lhq1BU_4fn?2z-{F~s^P2gV5v{8Ol@rOt7i)Z!;pNcI?4?8Aw{ zmmv%`3T$=69US()z$bbn#6Mb7HOt*cbMx9BLVEq7Uw;`!R*U7lh08kbzLhO~!Zk>+ ziOSLb$m55$hX}n!8a%7R3u~hDq4;4B-n0)-Z?4gub3SO>)$J#w76=+F@&WLFD0r4If9$ zqZ1_IMV)yfXJNKX>bzGtKsKtOp5vR})(hm|(<1+4r-LfOO$v|zcCh3U2#cc!RS=*h z>5|fm8)QA_N2W&D(R1Y*k%e=6Kz_Y%{@&pc75(wcLvFD5NtpzFy>3{|3PW6cSCY*7 zElr$6Tf*>s6~A1OkbqXhK?HFK)S(BA7W0mu{`LjF@&$R&JIR!&m0bbynk z+9^fyXmkB@o|v^l{b@#IK@!@s<^x%AVqA-m*08e-psi=zJ5E z7@_eZq+Yj``i>ogAZ{L|ul*!==BvCJh-!KUMIsNZXSyd*5g$U0!d6_QDlI`FHP`w0Yyp8AF3$`6N|o?WmF$g_%g z1+lE@gJlSjLa=>iA4z6EM1(0?H4m^eD`+I!tDeVcBo~eKCQGVE?}Ab%6<@d|Fv2XU zk;3Eqsb)kNs1d@&Vm=FDUtnv>Y$*mi1)3TS&;7x{+E5Pfg4>C4YH4;tOFjnvz7%|~ z87rU-YJDF-okuZ>HbJ;T=vFzKAtJuwmg6kIBy~ggD_*mdk&)nH__|lh?Vd53BIFg8 zjkm6N^X!B#fbyJ<@+~zIF96%xD_ByO7l4O{E;(J+w);X{MlH8WS&+1EzCM8Ra-Kqo zxS(CV!H_a?B9m^ne&Qp~IGo5*$Upx4{fH6fdX2PE@zpPy!w$Ql&A(;s+?Ywu#ts!Nw>p{)?gC!c~%0?|KisT0&qW=nM)MQdrF}06SRP zulmkxRqE;kc&3a7Uf!c~8*e1lc-SQ$-ZxO}BR?w&&Mt!3bHyUB)b2sLU5>0iFEc!!>GbtqnlPm&WgGBfAd7CLil?v!VKIBMiSeLGPGEp|?NIz0i-yFyX)LKx%I zy{w98U^)^KslonHjZK+XxHs|Ezyaoy^X2}u8QRoZ-FaNO(rQ^ABaB&!VMTk*+Gi|p zF^N`Q7ang8njX-ns61<_b4^K@@dQ%FNPOxP6FG-80AOr`VIkhMfj$-rXmY zHwx-^BIBL#u)co5>il(&U%mv9NH`4f^N3~)yq2b<^~VmMxj^fWg>yUk*5gAHV8MKv z|K+Up{pYinKFtdejsvxjN3pwhteP5*cizKP;hQKhgBa0SKbL|3LM^UPr?lrXmno7f zX#*YA+m`9jGAfm-ZQz) zD_nj+H4*I#P3sjn-upDW12ZgxTwi8U5HW-)+Bbf7J47iyq!&8`mw{+M0GwPz2tU4K z!WS;6(I}0KNc3Uqjr5W1>`$C7oAc1bS2(6uxLNyO;w?F+Brk_CO|bBTE9J{8&yB-( zqLsDP_1{0Wqa{#c6f!Q~0G_6Ee!P5(G~uW~S>DS{0>CCYv9F(Q++yqBi;iDz)r-vQS;vM^Yteg_e}|etfJ` zC?9*`$pl{6)*O3!|B|)3H;aLWi<)(HcFP|&4WE|;xl2Jrt0lX>(FS5XUa1fphhWb@ zo-V$8m;O}{_0;EJQd+}U0N87zib$kJu5hLw3?I&t_vMwU32uwluvZc>VGi{kxaa}X z;np1oj`qP5VR1YpYrxZd3x+rN?d}LVumwdL8Y;-+c+f$s1H~U0kKqrSyvfoyaIp(? z{$NMq=PwuH5{d@0YlfS3*E8kLF3ik+@d6AWMaW%aQQ%31%f{~r5vHeko6Of#q7KOg zRu1&C6v0*4%zMDQH)fIJ6_Q5q7(_Zw9@AuXP0xxF0c0EVB%=nm36?;7KS(ErQud)KF6tc(>>^P~MIeJ5t7c2Lb zEz1s9P6DE_;%_8zk0 zcTCk=@Qmjb`bN|Sl+DK|((Gzw@jv(-cWq)@Pa}+o-dZ%!VEmAASJ~sjK-$wu%$--v z)7I)`8^mW|qKh7UhB1MDLuRUG)=H&;64<~n67OQqa+hv{@6 zZ10W=+#H|&=go&a9}qjJGt$!GFtUX2o0h}RCF;N@AdqkQm}A*j%lyGHD~uMv#e<7T ztDm1zhP}vdU$KUVhuxrV+`p#sl&@aJ%0# zVm#%FT+_E!4pyZsRk40S=?OZh3S&sNez{Qt6)#4Pn9flgF;TcWLwuO3;~RR`rlUT5 z+-yR9Hvmd)LEVs4vg;P5%p4;nHbYkuC)gi`cr+bq#yuW4s5+cjFPb$mu;>`(V=leb zNcuVBO z+29r7n;^*?=-n8&uz*e1NHrl7=hnU3^|G?>E_G`*`9G)y#S!8tYYm#kN!Ux=Na9_} z;ospXe2htGq?>5ECq)StKtZZQ`JE9%?t{~UYB&w0rukIL3<}+$j^=%jFNkT*-5gUh zs*%d;50~ydlm;9AsJR9);e{7|Ld~u?l9dcuHFms87weRXF|FlHq^beo)PGoBk~?{e{)WJ&ThgeHgv#=* z9+6Gcjgr$#kv8a62%{n*7yg_I-C@1wzL=|3_Vgm?H}8B{KGjLdeHvEcVBWUY&19B= z)J2Yts@KJAu(MOfJYmuFc9{`Y8vyBDZ4M(rYEtj1>@&%axrl2E$Yd&1lFgW+$orLp zFlA}*QJdtfgl6#$o$K7ZF#YPX<;J#sFWe;w6~v~lP^1nASS6GtU*IVrs~&7pa#po%?eh=g!=nA+yW5@+^y!c)4#~cSQ{8(z>=znc6BE}w;B0$em=i5 zDrly0?9EZX3cE28fw6kgw!j0;6L1|VuDRAnzaRNZKQJ-}MBc+=8DkQ%#lR0vn@iAr z$fr}KDv-1kV%OurF`bq`K%cJTJaOme6Bu2lfh%UaG>AL+Rc2ehvtLE={m|kCL!Cke zdEZ&YTyOnEi>Be@Z)bbd8G!6TZnCwl_7OkCFVe<3hBo16wDW^2hmKuTvz1OI)kC;Syf3ZUl@_tEZ4=6n+(huzCKAGgKtbz zdp@&Hm)#|k_AwDh?+&4bG$EOk}C${YUyYkh$+L42rLj@2;t zVODOnnc|MRs-(Kv_C+EoHHt{?s0kawy~s(>ES2uyE1c^0z>eSnAIa(M4WjedS_S6R zXq^PKeFQdolu!;tq4!)!RWuAIFXxgnbSuD3@}5?Wn3M1R7t^Ho_^~0#!mQEqPww_b z%!*;$c%xn-k9Zr_JM}?Ye6l@uUd2NbDjMVYJqqgWQ8dZZrPsbIg;F~>2*teW549#^ zuW`y$izM5t0c0YyXbg0fJf_gEhS z`h7Rio0;~Gz+veQ&Jq+;@%LD1_fzqTXZQuUXc@ac?=chDhhRUfK%C83`1?T3a2Gw!V;s$e5J% zr=G*@GmaOe8>*Qg!)87wCC>*OVD&VAsvK!(I6yuo-P+(v)vVo2wBrHG<3VZwIBy(v_J0Zunz&T54oCd; zJqiPvc94d6Se;iy!X~0zu|3zr59cdc~5$0zL0?t)f~bBB{o$dg5I z=-7es7ximp9{|#fD!7EcXQkf_kx>l-IwZ|d=NtrCSJunu>l%5TAms*dEZ1UxzeQ>3 zRwc>9U7a>}iOi4}ARekG=L~QAt zORtBpT1)R&w+LXjr*wbm;QmN@`#JOpGg1PUgBE8?{~1NUdPB0iXr`FwC}OvyAov9h z{pYOYzI-QgCE`7Ox0M!qR37_cPK{i;BNxiBMTtVRLt`yn3Cb!PHex+sf~J_RD8?iZ zU+xHrGhf#b%|!s^I){rrC;)K4AEB6cp&F(hg>b$gJ-BTai?K$E$>~mp{Cm^OwO=2& zy5$<#5tD}>gW%hnw;)SGE{r${Zh0U=Utkf$X79(b4lu)9<#(1v>^&*G83;Hd`ixoP zTdUv}l&X_PS0#NJb4p3=n|ET@EYp!>ZIpr1zD6}y%YG?gp_nG9D<@OOIf2S4w^vEA zsp)Lw%w%6s6P;^r)ha#0)TLyP`3jdvrLWI^{tDOpbJnlRoD}4}!D|*xDu%NG%KI=t zVxC@r_&cl&qqed~eYJ_BrV)V*@@?WPq`(m4T{&doL6Qt=n1RF@!^Z+~8F2w5C-`s& z=6{sO=6v{#fGR5FF!KY=-7&?wJ!*8g^OSMl4$5jT>=EE*T_DvJglz(nx75`O2VD z!WkM&XZznGrvI7wvHzwXj3j=0oFLzR3Wa4jdWCzuP4?Rlo&<)^AW-}kXL*JDwfGh< zA^NX@^-uJg-!WYQup*YZik}AwHEl;h?!eBW=YN;M2Hr){rp##^4#8|o{OU3O>4)vvP~UNM-AcH(-uUSG;jmPo#bGm~Wfy zna9?U3d?f}TLJPXpb@5RxHr*zg*#8!ZI3os3&_9^hatv)c zad>$N`G$L0`?n}0<}1^6aR^x(9jwGo?k@eB5U{jRG;|Hxx~S<(&U16-xa32tRlrnP z-n9M-R~BBP80)7~d^)EY5@yHoa^sM(Hg)?7SAN)*78Fy#1}pM#A}v|z*p|AIo{BXc zzHkfuEwk-bEkK^A{MgyiH1XFVI&ArJ^Q5m#LqL4P85{Hp*QMO1c!kUErzrf_?^AJq zc0et;?NaPTgdTft75<2?^l9cqmx-G}`0eOYDNo7brtst z=hqJl+LXIRO_()pbS$Ef6YV^rdC&?VNvM^-a!4`2Kezg)L_@aWf5A+8~QV@UAf zxI?nc(h7uXg;P#2JdiX=95U`>x*N-X`uGaxuVN;De#5uiiES62#K>k*z-8uu(BxR1S@;@RgPV`ob$k#Y`)F7fof`Yj+0i30^ z4>^ogi*p7=`gMzeIEG;t`uz9`cU=edT~ni4mmr7=ll{{@l@U7t4jIw{v6juU>yDN^xt#p)DK(HVQG7+ z>LD)C9u-L%W#qcc6Iam5#986M)qxC?j(&@rdOQ!a36_wwF2av0eB}U@;dtBPL7Sok zTE^9#Iy2!>>n}ER6$vrcPy3_A%y?Ep&tm&R0Y?_7==9a~^86~^Tc>l1LVv%VAaZTl zvY`s$r*6|Y^-{; z9kL7mY+8*b3&j@y8h9#=u|H)h23#41v7v5B0b!3$Ne(|5o-aGBrVkCS!HHjJ4vJ@K z(sBrLT8+q-Iq+joU7dIsT1t>MC`~>(n2|}o!l}(YtJWzN&gGiGu;J!78~$; zD8X}96qxe+ylz?YMgsWq*@qT5@t~iU`Hk_1m?PdHTTwQd4$#kpF`NdBZA_x#BGlKj z81Qk?>Q7hxRYQEt6UOT|(6LMJY}8-D=A%KT29<3w%yf<4XgQXX8(|`>8%G561&UcM zp8(+*6C|V#xdwPbWxLXCOjB-X&259RrXQHf|6!)Gi0+M|KWu3AGEx%kQaIP4E9uT4 zp*H_AtI$|GX!bu~IR#R%A?+}RXk;p)zq{8u`cBXB$dr7666j&2gAnl8*`$V8gag=F z`bCBAKMTm1O$nO&BV7>{L(D;LNF?+M7sCdlHvX4Pn-V4fpPABHUgYiiG?U$hWFYGl zX^DbVmI?o#LMoFZ_0GW^0b=Hdm%Z;K4e$4nGBHKo$AZNPV!00Beg{JRUG*Pbt*0AJ zd?pXn$zI{~b9!`Hvn3wkaWm*IiqDc)C0Z7)!ileB$CaA5imkZ_a z+$fZ4ZJiz6=OZlM!SkW#|NMc~jxcW3zcwEJI0qF)*vnBGT`WVf2L+I6bwP|Y~E zPmD&qo97dftytw51J?Lk1GQtVer62cY2Ca;x%0ZP>bvN|LPh0SLmKDzY5KA~{t8!G z_otB)>clv=3p0OGzrx+DMXX!6cyz>U%MWCV5bE7A4linak9(+Pf6CfXC9{VN$^)az zVP5KE0$!)B%LYpIzrl)Z+x=Vm<5}Ee0#Ju0sKXw2*Cc{-c+7CMa6uT9XFc(P9oi+% z7Dl`85T@&}yMG&=dd9l({DqL{bi-)dp>6Cd`=)~vS^J-MalO8|8U*tpV2qc*-*Cqh zfh?5xM6MBrgr=#=CvbtKtgyowg#l$B*m>+6=3FeJX4N#F*fcL{u-bGoRX%=tdgpK# z5Gb8A9_9r8=;5mFv#r?k<`MPr+Z26?W?rkA>KCXDE)t|o{G*kZfIkJX!>_OvC`K1Y z&t*jmCe)tjFn#2!0^3c zp3sr8vJCkaYI?Vx1tsITNRFAehY=yF>l6FzlgaP?KP7}G=gOO4zbh}F`Br-n?(ps9 z0sBIn<~6l=JX<0fH~-Kz*0t3`_A4A+Bu`*%RA&tRD;(}j%iFdO3)@MPdJG2VEyUYR z=kM>vSnrlkM@EgF)RhLae7M(;ldh94zi|pW|C(W32dnOR`m!-z`y(y|G}9tu!_PvXw_X!S$1HSyL{KHPCzn9E1y z?L(Y`(w6-3eA9|q!ZfD zJUkKqz=rlE_w%z8L&x7qfY=jmv2>?)(cQcMU%|9P-XN?Di|dP@78iUwG$!w93k^g_wZ3uK~C2h(UD_)K@qa z1BN-}CC&1>Gpk|#F$eJa&Kl31F#@$Ct}`s^U6CqLep6tK?oJSBho}0aWGZ*`tr5IO zXEA0nCb2N1Alf#WbL}aVfDkAqs?00JS&fR@yZieX zo>~!H=ml8borfE#&nv_0>-X<98%F~6b(7pkLz~1w=VmCBJHo4~j2v0vfdGynyT3{^JB3zioq2xTvy{h=L;LmtV(H03Eh!l8+nkbawv0)jG*5JKkkR4rmN zA1*uSmSshJBKg&x|NMR!`ZsBClBU9ye@z*NgNU89N0MSuc85C6EEFWZ z&v}8O{<0*;oHe>sR^1%V+P`Cna3$8SvA3u*u!qY1Q0Q}l3_hJLUUKz$Uiyh6lR4Bt zm*BD14E>9a!A^$arSeU?FO~X@wx4TcCCU1!e<#mRJhgF9a0d{+!gUMWOl<{Z0{gsq ze|3Z?Rt^d>h=#0uJu=)JmvsXH7YDHWv7>Qo1G$|A-677;yE)#lD2zdSmy^VC^E3Xj zfH;SyZyU#9(DO8uh-~>s@hW6SVm+L$ES~32q9NyC4FRO-;Bud-St0H(YZ$oCbr)9X zJ4zAHJ?&VAKHKiBrl}Pi_0e@>bgytBI1NC0A$1!e{=Oi~|I^i5hPCxQQKPuKyF0<% z-CYW#xVslC6nEDEg%-Es7J{_6l%!CBA_*3xMGK`^k>5@K_uluz%X2=S=Nz)no|(PY z%&c*`#$VbqgmWY0t89lI-%Dy>&*3ae03H z4~@E$bxmTUo9#2aV^{Xg#g z&{0~lV)ep_Y)#*_^ejq1;^Uvio&QN#^n|Zm8{Z3KhLI4XJrpH)4}|sLg>YJFdHTIK zJR%rJ#YC@l)G*~F#NbGgMse=`-OH+e;{0k_ND3sL5J%cz3% z*kBLmv|nq<7ScShi4^ny!`+qhEfDzgJ;gP+Mw1<-k8yfGuQiY*O#jU*hxlNNTDaaTltKQUZr~#Oq#eUUv%PUpuW$GYq5_B#AXC>zo&cNy47W~ z=(AvV(CjC9g*@L!io0I4{RZOo&8*801g!C=6u`HAb8lsPKB8hR7wURzKAUz|W)-`D z0?JTzq3lF@KN%zUO^FS-7-j(_uk3kx_u7*^0L1N*{RSqsC${qg&|BGqFQ@2#np3xX zG&MW}{SOTv6ch|TKixwAWjbP$2UaovZGv=EBF zKM1;-0eTWYq*4HT&tGxf!Ce#n#dq-5j$d!(t_RCFc%}y*XMF5h(iOvHaSBWqblhAc zJVi1oTG{Kp{~ua-UT^?K9o15Pg{X7D3FeEEGdN)T#dg9B(EVF6*McKYG)l!J{2cDz zk9z9B&XY_+_up-nFz+H9$2@NeCISbEOesf`Q%?)fzpMYLwRp2!-(NZ2=&AO3pxb&kV}SL1!vkNQKn- z88$MS(XX1!AUgJQ=%XzMw2Y_(eDQA~;BM+yS(B8Wm)KN61sQ%J1Sd`#ax8&yHC? zynv)6n$z9~G{RnD*O!5Uq0J!i*xnB(aEG(3`yiXtbHcfv~gQJ#{K|Y`dV z@Sz8cD=w?^1CM{SDw^$D_b}ZM?e$#b^%MEdT4;Rs0CvTd%u+{EWQ+=EQFyvLl#P+* z6L%rF_T>g zq(O?ODN&RCQRY@NN^}l?SMF$&aqb1zKnP2qIZlK@+i+_8J*$_5G zSg*MKx437ZmvhAoHLK`NWoQK1rdx>3gyFPmQ1K(}{ zah``T$B)jEp6^x3NgK~>T!P^dGv^UgL}@Kyvm?n}+qM$p*y(bfiT|NlwGZs|kN12F zXEC}b%Xm6aJ0+=Dvh7W$cS%O_ak-APw2{ZPj-ZTEHRbidOcQ9_TggREXTi^CkSs`SML2zV}b zE;fEg!j&PmaVfrS)a&n2mWc5!dAR2={H^TE?zyh+2>c|4ZaMD>4dN_`x!N$>;*YpO z$XAzyzN7IWT5u+vNza_>vND$i?c2nQA} zOt`1)fw>IM%d#lRXMntzaPc|7{xP8g$=dr7lPY%ZeDHvqko&L|c)2w$kZsK!r2j_y z1ZREvEOfZ-AmYUv;~6=U-N!;p2Qis&)iCKM7seM6fL|EAv^m?pks~0^;e``M9s^I8 zFiG}}gHb{^qy+*iWo?X*kWjd$cm3u2-SxAP2WI#H%J9!$kw%Vpr61WwF^S|N7)hV7W!cW>qU{QQ6V9q zD2Xy5L>Q;2+}peB-_Z#kNUDHZfZh{Z|1Riq`<*Bp6Uv^NsOX0~!rtqg+okBlJce%5 z2nA8r${6xtD!kvz*`{+4hk67^H&L$CDP7YQwQQ~Z{@ABH6t5xt0Tc8Hawo^#J1xJy zemMZ~SBL+82wb?_VkEws-7E0#W~so7U<+}`F8U}hw*07B)c#&CVF}axq}CGsnES=n z7dN9<=|7|c%D+-}td(wxTor@n!6ao)>=Lc*@PswbNq!IEMv+&g;7RESCYpy)UJ>Yc zZ0Oy&z2+T(*_zy|x6Edw-&|-^9pKSG*fN0?U zJy+4})7|C6qke-vD8SD9{{nV23{)laKgj-n1NNG8(}eEv|6%rj;yYx<*-`wtQRH(g z5$dbIa(qCU37&9xu{!d7#v3{9AO0ay^ZnC(&KU?}t-y=_q&&B?VLmw(B7Th7(Co zj<6QH`a~(X%*|FR5^b=b;hi`iVIEDO-x&{ktx&Yv{F)6-ooTa6r`!QCh2w7Hrlq_k z!Hd;Lp_76YvcER>(J3G|u-`OIPuK!+7x`WInF09pH}HGvhAN%xaxd1-7rcFJV^^40}W#Dy$>1`ejfCGAbtDc{i#tM;5brO zB@`DO1RTF5ly-+*9#l+n6+!`d3BQ#Y$Nc-CW$@u#`L_zBwjzP8?nMD-O!;NGHQNv6 zm>7p%U;i%H%3<~O4P_S(#0F+N58jYY8So~E|H?f(bzRK;Ur6ieQ6+%{ntrNC83^z8 zU+z)H-G7yn%cL`vQ8X!r9-?8J6j-!BQ z#y5RjQaL*)_wJwc0~5?ZtS6N?n9_eFP#Dl0?V-BVo`# z7lRZR8ON{Zj4)ql`VK`T-?^R?hjF|JqBCfM9wqh_v*v;K9Z#16+1@BAxF0L<6$ik|*m$Wk;yQ@WC}a%$2jcg;VgWr{s2?}tC;l~b zsk=~>o=)eC7xFBD?DF#Q`F9hA6w=Kte;&$k0r%W5vk8-AcVd*D9Vb(2{+)(BPqVpW zzFe=+?|1mFeDbykE6in4QC+Q)wQT?P%$A9Bn4$}XSKVBoY#i)W^QT>09uiyiX^uea zfRAAqXEr{&SJYq4zMwJ>$fvmbCvLi7?xcuqO)~T%6az4dln8q326g3(LJw#9jY}UR z802hL4C^5TBt3Yj>atKL^_V-IJr4`CIuE0nB)J$tZia8AKG%JNFJdQR5=vt7^@fON zY8Fz-2H5x=hUrb`!VMHTl*7PnY}+giZ+u!{P-neQ*Hv?MC0N1gMgi}C z*J7&L|C+tWTzzC&n zTEPPq!kGNq+gpCM1kFuI|A+PqD?~9yDF5Y7nhs!nb33$Ih&AZLFUE+0$3mSut~Iy@ z0(}GWAKI2#d|d1Di`+-vZ>-HY}dti*+Q~=idN3HijX7y`9H=AX@Gh!}j$Hzp>jjZL)E>=kBD$c;D zNm1X=5S%}MRUXnrM(0D$V^KjzKzuclCWgc@Jp}HbdV`dP61J5}UzgH{8>$41-^g0l zKg}`OdIql-bf~UU$(a5v{ygPCHaLtMlc`$d%+&G7bUB!$JaM42TJV6BT>?Z8b*_Xmz!WO{^LuPS?;pDN? zY{EvIzzz6^N&ii8s0#k%!Vey}pTaoQA2}5d=vf)_98=cRx?!cDYq#*{+zN5|0PRLi zD7sM$cZ@V+6r4O=8i(iq z`*!Y?dojk+YY_##e=9n+>Ir@8Ye?>yL%~_r@F-}YkSpc)Bf|=uPZbgNv1GTSRgOt! zWoay@>!m&jWrjl7Ta>-!fNkTftKsqyK57@Ndf4A6e)(ELO~C8HBW_o({1o_)HeW!0 z8e9X0rO}?QzkIbb3D5nY5XcA;>gy|gz}RH}iwt%L1xKR5Qz44UbaaOH=TVYH%iqLP zIt{F8nw`HX`um|kr9;K&;m04~qeG1VVQbW)Tf#<8NaUU8-Xjp@zx{vsZ%S`nT%Myg zqlZg~dk)BUL62F-Adb}$l?}Z~4Km75$$zVWDbD}h(SGX}_$Kgr3&lEBIBq>m1i^ov zwsXCCS*3X&O<(j^9mknv@p1=zIm-MW+P1|Wj(Z`{4W$0-KQzSM{_#${nA@(7g^ZVf zG7I!p`?vFV+s4q+(^=1~)v9oy_l+-#Cw#qi@fBrmA7zrvC}!MRyB5>pbQj4X$eRh# zD{0rx7SZRwyN<`wdOKF>!I9ki<~ZIestwtE-39GG8}VoGHGn)_o{Pps7~;1tS9O(yX7OPx>P* zwR=wXdx=M)gt9m&jWLv)g!f&?Q465QA&%|siK^z;rI{+!Aa??}jUKIGO}FX>60RPx z{+YTT%4qH5A8tI8%B}~NttjeFVihS*&8TYl3%LWfd8VYXdpu&ou^Ygs)m|f9^Wg{! zd~vJa<4E-SZ}?L$f+k{V@5FqueiuBpx((OUw%Lg66g9aCowb2%fKkWHCg!YI?ALIzaJES>{D~uM>F4*;<3_on z0rRhfcq1RGM+c)ZQ9QdBF-y~z{m&9d-^bt@fl#1TcUxH4*}DC=vvoy(6oj3#@dNg{ zd@3g{&m4%0F#s)MqxNDC+z%i+Nj!?YzMdhN(KAeCgnN~)PovjP5;$e7cPR$8 zzld=2LWb{r{eH4tKDRT20w)h9Xz=j~P^J9sQ(aYd&_BK(i7MEy=Ol;Ib2seYMEK=> zy{Fjv>MLLA8~YGUn*ThS5`J9{`u$5 zctR9ZBaB1|W}?pFj7l1~jq3B?#J#27q0n>kdK2dRy=nWymqw^tOD_m}!|_3-CQiLa z3eExDM9Fl)-^yiLL)KR249r<D}{DZbWSoaF-_w-^w(u z;Uu(f`QhE=vb0OQeYtQ1p|_%iyhL$YE?&_>lcN z92*swW+Nhkp%K3~!}`He6{l$LCqJy;ZsbR!9Z4>9{a)ju0shbX13AZ#zuZ>U2A*x6 zDC&CHpP)1HMA6e)R1v@5yLFkE+{QdjDIx^;EvTayB2-u!>-osYD4&x4GT_IcN{EvG zJr7OqwQv0!k2 zOBxs!Ii2WX$MZCplJMI@@JQJH68SKM@%8VJZSwlY%m#c;2)00)iuxdvGmCV#PK)GEUZzVdIZ<0gVdcbF!X@3KV$`=4_Qo)suV48BHq&O6iH&6?n@pH>_YPKXD0)86pQ@Ju7pd$y8ReOwE3H& zL)z=kZiyd#sDf~(1`--+8sOVJaH4E)pBOYblC=>rPPau!gww|%2l(JFm^4TWcsTrG zN5u~Hc~A$PuAyDP78{f=Up{x@FS}Acoo<@{XJ5gpK_e$k19U&UR|X!lZC%m3z5ZZC zcXYOH9nbk(RU8X&l5_-Ea5Xu=@u6Lg{{j5IY?49$Wp&2lEct@E!2#T0^(ngRMWf3zb}4 zT$G#my%}Wv^X>WH_q-#MQR{oKC~4z}ZyBd4Q9kyHcjTcI+oy)QRzV{3hE zSD0V6CpZw@MnuuQx&Zq>zn^nig^KA}7FwBO0clMN~vZ_b0Hk3>}S zcc*3p+E7{ER{lL*4XXRMaQr=~N}H`HR<|c(SJs}Vfvcf*kfa;!-|pOJXB>_C&%({u zer2y=J=(*MvayrsR&N~8hx_h?ZNcyv2bost;-ioU`K?nw75CCDGVS0v-N#DYo2^Y9 za6ncACEhvMf2WL7YB-mxtQ;YgrnzYc$Ul}{bhp>J=R4clkf?a|(5>u1JlbbsR%1Sa z+gp=ma3gf(5`7LN{9C&Ave!dAd+78nX8oViZJ7jw&BAdgORUfi94SZCE0dOoh%IC7 zW*K{x$L#oC$`7O+srz}ADp*mIcm%4A%INcbhigIB6lN=?NN!YI#`HQzpd($ngI<)a zL<7qQ5)@_VYHbMdJ{@YgSb6LT*ZSp73YEr_sA01KEAm{4iN)|9K;wJ0q8h(yKOv2|; zel@r8Am8zwTN$rB#6><#canhJ{h{=$;JA}`&CgN&pPepBHax&@;Y*kKRba$UFJP^V zhunjF;$rPQd*dAMLla=C{a5O$Gg#q6?J^`s6bKZWP` z#onkdq1UPn3ZVabNYYU?mEC}*6F=;*C>0G=gWI`B*$0WmAKzmT{Us>l{#Wzu&_5NS8H>$D$)$46W<{ZqHP*c$T@pNA=?WG<%Z? zt08MA_z&tvzo*-?h>>F8bY!X4RQ(-n1SE~b488JXM4+hSzApHj?A@G+T z?D3MNhiUMq`?Pv|)7A`cG0mU@4#ErvtC~;UBB_`MX5Wf#OSp$n`b)dXv?COkrdn?b z-^}nF7^;HE0*PMDtv-A9gf!shLWb^C1rj>Pdf=IxOJ1y`m9gxemX#2T?~!mvmz;Sg z1*hSrst;$!TbtoyXTNGo)6+7e{|xCjjThtZ_+dVyjp6N|O+>UgG!eR|`m$J4juc6j zLd8}4X#gZIUwkQv2owmdBA&GftVs{mAeim%#}QCcnUNB%NON!bBoh47wlt$BfP7(B zGZc4S^`S`eH|rVE7&(5uOU8K>eKY}Tz-Ws@gM6~VP623UW!P8AMR^HA1Wr@G11hA*Xj)R2AY zWXmB%;p|#}h{uW;=vfkrE5fB!C{Y|U-5FNQl#$AiRS$#kyqRXIkVrgoCr|O8QcVJ6 zm4|FQCQv(Qh{|Bi;|)Erdo35UdYdUwOTNQspTf}4W_#fIEh+45sLe$ACXwg|S?CCq z3F#1~=!^qhs^f~qgR1MT z832Zx2nC&)dtkWbg>))JMeKA^VvB91S(sp*nQgO(WZ!9OwKNj3i5}hfkH36fS?@xt z>B?C)bY6073NgCG)0qE0^yJQk?dzsE9}lZ;DSqzpwSk=P-1pECYbgRR=fjo}q$B1^Z6*$M@;g4Or#hC)sdRNeDh1jVd{ z?2dqY<6utWr9jR%ETsH?Q~F;qV+OfV^X^YH7GZzSP-E!8)2^d}xg!jJEtIji*GDON zxA;V}rrU#wUVq}OHyL5z@HM+Du&V*!D7)fi{h2Cf5<;j_#Z1nSAjrhjE+v~MhNtfN zJj^);$d@(r8>5`LYGz*>{1phmh8{$veHI-DA)bxTuQ^J<8K)~@gOw724Zc5VkH{6t zXbjkDq7#fMdF<7zn;_}Gssm_TCRT^8&TLI#V~uxt@7iejs$PUEW}L@SJm}!21tTJu z@1*{0dN|Z(606bsB1ISKn3BqdBGbFH^PT$K*Ie<1`7N0koxZ0q>X2vXNJY&~F)_Br zQCxc72h%^|9^!02y-~}GT|C!+-yw2a9mH4r>jE#RtBJfD9gXrshl8Mr*hgIEY2V`J zRX&ypN+pZg>8oa*FBOEc85 zBc64(&q(r_Vh-PxB_}?VT9e^B?8`GE9c<&g@`6%2H=iAkeil_I{;U!Wf+%hi-2_`$ z_%Ox%hh`(oP~DCm-El^u-xgj@8FX!6zWbeC%At|mbfBkbNYzel!W*98CyCD4e1 zCmTeDhTMCWwGCWQ(Ur-%BAKMQvBFszkalKHTWN6`opr)pdZ{vYPnddFZzJWxrA9Sd|T6 zLn-EEFTpqhIkX8~-7RLx13r&W4Lt3)03>O<`Y*(W|F$`+qz8DolpQZ%R@fUpO5$jd z!i*=Ai&35jtTxTmRiWY|r?MPXV1h1AWO=)v zczgzV4%)aA!b@GUl`Mf8=-)t2o$TLj=xhU@)Q6L6>|F7mCPCiWN$p9AELp*#8Ul(9 z9-uY+UQ!)(^xT3blJr+ z6~)eloG=N;YSSDlx-0$@tTK9TG>hlpnSiL`>WPfQeR`Q(gA_Q?j zuRfH{+Y{3?|9t9oieAo{&6|89(YBUws}%#sm+83^_nefvOxtO$VNxjdR_+HwdlS2U z5t!=_u=&k{^Hd zQMJ+JPOEtDNbEYuVOB?2-?rI&1B2YOV#%?E?6vlY=R5R|d?_=Ay;Q`z@e&8n`3Qc6 zs^&HNkS|4OaB+$aGv2mnYH=9#R*euDxaZ8!qNU086TVXgL*hYSmle2Irl$Fy&{FUc z1C>Q-tRehO>6U~r!yX_YD;7t-l*AblDGn>^S2o{kdp1l-+i#7n^bOy_l=sk5iqt)G zxIDL-)jK-9Gu7_)d1RM9{b7a};!fNDGUmsE#6_<8S7=eQ>#}MLoR z?$iEQ_xZwFeTx-C3Xi@0gkUF?$RLayC?O#wR$!c9?^TNFiM41!%DpIeW?mQfC&c@^ zDP6(b*o)-XL_Dg121oA@OkLdLkan~X@x-RvEatOjG1h6_fgv6i!eRZzy2O z{sdga%5YdK{B$Y(VAoKj`-tvHxO8Vyd}k0Lgct~#pjFiCEO4@g1VcE<29<+V4KZk? z#O1I@-5?uwQ%BNQI2U}}FO$+I1kRZLXj3jJ*8$%k-LrXHi^BxaIrPIQ3R16312b{+ zdpi;tzqmegulN;2_FBLe#-oaJa(e@i(0m3zpB{c8^V@iTULli>tQ}SOO}=f~U8w01 z0~y!BlsV0E;E&T5t@9zK$+1`WowA;OJiy2%jCZ`E?e?A^ezw)3PL5^TbLOdfsGV48 z5MQpJnH+DUi#GSVBt|>Lv255%fQ?$okhr7cUCF0FQ~jX`x$5S=TsB0o2wC9I<|Lv> z?#Pj`QCz*)2U1L95A4NCZf4(e*9dmwpQ6Y!$9YZHI3)6k|8Vk1o7K`dtI z-I`GFY%mLIu|U>`^1~joG&|@fmTZkd69`|{O}F^XJXB3pHz!tA(ZENMP-M%y&UJsb zwSb*BNe7l=G_5zKiyRI`E1fVWwBZ(_@e{*2086#;rc>xt7_kml7-`3DRed+9=v^cw zMOj&*xS#;xX9Rm>Dz})v=mWQr4|_dkvlJ`VD6L#Jd>cdS**#l|k1gNNFeODTT4o!e;$*v7=t0IF{*MM;Tuk*L89j#=cdwbP*qUhNLc5%~l&v#_{I! za5;NAj~Z7^cqSAC1;Zo&CiPMdR5~K@Z}Uil9Fx50%UA>{_Tv#a7#0SA(7RMEaBI*g z(sLGFY20NI-(-qNAgnBe+R2*MKKzXV74M5|fFlGTK*?rJK55z-+{n+|=+g7v(2l3w z;A(!}Wwv=g{7VG7Dt?SP_YW*>RIY2*{S|U!kKhOuRIfrg~FxFk^6DFbu0rb+is!OoE@uRqwpyNG@rbHN)rF)S|GP z`9>@>m>Fh4`W5Hv3UZiL@h!;+^%9+j&A6t2##GR`j+IH`{!shLbF*2Y)+@nyL?PG7g+7vtAf~5- zPMrwfdb<&;hwz-j^ww@ya<;F&{h15b5_*e%CefYx%&xJML(I=JsR(jJONPxR{_9(p z1HoLRy5Q3MONlda^{wlMu@HiLHmc2D!|9eJf`RF)GIg{^~?^sUoAF*Jf!m@k`{tQ8c zF8%pC;(Wsr;<4Ex2La0#^AUxTSh^{P5uCqy#lvOH^Qzx}ERY5qN_$ zW$lW^V;pyuDUvA@>NDa<*TFEHMXC%TuW~VgYCCET?`~x$MPat(vFJvoHbNvy7E1C> zbr8bWpxEAK^i2Gx1pn)jD*RadrS%xjoC$TzGExHfnxqH(azogzGReQ+0NmNT>B@6N{ z^!e^$Z=QDANe^L7ai4E+rT#;6_;E#gL%%o{ z2N+aSDtY?-rdl|z5bHWQL^X5b&#)CzSx%Zz77 zZZ5Vhr^=x}XoZx6I}?vYk|a|{&(Sy>zlA*H7#J8#(sjF9-reSRzCOZQ8kr_T7;HA7 z1ouUDCbnZDOVIQ~(F4W^#jWCOSX8xY?7O%no7@Ki7R_c2x{sx5u5d8%d&;d<=JHMr zqf5u#zy0thm$$FEGt{e=bIyHL6mat0&;8L%Lll-#0nt_{HEa;WC};@)ypQG)`TSny zVX85dOzNN^YSavd^Jp-wRyX-djmaP>?vCb4=!o!7dnEA$0hHoAg4ByYDRduDZcxr6 z_dDCmeyoiNW326fXj+J|SZk8&oiKM9f*P&bm;AlQlKkjbVR|LVWDpQ6NV)*1JouuCJZO*3u!GJeQ0V{d&*zQaebnIy2HUcAcavlD zXPhYearl4G{PQQX?R6` z7*-&lSk-atXR6!c@b~DtYhk94yz_w9n0MH`a$VWb+DmN{5wF;s9TPP zN7R5b2mck%sr868zOYmTOKU*%Yjx{do%)cU_MeuW%PtyemFPPJL2xAg}bjc8z=KroH~e?gJNP>|Z-V5M2@0kNf6$Reg; zkKj^t*76EcN;c2if~#$M9%4{Kz~z^&a8!MK=)Je~q?MK4kp56DC-A4_t!OEw+|vaf z-c5k}HbjVN{9NzrH#D;4cx_ir6@+!>Ad1u%A_#RnDVHeA#%WOV=R;C|5fa|N(+ahU zy-hSEWOUg5z59jSEEzo>vksz$l3W=LdDM&ql^(HA@l#U*CIJ}uWonuF8(@l0rNo~##RO_y-M4r~e?;@RdAfPK09%IzT-QZH$FJC*3J5N^ObQ<&%m)>1Y zezxcCm#JbkRe+~p`7<2$h6Mj4xTUnW#Me#;9)faQQ-4V({e{8vVnUo^^%HUzEW&ZI zjOe8u_$juXD9{wpOx*<%Ch5%(=*3d=4c70e&dx`(9O0}5xDRFQ6!Vmu+@0AChU`O2 z@dR@0gE1PvhBR+)*i9QKJVJ4!l*T$-WvuR}_$Vt9Y}f#UDa~S1Im0~F%AXfx_+Zc@ zZcUu!7Aw9l)Onh2LA=isLq3a&kNj+Qff7yehe|S*ya4@amL!5`V0*%X{5U_KgV^3T#F5JQY$;poantxp?XtrbpBw=GG(TaOD*S_vv0&S;+7%T@< z?dKIPZJH>|Bh)G<6f!UQ0^|^8h%;kXg)T*ekR5bnnvZeE9jj+r>l1>Ne2tFtotCvS zHfZVyh;&3WrK9@&xa~|V`8D;kgp%THN9!9^G>YYI%afQ2o6CjT?G~O+aD`wNMC-lS z`1K0P+_49z{5Q!_(}QBSiDSx+cd~kdadZEn89_+>hQ6wQLH{8t<_Lcc3~BzFBXX7d zk+PxO;-y3xHah|;E?+-Xd_qelOOOY-Eh0{t2im!i_vC0JwNm-{HGSA=gw7&3r0YDw^L@F>LxHV$(9C}VeO0dsTzNMEG=Z0d)K-@kr_ zs0)5f7h^##V}Cj0OfakVrP2n3t5dwy$SISxOZHDIFfs;*&|xdx;9vP1rj!9g>kG| zXR&;s{F%;40Bt*^@<=eoEi_e5l%HtU=9@rxkgT)-QRysZZx7Q{T2 zwm@+~Gg+14jInpgP~%F2nae&VIld>KEd#v5t_G^+8&T6t*kNMyqeE!@@bzd=4bud! z8Gym~pDs|NsUr@?9@8niCUg;sy5hnEr(CwvbR4^ZpnB)L>`fO}KYCGcbnhbiBk~nFc)PP>+Dn5m|_qjLQ-0?kRVfgW%E<=TBhm4nM~ zG|>{U1imE3;SCPhB3apSrG(U98!x~8XuKVrJTbDMtHJt$=VHe#ayAPD_3SgRMFIhd zmUJs(R6Qk)Y(4Q(0RL3DCtodpjZ`rzJR)ifz8|3UPY}A${YoOOnsAWlLc{(hw{}HI zO(-@nm-|yz8ROekY~gJj=LlMTmp)3oC7G5e&Ma|-E52>bxrus3Tp6k4+~567)S57N zj*Mqo@puRYEeh9iXV}P?nheIAZF)yThcfwyi3J7{IOS++-TW=R(T7+{jNT+E*;$4R z%6-ccRT&T|7z7N=xd0iA(iw4DEQMlqDAn$Nh{|;v7nFF3uJ2qhny>$g%~Y!AF_y1nI8^s^c?mEjmimoB zh_{;CHr)25#~GjLSO>i+Z+Otv`VlpUZ>AB`&$s6z;sU?A3OMwVJ5w$sl<2425EYBMSox+e z!B~fAm!c<#6olB*YdFrEjcZeCUnhMCEE|xJ^q%q_PW2FSH)6aICblIjXYe}|XIUt+eM9@BMG#M*E@`OuX+8j;@nFxrMPDZ-Zx@CZG8M3q4BQbC%qiNNCe;ghh96J2S! zw#;AN#Y<&VXvpJYF!%y;00L1~Wc|H|o zNuF0yn8zwdUGg)m!lq5;<{0#RHA8280iHE5f!}D5>EhDy&!A$MSjg{lOReDT9#VAZ zD6LSE=}F=N{{i=>T07|6r^`G^aE#B;Ay-diq1TX$%s-NdHu* z>~UXHRS?~sB3J8$&ra&8z7)mSrHF%zR14aM4F2475RB;^vss1sva48OfCLBcvSzIr zia|3k>?yb^KC+W0(`uVMG&m;>`c3GO$-yt0eBnzsxZr9o`n1%d{_+9wjGjg&(fgG? zE5)06xs;uCYe;9Gjb)YG>0;V~Bcx+jdk5!oiWaL5RSFzKR`&c=RH6O;?|^>≻C@-LtoZKS%8-z;11mgx#8o$uQ77<8UAU@zV@ssUfGE zOg{15PHvQrrmRqm1|7;}W?D;Oi|B%?|ETd`g0QW{hsmKyRn;>4EH3KV+Dyp}5$H}* z<#DEXG&Pa@I>OEh*#iPJ^G(W9lq}-zU)3iaMNR*u4QAbM9Dt*&=%&|JsHlrt`L(O0%dsXlZ{s^X(>A)Y%%nmXT z)ZCgPIcLYm*Cf248=M!-wkxGp3qS{2hnex66u*p+8R%_pnAkS!xnMlZ-IgmGOL^zc zu8?TMav%?D`8D&F_!Uv7W;z{D)>e{%H3BS=;o;%$Q@&0d`0QL_S5P@2X& zom%D#tjzjDgr?c1@x}Bl6E4ES+4H{b_X} zkH5w5mSC>e8Ku4q!kqPIreH%V#=4HEGJ#7{EMLf%&SP57D-Ot`ZahX~jC)M!CQ;KK z2&G>DBhLXeC;2gydCfcV68Z5;5L#a_VWeUTQK$RZ9aI~Ym$gF7MvSuf(E-U`wfgfj zKj*Rb&hSCXJXA=JW(dY-SYjPf529U|@)LPTLC-Wy!ak&o6kQCWkts_ZfvuOe&*~Md zKVEt$_pB&bj*Jv0^q#!h_-lIaz1{TdusNi(8TJmxfl=o2?p>zb_b`LqU9%N9eNu|% z&b`*mK^rPFDh8;SH-Obaq_brB9X;VVZrp#J)%U0}UJ8{^uw!gR2q(Ewyw`lE@p(8c z1w@5W_rAOY{4qdJKb5TE&9jNy{cqu`YFn5gBc%iwqQJCWih zRI4=fT3Er1Axctd2V$C)xBWUS&~ycFXl+ORN^FN_T!B`+!$ z@4cDl@FlElOaQ?=cWTq27)E5C2BYd=p#E!0tbT(cKN!(x`bc0`4Ww(PZ_a4 zE&V;@-uEvI+_pjSjZ)oKbjmg4ij_NE!2G+5p*lYuMyl9(4F78`o$=79vdl?ImmL<4 zpu`?yCjGis6#b0GoLO`=EzXst#3k6;L$fe7dgLJN*|Bdk$3fQjlIv`Z?T~bE*L8HNpau+3Eky(_?M*lVN!Xy6EaUa*(3%wFTZxh zPU@vMe_5Kc*2ta*el=31}Q+F{hOS?lEyV`b#ju7mIY9xs(7#@6^`dNusXu#6sv9 zpgQpuT_qjcNZmU?EWjzXE+q52z>xwbp-n0At&gi+VP~?a0soY^94B_he{25_0F!Tc literal 0 HcmV?d00001 diff --git a/src/dragAndDrop.js b/src/common/dragAndDrop.js similarity index 87% rename from src/dragAndDrop.js rename to src/common/dragAndDrop.js index 8267bbe..3aa03a0 100644 --- a/src/dragAndDrop.js +++ b/src/common/dragAndDrop.js @@ -1,5 +1,3 @@ -let appt = { app: undefined }; - function onDragMove(node, event, shift = { x: 0, y: 0 }) { // shift is a tuple representing the shift between the coords of the node and the pointer const dragPoint = event.global; @@ -13,12 +11,6 @@ function onDragMove(node, event, shift = { x: 0, y: 0 }) { const right = parent.layout?.computedLayout.width - node.layout?.computedLayout.width; - console.log( - node.x, - right, - parent.width, - node.layout?.computedLayout.width, - ); if (newPos.x > right) { newPos.x = right; } @@ -60,11 +52,10 @@ function onDragStart(node, onDrop, event) { } function makeDragable(node, onDrop = () => {}) { - console.log("make drag"); node.eventMode = "static"; node.on("pointerdown", (event) => { onDragStart(node, onDrop, event); }); } -export { makeDragable, appt }; +export { makeDragable }; diff --git a/src/common/index.js b/src/common/index.js new file mode 100644 index 0000000..d209f48 --- /dev/null +++ b/src/common/index.js @@ -0,0 +1,2 @@ +export { backgroundLayout } from "./layouts"; +export { makeDragable } from "./dragAndDrop"; diff --git a/src/common/layouts.js b/src/common/layouts.js new file mode 100644 index 0000000..b0a3f13 --- /dev/null +++ b/src/common/layouts.js @@ -0,0 +1,6 @@ +export const backgroundLayout = { + width: "100%", + height: "100%", + objectFit: "cover", + position: "absolute", +}; diff --git a/src/games/fridge.js b/src/games/fridge.js new file mode 100644 index 0000000..00693da --- /dev/null +++ b/src/games/fridge.js @@ -0,0 +1,44 @@ +import { Application, Assets, Container, Sprite } from "pixi.js"; +import { makeDragable, backgroundLayout } from "../common"; +import { Game } from "./game"; + +export class Fridge extends Game { + constructor() { + super(); + const fridgeContainer = new Container(); + fridgeContainer.layout = { width: "50%" }; + const fridge = Sprite.from("frigo"); + fridge.layout = backgroundLayout; + fridgeContainer.addChild(fridge); + + const bottleContainer = new Container(); + bottleContainer.layout = { + width: "50%", + flexDirection: "row", + flexWrap: "wrap", + }; + const crate = Sprite.from("mate_caisse"); + crate.layout = backgroundLayout; + bottleContainer.addChild(crate); + + this.gameContainer.addChild(fridgeContainer); + this.gameContainer.addChild(bottleContainer); + + const bottleLayout = { + width: "12%", + height: "16%", + position: "absolute", + }; + for (let i = 0; i < 12; i++) { + const newBottle = Sprite.from("clubmate"); + newBottle.layout = bottleLayout; + makeDragable(newBottle); + this.gameContainer.addChild(newBottle); + + newBottle.x = 0; + newBottle.y = 0; + } + } + + reset() {} +} diff --git a/src/games/game.js b/src/games/game.js new file mode 100644 index 0000000..8fbb348 --- /dev/null +++ b/src/games/game.js @@ -0,0 +1,12 @@ +import { Container } from "pixi.js"; + +export class Game { + constructor() { + this._difficulty = 1; + this.gameContainer = new Container(); // main container, to add the game to a node, add this container as a child + this.gameContainer.layout = true; + } + + /* should reset the game to its initial position*/ + reset() {} +} diff --git a/src/games/index.js b/src/games/index.js new file mode 100644 index 0000000..a0355bf --- /dev/null +++ b/src/games/index.js @@ -0,0 +1,2 @@ +export { Fridge } from "./fridge.js"; +export { Opinator } from "./opinator.js"; diff --git a/src/games/opinator.js b/src/games/opinator.js new file mode 100644 index 0000000..cd82586 --- /dev/null +++ b/src/games/opinator.js @@ -0,0 +1,66 @@ +import { Application, Assets, Container, Sprite } from "pixi.js"; +import { backgroundLayout } from "../common"; +import { Game } from "./game"; + +export class Opinator extends Game { + constructor() { + super(); + this._inMove = false; // indicates if player has grabed the wire (is mouse down) + this._currentScore = 0; + this._pixelGoalScore = undefined; + this._goalScore = 10 * this._difficulty; // goal to match, measured in play area, 10 = moving the mouse on the equivalent of 10 play areas + this._lastMousePos = undefined; // use to compute the travelled distance + this.won = false; + + const backgroundSprite = Sprite.from("opinator"); + + this._pixelGoalScore = backgroundSprite.width * this._goalScore; // beware of resize mid game + + backgroundSprite.eventMode = "static"; + + backgroundSprite.on("pointerdown", (event) => { + console.log("Opinator grabbed"); + this._inMove = true; + this._lastMousePos = event.client.clone(); + }); + + backgroundSprite.on("pointerupoutside", () => { + console.log("Opinator released"); + this._inMove = false; + this._lastMousePos = undefined; + }); + backgroundSprite.on("pointerup", () => { + console.log("Opinator released"); + this._inMove = false; + this._lastMousePos = undefined; + }); + + backgroundSprite.on("mousemove", (event) => { + if (this._inMove && !this.won) { + const newMousePos = event.client; + const progress = Math.sqrt( + (newMousePos.x - this._lastMousePos.x) ** 2 + + (newMousePos.y - this._lastMousePos.y) ** 2, + ); + if (progress > 0) { + this._lastMousePos = newMousePos.clone(); + this._currentScore += progress; + console.log( + "mouse move, current score", + this._currentScore, + "goal", + this._pixelGoalScore, + ); + if (this._pixelGoalScore < this._currentScore) { + console.log("game won"); + this.won = true; + } + } //else ignore, not enough move to get some distance + } + }); + backgroundSprite.layout = backgroundLayout; + this.gameContainer.addChild(backgroundSprite); + } + + reset() {} +} diff --git a/src/main.js b/src/main.js index 9ec7285..2254dcd 100644 --- a/src/main.js +++ b/src/main.js @@ -1,16 +1,11 @@ import "@pixi/layout"; import { Application, Assets, Container, Sprite } from "pixi.js"; -import { makeDragable, appt } from "./dragAndDrop.js"; +import { Fridge, Opinator } from "./games"; +import { backgroundLayout } from "./common"; + const app = new Application(); let root = new Container(); -appt.app = app; -const backgroundLayout = { - width: "100%", - height: "100%", - objectFit: "cover", - position: "absolute", -}; async function setup() { await app.init({ background: "#1099bb", resizeTo: window }); @@ -57,108 +52,6 @@ async function preload() { await Assets.load(assets); } -class Opinator { - constructor(gameContainer) { - this.inMove = false; // indicates if player has grabed the wire (is mouse down) - this.currentScore = 0; - this.pixelGoalScore = undefined; - this.goalScore = 10; // goal to match, measured in play area, 10 = moving the mouse on the equivalent of 10 play areas - this.lastMousePos = undefined; // use to compute the travelled distance - this.won = false; - - const backgroundSprite = Sprite.from("opinator"); - - this.pixelGoalScore = backgroundSprite.width * this.goalScore; // beware of resize mid game - - backgroundSprite.eventMode = "static"; - - backgroundSprite.on("pointerdown", (event) => { - console.log("Opinator grabbed"); - this.inMove = true; - this.lastMousePos = event.client.clone(); - }); - - backgroundSprite.on("pointerupoutside", () => { - console.log("Opinator released"); - this.inMove = false; - this.lastMousePos = undefined; - }); - backgroundSprite.on("pointerup", () => { - console.log("Opinator released"); - this.inMove = false; - this.lastMousePos = undefined; - }); - - backgroundSprite.on("mousemove", (event) => { - if (this.inMove && !this.won) { - const newMousePos = event.client; - const progress = Math.sqrt( - (newMousePos.x - this.lastMousePos.x) ** 2 + - (newMousePos.y - this.lastMousePos.y) ** 2, - ); - if (progress > 0) { - this.lastMousePos = newMousePos.clone(); - this.currentScore += progress; - console.log( - "mouse move, current score", - this.currentScore, - "goal", - this.pixelGoalScore, - ); - if (this.pixelGoalScore < this.currentScore) { - console.log("game won"); - this.won = true; - } - } //else ignore, not enough move to get some distance - } - }); - backgroundSprite.layout = { - width: "100%", - height: "100%", - objectFit: "contain", - }; - gameContainer.addChild(backgroundSprite); - } -} - -class Fridge { - constructor(gameContainer) { - const fridgeContainer = new Container(); - fridgeContainer.layout = { width: "50%" }; - const fridge = Sprite.from("frigo"); - fridge.layout = backgroundLayout; - fridgeContainer.addChild(fridge); - - const bottleContainer = new Container(); - bottleContainer.layout = { - width: "50%", - flexDirection: "row", - flexWrap: "wrap", - }; - const crate = Sprite.from("mate_caisse"); - crate.layout = backgroundLayout; - bottleContainer.addChild(crate); - - gameContainer.addChild(fridgeContainer); - gameContainer.addChild(bottleContainer); - - const bottleLayout = { - width: "12%", - height: "16%", - position: "absolute", - }; - for (let i = 0; i < 12; i++) { - const newBottle = Sprite.from("clubmate"); - newBottle.layout = bottleLayout; - makeDragable(newBottle); - gameContainer.addChild(newBottle); - - newBottle.x = 0; - newBottle.y = 0; - } - } -} - function switchToGame(gameContainer, newGame) { //empty previous container //create new game and add @@ -182,7 +75,9 @@ function switchToGame(gameContainer, newGame) { maxHeight: "100%", margin: 0, }; - //const opinator = new Opinator(gameContainter); - const fridge = new Fridge(gameContainter); + const opinator = new Opinator(); + const fridge = new Fridge(); + gameContainter.addChild(fridge.gameContainer); + //gameContainter.addChild(opinator.gameContainer); root.addChild(gameContainter); })();