From 0e7a1b5536c968cec0f8a2e6280c809c7ff3ffa3 Mon Sep 17 00:00:00 2001 From: PS Date: Thu, 7 Apr 2022 19:51:15 +0200 Subject: [PATCH] scroll bars --- .../intel/debug/lumenarium_first_win32.obj | Bin 450459 -> 473884 bytes src_v2/editor/lumenarium_editor.cpp | 38 ++- src_v2/editor/lumenarium_editor_ui.cpp | 283 ++++++++++++++++-- src_v2/editor/lumenarium_editor_ui.h | 38 ++- src_v2/lumenarium_first.cpp | 6 + src_v2/lumenarium_string.cpp | 22 ++ src_v2/lumenarium_types.h | 7 + .../platform/win32/lumenarium_first_win32.cpp | 17 ++ 8 files changed, 371 insertions(+), 40 deletions(-) diff --git a/run_tree/win32/intel/debug/lumenarium_first_win32.obj b/run_tree/win32/intel/debug/lumenarium_first_win32.obj index a60b65b42de5e3e0d04fbe4b00a1967adefe2e02..7c9356ef88532028ab2955e1e738319a8f81a6b5 100644 GIT binary patch delta 121448 zcmagH4}4GM|NnnoXD>5n{%j2Me^@jBm%sBb3o#j%gi6iW{2f~i3wgan%%7s>?NX^$ zsZ`#jsHv0{Wkn?|REpwVDzT#MUCQtAyw3AH!~65S{a!coc)afCd0po^*SXGhu5+F9 zdc7Xr*=WP>jcaBty-D2^KYV=Bw^dY|s`uAy=!~s#f14K3Cyk@ts-e`=PdSQS2k*bF ze%0o6lyV}%?w>z2tYxFH`}a1lJ-L>nOrtP$u}u{lHZbD;zZ-_XaaR>JAXwB?w+N44 zR7IU!R5TDa>h3D)#=DDVz)pf~w%F1^i>s&=i!FT=cGMC}7cQxy-d^wMQQhaTJ%s@i*PFUxFbdHge8PeK2k;HA1OK=*1~zfBaebS=aDjx zl!F}e$lo4uzpA3@ePvU1`O4;#0+QyDsUDdFa<@l{EorbBWIO)o6^6f*D3pEttXax5 z@2~3>Mb@m=Fcg(i+F|D9n?tpK@T;QN!xNk@zAE~lN`mw4S49o+?mJI@^yIWBzk2e! zm*5XCf%COZ9{zRFEmaeonx54A+Gf_&Th_vR*XC=Rbq5c2@?cL7UgJqWPX>B&y(hyw z8R5w&Pj2z#c2CB8GSQQ%p3LxMrYCbendiwuPww_)DI_w%S@CsIKgdI07fp>!2!HPD zD(c&>i`GT9a1xIey&l;jd=n16!lPTijV#kTw&?j9%XIA4&NYW?owRjvtv5*eM*m6D ztIiOTWig9MBI}iq?5aPFq+^3GEo}6#gLls~$)I;to3#p~Wi8qQ7Tp@Z7yq}q>QkUU zuX>o4nAXQ>$^3R_@qcdnKY^xoXh}&|cWg`YMp83K(U(^rr8k}E&DJkFw;~DaYTvc& zW>>YidtZXPlIu|Xp&rNa{~JANh0A*F!Ghtv2hnoVXFf@tzIO8_q}VO_{@R}ie%il3 zN&V~QlB^zRGyHf^E!v=?gU=BBc*t>*twUQ9JT%;HdjA`?5k(80+x}5;urPJ##V0aJaI2YUz`*PDThPKS5v|O-!peL{vTcN zFoMn&fDGEziW20$ zZyTD~_Y*B!{L!Z*qxU~g+Y$EZ$Mo*g@|`3_2TLgHAzySSS^U*`lKJ19rDeItZEegw zagpB5{q7JYAO1ra$&EkRHOxO||AdLQ&l=#$W|pe4|+p@>n(pkV47==abQ&~r)!72bsEVC6qR`$5k@he9i$8PH#$ zv!G|83!z99S`PgUx)ypKx(j*%`Xe+)P<%%Ye0uVYeAPl>q75yunF~H z9tLO(eG%FOx*OUQS`Lka{sCK_@^v zK<7d`LhpknLD!6e=?wD}v@7&EXgBC)Xm{u@sH%tX*Fg=8hREv%xO(_Y!{4=0f>VbM z%}C3hnOF47@kZCi^@~1brK0 z9ZjHjHT?%^va1K0g%LVV4>ymwx}j4WV*3=OON8j}(p_-2AK`W*~M{oSmE53@i z!mFU&@xB!_6`BaW1&V=L=yqsZGuPF-?CK)*HC2j%x|o&Wx>19hF0ZlyQ|3&`${v+H zq0{B-PaTTZrzmUxbqCCq#mT|yX#1x_sW`b%N|Ohr;>?6nab}rWk-CVA6H#3sfR-Go zu18UIlys@7YukEBt)+jYh%Qn3G--Uar!lor84IIybv=*jsh)W}N-w&aN^TRSudR1dzJWTrTa^t!NhUW+H>!Kj|5YKhl4%2}3R3Xrzi9k; z<%&P$6_@jh5Auo+@rn;uGjTE4yTj_}Vp@Gg9d9#_#CTd(*VAqF{LM5bvcA6Atg5Sf z{?BHvalOsFA4;291f|Vf3#HBcmuVJ*R`hp0Z)L^xbvKg`qho9Z#ys}Vrsn2l&&`Rz?4ZH0?OA3FsTE!Dm4!&xz0>(8(sZ znKnHr{LJ=zm z!n|sBwa|N-Q?g5|_j4?!wbFTucIlVq`Ih?pU1m#4$$AB1EJ@k*F!7K_X+wU8pZdm^j;^nZppSpT~m|U-CEybOz8#| z$%JIxOG6*)p+}RR@2Q)S*6*#`lJ@VTJCn}62F;XmT+>&7O(6GL-Q8xmsh|GVNeMTr z`s-gwLjw>{W-_kR-y>|$K;-L;aY~8@>6v6q%wWVrD+i+>Sa9NcJzhKeqfKg>{u^47 zIuwTqna0EQuqtG7M&hJHX7Xq+wq)NJonT|m-AomQ)PY;|>l9LYs~%{VMBJvst%K{`&?pJHLy42|JmK}lq;o>Qh^ z*;xQBFe~pwWg&W=mwNtujWKb7*|`7(DKszMrFTMd7h?QZXzB;8>`{fdvr(YUJfnQgSxzjrq=O_0STIA4)uZ~8UBHzhKhUv+6MX; zbP)7!=)KU3P%4BdDB zcSLr&v>J*Le0ep*36W|@p{(f$)-YmyCxH{g8B(8iC>8Wj=(CtPCH3B6z|nf2gsy8 zpx<%GRR0$pMKF!m(Qy?~)eJED1JbDV7yy>mD2aHGB4A=4qLCm>JbjWwo=E8p6u-XWC+T5Y0*(bVn(eK9_7OlAuFeeY`8nx&WDiO;*iKUI3Yfi7# zu~R6)l{>CCGNnxVK;Ed>AgqtdmkOow4Te(ru7^@(41rSlaP@7=Hw;SUdk23#{wW`2 zfy;61r6}kr^YLbkaJ!7f=zdEt9cUQ>{K!^SUT$uV?T@K(rPZa{^G*lr_UXD!sq;?4 zf;Nr31)2HTHrT6bbAN)a8!X0h|3xdL8b^awYZ+3%Munh$?HZ`xuhF&sR=lqXErrrG z|A){h=oipv==ab%P%KlJsSe?)+s+9Lht|XU+qD{`VqvBOG=$y_Z3O)u+5&nCN^=2J zMVsKe{8L3B7+j+nQne1NYA*a+$2qauMAvs32XQ*F2T3hdKr(!ut*qHo>}d~eMD?^a zl9fGc0xt2rN}7#)hU@8>v!-Qa&CHyn>VxNjUBV~l&dHu>Pl@eh!Nikf>H|~4Mo?b#y}fDZ-%yl-U_9? zG8TFR6zw832bux>8JY$C6PgVTLl-p>S`#`6O7l-Mp&g+pNN6N9h{U0Mm;&fh=$%m9 zc~bMCCD6N|WzdDtLr}E4&_(DHXf*0@DYOoBIkXFOCA2?u4RkW}0cas~E%YJizo0ao zv<~_v)&GMq*by}47Yd*geFWMa`WSQ`v>5svI@QOaJE2cNPeGrAR!7xtgf@mg4Q&T~ z4mu3_Jd_TG4CFoVii6=0`sS;#?9E71{-W-r6HQcor%4b~M{+Erz{{~ftu7USJKZT+ zld|(|8%qaFK}N&%yo_1-nKSckr!nR-nw@8lC2GokXlDLpZE-G&gGJ`aEjqr(b$Bx! zv3SvHk6~xFw(WZSq>SlPW_ZUXw&{}NlG<-#*t(Z=-Fg+5g=ZGnwtdXBeMvVBE<>tT zC>marA_{xa%X#9IoE)1s;kYZX&Eucr2HmsD@-m^~r64oM8Z zt&Vi7bBnu0%c(RrB@vNPsR$;zK>myD4m`MDY6 zGiPPzOqr35p+5GHxfdI$$C}NM1}KMLZGI4CoaC6}FX{N|_e3BcI>|;yr<*$#>-x>< zR?kZwrLM3Gmd4=^mjqt_QelR?tP_HCW}A#q|3xi{4({s##xj2uEst6kh7O?==yoXW z(bu7c&^MseiR^$TqI%wfUI*O?9S<#qE{47XMeA3)pl?Fo)hZbJ0%k7&9qb=M>Dc`U zx*Ym3^f+`sl#anqp){rY88jPu5SkA?1pNzo7>a39^(B-V##hi@(66Dxp+}*#ufKt= zgdW#HlnCZO06#;&gZ9JD#YreM0Qw^|6Z#YM1t~6&k>$!8zy+ z(BGg>Lw|>Eg8mo!E);{jP;E4ezo8F8F9u;=fN?OeqV^JimP4yR&q2eXiP(!(p()S^ z=on}N_)9FbPu!!^h+qZ$j~V$j)~AXT$M#b$3tVFL1;GDScOeK*X%tgDWv;N*QJ% zpcl$?LKB>2{^ydr5c{hGN;$*yeP1_r4p*_`i!r6x-82YqjDxBY-Wwy}fJPUZL1VIv z37L6zWI>aD-ck%5@@H92!?FnQ=WP!-Wk%lYe0$JFg_}>_*H;CTkmDX)I$$I`c}jkE z#;m-V5Idy6e7CwU);ogpXL{G{Noe#PE*&}0B?z5%=|y8VdcWO!EANk8@xC55o?eLW zWD{Uy>H~B;!=tH>P|V0u%}^gfSNG@4vJZ62ATHU|Rmfr`Gy(b$v=#InXd?7SXj^C{ z6a%PG9J0gsA(R9~C5JF9ps`U1T?z*4IJ$AvCqtiw_JH1m4NZaWh4zPDi-UC_v;;Z? zHdF_-lLjyYIvh$*L8L?9gWdrB6^c=Ns42>h8H&&#=qP9!bTo7Zbc`9jS05Ton}$P2 zCMm~aacjK44T`MP?a*B4IOxaFOz02L@lY4#&w^rTtg_AAeVD(c>`+RXEuMnKHSm5a zv@3KPGy|Gb()~kRu>Q|gb}^QB#PY|X*mU(IbRBdfl=jNgP>hDu^Uy`m&9of)Z)iF6 z1?VtT;}$4Y=gZK&P>kU1k@yty>h{lg!n^($h=8lGpq<(KkuEZ?FV@wA#AsvCtmrD) zzDke@#i5Pa`G#mORbSLyJC|x3yLaU;1Z$mNiQoEoSNvU_CuRz~} zqBpnqOMifVfUYitPEYN{f_CQ5kM+)LsVwLs)d2j_3*AZx$llWI4LytZL!sxOxzOLB zbD_UO=R?oaByywHd9buUupd+=UATF#*;D8&O$Rl`K{yg8Wf$poiFGfz_M+2jDuTy0 zFgw@kmQI^S_Oi;fsfNm;T&aL)Rx)4oCss^rx&XyNU}wbAp?~B3MCe5*l>&R!?im`( zUvgzgOX#4orELKn|Nky+7z%ERKh;T5_Bsf`V;fM{F(s=gCB9w)UAOA# zhP2Y0qSKROgOm@gvkH_(BlJqf*?{uy0qqIx3B^&YdO>M@y`glrSctzXF964ZQCiBk z^Z!+@yxFrRqnoZx?G=O3X{EZZU$Po8G<2f{Ttd4g=EX6(esCNpmGjarAO+>1bzKWZ zJ*xgtIyVe}_Jv*ty%w4ZrDi`EO63{?rSeb4U*~_0F}(A}>r@v>`0Mgd`D>uzamD84 z=3Q2wHTwCzF}g;1T@6R&4M3??(Q7!?OL?b5W1u6Tw4RZUS#u&#REFn zf!LznK_Q;RGLGojCPyjd5GJG5K&>WCV7pmZ{( zy}8MJ{F%NwJR60Ys!jMo-7dHvi~Sd6LItT0u$$o&6o4|G3hfM?2E89T1NsW|4k-0j zv!Oph=Rj$Ii%HB7t)~Dw6}kZWDD*Dq0q8>LagFm$5C$V86@pHHE`nmAS`7UdS_u6F zx&nF{dLNV?Zde1o8G1jI2DodXMbLklFAwU6qpz%cW0oD#5C6}Z=3S(s`hO2fN7Wwa z9ndl}B+yp;f#PL$cLp+?M?o<->$>IG?SRKL_f{cZ~L1okX<7@7_y)5$+KapHvhbN2%1(oHnYs_FXUsSLDDNG&I$qbM_#>l-NTv2UUI(Bsg%p#OnV znZJY5wmpTvE4Qr!>W=nIj5ax6;E{m3$8D_fOT^_tX%( zHZnhdp_^n<)>jt!M-+ut_Y-s`^b~Xz^k?W9D2|{|4APx}Qj!0QzblKp4a;eBA2QRv z#Hc>Pv7`F2)K>gsAnwY-Ctg{2JGly&gp7vkIhi@L`8glt!fnZJP%PeKgY*&IO;?)a zBe>qC_0x7$N75Yp(d#VAOJzC-r2)!s(8bW-p~cYiPz<0{C6v0OKcMHJe?l>@rY=Ay zK>vc$AnI@ELr_d>*?PDQMeXUGef$=UOI(~UIwF$~p%X7_m$N3!%*E8loGICJGsb66 znlhs(w6L+g0fEz-)KVV&WxE)i;pMxS<~-5y@hs%{+}Sg-X4zR8T7aJKiUpXLp~t7t z_3>2`#uT&cW!5-s3r%GPF@55dEpujeW(LiR()?vAFP5db6DML!Vv{Ccxy+`Vj&(Jn zl-T|h{0-N%t_;pRKi4LuOA~Jb)n93l)=E=Wv;nm5FG-s@Cv!@UowrH3GTr#hnX@uz zz4kOkr|wG!9d;9_clI*7(=SEVlv(+SivwA5I~PMafE4lSNiw%4Mi zD3sSS=Wr%jcE#z4_vWd6Zb!R{X1(azu^){p@S^jyQ0qN*SeSQ- zg6H=_eek{tG#eTYr7Pg7&?le~(2t=m^f)vU8i_orLt8*=LWe?YL2rXbL03RAFKh2x zVO};E!eo((0jPp4t_#K3QPqPkh1Q4u0L24@p%FM=HiS-t;`0Qdh0vzZqtIs1i_qrK zj@Y1<(817n=t$^Q&}?V|bPlu?lpf_w3>$?zW-zS*%AjqbbOg17QkOFwf0x{{#5pBvn@;GS zZaGfpamfAk2y^O$Zs;U?^Bzff`cIOk!@q6$V{=3}F5knpPa%7enb{_zCD>=#x;oM%xJeH}om!PAJYuwgo){{RZ!!g;qkJ zgW?u~y$GHLMVin&OfRYzVfF)Tfzn8fu6~oC+o059UWF#3R<=XwvC-F{C!nuGdt#H` zfUbd}{|$WyeGA$fn~%bT9)OlYPeR{;UW4=NF6dh5Zs?EUH+omJDOEA}0$2gXY2426 zy$@}Q8uX7 zw7$L?-GFO?98a05XLQS=ITz}iEx+liPP#H3>pSu0$a!7I{&Cp7RB*1lTKY0@20&Uf@Q*2ZXBfaj=o*LLv02Z~-^$N8Fc zTa5D-X?|Vj57NAP&L}hDHyzWyKQ_4<{;t8_$bY(_xl?9z?qsjw`L1H_tc+}YqM%(| zQPhb*{}e>W+ryf6E8T{S1L;(kcC>#Rl1>!fv=Jzp0KKOudfm`K6+N01+lSUpJ?N!7 z2xmRJgN8w|@9ex?0;R$GPS6ohD(#JCXFaD;%`&8=VG`+&(I)SAU9aTtdbo^)tHNUzbT8LEmg(7n*H(4)}X(Bs*;Ryt&8IGq9Q2^|Ne8p?v= z&L&Mr*h#`E(0A~DDin8H>||s)G#BriqJNnMZ41qZ(lBy16j#gkk)B-WJiLDmx)6%K zLQf0R0!V1GXMJ z$KJ{@&=kCX7`g)b7}P+Eq3=V3kHZ{?++^jYX}=yT8*?2G52*FiT!Ux(6};ydUI z&~s2aVK}JrEzqjaZO}&0SD*>dSD`(iCD3V5I&n;g?tsn@N5@BJisb;MP#O|^S5nl- z>8hJF$5Eu!O@l|6@;(r;Y~bk)x>E^?*}z;nuIs^ zVx~568bzjJ&hG~9+9 zJY!aVc4pS_i4FL)F9yapEkt1&EKeA+NJ7=NebZu19xucU8aN0F0d8)G$=jiB? z_qsZ3apxDQuEtj0G&sYnv5Xt@GfPHyckT)}O&XOP?B)DX#Yt{t4qWT>bviUMb^1BG zoSuzJ4)=35IA+6jP7A%%?7Yrt%`fa#5Mw(RBqzr`ytD5a2pnIyCO@pB^5hmhB=uHu3Ki;=lf%AM^*!}BY z=#zF|m86%Pow?r(JDq&X(9o&>Jhbo2ozHGpHk(MFh&KDjK);02`>Sf3O48}IP26zk>$OcPX*fnLq&L{!|@vlC)2ZiAsn5E5@9>8G1CvB;!3k^fx6~J zU_IU(qNQ8vnONG>f7UbUl=;B=rhs&HeN#+&sJXzor4G7PVHLEm7FHeB2N>fV*b*IrfYNcp4hx1YE9$(=~3F&&cmEle4;%6H5e3ai)BOhz3z6Iz;B)THxVOOrx1 zde%%Djm6i*n>B>j#GCEVHh;y_CcgdfTh(5Fy6Y=x^>5F+^V6({pZ(AF5zpqWYL$I) z>EhoDUi%#PBCj$@XjJ+hGkOg6$N?O5abbyLKf)jDii zn?G7n?i+tzRsDSH*ctB66K3>lzO>cqJ_QXLckL1V)>Dg5z4y!G2Qk1+H0vqZ>O@lt z)kjUOTaatN)+YHD;7zT~I4EYEmJuG)#%v+HtBpBK8r^ms)n|TNlTNz3t%;zbMz%A> z^gg|vDTAVaJaa4d!YR{ttkbIGzOl|uZJx<+dY627JB>uink|`5lF2J{BF*N7PF?eC zw$t2vyv&IU&!3Fxjw};>4=5(SuQrRvJ5QOyJg28A4LQ|IUYp?DrERDgHQniGR^QBFtSAo%W_;i4$x37T~ST_UJ^Xn%O$hdB7{go=HxDVbNidf%fQ?hHCGfUedm#mrYOmxhlyPY1U!97lmb>p1Q zCEfCznVJex&Fs&2Qc#+zrs57~ySFA3sT+lvH8Y*+=G;u@B~!T^C9pM+Jl+{(j?QxK zHpeoZtIUiEPT!K~+0Itp%%zK*Wb^SHl+6~p**qtXO4QQ?Ct)4WE_YJQxVcVuvoPDi z$z!=wJ0f$|tnBIIbM7>cXE^=Lf9E<~P5J~>Q>Tee|B_IFQ=-k%+noVa#**MXrxQM_ zL4`pf8&IYLsip%ZXBIfswCTRknM&22MC(kXe43it_c$@8bPB5HuZ7MF|J0@FvBF6$ z`9A0bxuV`${Twr!nSjykq((F*6y;71rqMbZ=X zikwSN*;*H=(uA#n!{syL*0OWy(II9utfi%{qRHsbY+Pe@E{;2&VGhVHbyWcz4maet zAjsBLM=+N3;4yZt+JJH6AsblC&Q)751oYT8cCIQFwp-X?VMm1R$2`;S|K1*Zgs&T@yge6zU zr4EMmNZgyOUCBOnk!ruNG)zexv2p3_T$NYTXZh?wVf z>!-!8+AeShJ68>e_5)Mdxhkf%{cto29m~#D8-;BWb^-3FT`|o@kaJZJ3|2kXhn*W# z?+g6UhpIx@Ibr+i`ib|mL;I+2KjMbM6ti|FKlhCX|V9U8T;W5SwY@a?5-*$9`FWL;Gza34EY z{U+?c!qPD>~PG& z{Rc(GG0V)?9i#e{bU1o zvqOd$NqB4lJ7frV%FB?QtBMnSwviqBiq`gnli0X+?68iYz}*5<+Tc!x&2Ruav}$1& zgvGV>mA#ynWQ2nO_R9@4qFFz-m#;KFhWa+mC%BknS>35->~<{$&%>R3SO6q_5BN*kL7b ze|sxo=c@E;eKwMvt4_jQv~j1{p}qCT@$bQc{@!9&U4T=X8k`#7IkZ-GXsp7LuS1xP z>&?zpYX|ylJv&$R9)$Tn8<)b)Rp(ND7OZ58Y8`B!)xwGk*}1Ah*g0XT*V|{g5SPZz zRgKep7RL@}RAD=WwHfNib?{se)p|_e33jepI?NAT!Om5m3OgjM*>FFuB|BF=AZ(qm zYt#L>>)7FRd;^aEfUTN7u;lPf1neT!5@9b3dsWy;VW))k8sV>`FFRKa5jI>{maxe| zf#sucf72G`Fgvt`(LSRYSz79vA*hkJ`9ocIc{wm9xY6FYy-K zK(&GG*tu%ftv;K}4ucJ0#ll98#oWJF7NXVJ#>KF6RTeosr;dg+S>Qf6 zx^s)}mYu7TZueOicCK0jM}u|@$=RV*3#$~CmO&qrrMPr<=+cGl&j@;p(cO;2w7LyU zWrr3lY=^L<8NrIFcPQ6t-R1 zfGm7fi_I{V9WoTQTiE1m`vE!Rm&49g9}D|bSlmR4!}dq2cx$O~mBGc>mF#1OBVv-z zmas!_23Oa{onq&zl*v9Dzz*X8IC=~`Qf*|1^UD;Ujh%x2j~1h&0jzHW&#^<#HPvS+ z?9fTU(bF&Jq}ZWV3o92EJ58wuHm)%{G&o_Cg#|amHnf3T*r6c_s}$Bd$9{|uD^6jD zMks8pu&C*{cWU#CVdtuHVTXm$-9p6C_%GmD)WRCLCN}X}cIaAjeHO7Q4qu9CXTVdY`+cL|K+r|#< zL)a-{iF5E=gw3xVJM6lkz;c19bG=7SaDrinbA+%H!sxT`Ep3KN*r9RV>9euykQOf9 z#+_h?5!XDAVf``Hdgndbl z`af4ahQrWX@ssRa^_{REh5at<4`ERuKWz*e!X?_cP3&CUJoH(B9fsO)t!-QuJDi+^9TS$e9JgF44*efnbUr>* z`-CN}z_Tzm!!GR5(X8~@0Cq?V*UrZ6V}~>4DxZyEheI2#y^X814%?4`=Y2kmVuw>N z96c)-snlxE;am>4%ON(LovTK{eP!7#>|8Yo?ucd6*x||v4mT-~b^$wAEnkh}AJ2LM z-U~?1RS&`8IZ&`i*}3X@xWksc$j((e;OKLvk*buPt3HG~XxS(1T=g~FXO?}-&Q)jN z$}J0?WsCi}1`mZ;7+~irx&uzn5l5=J>|E6X4v*b}C9rc|P4zlpGWEu6~ERdeA!uxvg%R~5p&Z`mq#u6huz%(6$=x#~H%J(j(| z&Q))~(S77dwUZrsLb%|&7Vd{7=c=#Zc3buhJ6D~C!-K>~{3|;gCHLEhj=>_>xoXh^ zew(?69gdtLpKW4?asPvOMAEjcf*@O0wRy;g9oV4?g{2BR0heSGpJay~?qQ#uV27@C z13n61TUdp##vARI@*%%Cc4(|m`7D8* ztKJs&?o&Z;v8#R*cv=D%KkX-8#tv2ejL%N6b5-k2K5Ng;RTG3w5;pQ#KW+>=%>V5Z zxZj6rxw&FuQHm-o3s|IfK+4byPHB;CeVU1t$|8Ze*bTx?2s&o7{kt0y@d4@Hc{AAVXK7| z3HwOc0b#!g`wcEg<-!^8O@GBv>@a(^6Q7szO3e;~2w}U0ofr0}ur8&3+GKV(WZ`<- z{3_VFYD(~JA5Le7bF{EZVR7&Haq;XhTHa;9v;{S|mL1Xxs}weJxBXHVI-1yFUgfG)>SvMi&Ue9EfuyxSh28;!cOk-9u-5!#SXJ!Wj@Pi=c>bSDVh%LBjmjCU(yFY z?7|K`A>6e#@Dw`?O7{7T9_yr~h+~Hp3rqUgeq9Y#(uJL?ro-X08DMv?bJd>xK|gTs ze$Tn;cXpBL4`Jb-_;D^f+}RQqFYMR>`~5gr$q9BC6PEidiydazKVueDjoG?t@4{h#~nh;`V0B>uvOvFtGJ z{}NA**u>k}VOsTw&$h8cs}@!vY}MEH+j>w7YuMoeSJ*jWV~(Q#8*EoH_Ne`09~9=J zW1fpt2iUplzry|!*83YjE`=Sc^;@4cW`~jSar;$4D9k=~*mWm-7K~?$5h~meTbKpx zTy@ufe71-ks!-SwVKu(<P=y93v2kjAJ^1#H2xbRa5y{cV_}8DvVOp`UbcXf z*p&+*138ox;}v*|=hMI63|7 zvoY*&_7oNpwnJE{u)rC5%9Reqh#*^6Z5FsiSfBzQwe$knVHhSX>=$n-W-{4Dsy@R0 zCG0_A6~fN3!}u@uES`+DD{0IQhmNpg!Zx47le0E%3p-cc`kT)(*kRWRD-;&^9gl!| z8^R73Cgi;F-?st>oc9A$*}3WtVY7v86SiI0DPa}DA}js;YO!-wBVo-dar{%cT-8=! zM+xjDtgo;k!iEdGRal0wX~J@aEfH4ev!ELJ2OeUzRWpVi4l!Xzgr)pxze5O(W&k@J z+rstnDp01@2~tiwoS|SY-pdu*2~#Y=^K!+}^m?#`^x-sKM&Kv)261bV2YbWs^vw`^1Z~Bri?4~?+cxFIY8CjS!Rl9vjCFy9w?!8+Vc&4q43g zdu)JpLE7SC*w<~~Ms}#0Mm`I$L-oVGVdL`Ip=N}Y3roVp{tg@0g&nG2*jizj>kq0o zZD0V?{^VRWo?WDxC~TFmHNwupy=Bu@vUAmKO?{Th4n3i;LSaYXcG|STV{CDVHS=LH zJKTJT)ATJ{XsvPVaLfwZCM>SGR&U$5cy@>rwoO=U3r*kFh5QBeL z>`-c9>*3zBX*aOL6kaQzbzp}EEG$*nHn=@D?e-vBS6!Fr!@=xumiPlSCY>>G0Ef3T1LBk&gq{7qQ(_I`#@>@YdeLDRRpA#EZ%T#5;+5OzTr&A3tu zT<)>MBYYjPeh=;g+-Eb~&km=`B%du|hvQh-T49@nZ5Eb%wWhC~LjilUL+>bTlh1-` zhrm)Fs&<_;eODb4C$V$YeZn3Pwn^A#VNsnmeZL*j#;`;0C~TatZE*X&@!xi9scIH> zAxMeuW{2nhgl!O(+EuGhY+M>USG^E8@Q1jp4;l@vut)aJcTV0wqDo3n>~Iw=?3l1F1GPG4 zaFEG%&l*6)?3oxl_c93bo@ z+&8w=r`WkFA=PJX*kOMP8z5{w+_yIE26nERH<(#aEoAGe6+Tq=342J`qr#pO_JXk2 zg}o*017RNt`$E{)*4gpjj{;9i;2*;N78Y~8za_EkaB(q2reC9Sax_Q zP1rhN$I{UMd5KR5Y&g_U+>{+gL&9=|y)5iiVP6URMp$5&pI-z!+^`ZBY%j2fz&^qT z3mYozW?{Dpn<8wwusem_C2YB{dp$?vzXt_AB7x5e`?s*yguN;3ePJI8`&`&p!hR6; zv#|fd1-}KyL8akL)l#FYFIt;UoMwmz}HX32P`UL0B7h82@z>*i!-r3cFs|IAK}Bl5f=X z9k*!xz1iU~7IvSohlD*U>^XAO|3#`71n!o=GGPNoYWf0Q#HF&s7+=^k!rl?~p0ESL z4hlOZtYReAPg!H`_9ji=&Wn}MS4EJ+1*EW(!Y&9?qx`tBa3^iraqMt0D{P0bsL@*e zVB=!g;r{PIfnWGgeJAWkVe}2>Ug7{doQ~msv>7g7hi5y4ofQ^wvmaNT9j-0le)7hD zS=Q1P*S&=x)j|VyuDVKCYhhi5^$>QQu))G^5_Yq&Y++Mw!TM=+u9_|IP6=EiY^|_y zw`z6D7BGt)Zlwx)Mc6)J`-Qa|tLclDv2jW4F#mT@;1>cbgq;&M<~B{=&Wyxk+2Qt? zu)V@6gq;(Xdb?IFNCRaeq4YZ+6UY( zHthm-7`zBO2N$Hpcw#+M(|1jyFeBOFNe5vkgr$$y_9r9|$Ieym1fSJphk>lH-olE6 z8DX1)0=Ed~IFm_E`=)OufMUX5-4)Vfa1KXRFv@i{XB^ap&0KStHf|L=+?o}prg%%S61e}`xXJAB+|X2?MUV?( zF=i)V|FD6j>@ZHB=CeF@xWa||)5cY>!{v64&)#K+IAImSVyF9YjoD$hPsjSb3`Yta zH$$rnb|qQtaDyq=XMNaVHcVK)uuz^>f7!H4*tu%g9X{K`4h8gCP*n(wnWgCq%(35N z*`XU1wnJD{zE&4)Tnsy0zz8c8b`DP2JKmM-P^+_jmS>$E|CPhydy25)!|X6YJjZ7R z>@Wi|7r&8Xz0jZWb7Or?$WUgUKd#X#K)+ zgq6Zou`Ail4p-6hd=|qFY2m_cTn;-FT3B$0z^M6}z78I>5W^0Mh2;nxAtV zRwir-8hWJ7uaKRqt`DLA^WZR8a=6*ZE>g`FRxE6zu+&AGz8oK0lEw}llCW}NsdsDo z@_dS8hx-h|E(8VAFB#OdflJt-vsmJ@2zF?gaJ6h)0XtWHChT)z6~fL58+VVUZ|+B7 zve;q#w@=`Hc6e}nsiv>?M_@WTSA{L}Sygs;j7C_Ju-$OAZQ3$+n0hJnSsFWhP6Vz_ z&<1WM3x^Dsdk*JlcDMwG!|w~AFl*T15$qK{>&MPj*}|p>TPbX{u!n^`wgQcTvc@B} z0$-HC-NMR*Em*1PM-EV!5Ia}>y~=0Ky`ICUiCv^>Eo`!|9G?Z%!vY`kp?XKyd%~*R z=dYw1JDg^P^%j;PY=W@;!peo6w+{VZr211}&T4-pdF)XA_iI(ptA2L4HT!_iy0F9k zgsX4kHnYQgK#|V|u){nM9DPzgQtd86|3}tUeb@T1KRa|j!g7QigKJ`CmRu zW`{zn$ur*fu!&^naw<&JMM( z-e&{YVUi23iG$~V@X;90q86GyXdze&cCP9mtdp>7g!L0PM%Y+k$KdGOw(vL>J6FB` zkk3AZ3({g&eJ=1TcCPwC*w4ZO5BrHD*rES`Yi3unpB<`tgU^!K;R*{b&c=nuu#qG0V z4@Rm?b~uX(TOjNtT)bV$DR!u>$9?uQJ6AP)!e>p{;j&9u7CGww@Y&oaHU01j_EU9s z==(SNEP@?wAiyQqxJ~R(TTl5cogMB6!L_n+TiBucpY~aZ9p)UK4r-NX11kZ^;R6WI z`0P=3sA^%`g=KBh^y@4r^kjB8wuS8$Htt!i+Ss@(cDVZS89o2(Ep}DhbDDnU1sTS( z!@d)?Mp)o^t=ieR2zKZzgyjf32G`!konVLjHv4Rib$0wW^52?%R|YE{!_HO9UhvsU zc9;(kc2d}?Et-Cd25Hx@bJd8Kd^U<5o}?4DNZ7@f(EoXf!(R51parwTY=^LXVFkiA z3EM1e{8oR(6WQTICc^F&RxT`fSYXzxntn}(_9r{+cVXLwRWH%>YdeUGV&|%Rge@1g zS=bg~zXo-R@`Dm>q5&3)?2FRM>7|`-PPYJ0|ReunJ-4gwcZlL2pX}u;eg= zW`|L*usC7y!jgn_5tbrsfUtC7BZZ9@Z9Imd~QtxvD!kZ~WIw z;3x^aMc71PQ-#eDHc!|ZVQYmQ-ltrE6I*tQR~>SqhHogJPF{>W!z z*r9#E^|x_{*`d%MTSnu*WY3}&*23YZU%=M0LxbDzv&rl*Huyx-Ps334vqM^8>xGRx zpw&PdH-;VVD+)UTXMcPN6G5NiXH#w9NOm~e2|FolWVu$UUWV*2c_pk=Sj=adeyaur zjAe)0wZfJNI~jz%-Ugmxhr%56*+_P{w1yjE7)!AXx^cDKQ z8*N|?AUUk~Yo7(!p<3Za+PEd`&^rpF8{f1PjTP=D8#kF9=K6$H2pfA$t5FmeRO8qp z(1)r**w}Bh8f`Ni#}0S4zV%r{cDTe6HbB@hxG^^E33je}{e;invd)hGYW&BC(d;nq zE3BQcyzeyqY!O;@K0AzLh3yj-_q|rP*tmFh=z@i95Egq9{ok!Nu<=Q49rg)3JozSU zJ6xuX+rbX!gCBghh8>=Y`cc!5AEAJW?C@dapL{lr9iAl;7JNWp&M7}Ij~ynPe%AOE zCCadXovXeO_O-Bc!YYO3oYpGKrp;rAM|Fgid5*?^jn8P6Z3E-j;Z!NCSXj(2T1~WZ zvFy;`giRK<4Q`T++s+QpeEsUPSa!G~f(uTzfgxCO=vvQu4qYodS6wZvtFYUJjTg3D z*uBEG3EM90sIcQffwAZO6*p#wUJq`HEnqo2oIZc^SrR*J3EWg~L)am$uySE>ziav} zD(ud9b{PK^2wcDptr{-J2JT~rBjUWz+Ofl7Cv1SQh)S)d+qBi$;q#)x#tSPT=Z*gs z2&DTZGi>4jJ3LMyY^<~KR94nM*H)_@%zT!Cw0S(`tC zp2cVsu(^f3*kRTZj=sMUbGPhJ7`SGZjb(>J77o7vg18)Zu6hg3E8siqaJen4(r38- z{Zp$vyCwVC;W)nFvqW|{zr)>O=lLaCoRUPRp5RJ?1FnT zvu)yJcIZHal?m&DdopvpICi+F0EZu0!7f?F&Q(Ql_&pUc!w&O*8)5NdD}bBWx#|_T zHkQ4{&c(L_IP~Kzhm_WEupz=m3%ga=Bw^Ep%@sBuE=c9VY=^*=5@>`yEbJL!&kHLN_J*)M z!uAR~ChUZ;^dN3c&9(b(Bs*7W+=cR36?S-BQdnJK?Sv%>+Xh!)^V`l2bITDv>(36~ zFUAhzzZC-4N#H}mo)-3;uvdk>F6=#F9|$`p?1V77Z*`|FV1S%A{_BH#PaeFM9X?zx z>;_@C3Ck2VUDzGM?h>|0*m_|bgdMJq_0O}VIf9#6|0@{h5ah*@0#fUysCC;Nfoj~6$)!Atc9=+!a51N zMp!>#!-S0xcDu0Pc!4tn&J?y#*xkbJ6ZU|xM}<8h>;+*j3wul0JD#KQ-$w!uNZ{AP zz7=*_*ssF=7Utl_CO1NMs6k;(g|!gY0S;eqO?`SNfvFOhCM*iKGw0j57ZM!-?>m6i^3k0~kY~TiV_=v2qZ-qs~_;JDJB;hWDjt z9_!2w15aUNg&l@l>TL--++f08MUQ2%!w_HC0%4VK%e?u&3)WIC48!ffWj4bR>@ap0 zHeT2aVKapl3R@+NZVVQBHNy_iiU_;08P-pWF@zSFBY~xG%WdM_>|9kV&S!Pl;le~% zJ7FQX6*lb>b{JJR_gNx4jQ=*nuC#$$*x{m~h0hwWLn9Q{T3Cv(0m8Pxt+M%TV}~av zS~{wS9TQe%hfy_LU;OMK4zb#vMJ+UgyT%5#WQVo@*T=HX>@cE%>up(ocBodkUY6a+ z&Q%$3JuRES&Q)9CyaJZM1YGDrxdra8#!d?`%n;ph~WdgUgMdJ#mUT-@)jC|l$ zShk-XCM?>aeOMO94!Z=dSyf8gpPj36;a1tWS?ut@5?q{(TSqPki;qsh-fIKjV~2|i zxce;ooSm!wfLm?Z-|So!+1^oWEUU#11%$ibvN(45UMRTccEvr|;p-dP2Oaf*4a@)} z=c+kyMV8HD=c+2Q&fZi8j-u*2yX?h(trWrq$a$x)A5R)-zVo^Y9pYGwdCOjN;T zSvHv+uDX)Y|7Baa5|Es$o`!qOX80UCSG@;UY}p6w@Ku~}k6ZQ~JA6v2E6y91WwXPT zFx*nhR4Rdf1-)} z*=b}(opQE^ArJHRX{WL2^Rx3vRmzdbH$OWc(xMV9x=Qy-of4NnIeTVy^SG<1Le=y; znRrEqm;?rbjr@3C&>{Vr`B{ZOunuD}n+)T?l!{-6KV9o%YqTu$b!{E5Br z>vY-ptz3GU=TAG0mL*g;B?%Q_b(@d>mMs^=a`*XKRgl+YdB%j0w~$=@lIaIR^jtHGkF##OQV=Dkjj@yj~}; z*z}1G^r?Hh&B)7pKs?p};02ZRj0t=aZra8MLeE4t3g{BJW6mY-e`*>i)dv5M!;e1Q zFf6Q2$yGEdvIl43~Jh&u&JBpmT94ks&xyrstTe&2D3t;C1o!>u6 z8-#^%EAe-+GXuYQxVzb>+zTl$2DUBrlisRE*?QtP1~uriPWJu6+AFtZ5I5Mf?x zJAv2;tTPUQ$`suaNH#;#!>W}8G6HWk&?8HB6$ExU_{phd^8=%uDExxW{6IUs-_%$T zh@-b17X&)%k!HezKq~~TTo7mjd38acWyHNTD94L+P3dcahH)t^|Co#Km6XGFrQ1dM^s}s)oD6*!ETN zSQH90F^_;bN3@B`3acN7g5uW7Ww}+oB)2jzw+e&|2{Uc)M#^*Av`0#_W>KJqSw$q^ zm>1p%*t~FEcUfK$m*iF9?L%Bxseoy)IMBNqt`Ka&j(G)}zZiwZD8jM|^UWfB%}8(a z(mjDjttipuyDt@;1GUT4&ilNhX3=i^R@eVW+5f^El`EeC`-ak3o285QW% zIPPZ8ScILswf!4@I`^`SBNeUEXP1k)UoF#IID5vjV957=hhXc;{sDvc?*?Caxj#2z zZg8_g-3%WYm)LP)6o-5%WC>l~D^5-r5N#DaILhxB`@o46*{z}%*NW_tMdKnI4jZMw zz!&r_!!2$Y{mMY0)|U zt5S_j`DJJLv_aN2%FL1!ulO2`D6Aavr9@{(3tb7(ifruDk|J+f$GuE&mVtCdTRS=P z@l0BgT_OdE)~NB}BQ!!q6;a=bR^RB%)f3Mhw<SPFdc<=*~CC!nJ(@uKidy4NPr_NI(rB^2urLet!2hi83v;jrE>n3 zMp3J_94jt{#J<_lDI;AY!knF#*jLj|iDfmim!+@Pw7^+%5{mS; z%K35U@8I@p(ee1)K$ECV{KwtcQ}ek_6*tD zgv8=P>Q^y$5x1mW64)MzFVsq+nJ}-I-6&0E`lZ! zYH$%_`|ax^&2lsebM(Uq(s=jCE_0TO*%Ix5gefRmYB-nb-tWUeK zwm1oWiN_hHxjE_mw>Hel&C;X0{{-ys+#s z3@EyHKrkX#o(0s%9qhULddp=Hc$G|Kydt3WC@vbqE|0zU)9(?%kEfSl#w^Q?Rca*3Iai$WbWDgxN*B4%>Qw^g5glvM1_w8D@7`USioPEu}Z$l!8NFPDDr{ zC&7g9Tt>I$&{*BMm@>v_s&u9*nAjkhOfgR;m2g*&aHW$;j_?wv6`EpaHFM8(xl1*7 zS$dVTl)q~?_V;BrQ#;VQBdX4WUjN$L!SQl=9N6j>kSRrtwG z=6XTz3cpM9Qsk6K>Vq9~{Nxy?A2>ax4OuRib-Ad^T&8dn3QRo^E6Z~2SWuQ;V0#iq zHwc%d7isG>7>Z%gp%2$gtQpS2QoN)@!{Y?7W4X3`bWXlXvTs~@4W8ER>w0}7*Bj`% zEIlpU4U%}T-5SLN$%(SB=pPLi+&#x{-%I-j9(8NnRd&;tPG%(H4Ba7-q~Nd$Kef3R z78SN*wrol}=HS?vfW0j(nZz`>FqU`N|KBa?_G8adB$qvT6FUvuXl*b#WlKFS-6U;q zTMRQ+?FBt$2TSge@PeIFrF~OWY(-I39EkPM!Y0Pim~DAIc$K`>@PUMSBEfMBGxOmY zMgRtue6`?6=4L^22}f$&B)IQ3zvEb!xu9VOW;-W%v`n4k?Cm5P`e4=2;F4jlow)Uq zu!xN}`<-JhxZ3~tUA?#8x_$gghQ0i5ITsN%v;j7x4NhU0Xg`UUDk>F~xdp~mJjvIn z0dpEM!*`uUYRbb_ll9lO3$UU1x>tM*&{s1H)`YR zy}d39y{7RUXU~1THg3_>0p`BYxzSiBxJ`|9BE5xO5V02OnAbc{+6mh_;I!aW2%Bjt z`}OEk!Q?r(d_;$mqmd=!v~7y+6!u2+PtWW$Aj#!9b{)a1ce|t1Mm5JFrVG>?$`e zfQqBWqcLXl1Yg~`qbLEJviO*XCh)elmQIxy#cBW=3KLE}J7!058J?Fo^GQh?+Hg+H zh3y4D0T)93r5kOhDwnhU;cDmOi7(`)_vZnRGfnKq+G$tHg%6Te>huevqr}E_$zQ|q zIH#gc#;|qVA60BxNneCrr=uq}7O>s963c?H5*rq7;%*t?Ror@%$SG0D1YJv{-ss$$ z0u^i5IWjXslj$Z}R?o>}!o8DJ2_?92uAd%jXxjblZtUWMA!D3^4RnA+mQR7D0@c(KQ6&p3mUb_Z;`Nq3gcv*Vk-iK2S&6Vk` z;&g_wAl&wJ`(!3ZPvM2|ZrPb~e90=ibOzaz>Y*x~IUApiWUp{%peAV5$nAb=tjH_w zhlXO;wDWz^e4h9dGuFw~8@kRyvr6=)3NjZ<2_M>l)5ru@Xy2kfh`(p5%he-&+b(#jjH!VlF>8do(N{GV#H2W zQ9504_{)AuQ2mJC#xFw41h{bs@XNAN66d3FBU~QZ z%jXIiq4#pSVsEFi`5&jjz-Rql!KKgobAyW9xYmc|RG@ZIykv7Z8Sne7C5zH%A-U~F zq)m%fNaTFpKONmy@=CCo!`_jy{?x^C2+Z$5S=|kidYp)dd~0K&chC3 z{0Y#LW=H$4S{vN=9B%E^1bw484nKd+Z;9syqQgj0@2na~UVTl3zC6KUu^ z>O3{xgSs!M=Ss(l{-^#t9~Vf`2rAz7$dxS03(Ab=VX;;I&a49Uf?V7l5LG6q>!ndvyz@ z%e)Hr{`N`N|H`AIb1-+rwG(Cq3DVhlWn8E|3(~}WC9F5ap{0VNn-I;Fop2BJ?HBxB z&3V|*!7d9XpBmRCc=YtR4ngmwepb=~IQ5FrRNRB53xeXM{-ts^sYARhUuFe=E%kGb zFR-FfSIi!;DLD{_PN{PcxeUh4BJU_Fd@x~-oKmk_=BMIBdk@|Y&1AamcKZesA6hEY z6Xd<&WRnt%dKR}xJNNV3=$!=}4fQ^MEz+JSH!s5#0TeSAQEkQ_PveF3$+r{&_1PH|6K%-AN~Bs#|}8KeE}VGC{F_O33afUsh6hp_RpB7EE;UZxeEoPAT1 z^QE^S0LwCC^`hYY_84oQsP%ishAcy5+)YU`qM=#~EG0HdC2sZK&@gFYG;yC+%VQ3< zS_(WiYPD?1!@LcR)^%sKv|6_8HVpt3vVFEYD81TGPGdJf-rbCp@WTo`OTi1xy_RUVBUM99)Am=>xr}?C{=qJQl2vR})5I6hOW_8~nrF%` zV`xa2BjKD@;kRiaBo*!-(S^?b;r4Ei+an5D9@{BnKkdYl8``N+GimgVn<*i}8Dno* zq?RJtUYb|i$wiCn=QOlgD$)hLR{H%rY?mAj-BKD(ZXiE!oZmATS%@c^8XsX%s2CpI zTmyT}tsCUQjpKZAi9*CCqd|7KU5ebYtrf$?CGC~z<*@4xhgj+ohnZtpG*sD$AlsI@ zJWS1Z3l-yH0$Si02Z zQA~6=f08g7Iyj6nElXqCT-Reu5DoLm{mQcR=~6okykeGG%5lS*tjLmPt7siGyBq77 zZ%C-vDnVNJxU{9$uJm^{!*g|$SNj*H$g0QQ%POU?tk@p>v>H>7nxF+v zj(F>}#_w^s$F}3xUy8`&84|1~(E;w)p=Fq0PDzpUpVFXYjekRucxx2Vyr9MF{yDKM zbkn^{&7cM2A>ZL{W-V_C;(<=|QoXjv@hdI9Q;uKubMBsX5ce{yXKKt3LvhA>NlM1iG0E!gH{sIE8@r>Xl*F=W|hsqY*;{3>~QyLj<$%J|=r9j?Uos;+i$`ldfJokiiUru`{%R=}XBwK+bXk(Wq+7LpG zm!`!oLkfh;5NaJGguEuf6Brd@RlMc1Umta0wsm-SwbP6eP0E*^zuYF&?@2=mpuVJ$@$XSIwY@76ohS+vX zkqF1bF@XEhSVNN+gl-G*?xLOO7;a@*RJt3}?dz6egWCqLMWNRcyt`ma z9nUF?rRRlinQ&jX6!+)0Jaju3?=IMRjuC88=#}aA^-58_a#qt2?SjzlBD}k3YaGMv z+|Vu4?dz7}{(@Z=dacE~3${*qESfYN-{;^deMz{l+Zrize{R=>Za3iF1zYbJUf0D1 zPu|NRX5IhgVsq$XJKkMnyB)*D_OQN8w{Kt+_ZJvXQ8=1pGAAE| zx-XR?0|73CaqT7I{@ltnoE)TScz3~OIEL5E&@0n51bc?MrTSmDa^lCBk*y7gxe5W^ z^5`vm3gWTUdb047QRMJ|967r@-mlPsgi z$-co86?&5Hix$;$7S4R7vWX@t$GfcM3(s|o=xV|yDiv*Cw-g%!+%Hvf@*pP+*Q3FXQ7$OMELCH`zAnufwd?1(P=UA@6iikrA2CBekuI;6JpWz-+inn;mT>g$t+4lzZmttX09OoBfGrPDiJjAxq7O zFtP0NaH|QoDzR%t^SL!T)Z)37gRL#^BLUo|_i2J789SA0*9nO?EsqasKEw)JuPuId zlk7-v@fN>FaPNNqR+z4(M2=uZrG4xIlKrQ2{HjaDU}32+LD(pYlWuv+E>P zd@cxzw)m;RAzS^9$(+oedxSiowxqc@7R445`=zTo5-oh z+QbXSZ}pQ8_M~Z0H*bH1h{z1Vt3UZi2c3WPTeOm|77YDX1erhj$c6G~sPV z$vCP$qxvw4SBGDKzNYP0&^M&62>lDv0MM7D3qW6yrh?S->10 zYg`S|8oy(WFWHL|lW?T*22Ey=s))-Ki5m z{aBM*K$)b!Ks`vU5AwW&NJBx|GM5?6Gg@WTxd)Da&79N2Wu64m%qu}!&v!sOJPEZ` zy65#|Aw58SN%wsBn^QgTnv`;9pYKq@OIN0<4AjNJ3s=NjC4~-eUoUIP@ zFKwr1c-~*6J3yM_Z;&3xWrsM|AA&U0A3!=Tv_8~PccZ=_1TEv=5}>-d@h~^SrSvN$MkOp&l%&^Sp6;OK) zp1*;@p%qW3DD^OU1f(^tKgx}hO^$Z$aS-Tz26LRzJkc>#=ThSqthS-^Ss4 zZH{w=bOC8FgNM3cE;iZ(TEqa;PVl@BNQEE``b&_iJB^ygEs2l5nE4T?EqNYRq=#FwYyodfo`qHkuF8@ZU1p4pPrUPjd7Nh#|zhw5ZE` z3`jFyU{nFp%wHJYe6oxGMUWQ!0Z8+Dr#LzoqdJcDahl9E_w%+}>1n#8XBc za$O(oVKfMIOA|>q74$9l=Vu_fi1593BRp?3=^T(ed+&P>gIY7)b09qnd=Anx$nFt1 z{uM`^>WsxkfzfiK&y8A-bUEVkT$h>wk|`U;6tnFHHK%RJD3@*x=m6ScZ;VES#El?L z_&ex5MxA<^=gIA3-#Zkf>9Wi=7L-W!X^`e^neQmis05^WZ#P;1LK!mteFbbmH@~V8 zwoa$Jf{y~J>j|JXOt%1}_1pl`ygz~3Qf+yL%W<&L1dxWh#HjC?D8C)E%mJ$FS3&A} z9Y~}8+ia~0oUJoR!#WnEtu@~0W{|eqJdk>M+~^yS2GcZlj^~xKsr!Rwkj8;-AeDn= zl2(GsNI!yZBqfjWyji5(lfN+!G-G>7yk=oZpPpj$~lgLMAXw9rvkP-l8M)od}4dVU%-*OMOg1?aXIvE_Kr zyPb3t=nm4UAa#AA(e)s8y#(6KplFSv&C*OTm{n1{}{c0x#u0u znw(SQdEH4*8nwK_+0HVW2hz#QMv%^jyH9ab+JzvkNc>cijDLfG@3Y3olz3h`3;FnJ z=epH3E=vtaL&&<;(QKo*=`QbVke&;lHTnXiv+BQ$j=m1ZzZx$9Ds2a8BXzmn*)l-? zHkJPIvf17?TQ?j-nzuJd(_Ln^Ys^+{wr9-tdCZKP&DgfoIqU{fhgG1r*haq_9W=wu z_5Q*jsV&&8%$>H6F*+ag0rTEvv?x?D{=H@iWn9&|9|h7gefBKRJD9s`m2S8fJ7LXp~r_4d4>yf%*j_bE4V~|(*X^^`48T3$7=>fliRyC3P zC&%IxpusEz9l{!aWz+?OyxOLM4yC%fpP5l~3 zCn|?N=(=bY=ymRr!613+I?l@my+O(Wy-kXO-XZ0J-Xq2GfbSCXLF-8cAayea^eJtH zpwCGYKwpq1TDnP~jkFb+t=Oo#$8QYC0DX)fqZQWfYU z(mc?|r1_vvNDDw4NYx+>e-Y?2+7^R8Ak~20C#`r0y8vn4fy=HVw>=9=iX>^CtOCSxQ>7y>)@kRwk%Zz?A zx@3{daf8w8M*jneXN-SSA9D%sGFoP|)#&KQUAl{nZZ!JaDE$eSZlKXP&=C>o%1@bX zwUCZ~-{qw7K13aL*z^+u33_0wisWAwSv4x{!@dESu>AD0) zm4LLkyNynH+7&keq-uVR>odciaVMR-LH$|CMv$gUeb!y1W`Oj>yuwk;dkZL^=kUEt zo^x65G+MR9*_uA@Xpqr$MoWzze8Ht_y3}3&9stsUON<@^y@%ru1-}c_%jg4^IT{Db z(miJMKckzLyFwmX;c`50)b~ZFUIo%i@EAx#s9Whq!mn4Nd>s_ue90wzAEXH{f7#iR zUU36z3h4Ew5_AucHt4FKk6NIvW6gid^Nwc1=Rxb3a1BUjL%)J_ zc6-QLXFDCFwge;}%)FC~DnXiesoBq5f#_Yp9gh3q!D?I$kbB_LIA1s%_HFK=*@ z(O--*KXtY#M%zK!G24CS=xC#}gktQ=)6MvR(Q8KE86|w~+#F_fs?ilj9XH}`B|}|e z^c6_M|NaZt(qq4jIb8IWle^bD`V6FXZ~KjNSOwA@QEim=t-A>~3Z$Ji2HM0ORtLg= z?7AQDwvE(VBndF)Jpt4{`mxcd?>z5sCcJsG>s(7g>iQR>qv1{SR)e&geFoC**z6~l z<9MTgx4RsZc1RA?-}fE?>VBHM)6r)jT}*Ae%TXFghw5WMI24dKX6mh=RotCVnC(TQ zw@uv*I-r^4?e-gve=Vf%Z!Yr-AU*O&{NaK*$EewEXKQa%^rx%wOpxaN0i?lf17R3I zasPmxV1OO|auhopxRk~rW*qXb=bggtbGFgA2!3CWwqo2-(58M8qzCVE&`b34G6;hS zihI-4&rPj2H9d}bW&G<6)WzjtM&m)cOQwOor0Xis52UpqJ@P*@+YXSP#F}6|R(DP( zkOtTbr2Yn)EeeXM@ho62Yj=s!GnQ~UNCSKgq^{S4lDQYZHQSG%6x#NH-eahd_=tz$ zAJuFPQZHRWuhVvP4EQD!4l?6Opjz6_0cn8Ow!n`9GQdwkI#K!E=+u_ZcAe2ZMoW$U zHA=SB6I4d)DY9quoYbTD#)1jJAMAGQeYTmARg^D*)-L-xZ((Xp4b# zQRi+@IR9G)Or-p}$t|%)lt+g{jIJ_z*62H<6s#|4jw?W4)89RyQS?#|(s5xs=v}IR zBw_w}WfR#uZQ97g2tsKf`5tcH>j|1lwYS-h02R}AG-x_$5a>EmHb_20;(I58CXpt9 zHZX*1K=SqAzIQk1Mp0wlLf~ag_!vmO6dXq?Xfkchv7|kdncIUjtS+E3+F~G0S7qu$ zplMX!GuuW`CH;K|(h%BW<$Hcpj(aUX-UPW7TP-61%tbX>U5Xra-oIKI@& zuORi(ky~{Z=!BH1lYXW}XR}s|B0-xv9q=6!C7O zS_RU)uYol0PSEX8G5#g@aPn}F%1?vtU}k)QMVR?WkgDf{s;HKk`kblXf$pT*w5R0- zg?T}DX=vyfMHXl&=P@CcS62|A8)|t@YvhYlOa+1JWE*L8{(p>KmYm%<;3?`uBCV zb3pQ&hQ7BJl&|Z5n}8EA_Q!iahva*I8Tpy2Vxj`Nfai$eARTv#DNa>LZ{ydWmhegmL{`!rq`WnPo6Yqb>%OGRrKZ#QrYmQ$QNlSdfPG zCFmS_`5UBOPCm-zC<2Yq=l>o8j%C8+qg`AhK^N1u3UnIjN07QnJSO73Mq3BajXZB; zgX9+`;=K~H#f+W=EoF{YSrKm;X&5NBgm@e91=5!wwY46g4t*~LBtK~3dqQ>MOPv@)c4Z%xdM8$g<6v(dtV5pNyC8ac?(%OI`s8l&w-e;8dcIO5eY z?@b`haX08~+AcX(Rg8ZNfoo~p40@Av&~dKrM;aA_G{D)QkC^UB(0bBJ(EFs5kB{&t zvwZJ<(0JM&1?jGP4y0}5XGgsI_4;=<@G~ZS2=poG8_)yXpIbxnz2A-gF*m~W zQr8!NLweBOlIDUQCEaW4BcMmb7W1A3;$9kJT?(4TSXYB|{N4(xX66HPT*1RY z_po-OK^HRbnIO%3k*QNb7f~%Swc6C@NSyz@0-VT%t1aPXOSlVkG1Wg!ZFiyzp&RHD zs_7sNVYsPhf-a>x#?)d{XPk)fPiyihj9TM*kT!6$VXlz=M#mYAHoDGeHb{5a!)E)y zXrs|~qga=dTp_(cn)x`h{|y6b!(9jp zGh4zAC%cvz1=7}-=2!^Q93PnaCFlyO-9;fFIKv(M}=O;kT@;&Gw%D;lHp~F8+ZGCFQdx~lg zqX9-Ejm`mG%e;jk_51|rN#@3m@o>`bW1_n7q)=5 z(P7`bi1#$(DRg+7}bKb zkoQ2pQT+<^JLwnDZqlJ=MC7-`F_51G((um!t)^``NL%J3kXG}c0+g>cxvap|?pCAa zMn4$cbe2o^gwg4k-f7ERZIp73v*m-dxGT-J4D>w1iXDeZm}b7z=qb=1${!ld#SBfG z@BxrE;VO{U?h}x<;BO#xojlG_8t8xY*BA6R>3GmTI{zC9{FlaaK_1V5_kgsyo&vo_ z_4e@*Pd>Wodk>r!@tTrW8Z|pV;^7CFp{5(1Ho@h12h@UU#RYDT`57p-jIKvs81bGX z6@heW{JhylUlj3LGjrtPh$kNy^}V!9Bi_r*amZ9G*O3y6-BCUm^eS!7f%L?-+0^Hz zIomn0E3srqhfkD5Jo(C4%mYBWOWp_J*V16?b&aDlL8^AW*4a)4scnnV*y%2qVvzjE zpzmF4G+R_0+8F=pfyc6t?$^1v?gSmDVS(@~p~$=nluG&pG>G&)XfP@BdRJUIXeezb zVRTWt-)L;9vrPe=px3`M1(~JF=wYK5jNUN%1f&M|`x)Y`cw`-XvZ)|4SxH!h?*)f;97kW_#1<6Ql2pb{ZXC?(*gvO)$E_=yv&Z zsuuDtj4K%H??(P?XKQPeW^@in^DZ*m$3{OG?KWzDv-5WfNb|-5Gp;fE*ysnN-9`f{ zT;^FI4SI>u8l#VmelW_Yba|(NkXP3K7Ak_47_Bk-*r?+im-$#B?Pj;QBj39<;tiwi zB2X>+%nXo@3oAf6EMGg<^`oVr*xgL{6;N-U>@+I4E#mc|!vGW|J$!q_JCyV$2tO~4 zpuYk2CbhaF;^9}LVe1D{+hrj9j45ohL7Mjgvn`LA@e7bT{N3b)D(5B}q)k25=w*upNuhNNpFuuV$$Oea@rg zQ;^UHhg6Kl&~%4A{n%5asK5bvKOK3Kv(qPIIqO(}$hy zD5Hyv?lP(~dh-#N;}4^rk2>3Fj$+GU8rXKW|vlW1}f0uw> zXSzzz8>G8He~}&q9l@4)86=%+(MB2zJl-l2~vj#JQ?v? z(Uu3&bQPd?Sx8{Er$KG$&wt9T2z3UjmsoG$Tg-BS8LtApP1|yix_%$jj&9C;+N~E| z3{rIlNFA0N{RGkp&7YQTM2(w@oC!Kmp8xZ`dw@MylWI^psRo2!JBRu_=pfQ7roL_J zfzRM5VW^d$<)oj?Ht|_!D>GVcR1b=2mLAW!npA*Zq?^F#eo!*&{yFF+Ed(@xVfjlU z-at}2&`PRNka`{i(sWZT-3^xRSy_Knhp&P(%Q}#Tu+eN=js7+@5d*rqJ{Y7S90^h{ z#~GbsbcWF-ASnam-_>TE1=9WbEl5Ygv=`jCFd3w_^-Ck(H>_uCOrKNOGADvMk*))E zCM^SXA^C`@l1Eq?NPfxM_a=kB#rOm4h+VjaG{-0o;i;_!NawG8K*?0tIZNP|vAGi&8;0O`p3$4e+*6K1~bG5=4(MevXN$k^qGwn zpj)Ztta7K+c_2N_E&^#qegJ7bdtnIe#P%o#p=<08{^%+neb8IoS07HvTzV3Y+%6QirdDG~E`^X;d$KC*mDWssL%a&pq%HV8=x#Q3yAK?V2Wd}v*KGe&lJT$R zLs#SY^%1WtJ4h>#)}#~Y0LDKZq&0pGq!Y4TAnnUNKXOz7dXOOmAoX&;(I$|5n+47# zpm6?|{&B=Rg~kCOZH03|!)coV(t17wdWt=z#^`0EwIB^<;3pBUo*^6$`kIsrQqL72 z_4jZLC_nw~d#{4-Bz*z8o%AC}epTN0{s4VLH+?qXY{53V0F+KT;8P4GR2PGE)ad@1 zqro8g^>*Jo8Kk2|IY@%R`1b-(qiOy*Vx`0Gpl?V=fb@Vl1+)&^Pc-{;V{sqz@r|L_04O780 znD~p)0be=WF`yybbq|8ZlNNyvW*J|A&ZF&zuVR=+vf=)KQ48sZ9d{z-@gObkKG06q z{VC8-r1wC-lj==viCwLos}D$f)Id-#7Mue*ot}q-GQ<}1<^t!?%|oCwHCD4dZS*>5 z1l4yyhtOdvy2Kf@^#C18+Z3}+2aTjU6Lc8W4@~_Gv`4Rhw*s|xdq96OnAYe|TF(PP zy_vZTR6vInpgy#H2GS6|1|3dY<|b!52Gp0fS!SC9%A{@MCX9cY`CAx|pz+A>T;>6w zBWWu)+pVB}w0&u|??C-&>;JvWI|y_XZ8w|kHqgOk`~=xjFdpP&pdJI~fpi#}@?*qHqwNcj+77}1(4Dp+pqM&b2>gr3!Q&u3 zu$GwZMUW1owIG}laG?ho!BOL+KcDn{7ALzpPHv@QJ zoP22LcaWaD*8c29y&pl^M!P^=nQk|z8)*+HjU*3`bSL?sgGdRW9;CjYOBuodP!?$v z=t3R;E(8`b>PaAZd;m|UgO1~#eI0Z>X+0>L^bKeTX~quRcwyc>psPuPe|7aN0Np^_ z9FSJzMbJGcBi{S)SB!txFq&BQjxyUoP_fuz-muUZ@8y|%252(fj16rG-b70`#nN4E6a%3yXt!CR zEy0@$(&q{9HhKUg&;P}Hk1`#vf1dfVOYqwNhUZ6EMjy}&Qsr+L|1`ooVN|-$=noD^PDzlBuy|!xW=bqco#*qYR_oMwy_)=(<1X5K=ivTlHbkl??v_koKrk z{=kh}G!ypN*+6~Z;6jj2Hf~ZGYGCR@Q|myN(c$~1eqrjLpv$SY+wDAe1F7d6u~8iX zifO@TnS2#U8~9<6##;TSyUY0`NOLR)sl%^98qANT{%-1R7*^$A!$WQ$&HEBa^KOob zkR^d#lvY8Xeh^kPeCP2H((F$B+zy;=xW-|0_lM|2UNnm zRiGTC!}xa(u!sqt1!-JAflj2GouF}4BY!(e01cyhfZ5uEPNJ;~Nd5H#slVZ%DAiG> zUMwn(KQzq@;K`($OnyLQ+LnS&A-!bkN2dM+8cubmsV)C;d3%6zsU8B-u!fj=);~B* zM^HZ3; znwc*%^+r?g1D!^7p{XyL`XMNv>ZhjeFts^uFP=^{5mbcn2hHCLsBs++I)n0wltmqD z>NL=qRIfGl4pW~16;OS~)HhB28gv%bA58t%!}Yfo+%eL`JDc)>Al*+#fm9sp`beJs=)Ck#sOfM~#a>7tr=TNFU|ugj>il#iM}ou$k|j3wnYHr-P>G zU;)yatOH$3b%#;gX3mxmnojjv&~>E6APw*{&`tE$Kf#4nC_lt9lL;q*biyzNR7Ts2 zAkBPE^Csa0?f9R zmnH0n{MM zMnT!6T#)=aW1N=FZCHxVj#r>dU1V}44K-9C@ghNa|S&X!e0%-_mnQc5si@Vrt(rq+{ z9OtUap?X^o$&SCX$-LIVyzKa+yNzjr4+`=kU#JDYxk+v1sMnagPKr+rnh%N3YN#6Kt=ei#zpwOgTi5Ng4%Oj27F5*N}#_E31}ZXWIot{ti#x}E?J=b8s0 z^`JKKa4tPubpkx3nTINgp-=GD3Gv0p&uh&makyTM1hV8-+6?dLsHL(RGS1u!se84F z`*C#tR8Bm8RBdQ{i^v@kTc4oAiSfl!#mW;A;8^n@q#o2J9>&tccPGXVj8q0`!{Q%2 zz9ez)h$Iq;sBIWgw)qoMe`*td+3Ydca3%Z{WX?K_eGz}5yzwC3*oizFU@srM-T0G(6$>$bL zx%l$p3(uWgRDAK|%cln8Ya?B{rwwg`Hg44h?Hm3(cckj46;GZr{-O)+c=d?(u>@$l z5uKEu9;Q1R^%lgbpY4E?Jon5q=#Sd@gj(=1M~S&5A14%Q!EdJ0bo1ds)A2{v_;YK~ z+4=bKOZgGr=*(@=%{WWoJ0bCtLo@5}o3^?5{X9q+^5yVpQoj5GTVXD~E4x6xRUBWF zuHUwf@667`7olf**R?>({_-QMTN98f6GDHy_s2JNM_0)$BPkvqJp(;Ua!vaNEPbVE zxw3~1`B#iTx#Kh$f45shdsj}qTw6C7wLH=#Cas!`&-BR*^bg!&9T_=y=(GzjykH9M zQMG9!v$U@oTThrg?ebz~D1`KvO2Z~kxomtfo|08cbN?jfQtUmcm>fIu@BVnNRO;~n-bdqoA>O4<)p(aQ z&)HrSYT<1(TRmxMRy01tZyM=<_2Pqqak=rsgBx?>lUj9a;w80hRfIHNLNFsYJ~>#P z8($W58WEoq+$k?3A_~^d2heyO86I4T8x^YB&pSX?(`uO7CHeQFK_JxtoabD+d zgz#bEgi-NrBL%~~xS}T5#F2%XMOxuz^g(z(05>ZdzbD0cNw2jkYKfGc4#g)aB0an| zMM=!(pldd-TOGSX5UoT?yKnvXAAdepRx_~6L=_(2J;i3`um zTRJU2zDuMjlb;vda(aB{*c>>HF9#^N%4_U!P{fwdjubkjZf)xg&r(?ozjS}2!0tG ze{OL0xcFAVUuWZmgqO^HZJp1B`p~%elt5_digEFK;#&XK$kqKzpExhRS>ym*JKDdB zW;r@NnGT458{4J64AT}YsZ)8~T^o0113@OqpcyU5} zk0y`D1@#l+4?k{;%YyfsMtpc9&r2Hd4>)?GhJ`o}yU&|T6{oI{l0hd?m2=W~%?I5@wZLc$ zD0T+rLSR67g3&}!0o6&Mc~pyxia}>nEdkw4b-Gb0Xbjad&^=VkjVeLosLqwkr+X<^ z8O;L~Ql1Z*Pj!J&HRwF5i$M2LU2IeXnm~04=zglpj8=j!qFM`j04j#f)gi|5Yd$Wf zycV_v%)HKMJ?K)Z8$b_I-Dp$~x{T^3&_h%=8*Kwkrn()pkm@cW9X59Zub{jKR83h< z?@B&sDpffXKTH+#g^-d!)2Jqc9-*3IlnT0vY8vQKs_8}MmrMfc7FJwY|!NS2{yh>FiI0~b>+G@1aK$;=Z$Pg0#^ zR0O(_YBA_3swGBpVR;kPQqa>>%Z$oFv#C~sYUKHyIDQDeh6$@+te`v(^bBqDjTV6B zP^|_%OLdXaV$iKrYe3IYU1GEhbQ{%`pe0mm<^F}@Y8daJTnBod@>-*HpgXCq2faXb zgV9D%K(!vUl z%`uWG=HpazLA6x#jPgN?sTP1@uTma^SEWMGQM~Fg)s-RP5S0dcmGWv(8_IP?YeB22t^>)!Q5?VJQfUKhZ&2L`YDcx+ zXcOoys+&Q{RJR#z2d&j1Vi&MI<=sYmK<_d$O5_)+#(BO`0!U`*I343Pm3fnll0hF* zO~LDdR8x)8Kp#;}$N0nFX+bB1p(_*0<-#YFGx6Guw*E$0piimF%4QnXY@-~|=TznQ z=444Nj=$NXln2`vRORxcho~{0Vu?Iq)>AITYdSN_xlCyy=o_k&@Y<7Vkx?;d6V(#D z_M$r7s1)=A)iS(hP%S5M{Hp|Rp*$C_hfuCEng`lSbv|BYaWKwXU{nqIiRvP}9!7Ps zQ4Q!9s!Qcw%NE3Jp^H>w-(+L!7^qk7P8 zs?sW%R5u%K1O1O`Y&+hLpuEdSGX70@4_=R?DvJ+FK1jCWyac@VquR=HOMOgfOUI$a1WK;y|M70>N$5JgZnhug$ z$9biAJ&tObQMp_;ccom3*KEpjjjBM>P#6jEDhtnX-h874Ago=$R*l!8R2La72BlN2 z!RrZBml!Pr9gIJWKP&NeBIR16)u2Q0hdCi$hf!T?v<`F_)%AEiiRuQUjiAG+*5mbL zs+){9gXFin;=FBmJwU7XeR7;J@K&RsVIf^R>mQ$`YnhP4m%vGS-ROcDZ2jx>;0J@oKwb3HbnN$~pDyY^N zEdiZPby+-)|4Pa$VN|LGjitOAG>2-P(OOU;)pej-sIE8K06L%QM$oNP>y0*nE~L5{ zG?!{@o8flQ#gun}Zlk>0Xb)%-RapYMovLq?0Gdp-73dDCvOuJi44OhU1yn^fRY}Ib zG~hJK>7Y9)XBhPcl~BzD-9@#(Q5NW0s)IoR)oi02(DhWKpm|htjq*UT8I<#ZcT+Af z8Ure$S_ry_>I9>Spqr>p0^Lis$fy`}Gu0B%e5%upNU_`xR2LXkgYKfb2(*CeVxt<+-Bg!=9)ybVZ&`>K2|@EI*MgQX^J=3y z(8E;Mf}W?k&S*X8QK}n2FHqfRR1bQL>L$=qs+)y${M!b6g7S9IGRnJ*c7vXzx(Bp^ zs)uDHB_H%ORr&G77pb-~N&-DYRlaO;B~|%~Nu^Zz{i5e6r@{CV<#eMA(DPJ#gI=bZ zY1ALIlxh~}6{>@cvO&wK=74IcMvZboFNzxT@_?^W&NnImy~NC8K(A3PG@1Zg3TO$V)_S_;~v*S}>%j)b5!lq*5sG4oubD$pBL=YhVbI^Spk z=uN8CpdY9%GFl9hGiaPw1Cr~3IB$u3f1lzq7~iA3610VKtdKT=(5v<~zk z)%BpQR5uuH1bsxc9we6^ao#4Q*k<4-l(&I?qP*Q`7wA)}yFouw-DBh>V75=y2mL}d z!KfAJ3#v&Vx!Q^Il8sV8m>?WCGz zG#KSEB}RBJ-Q__qZ3FXd&Re<-gsss%N{xex1vl8$Pf(OQsCbsY$a@PED0 z22eAq8$l7O^+uaOEn<{61DjCZX0#pDn(8i49M#=Mdq9a)Pk5u)RLJCjK+YvQ!NCwqB_B7BB%$|NubtLi;RjvJ*k#}4xl=n#Q9$- zuovYr(61bB%Z(~Qhftjh+DWy_XddV=s`Ej+s4g(71|3dy5$HFni;ZfUjk4?3Fa2GE~WHyYK0vZ%&30so@B*=QSR zAm#0#|54p#v>P;->K@P@s<^=(k`FqLY69qQs;!LVZr>29$)JDr`Zq-p@uz}vD5rru z9&G7G8K7ZQ#rRhPY(;sA(K66DW?l(uO|{l&HK>qk z9SF|~qA}MRtplA$bv-DN>IS2Ypb1p#K}mZ5W0N2gZU$XQc^jw=ZQG4@fhJPj4Qfku zj}e~G@h+k2gW6F|Flq&wL^TPNOf^|<8!M*3csb=%Py=D6@sQyod9ab&Nb0! z66kuWMWAG=awlA=1XL>5|8d@QV0+4?MrELx%v=uYK(*3nE@&3jDo_uGHP2{1Xg1Xa zpmeI$MvFj|R2R3z_}7zi4U9@lK(|m{20EDPN~2oPZB$o-dQq)2S_`V8x(<{$s=GjkQQd8{2XsGGxjo#Qs&AA4T0m7EE9gTt zNlE5^$-svwr+^NpoNAN?dYEcDs4vwFBY8Su5!FmkNA9NnMp>XIs163DP?e_`lyX3^ zCn-mPohauT<$-Fb%Ht0GSa5;S7|?T63qg3k2^E=OG!gUy)k&Z(ROL|#rDD)BswFYt z(R4lCs1)=fu*r0vf{1%ZyfnKBQU;8cKDwQ61=Gs%t?fP+e!V9`q^I4WJyV8-;ZIs|RkRya{w7 z<;_OhKwnYa4jM*vm(gy}H&pk4PNM4JF%cyn^c~d%P?V}XcA}Kj8pppZ2B8zeID&GD zQ7Y(1s%fB+RMU+zK(cy-#cEI<)l8%Qpr5H`fksgsY$VUS><~5PNGAaV?p;`<&L$7~Jh*I2i&_9$*L1!{^ znNc|?f+dJJuM$*1b*@nr$fr6FbQab5MhigAs8)l{rn;y##y`cyFgB-L14`uqv&3i_ zD4ps`(0R;UYqT2Fi)tO{e5z}W)`1SCx*jxv>IS3OMqnSx^`HwVZ!+2p>PvMS=pw4y zjdp>Kq`Dh4k?I~J`N4|*RDIASstHD|K*z}Uci{m?;ANDPjZ#1Zm^l@6In^{HdH87% z)eO*Ns=bXeLB~?<4=SRXWi%L+O*I=7OJ`H(0F|Pkp_Fq$J*nmy<%4pl7J#PG^%$c< z&@ieKK*dxi8chO4sTP5zQ7w)cmVky+o(?*k1(zC?fksd*2lb^|X*3s!e8YIR5${}usHr@R<+4doi6C7=ST%Rredc%@M-=p3r6K}S%nGg=E8M|BCc{WH$n2n)l3sKo?S#pGE0U)i+82 zO{Cf?5#!%cl#^goN(Nm@IR$hy)l{Q2&}CH9LB~+dFzOAOOf?gfMYX?C7U&A9gF!b* zm117DLoWwZOgRcFXN_}>@<3No%?HhMh1mNTJCa}-#B@ z{s6G6Kx;4qiouaQDAFrTB#nO%SiS~93Xwh81Kan8`VH8Y=KL(&z7pF~u^qk99{YAV>{vLRj{A=(h z+ugA(pIG=wwqr2J1!FgCxP2;@m$JP=65!uf1R@2Lh5^a5UFT!FRk;04sLP!qNnelm z_Rv2M^UHl6*@eTx?FHDD7P}pPG0E^iBZF*q!_WdEw^gLfg5<_94s7(X|@T}=Af;_yfujwG_3f>k%kB9An@hd)`plkLHH zmw_!iJTeDiTgu1|^~3Sr9oyGqe30}Vust5zH{wsWrMpO-2Zh_1R-MXjP=kbWhe{I3 z+*6LuJMkxv$%sv+{$l$A?{|bYxjd3Sn~gsi_$1v)!T8(a+Z`)UQ*?(}o(z+xC`6L+ zQV!}HP`6vrCSv;*+f!ga8R_I2MQncu&)gQ@vC}}9dqVyi?@yv6xwR+mPDE|Gf%ZElb67`Zw)`max5xL2WChFRtzYo< z?RX;nh@j0K@q;4Q1S9T^mO2xloedFub2mp_!ft4__dJp=+%T@7d?T

8$P-A^PR`PwlL+z=NG0A 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%0D5vWCq1kS`sQu9sfmS&-BBwwaY!Lx1W0H7q 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 Nfuj0FpXz-Q{~K~H3k3iG delta 102810 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 uGcA-oQ8}qTnxsTMMGxW?geditor->ui, state->editor->window_dim); } +global r32 p = 0.3f; + internal void ed_frame(App_State* state) { @@ -160,14 +162,11 @@ ed_frame(App_State* state) UI_Layout layout = {}; layout.bounds_min = v2{ 500, 200 }; layout.bounds_max = v2{ 700, 500 }; - layout.row_height = ui->font_ascent + ui->font_descent + ui->font_line_gap + 15; - layout.row_gap = 2; - layout.col_gap = 2; + ui_layout_set_row_info(ui, &layout); layout.at = layout.bounds_min; - ui->layout = &layout; + ui_layout_push(ui, &layout); - - ui_text(ui, lit_str("Hi there!")); + ui_text_f(ui, "Hi there! %d", 1000); show = ui_toggle(ui, lit_str("my toggle"), show); if (show) { @@ -178,9 +177,34 @@ ed_frame(App_State* state) } ui_layout_row_end(ui); } - ui_button(ui, lit_str("Hi there my good sir")); + ui_scroll_view_begin(ui, lit_str("scroll area"), v2{800, 200}, v2{1000,500}, 8); + { + ui_button(ui, lit_str("Sup")); + ui_button(ui, lit_str("you there")); + ui_button(ui, lit_str("Sup")); + ui_button(ui, lit_str("you there")); + + ui_button(ui, lit_str("Sup")); + ui_button(ui, lit_str("you there")); + ui_button(ui, lit_str("Sup")); + ui_button(ui, lit_str("you there")); + + ui_button(ui, lit_str("Sup")); + ui_button(ui, lit_str("you there")); + ui_button(ui, lit_str("Sup")); + ui_button(ui, lit_str("you there")); + + ui_button(ui, lit_str("Sup")); + ui_button(ui, lit_str("you there")); + ui_button(ui, lit_str("Sup")); + ui_button(ui, lit_str("I'm lastf;")); + } + ui_scroll_view_end(ui); + + ui_layout_pop(ui); + edr_render_begin(state); ui_draw(&state->editor->ui); edr_render(state); diff --git a/src_v2/editor/lumenarium_editor_ui.cpp b/src_v2/editor/lumenarium_editor_ui.cpp index 647919b..08985c1 100644 --- a/src_v2/editor/lumenarium_editor_ui.cpp +++ b/src_v2/editor/lumenarium_editor_ui.cpp @@ -35,6 +35,9 @@ ui_create(u32 widget_pool_cap, u32 verts_cap, Input_State* input, Allocator* a) // Widgets result.widgets.free = allocator_alloc_array(a, UI_Widget, widget_pool_cap); result.widgets.free_cap = widget_pool_cap; + result.widgets.states_cap = 3 * widget_pool_cap; + result.widgets.states = allocator_alloc_array(a, UI_Widget_State, result.widgets.states_cap); + result.widgets.states_hash = allocator_alloc_array(a, u32, result.widgets.states_cap); // Per Frame Vertex Buffer result.verts_cap = verts_cap; @@ -192,15 +195,12 @@ ui_frame_prepare(UI* ui, v2 window_dim) if (ui->widget_next_hot.value != 0) { ui->widget_next_hot_frames += 1; - if (ui->widget_hot_frames > 1) - { - ui->widget_next_hot = UI_Widget_Id{0}; - } + if (ui->widget_next_hot_frames > 1) ui_widget_next_hot_set(ui, 0); } if (ui->widget_hot.value != 0) { ui->widget_hot_frames += 1; - if (ui->widget_hot_frames > 1) ui->widget_hot = UI_Widget_Id{0}; + if (ui->widget_hot_frames > 1) ui_widget_hot_set(ui, 0); } } @@ -229,6 +229,8 @@ ui_draw(UI* ui) platform_texture_bind(ui->atlas_texture); platform_geometry_bind(ui->per_frame_buffer); platform_geometry_draw(ui->per_frame_buffer, ui->indices_len); + + OutputDebugStringA("Frame\n\n"); } //////////////////////////////////////////// @@ -244,6 +246,20 @@ ui_widget_id_create(String string, u32 index) return result; } +internal UI_Widget_State* +ui_widget_state_get(UI_Widget_Pool* pool, UI_Widget_Id id) +{ + u32 index = hash_table_find(pool->states_hash, pool->states_cap, id.value); + assert(index != pool->states_cap); + UI_Widget_State* result = pool->states + index; + return result; +} +internal UI_Widget_State* +ui_widget_state_get(UI* ui, UI_Widget_Id id) +{ + return ui_widget_state_get(&ui->widgets, id); +} + internal UI_Widget* ui_widget_pool_push(UI_Widget_Pool* pool, String string) { @@ -256,6 +272,11 @@ ui_widget_pool_push(UI_Widget_Pool* pool, String string) result->child_first = 0; result->child_last = 0; + u32 index = hash_table_register(pool->states_hash, pool->states_cap, result->id.value); + assert(index != pool->states_cap); + UI_Widget_State* state = pool->states + index; + zero_struct(*state); + if (pool->active_parent) { result->parent = pool->active_parent; @@ -293,14 +314,22 @@ ui_widget_id_is_valid(UI_Widget_Id h) internal void ui_widget_next_hot_set(UI* ui, UI_Widget* w) { - ui->widget_next_hot = w->id; + if (w) { + ui->widget_next_hot = w->id; + } else { + ui->widget_next_hot = UI_Widget_Id{0}; + } ui->widget_next_hot_frames = 0; } internal void ui_widget_hot_set(UI* ui, UI_Widget* w) { - ui->widget_hot = w->id; + if (w) { + ui->widget_hot = w->id; + } else { + ui->widget_hot = UI_Widget_Id{0}; + } ui->widget_hot_frames = 0; } @@ -308,11 +337,26 @@ internal UI_Widget_Result ui_widget_push(UI* ui, UI_Widget_Desc desc) { UI_Widget_Result result = {}; + v2 dim = desc.p_max - desc.p_min; + if (dim.x == 0 || dim.y == 0) return result; UI_Widget* w = ui_widget_pool_push(&ui->widgets, desc.string); w->desc = desc; + result.id = w->id; - if (has_flag(desc.style.flags, UIWidgetStyle_MouseClick)) + UI_Widget_State* state = ui_widget_state_get(ui, w->id); + w->desc.fill_pct = state->scroll; + + v2 mouse_p = ui->input->frame_hot->mouse_pos; + bool mouse_over = ( + mouse_p.x >= desc.p_min.x && mouse_p.x <= desc.p_max.x && + mouse_p.y >= desc.p_min.y && mouse_p.y <= desc.p_max.y + ); + + UI_Widget_Style_Flags flags = desc.style.flags; + UI_Widget_Style_Flags mask_drag = (UIWidgetStyle_MouseDragH | UIWidgetStyle_MouseDragV); + UI_Widget_Style_Flags mask_hover = (mask_drag | UIWidgetStyle_MouseClick); + if (has_flag(flags, mask_hover)) { // CASES: // Mouse Over | Mouse Clicked | Is Next Hot | Response @@ -323,12 +367,6 @@ ui_widget_push(UI* ui, UI_Widget_Desc desc) // t | t | f | become next hot // t | t | t | become hot - v2 mouse_p = ui->input->frame_hot->mouse_pos; - bool mouse_over = ( - mouse_p.x >= desc.p_min.x && mouse_p.x <= desc.p_max.x && - mouse_p.y >= desc.p_min.y && mouse_p.y <= desc.p_max.y - ); - if (mouse_over) { if (ui_widget_id_equals(w->id, ui->widget_next_hot)) @@ -341,10 +379,11 @@ ui_widget_push(UI* ui, UI_Widget_Desc desc) if (input_key_went_up(ui->input, KeyCode_MouseLeftButton)) { result.flags |= UIWidgetResult_MouseLeft_WentUp; - ui->widget_hot = UI_Widget_Id{0}; + ui_widget_hot_set(ui, 0); } } - else if ((w->id.index >= ui->widget_next_hot.index) && ui->widget_hot.value == 0) + + if ((w->id.index >= ui->widget_next_hot.index) && ui->widget_hot.value == 0) { ui_widget_next_hot_set(ui, w); } @@ -353,11 +392,37 @@ ui_widget_push(UI* ui, UI_Widget_Desc desc) { if (ui_widget_id_equals(w->id, ui->widget_next_hot)) { - ui->widget_next_hot = UI_Widget_Id{0}; + ui_widget_next_hot_set(ui, 0); } } } + if(ui_widget_id_equals(w->id, ui->widget_hot)) + { + if (input_key_is_down(ui->input, KeyCode_MouseLeftButton)) + { + ui_widget_next_hot_set(ui, w); + ui_widget_hot_set(ui, w); + result.flags |= UIWidgetResult_MouseLeft_IsDown; + } + + if (has_flag(flags, mask_drag)) + { + v2 drag_pct_mask = { + has_flag(flags, UIWidgetStyle_MouseDragH) ? 1.0f : 0.0f, + has_flag(flags, UIWidgetStyle_MouseDragV) ? 1.0f : 0.0f + }; + v2 drag = ui->input->frame_hot->mouse_pos - w->desc.p_min; + drag = v2{ clamp(0, drag.x, w->desc.p_max.x), clamp(0, drag.y, w->desc.p_max.y) }; + drag *= drag_pct_mask; + v2 drag_pct = drag / dim; + drag_pct = v2{ clamp(0, drag_pct.x, 1), clamp(0, drag_pct.y, 1) }; + result.drag = drag_pct; + + state->scroll = drag_pct; + } + } + return result; } @@ -387,8 +452,8 @@ ui_widgets_to_geometry_recursive(UI* ui, UI_Widget* widget, r32 z_start, r32 z_s } if (ui_widget_id_equals(ui->widget_hot, child->id)) { - color_fg = desc.style.color_fg; - color_bg = desc.style.color_bg; + //color_fg = desc.style.color_fg; + //color_bg = desc.style.color_bg; } if (has_flag(child->desc.style.flags, UIWidgetStyle_Outline)) @@ -397,7 +462,6 @@ ui_widgets_to_geometry_recursive(UI* ui, UI_Widget* widget, r32 z_start, r32 z_s z_at += z_step; bg_min += v3{ 1, 1, 0}; bg_max -= v3{ 1, 1, 0}; - } if (has_flag(child->desc.style.flags, UIWidgetStyle_Bg)) @@ -408,6 +472,45 @@ ui_widgets_to_geometry_recursive(UI* ui, UI_Widget* widget, r32 z_start, r32 z_s z_at += z_step; } + if (has_flag(child->desc.style.flags, (UIWidgetStyle_FillH | UIWidgetStyle_FillV))) + { + v3 fill_min = {}; + v3 fill_max = {}; + if (has_flag(child->desc.style.flags, UIWidgetStyle_FillH)) + { + r32 fill_x = HMM_Lerp(bg_min.x, child->desc.fill_pct.x, bg_max.x); + + if (has_flag(child->desc.style.flags, UIWidgetStyle_LineInsteadOfFill)) + { + fill_min = v3{ fill_x, bg_min.y, z_at }; + fill_max = v3{ fill_x + 1, bg_max.y, z_at }; + } + else + { + fill_min = bg_min; + fill_max = v3{ fill_x, bg_max.y, z_at }; + } + } + else if (has_flag(child->desc.style.flags, UIWidgetStyle_FillV)) + { + r32 fill_y = HMM_Lerp(bg_min.y, child->desc.fill_pct.y, bg_max.y); + + if (has_flag(child->desc.style.flags, UIWidgetStyle_LineInsteadOfFill)) + { + fill_min = v3{ bg_min.x, fill_y, z_at }; + fill_max = v3{ bg_max.x, fill_y + 1, z_at }; + } + else + { + fill_min = bg_min; + fill_max = v3{ bg_max.x, fill_y, z_at }; + } + } + + ui_sprite_push(ui, fill_min, fill_max, WHITE_SPRITE_ID, color_fg); + z_at += z_step; + } + if (has_flag(child->desc.style.flags, UIWidgetStyle_TextWrap | UIWidgetStyle_TextClip)) { r32 space_width = ui->font_space_width; @@ -460,6 +563,38 @@ ui_widgets_to_geometry_recursive(UI* ui, UI_Widget* widget, r32 z_start, r32 z_s /////////////////////////////////////////// // Layout Manager +internal void +ui_layout_set_row_info(UI* ui, UI_Layout* l) +{ + l->row_height = (ui->font_ascent + ui->font_descent + ui->font_line_gap + 15); + l->row_gap = 2; + l->col_gap = 2; +} + +internal void +ui_layout_push(UI* ui, UI_Layout* layout) +{ + if (ui->layout) + { + layout->parent = ui->layout; + ui->layout = layout; + } + else + { + ui->layout = layout; + layout->parent = 0; + } +} + +internal void +ui_layout_pop(UI* ui) +{ + if (ui->layout) + { + ui->layout = ui->layout->parent; + } +} + internal void ui_layout_row_begin(UI_Layout* layout, u32 cols) { @@ -481,6 +616,12 @@ internal UI_Layout_Bounds ui_layout_get_next(UI_Layout* layout) { UI_Layout_Bounds result = {}; + if (layout->at.x >= layout->bounds_max.x || layout->at.y >= layout->bounds_max.y || + layout->at.y + layout->row_height >= layout->bounds_max.y) + { + return result; + } + switch (layout->mode) { case UILayout_Columns: @@ -508,6 +649,14 @@ ui_layout_get_next(UI_Layout* layout) invalid_default_case; } + + if (result.min.x < layout->bounds_min.x || result.min.y < layout->bounds_min.y || + result.max.x < layout->bounds_min.x || result.max.y < layout->bounds_min.y) + { + result.min = {}; + result.max = {}; + } + return result; } internal UI_Layout_Bounds @@ -537,16 +686,16 @@ ui_create_default_style_sheet() ui_default_style_sheet.styles[UIWidget_Dropdown] = ui_default_style_sheet.styles[UIWidget_Toggle]; ui_default_style_sheet.styles[UIWidget_HSlider] = { - (UIWidgetStyle_TextClip | UIWidgetStyle_Bg | UIWidgetStyle_Outline | UIWidgetStyle_MouseDrag), BLACK_V4, WHITE_V4, WHITE_SPRITE_ID + (UIWidgetStyle_TextClip | UIWidgetStyle_Bg | UIWidgetStyle_Outline | UIWidgetStyle_MouseDragH | UIWidgetStyle_FillH ), BLACK_V4, WHITE_V4, WHITE_SPRITE_ID }; ui_default_style_sheet.styles[UIWidget_VSlider] = { - (UIWidgetStyle_TextClip | UIWidgetStyle_Bg | UIWidgetStyle_Outline | UIWidgetStyle_MouseDrag), BLACK_V4, WHITE_V4, WHITE_SPRITE_ID + (UIWidgetStyle_TextClip | UIWidgetStyle_Bg | UIWidgetStyle_Outline | UIWidgetStyle_MouseDragV | UIWidgetStyle_FillV ), BLACK_V4, WHITE_V4, WHITE_SPRITE_ID }; ui_default_style_sheet.styles[UIWidget_HScroll] = { - (UIWidgetStyle_TextClip | UIWidgetStyle_Bg | UIWidgetStyle_Outline | UIWidgetStyle_MouseDrag), BLACK_V4, WHITE_V4, WHITE_SPRITE_ID + (UIWidgetStyle_TextClip | UIWidgetStyle_Bg | UIWidgetStyle_Outline | UIWidgetStyle_MouseDragH | UIWidgetStyle_FillH | UIWidgetStyle_LineInsteadOfFill ), BLACK_V4, WHITE_V4, WHITE_SPRITE_ID }; ui_default_style_sheet.styles[UIWidget_VScroll] = { - (UIWidgetStyle_TextClip | UIWidgetStyle_Bg | UIWidgetStyle_Outline | UIWidgetStyle_MouseDrag), BLACK_V4, WHITE_V4, WHITE_SPRITE_ID + (UIWidgetStyle_TextClip | UIWidgetStyle_Bg | UIWidgetStyle_Outline | UIWidgetStyle_MouseDragV | UIWidgetStyle_FillV | UIWidgetStyle_LineInsteadOfFill ), BLACK_V4, WHITE_V4, WHITE_SPRITE_ID }; ui_default_style_sheet.styles[UIWidget_Window] = { @@ -581,6 +730,17 @@ ui_text(UI* ui, String string) ui_widget_push(ui, d); } +internal void +ui_text_f(UI* ui, char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + String string = string_fv(scratch, fmt, args); + va_end(args); + + return ui_text(ui, string); +} + internal bool ui_button(UI* ui, String string) { @@ -605,3 +765,78 @@ ui_toggle(UI* ui, String string, bool value) if (has_flag(r.flags, UIWidgetResult_MouseLeft_WentUp)) result = !result; return result; } + +internal UI_Layout* +ui_scroll_view_begin(UI* ui, String string, v2 bounds_min, v2 bounds_max, u32 rows) +{ + r32 scroll_bar_dim = 15; + v2 scroll_bars_area = v2{0, 0}; + v2 scroll_area_min = bounds_min; + v2 scroll_area_max = bounds_max - scroll_bars_area; + v2 scroll_area_dim = scroll_area_max - scroll_area_min; + + v2 scroll_offset = {}; + r32 rows_avail = floorf(scroll_area_dim.y / ui->layout->row_height); + if (rows > rows_avail) + { + scroll_bars_area = v2{ scroll_bar_dim, 0}; + scroll_area_min = bounds_min; + scroll_area_max = bounds_max - scroll_bars_area; + scroll_area_dim = scroll_area_max - scroll_area_min; + + UI_Widget_Desc vscroll_d = {}; + vscroll_d.p_min = { bounds_max.x - scroll_bar_dim, bounds_min.y }; + vscroll_d.p_max = { bounds_max.x, bounds_max.y }; + vscroll_d.style = ui_get_style(ui, UIWidget_VScroll); + vscroll_d.string = string_f(scratch, "%.*s_vscroll", str_varg(string)); + UI_Widget_Result r = ui_widget_push(ui, vscroll_d); + + UI_Widget_State* vscroll_state = ui_widget_state_get(ui, r.id); + scroll_offset.y = vscroll_state->scroll.y; + } + + r32 rows_scroll_to = max(0, rows - (rows_avail - 1)); + r32 y_scroll_dist = rows_scroll_to * ui->layout->row_height; + + scroll_offset *= v2{ 0, y_scroll_dist }; + + UI_Layout* layout = allocator_alloc_struct(scratch, UI_Layout); + layout->mode = UILayout_Columns; + layout->bounds_min = scroll_area_min; + layout->bounds_max = scroll_area_max; + ui_layout_set_row_info(ui, layout); + layout->at = bounds_min - scroll_offset; + ui_layout_push(ui, layout); + + return layout; +} + +internal void +ui_scroll_view_end(UI* ui) +{ + ui_layout_pop(ui); +} + +#if 0 +internal bool +ui_dropdown_begin(UI* ui, String string, bool state) +{ + bool result = ui_toggle(ui, string, state); + UI_Layout* layout = allocator_alloc_struct(scratch, UI_Layout); + zero_struct(*layout); + if (result) + { + ui_scroll_view_begin(ui, layout); + } + return result; +} + +internal void +ui_dropdown_end(UI* ui, bool state) +{ + if (state) + { + ui_scroll_view_end(ui); + } +} +#endif \ No newline at end of file diff --git a/src_v2/editor/lumenarium_editor_ui.h b/src_v2/editor/lumenarium_editor_ui.h index cd8be05..4e53539 100644 --- a/src_v2/editor/lumenarium_editor_ui.h +++ b/src_v2/editor/lumenarium_editor_ui.h @@ -30,13 +30,17 @@ union UI_Widget_Id typedef u32 UI_Widget_Style_Flags; enum { - UIWidgetStyle_None = 0, - UIWidgetStyle_Bg = 1, - UIWidgetStyle_TextClip = 2, - UIWidgetStyle_TextWrap = 4, - UIWidgetStyle_Outline = 8, - UIWidgetStyle_MouseClick = 16, - UIWidgetStyle_MouseDrag = 32, + UIWidgetStyle_None = 0, + UIWidgetStyle_Bg = 1 << 0, + UIWidgetStyle_TextClip = 1 << 1, + UIWidgetStyle_TextWrap = 1 << 2, + UIWidgetStyle_Outline = 1 << 3, + UIWidgetStyle_MouseClick = 1 << 4, + UIWidgetStyle_MouseDragH = 1 << 5, + UIWidgetStyle_MouseDragV = 1 << 6, + UIWidgetStyle_FillH = 1 << 7, + UIWidgetStyle_FillV = 1 << 8, + UIWidgetStyle_LineInsteadOfFill = 1 << 9, }; // akin to a css class, could be used to style multiple @@ -46,7 +50,6 @@ struct UI_Widget_Style UI_Widget_Style_Flags flags; v4 color_bg; v4 color_fg; - u32 sprite; }; @@ -54,6 +57,7 @@ struct UI_Widget_Style struct UI_Widget_Desc { UI_Widget_Style style; + v2 fill_pct; String string; v2 p_min; v2 p_max; @@ -80,7 +84,9 @@ enum struct UI_Widget_Result { + UI_Widget_Id id; UI_Widget_Result_Flags flags; + v2 drag; }; enum UI_Widget_Kind @@ -110,6 +116,11 @@ struct UI_Style_Sheet UI_Widget_Style styles[UIWidget_Count]; }; +struct UI_Widget_State +{ + v2 scroll; +}; + struct UI_Widget_Pool { UI_Widget* free; @@ -118,6 +129,10 @@ struct UI_Widget_Pool UI_Widget* root; UI_Widget* active_parent; + + UI_Widget_State* states; + u32* states_hash; + u32 states_cap; }; enum UI_Layout_Mode @@ -132,13 +147,15 @@ enum UI_Layout_Mode struct UI_Layout { + UI_Layout_Mode mode; + UI_Layout* parent; + v2 bounds_min; v2 bounds_max; r32 row_height; r32 row_gap; r32 col_gap; v2 at; - UI_Layout_Mode mode; u32 cols; }; @@ -199,6 +216,9 @@ internal UI_Widget_Id ui_widget_id_create(u32 index_in_parent, String string internal bool ui_widget_id_equals(UI_Widget_Id a, UI_Widget_Id b); internal bool ui_widget_id_is_valid(UI_Widget_Id h); +internal void ui_widget_next_hot_set(UI* ui, UI_Widget* w); +internal void ui_widget_hot_set(UI* ui, UI_Widget* w); + internal UI_Widget* ui_widget_pool_push(UI_Widget_Pool* pool, String string); internal void ui_widget_pool_pop(UI_Widget_Pool* pool); diff --git a/src_v2/lumenarium_first.cpp b/src_v2/lumenarium_first.cpp index 6804a52..ea5f7d5 100644 --- a/src_v2/lumenarium_first.cpp +++ b/src_v2/lumenarium_first.cpp @@ -80,6 +80,12 @@ lumenarium_event(Platform_Window_Event evt, App_State* state) case WindowEvent_ButtonUp: { frame->key_flags[evt.key_code] = evt.key_flags; + if (evt.key_code == KeyCode_MouseLeftButton) + { + state->input_state->mouse_pos_down = v2{ + (r32)evt.mouse_x, (r32)evt.mouse_y + }; + } } break; case WindowEvent_Char: diff --git a/src_v2/lumenarium_string.cpp b/src_v2/lumenarium_string.cpp index adff229..e9f2a8b 100644 --- a/src_v2/lumenarium_string.cpp +++ b/src_v2/lumenarium_string.cpp @@ -245,3 +245,25 @@ string_copy(String s, Allocator* a) return result; } +internal String +string_fv(Allocator* a, char* fmt, va_list args) +{ + va_list args1; + va_copy(args1, args); + s32 needed = vsnprintf(0, 0, fmt, args); + String result = allocator_alloc_string(a, needed + 1); + result.len = vsnprintf((char*)result.str, result.cap, fmt, args1); + result.str[result.len] = 0; + va_end(args1); + return result; +} + +internal String +string_f(Allocator* a, char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + String result = string_fv(a, fmt, args); + va_end(args); + return result; +} \ No newline at end of file diff --git a/src_v2/lumenarium_types.h b/src_v2/lumenarium_types.h index 91dc9c1..8851563 100644 --- a/src_v2/lumenarium_types.h +++ b/src_v2/lumenarium_types.h @@ -57,6 +57,13 @@ data_create(u8* base, u64 size) internal void memory_zero(u8* base, u64 size); internal void memory_copy(u8* from, u8* to, u64 size); +////////////////////////////////////////////// +// Math + +#define lerp(a,t,b) (a) + ((1.0f - (t)) * (b)) +#define clamp(r0,v,r1) min((r1),max((r0),(v))) +#define lerp_clamp(a,t,b) clamp((a),lerp((a),(t),(b)),(b)) + ////////////////////////////////////////////// // String diff --git a/src_v2/platform/win32/lumenarium_first_win32.cpp b/src_v2/platform/win32/lumenarium_first_win32.cpp index a18e2d3..9dc68a8 100644 --- a/src_v2/platform/win32/lumenarium_first_win32.cpp +++ b/src_v2/platform/win32/lumenarium_first_win32.cpp @@ -71,6 +71,17 @@ win32_button_event(Platform_Key_Code key, bool is_down, bool was_down) return evt; } +internal void +win32_set_mouse_pos_evt(Platform_Window_Event* evt) +{ + POINT mouse_p; + GetCursorPos(&mouse_p); + ScreenToClient(win32_main_window.window_handle, &mouse_p); + + evt->mouse_x = mouse_p.x; + evt->mouse_y = mouse_p.y; +} + internal void win32_window_handle_event(MSG msg, Win32_Window* win, App_State* state) { @@ -90,6 +101,7 @@ win32_window_handle_event(MSG msg, Win32_Window* win, App_State* state) KeyCode_MouseLeftButton, true, false ); + win32_set_mouse_pos_evt(&evt); lumenarium_event(evt, state); win32_mouse_capture(win); }break; @@ -100,6 +112,7 @@ win32_window_handle_event(MSG msg, Win32_Window* win, App_State* state) KeyCode_MouseMiddleButton, true, false ); + win32_set_mouse_pos_evt(&evt); lumenarium_event(evt, state); win32_mouse_capture(win); }break; @@ -110,6 +123,7 @@ win32_window_handle_event(MSG msg, Win32_Window* win, App_State* state) KeyCode_MouseRightButton, true, false ); + win32_set_mouse_pos_evt(&evt); lumenarium_event(evt, state); win32_mouse_capture(win); }break; @@ -120,6 +134,7 @@ win32_window_handle_event(MSG msg, Win32_Window* win, App_State* state) KeyCode_MouseLeftButton, false, true ); + win32_set_mouse_pos_evt(&evt); lumenarium_event(evt, state); win32_mouse_release(win); }break; @@ -130,6 +145,7 @@ win32_window_handle_event(MSG msg, Win32_Window* win, App_State* state) KeyCode_MouseMiddleButton, false, true ); + win32_set_mouse_pos_evt(&evt); lumenarium_event(evt, state); win32_mouse_release(win); }break; @@ -140,6 +156,7 @@ win32_window_handle_event(MSG msg, Win32_Window* win, App_State* state) KeyCode_MouseRightButton, false, true ); + win32_set_mouse_pos_evt(&evt); lumenarium_event(evt, state); win32_mouse_release(win); }break;