From f01afa7e9a6f091e4252c61a2a5ff6604de8eee3 Mon Sep 17 00:00:00 2001 From: Ron Kapaun Date: Tue, 7 May 2013 14:09:14 -0500 Subject: [PATCH] New PostFx (Underwater, Turbulence, and Camera Based Motion Blur) --- .../scripts/client/postFx/MotionBlurFx.cs | 47 +++++++++++ .../core/scripts/client/postFx/caustics.cs | 79 ++++++++++++++++++ .../client/postFx/textures/caustics_1.png | Bin 0 -> 34398 bytes .../client/postFx/textures/caustics_2.png | Bin 0 -> 33963 bytes .../core/scripts/client/postFx/turbulence.cs | 63 ++++++++++++++ .../common/postFx/caustics/causticsP.hlsl | 66 +++++++++++++++ .../shaders/common/postFx/motionBlurP.hlsl | 71 ++++++++++++++++ .../shaders/common/postFx/turbulenceP.hlsl | 45 ++++++++++ .../scripts/client/postFx/MotionBlurFx.cs | 47 +++++++++++ .../core/scripts/client/postFx/caustics.cs | 78 +++++++++++++++++ .../client/postFx/textures/caustics_1.png | Bin 0 -> 34398 bytes .../client/postFx/textures/caustics_2.png | Bin 0 -> 33963 bytes .../core/scripts/client/postFx/turbulence.cs | 63 ++++++++++++++ .../common/postFx/caustics/causticsP.hlsl | 66 +++++++++++++++ .../shaders/common/postFx/motionBlurP.hlsl | 71 ++++++++++++++++ .../shaders/common/postFx/turbulenceP.hlsl | 45 ++++++++++ 16 files changed, 741 insertions(+) create mode 100644 Templates/Empty/game/core/scripts/client/postFx/MotionBlurFx.cs create mode 100644 Templates/Empty/game/core/scripts/client/postFx/caustics.cs create mode 100644 Templates/Empty/game/core/scripts/client/postFx/textures/caustics_1.png create mode 100644 Templates/Empty/game/core/scripts/client/postFx/textures/caustics_2.png create mode 100644 Templates/Empty/game/core/scripts/client/postFx/turbulence.cs create mode 100644 Templates/Empty/game/shaders/common/postFx/caustics/causticsP.hlsl create mode 100644 Templates/Empty/game/shaders/common/postFx/motionBlurP.hlsl create mode 100644 Templates/Empty/game/shaders/common/postFx/turbulenceP.hlsl create mode 100644 Templates/Full/game/core/scripts/client/postFx/MotionBlurFx.cs create mode 100644 Templates/Full/game/core/scripts/client/postFx/caustics.cs create mode 100644 Templates/Full/game/core/scripts/client/postFx/textures/caustics_1.png create mode 100644 Templates/Full/game/core/scripts/client/postFx/textures/caustics_2.png create mode 100644 Templates/Full/game/core/scripts/client/postFx/turbulence.cs create mode 100644 Templates/Full/game/shaders/common/postFx/caustics/causticsP.hlsl create mode 100644 Templates/Full/game/shaders/common/postFx/motionBlurP.hlsl create mode 100644 Templates/Full/game/shaders/common/postFx/turbulenceP.hlsl diff --git a/Templates/Empty/game/core/scripts/client/postFx/MotionBlurFx.cs b/Templates/Empty/game/core/scripts/client/postFx/MotionBlurFx.cs new file mode 100644 index 000000000..e94e5ef67 --- /dev/null +++ b/Templates/Empty/game/core/scripts/client/postFx/MotionBlurFx.cs @@ -0,0 +1,47 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +//----------------------------------------------------------------------------- + +singleton ShaderData( PFX_MotionBlurShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; //we use the bare-bones postFxV.hlsl + DXPixelShaderFile = "shaders/common/postFx/motionBlurP.hlsl"; //new pixel shader + + pixVersion = 3.0; +}; + +singleton PostEffect(MotionBlurFX) +{ + isEnabled = false; + + renderTime = "PFXAfterDiffuse"; + + shader = PFX_MotionBlurShader; + stateBlock = PFX_DefaultStateBlock; + texture[0] = "$backbuffer"; + texture[1] = "#prepass"; + target = "$backBuffer"; +}; + +function MotionBlurFX::setShaderConsts(%this) +{ + %this.setShaderConst( "$velocityMultiplier", 3000 ); +} diff --git a/Templates/Empty/game/core/scripts/client/postFx/caustics.cs b/Templates/Empty/game/core/scripts/client/postFx/caustics.cs new file mode 100644 index 000000000..5cfd1966a --- /dev/null +++ b/Templates/Empty/game/core/scripts/client/postFx/caustics.cs @@ -0,0 +1,79 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +//----------------------------------------------------------------------------- + + +singleton GFXStateBlockData( PFX_CausticsStateBlock : PFX_DefaultStateBlock ) +{ + blendDefined = true; + blendEnable = true; + blendSrc = GFXBlendOne; + blendDest = GFXBlendOne; + + samplersDefined = true; + samplerStates[0] = SamplerClampLinear; + samplerStates[1] = SamplerWrapLinear; + samplerStates[2] = SamplerWrapLinear; +}; + +singleton ShaderData( PFX_CausticsShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; + DXPixelShaderFile = "shaders/common/postFx/caustics/causticsP.hlsl"; + + //OGLVertexShaderFile = "shaders/common/postFx/gl//postFxV.glsl"; + //OGLPixelShaderFile = "shaders/common/postFx/gl/passthruP.glsl"; + + samplerNames[0] = "$prepassTex"; + samplerNames[1] = "$causticsTex1"; + samplerNames[2] = "$causticsTex2"; + + pixVersion = 3.0; +}; + +singleton PostEffect( CausticsPFX ) +{ + requirements = "None"; + isEnabled = true; + renderTime = "PFXBeforeBin"; + renderBin = "ObjTranslucentBin"; + //renderPriority = 0.1; + + shader = PFX_CausticsShader; + stateBlock = PFX_CausticsStateBlock; + texture[0] = "#prepass"; + texture[1] = "textures/caustics_1"; + texture[2] = "textures/caustics_2"; + target = "$backBuffer"; + +}; + +// this effects the timing of the animation - + +$CausticsPFX::refTime = getSimTime(); + +function CausticsPFX::setShaderConsts(%this) +{ + //echo($Sim::time - %this.timeStart); + //echo(%this.timeConst); + %this.setShaderConst( "$refTime", $CausticsPFX::refTime ); +} + diff --git a/Templates/Empty/game/core/scripts/client/postFx/textures/caustics_1.png b/Templates/Empty/game/core/scripts/client/postFx/textures/caustics_1.png new file mode 100644 index 0000000000000000000000000000000000000000..49821ad0fb3d3869ce6aced02b122cfb43d558bc GIT binary patch literal 34398 zcmX_Ibx>RF(+%!cq-e0>P@Doqixzj+;!csixVuvz6!)SjUJ4Cv#T^P1cPLH>&hPe* z@4J~yGB-2HBfI(a;kF!Xf_mL;_{!k^?s}yxyzIVf?`*C3r=>Q#FtP0?~oq%S!9` zEcLa!I9VBg7HB(x%fADzp06sT<@>gjl$7ZC&(Cks(b3yPqS>ob>g!Tc>gs+VdJha( zKC$xayDr*+!z(Xxnh;AIo;LFG@=ub<$;r=aJ05Ih=@-}6dd11#j+EHS{;aIbovy5` zmTWQ6>&QJ_cr~mD})TrQhG*H<-L0aTek* z?+9Q+AP_d~W|{pTG*3=Wh7Y{h_byu>?v84AyhJm`Y_&iAG+lHS+BrC=q{feKSUVj# z@Tw}Pt*zY&kXV=)+0lCL7hl(wTwPr~yz@cW1#SkNo}4Hxc*CDzW@B5Pa7(=d$_!X1>9X#j_zH01P7aw#mlW=`e3eg1Xd3Oi{=eqUV1LNwgA&d zB$(3X!-w!g@bVWD^Fms>Yg9pd!#N?(;PH>ZL=&haCG*t0XEyI)2eTpvf)(f0#Jf(7 z-}2UoPs=-JmK5fX{4lUi?&0ue;Fs>i{}v2cYvpxW^RaPrbGO@JSxHdix9{=ijD1^u zdH*6Rs`eH>u=UY5FwlFU*N=ITV8p>FI()~X1~Gl=4MU0+MiMWpi3xdA2j_=hpZVRi z`gH>P%$KE7b*|2w)?fr32KIaApoy~Q=*S6}K)W_rt&8vO^7hZ$<{G($nN`p18?yy( zeX4FgN+B&LmzvJr#<0EU4gZBTJ|1sWzn(f73yd9+rgNV^KhYlpy%XlULFHC7&$RAFqu?z{%oU!GVELf{*(LZd?t`;HmIY@)Ee7}FBTi1f!8$s!iL`8ko34{u=ApAn&yWI{B_z589qz9L@-xWX1h&0)R)c#! zVkdGS0s?}$GlddOUmu_S9Vwomh);uC^-=dX5!!VgyMGU8Beh{&Ff%TKS}Ki1)sIMH zKjC-Ah+>w{yN`|`ltlY*pQEDjf|5+Kj#&?o@Z!gUo2TAh8DN+@z&OMtBp`sz<44Q1 z{`|>NJy-RgYHF(G1mNP?#-3HpYo|Fx`c9oq*AX^XKbX1Ew$^A9D*;`+nT)s{Y4uG`8J_l^_(*>)PKXOE&3vlqaP;$Ob%<@5(@0UAt%|tpt0zzH-F?! zktqMqfsa4=lg^!q0-NX|ns-Pa*4{s{?k;?lzhKQ*sTNHzR3lS2E$&pierpuve5_00 z|I-6RWKg!QnLfx7Qr0<`gEKJxjB$sxWe(LNy^&!r%*T&P%)J4kk>BZK&{{m`>@7u# zIxR!=^ORq6?z?&4Gd59ha&11!w|-AYs3RzP`60o!(eSjj@*E{*_D_Cd0Zn*R9$3mo zn}|##(P9>fr}RItBXr9+=`x6Ou~?MF}>r zTTl|&P9q0?1HzwpLIh1O=`Y0Tn&)v2t;!eQua-z)1c33QFD@=VoX`Xq z99TDT*Jz8Uq5IfN(xT3LwooUT$?QGS897fN8SHarUNZD51PM_lR-KnLmFJV(z9b9$ zxdH(qc+%jOZeDJv4ypjHJO%FB;QOJ@ ziP|Ca&W?_GyXpapb4mt`^PTH@JocOE)!P$Ut;&(fkbJK2X*3 zH-)|I2l~sb!|1*J8rIqS;3f>X`$-u{MuvX^i8X{2DPUx$;pO4wo|hAb@lK=A2IAul8x^SZ^YBdHI@BxC^CQKDG*=RA-OQTx++S>S| zS!zLTp>Yr7nu_Ur(*efc>qzJqcZ`t{C>F37-qPbw%ggFFG!l7G0^y_z*)QV4H8U%I z!33p(jG$WE196h-@nkBwcCfi|f$++$wxQa5<%G@8<4;Eon@wKfut}>cx!XlT#$+|- z(<=m_gZS}nx24PMy;Uyr8S{EYR7tsd`bkraCRd4FiuxOgZ;_JZ zFss50nLS{^gYJ)89A|m_BvjU^*VogzhNnQMOzR-10N*~{Bqe_ixP~&Bxu&<)B62UNTMg6-cZ6#&ei4D@jkKwD(CW5k zC(X?Z7S?d?z47KW{q4QJHZApFa}v%YiwpK|Hp^80E*@&=_QW0v-rIQXQ$WVXqAl(u z2ZCO8v7h_hcg&bix-%&uU2P8zG$fek^?s8XwvO&EFFS&=TwluAHP99Vp7N?SFy?PU?iV)PlWIy3kj{} z-Yt#n@WDFf->=5?%wczrk!lyLa8LS8N-BPBg&hf^<%sDP`80L9j=F`A{V_q1kZ7*{*wWI{ zuzakdB^!}%t6qrvhCw;oQBK>@C&Bj8JLFICip5>R59bP5$gimuC5_=u4bCX#S{bd7 z3Q4-VKc|SYqc*dO)2WPG(JaPd+$kWOc}k5wwy2ptg75f?b+ijw`y-r1p6PYjPtOjF zM8XhKKU_YK&?&LaH5B+Mh@qNloUCuE_OrebD%t^YuCsqY7)H7A_VcX@`+Xsr-1+!? z+txal^>%}kP(M$0;HEhNgA+{`{phMM)@g%hn8H4gm3OF^qgtj}QBO}~9OX`UXI9T# zHJ<;697kLe?lYNG-HuAFQqYANV0K<+I1Z??hFm4!0ux$fs-NB-yq}>`xc&}LG)Hal zBD_S9k@sKLQ8#E_GlXpGMbXd9;q}r@O5d*o-`YT3N)WzDi zmW@>F(qn{GI2Vx;z;tU+9@J-3=N?k@x2DLZd;TjtDEd;VZ2mAd?6ky$l$ReW+C12> z&12ZjCjoD!B!U}Q=P^aYA!f+t{<1%t6AJRal;dp7{pQk8TgcKDR#g}4oj4JxzThK? zK~I`yduI=q+mbn`BoiGW$PpQd>o{_2OXeEpqr?_NK9m0;4eJtsmD; zu5kpp3s1utx@zn1j~+85B|DA}?wE(AB~=3&7#3y7Kpt+^NeOxC5Cy%ylq+nIE3?Uq z)-$Lja;=6h-x<3>VO1)qM7Z7py+kf2;<;J+;ebl>4SJYK!(UEWpw>?%(U!E z@aFlK(a3K(CT^O={~WbBO?93JjtFsjGo3y~*O*2;8yvVC7hYX-|2h+&aEVm*0hw{P z_HPbjd)en_ohNYV2!zLVvOFXU+`u~Geqk94~Js00Y*RfYsdFmCPf~dxBTBHM75n_!`HlOkIL|3KOo&;n^k^CqK-W{kq9MQ18$~ z&YfaNB1Q7gjRhAIK2}K$5+-MRlbadXg_i$eC3Qi^k=CD%jk>A&7Ey(?FwNChkVtFd zGk$xEY9r$)SY@rO2hra0w_1^~xi=KYcHY*D<@0n&?N+dCX^G~;UyEOIO|)(gpYQ?= zd&Lo2omyTFt$KhoUs=Mxx9lgIy?@p7rdTWPx1jAD{lrT(c_%U(~8aq~5+v1aY^TLV|FPQ$!Bin0<` zWryQ!fQmx@qF2HN3Yf;dTcx(Im>879e9LfWG0@bXCS}t@V8R_ zUG)R8DT?_U{-tzstH*d^EpGeY{Sp(h&ZKs z#k?>dOb1*h3Qm@)h$%PYImEIj@NW0Ut`9|4~8p9WU z@!K(iaKznG%Q%O)m3{T!$mldsBP&*(8;kh{NGW%tm_s2>wNH}i|7}pfNc|Mrv6Lt; z)HJG_TS+Z_2gpU7`l$_u$E!B2waYlal||#l_`>jMJgRUH$6E{hv>_E2VkLH^6nzqW z0TVL*1GTc?q#%a#xT1mD?7RGpqxb7&MpL2&H6mi}f!`7$?eW&MmFJ!6>rjpg?Ndjh z(tlhn=Bkx1;b!_Bd$ z`O);901qULC0QL_9ibb8EPVISo)h`?%Ye;)Y#71!t5dhip-f^GtI9N9)81KEUtn$F zt_}VM`XHdiI?lHaOP9tQBi^(>uHUzwK<=HF7+kHp4sEfm`bMIwcD1KBlc%PCIH}rS z!!8sg9(xl}_uHJP;dCgn#qTPbXQX(N+drFt?WNylHuzVj?+uiMj?X@cnJ>qvK1VO< zv~mm=%b1Y}!r7P@x>8f$fnd}&8qXh3xHSl?&4sj7p@6UZxHfnK9&neaX*fpR9R@$E zX*I-TV%VZ#x#8V623|t%Y7l3z^uFmP1g<&l_vj1bQ=3>-e71TUjlVHnWvAZprAASx z=~=n6!|hybHTIl&@S28Rp#4i?9Qm-E3=ntDVT+kJmzyUX`|8^hDl0XQ0c&&XS1QH9OoJTWsownBt zSabIZhmBKTN1r6MPkuQU>S4QAdtRue>Xm2rKQ7d9W8X4<%8T-EiRxTLj7pRnFFMKO zhwHM{4Sca&$L z7f!B)i+RY7HTTgLN6$+9Z`0v>#bc zlKn{}YZvv$ZjWvkvi4E>KJ$W}=kkF9;n?i0P$R)X>YVCcV^Z*#6eqxyt4HH_~AbxTy7%$qr`X;X@5BHm}Cg%bLbH|yOTXtq&uhZr;V z(chf(=JuWkqUD0>OAlS!)j0acWYLt6!=VSFK#knGQVVtcjk%{;C0tC8s{z!!ota3` z6Q=yU@mq%or8TAOx&*e7pf(#6{7O($T{t}xgE9{vM}i9V$$8HLCSFd2bA$^1t$;DBdv7=lTI){yt(dW}TPuwM_A4q8p zt|X=TBUl-)Sr=n$I|M2~cd@i;fO@rWb!*of94U`1YCVUnLE6{X?%S3~K{vfQ=yQjb-C--U0gZdoJ;1A}PmE z=+yi4_h~R}R5Mzm1WmM%H+c&K(A1EZXtHH*Ib325(na0%p63KL^Q0eX;>WU?o+{W= zn=!=kWR%mHj32uP&wc)4bvA`;0TqO(GQ&_dgTF+9lP`}b5#K8c0lZH6}VNAcG=a<_qAMt*@8ZP8-A3zgH3R|#15%Wwen zJAy9>xKGggW0=M7yc}vfSeWd+!tE4X$>PNmwh&`+LEkbf0DuS4*<1Si(lK$fN+u5Z zFHBSyoz;fpI)_eBa`lZ{1A{R>iat`iczm{ zj}W@I7n;JgkrRVNQI9T&EDTQmhq?Uy^mB~{G~hO7+b9~SPZKKmiH-8x0R@GGPe({J zWHT&vfhV5h?a1WkUyg7~f04jf1t)ov5Z8d}TkDFdB($eR4HXw3 z>D*|EP!HcloRRtZjIGvDxh5{bfA8*QZ=zrX02KWFLwnsJGzZb^q7_AhBlUv{&n#uY5%F=2c59)0mKl%bVvFxJs9BGK;eiS(?g3Fa22y z%gqAqU4k%w`*0lbQc9D$5FTG&QT{a2EvOi4K`WFCW7Au$O=bGx8e>v7;nQhYGI{i) zCU~YnSHRmoOSsyT2(OMNOz_;(;(k5#8~{B8pSjD@PXO=*Uja2Vgr)58{m~fBf;@@S zenph~1D(+wis>edprj@NU3(%c zSd$bYy6o|kqBH7RGz2m@nk-*3Y|xJY;2QO#;&iQ!fLkr0oH0`QLgJYAv>!~vQ-=v- z!z(tG3q&jVdEy}fzjYDE%Pp&2?}d@zao8Yw&b>Qse>E}phkRra%rzfaBLn1@?(Z9D zP79%k2B&T@1Q!NI&966(pgX$r2E}+= zBn)nW2lFM}r!9*;A{^u%eV-JaVS^vlQR!>Bvq9;4Galg(;k(f2m=5VPO^Bvy7N=>*O?6loWlU1zkDnt zz{jx%+fn5QHB;o(mX+OP6XQMBZa zCC8BICJm%N5HpE#K}9s-i*pTkiH`))GTeCUQRFp)AL=oqm;ZczEpKiY;c8S_x)amN zu$e)ExPPQ=I(Q5+@1>r&5eJ7*e#yVM@dGUNgfWB^J@8^GkV%@?FafWoXRq|w5 z@(5;pK|v4FKAjNU1GKkF!t~0_wPmyZPF`=n)gM*QnnI_?;$3k z)_}f#xcuTb|XZotZ>U*Si>;Fm}+UBIIWv!0)eGP`NX5D+8*#vqTg zrn2iFocuZy-m!P-o2Ybk7VCJQMJU1X5dkhQN+SPMX%fD5{@V@xgV*Gt*o?0incz!; zqvK;JKnBG1yz30CH%JEvfv5B2;Mr3S4R2t0wv7jsB!)7|!qat!dysQheetR>+ujyE zRiQ)ogl{t(F7gHW{8M|d71v&`*9i-IG#|8979h>-5NK=$zRjDt`sQwfrjW~lDN2ljnLa2k* zd7MK6fc^Wkww4J%^d+FvsFc?LAe9M>^B*Md>su)a6iv*QOenZjjP^U$ko6r6hYM#c z9%O7|6-f!{=D6Mo1NDG16l2scit#+yB8G)M45t+y1lLKQ|AVy>>rqx{f`aS-{-$?B z1Hk4VjcMk)HC>fCWd*4v4@(znqut*dS-;AA;oWMYG)O?}*p=U6hY|8}CPr!mA3#_+ zGe`b0HefJ#xLm!!?{cU(2f*{id7>@_UCLmj>+w2At=+x zv2J*m#(aBZQ~0#PV)eA5HjfAI8Wkcm*Sq<^A$&N~n6oe_PaduNk$m}#!#`rAEiyOL zZl|(=fQeEj-#2E_FoHt*Go>>N$J)(6j%*P0l|KjkmnF?X~@4CGm`9sk4gkBhm>n zYLq>b(x(R_lb^c-f^KR>g6w$&gb#Sd+SJy=ugCUJTdqyzEts^K9333p@9=Kj(DF$! zL<=T@n^3A5V)c7x^BsfM6DBwD0I!w1&(KKcozKk7td8%HlNX(CZRxm{6b-csD*e%s(^a@CXoY^}z^82WfVaMOj4`kjeM}1bWv2nuaD9?7U zHcls5*72mq$nUv|TfpNl;FEyyRtwpiNkUP*f3A#|1^UH&mqWAlz)tbo{shok{}=%v zE&$}tKTdIDgWe?K_>-}jnc48CpIofEn~x+d7Q^*|*?$;fo21Gh>~1(`PU0p|2YPE3gJ-7F^M!L!`Q=^0Y+9Jp(96HyYHPOz{wfv~2KY-73oLWzA zZ(Co|hoquTo_e&VkJ--TXm&0-4+Ct4jg&JoX-ZwL^z1Jp3fP-{K7NsMv>^|hrCXU7xaiB9^q#1NevV4mme*h{B$K`XiP{)vwlYe| z8zgtswa(z$A`WVdaDxP&#-&)@>gy{6mr$0jp}F_-cL z%w(gVu@$3l#Paw}y#q!?9-2>2@DW5YO=Mmh7D!e_uy;6id&w?CF=y*6VY|}~gQd?o zl5T>j@p{e+)XG;`{ga!vGZ1HOcj6p9f!yJ>WhhfG-Vdb*8!o53Wq^y&UCd0K=0y#O zqP}8xF%%&pOIP>DZ%)ClyQ`z*_g^Y6FXtHksze+98+1+Yw(Go~?Dylkiy$i|XN6>n z^?bCF2n%ZeMD@PKW?8*Nk!R`mUyIvY-fh=uvOEB-eeMH`<4k#JRPu{+Vn{@? zWYmXN7~T1seQwsOe>~dDgI*iYPQ@G^4)s;`kD6Oh1sKAG7c5SfWggtP z_$BAf=l3m25fs@%-y+pz$IH1sP8Kok&d1Vf`g(Kw96_rTG4ER~u><+Jnv0U&BNH`G zF}C=?y@in>wwuJXzT}eI`|TxdteM{F3gWXB(Ya5CER)l(uBfHH{v|K7&)=d-9&8sA zX3w)NCM2L*XXSNVpSrgjMgNiVhP4;jS-fy8+yB?`E?MBMUjF-dTw6AK-)+Vee__$k zDH#on4M_z(YBYDO442xGYx)+)EC?)3P(dn`oXpBOvefKNuHzias|&AZ2G#EgCHAR8 z3>cR1R)ugChVLJ|ko~nk)Xh_)2VW`J!det~^#t?C^cl5_b*-E&rDd8KNfhBm-R)Ij zCrGx;9DvPvS3|0MG8v2YW~kiJ|hOeCmHSzN81gt zWYq6*eTVO9pxAOrQjFL*B@Ow39FKB>N0842W$FFT7zeRgMVuAk;t4Um!_}_6`<8NBxhcI(OQcZVL5eGJ>oc@hgiK2kC9hK0VbAjOF5vU+ZNx<*rC*g;zD#^dEu2QN``YABcaN1;Azj zcG?iCCys&SK}{9hw8{$qk2ZD0_w%Yz(&aBI>}?<4+_>nfv`LB6m|cpUzX14ERE`vE z&`1c=oHb;F*j0BpwF)&^}296eleDHys(x+4jJt7 zX{Q{Lij58HbRIps%`{TGr0zZqWrl%+lulB_Ov_jHl?GZd z3a@Gs-0&z_34Ct7Y2=~3qlMbCbV)CgNdfrQU@~99#J|!HgJ}2(>O8xGN+y@Cleb+x za759uBQ1zAn_{jEevlAFotAOUpcmZkwkxeC?T7dA8ArLD3l@(-LH1wcP{5&RD&NmS z>?t*?i+Lkl4pyQW_7*Ye4r_m{3rvZgEgj{e97{!L)-D_YwM13eJU~(d)K0+T9o$j9 zcRoKq|Il9YNW`ayIWKcimIY%Cm+{9G&#+1kG*jQ21{D*2g@X{qwdGV&)GvayfW(Ntp=anZ(xH$b%dr12REs-aIo;^KVibb!4O)IxE;6|E^l1}8C}wdwv$W!!&t)hZG2o-=?s3f09b(* zMv7WAdl_&nc{9~iJ1y8qOT?%2x`CT3*wMRk7GLNmgh)AUsW7MI6Kh8@3}7`?Swza6 zqV>YG3gp!xY1SAHSWULQ*14NdiT~6;z?x}|4&P|v=Vm!%c55-P>^ug}--t(*M9ov| zRw@h=4j1m|hJVGOrAB}GybMdf>o*8kR*F^tz1}pl9J6AmDpEUVK>eL>2ALR}Y?da^jt9DEc~w*?&~dlB)EfWxAfe!Io>#RWkq@ zXbaa2Koug!)7fdLl-oX+(BTLtV3|J{?2zjd?i;$qnAiZ~nXZC%IrqoKb3oL@2y(`a zSFfeFcFIF#iYXWfW{&>D=UuvX6kGd7t z+NC{Tb>5+hM&S*!;|5(b4Y96~wR7=&X*ayW1T}LvIz=Z4eRR2scr*Bu@?uM~bh8sq zv-wk+TfuQ7B2r@3jB8E12nuSF%p1s_e+VZJ&o~ zMltZtmrMEue!16qJ6_Q{(s``Bse_j7ECGf(t&#+MX^vM{I({(9AIHfa#0@Mo4*j*Oi#y8dt3u)p#Y`^|BB0!6`6Es`@P~%=fdSMLCdpUV1 zuCE&QOR9-KxqQp^a8mECS485C8|%<3(MLGgSbl3~Mbld$&s1Pn+`rA=`#Iq}oOemI z^|qtw{`FF$^X%$@TVSo+F4;88PPY?*? zp3t!`Ww8j5Va#H^xLsiwCHrO(PUS$O$?MuK$v5H|^ z2rJp^WBVesYA|jRY0_93g5g}PldYS*^U2KhY^nqFfR_uB>H=h7fc_7t9`v0eUT`=e zd;JrRMA1dpE!la8dcDA-N{$Ts-qoeTn4}bFcqo%VK$ z09ibMe=V>l+o(O^n$3LZWs{gzLMguU-}PezrNEg4Ny$CT=SgTt=eFCAkyd5exY`dP zq)3;qHUUl#2$SEeXId9Ah?pruC+Vzd=I5#Ve*XNqrVSz_Fvyj`2nqoY7vh%Y&i-20 zsPX%+2}D7bvGZPcE3vHGR~~5(rqZ|Z3$2vCwsRSIL?@SsapJby(4soyvW5A=he&HS zYRO1H;bb_ai?98}@Jx6(r-UTL)7UK_r$aJ7HRIV>lWL~eTdy$ky{s9Lo?d65ssNb;GL zoC7qSr;wdKjmRcBYhfV^sb^!31<{*Nq@=8RFyS8tl4o4zM^7Q+qpYfsROgpHNO_~`G`Z-N6Mj} zgAG)_oJPN#E@m~hr0@6+lI(E%c6rHm>MdhC;sDid^)@p8K$ZU^vbhL~d7$?MJ6v?2 z?6Uf6)cQlubQT0lF)$u)ujOL;OCL?1Fq7?2;h!mOWy&v%FMc3iBXioQ%}lf(trz$N z$P545^wgO<7)(O&6+|yHWzCIP=q@)S2c(A8jFV~R zwaFM|eqnfvWWQss9gz$Jxb?>Ep)D-OpW>%H@v9NEs-5-BT7js9m2^;fNu}6e6#U~2J$#-CJ zl_PDz9h`JGSvHxIUYl-7CMFgmH#OEhLc+I@LrE3z(V3g_dN83pf{v_YKW*Ib!k?V54iATOO=*CLnj1s)yrKivI)xP zs{`%8qUX!tCv`!uGl)5W6aZue5HSZ`Fk0o?bIX?~=d>BIodwcAN2l7iYWp5x^Z2UC zVDS44Ow@4FxH^n6B_v3)w;Iwn4!Z0u%z9M3(G(F~Y@io@UMnu&q$Gd);fwk6@&;ex8^X022Yg$J;^4 zCr#4#w6wI!Y-J0DXE!$n0P-@&yrm`Ubk?6Da+KxO#qVYF=Hl7#?KpBKC!LaAgQq9) ztfA#qF1mq|Bs6#J^Ug(2@XmEh6_Si{vSB%4dwC|Zfrw;u1NdeHBcUa~ZP5Ez<6Hii zE$PgL&X;qL?L>p+N9)O@y;T*N>RD)Ueg2q%X3T}f4`dI3E5ktY<*i${fI}CK0Cw)5 zM*Vi;`9a zi_hysY8qdXL$%jDkf}p`a`A9fY?Lal32`?Vtjl`NJcTFhHI!zvDx3xy389k)2;sNL zb5X*1YVh@5OUz>GVi0x8XmEY@kP&e_44gF&!*=WRpLkEzoB}bE1DP(ssk?wvd#7=9 z5Wox9v+xf~x!x}th(V*{|pD3|7d6?Z~I{ihFS zmrGM;W%}Hd4H4^7r>Ts3%vVXz_|G;*QAUQC5EFy&F1^1*=;1;NRnFBLrxA0BwOqj)A({Pzj@ z|2PY=F}=)R^~YI*k-j(xUuY;~qW++2VbiN`fyN^CBq zR;fJd?|UU!WBiq&S>plHx8Ni8&40wIqdskpmHmb4`58%kd>CRC5QhtHYkJc8v*DSx za*MJpFD+Ev3P*5dC4PpB(0`yzlKFmP#<|J~Rq`X^Ej ze!499rnb)IYa_76wQT2_2$_FS%**QkyA>TEn&${dVUbLrwUI2-<3RqaD*z+Y!Oww` zFddr3e?51vM2I&M!DbX^hyx@fB+Pi{=&XlmRoLv9_Q{%;ie-&A8Oec^q!*Bt3;NPO z%7_q3B5q!{{kQnhaO_j+w=VzR4PZ0(|NcV^dRcJgINUn^ToKxd{ULYbB?|vVHTCto zR2rtR!4^x))n}8kEY`s!P&Y_BFx~zl$HtaoV4vi?ctISk>8kTFJsz8~P%HVUM~D zq*>uc@v=&Be`du-1Nr;Mq#8|3AMsc}h3E(GdE5L!V&hp;sD9J6oCz(erA>{KyIEXb zUOr6=g=wYkngAmkr@g<}8JWxB^D`Pgol!CT9+Q~2Hlqawzr(%g7^F)^8?cspCHyzq zk0XJ$izLBZjs`aV4vgaxnGcc8jJ~MWba-2>8@BDG{^o=2E8qCf)PkxTmm`_n&3yx% z6OBmF$+c{*tadXqr|M`Bi!ex$>_8Sgf#@;-nlUOh!y~yI4kkY12G?%b6^E|2`^noi z%QIZ{t4`Q9UYwn2%mF8Xg9tUg4X|njlEILf108^X_;xh`FaDDJXcu5mm=itDr=NWp z?EHOiZ|?%gh4Q;4B_$CF1vFBqRlE#Nsb3g|S>Cu8!FJ~!|B-8Z)-RMJkZ>0h$bNsN zjQv|-aZ^FlH9xc?IjufRI}3?{CH#z*XfIjkZ*-}apr}R-8~cK^H4S&(C>?VI|Arjc^PU- zk8y&M`RvY@5JNBBc60O-sZvXxxVJ>-qp&NKHT|jdnEqW|GqECFoOq4i!9L@Vkw42x zte|l2kL_`##zgb}GIqN+mqh^fsbyFP@zc-=9Qvy9Y)soMO8od)%c1*n&9$XjZMc;= zbN-7o{O-<3d_RR(Wzl4pkpWdrv*zfXDlKBbUQ#;%nj|UV0(+sZ(_*WuFO_kmcD_8d>IzP?XuLJ2<7;MCJV9pWeuEn6zxuMi z0g6(_VTO(D{I#loP9F5TC=tvV zDTJIGw|aRM<4b4VF6nrtA_0Vf-m?vaZS@{lTQkY)oJ|m<+ehn?h#qr})PgCE`0`Il(qvYm zB&FyQvbng6NcAX26ccgPdd2Rg@9py1lP&hg{UHZAmcw5pTjVc399>SWBGvHYzc$10 zA~3?$a*K)i$`-75vgSz5v9s1I%@y?X11L`GT`=|9@+rcbwFsa73(%kABX+&?0^m30 z43PY!KgxLy1N{TT!T~)B#G$F$)%pqtX*sqQ4}RH3Hl2F*hk`toRtLHAf?~`wH49Fe zA9wQ}TIilM1uSB_&V~rK3ILM2*~s+#ebB?r)K4}0Wjo(1!?WqMecN*bH3tCsG1X2u zcZ@A6%rK;33SSNWdTu8nUou521{(1^AL?8?t^SCdF^7jj;7~L#)=t90H}Lu6%}6;p z!o;qZ(oMKb6uFxC`044X%2dn$u4UO}qEOhQl~fuLqn;I7D0&t)_od{*(01QmZ?D$- zPEt(ls;jf}`SDag?K3A!RYnMA=CAo_{!0>gv&O=nP6(DHwJORU7rSsu?VLR{wo zLgSa-B@ISL&~jF{cU&m)^5tTFs*=BXed%_fRFlgFX2-Prr*@5tq{$H+tX+o1DdO?E zvPAKNR8v7jvR`Y`LMZ}Z1YVSoNKaqJehCJqGcPh2ri%b2oENn1u!QgAtB22jixQQ5 zv348qZJosF^Z=`CDukgkcj2N(uDm1aa{k6c?@D^CKt0%Xum7O-;sb5sWW$ChYG2oj zmT~s`WOL;=`~E%8^JjY0U<1jJ0N|_wGzp@=F8}~@H&@n6JLvgoB~b-7@1dN=?a!^3 zZlz0m<8D>Ppk{9TJ4sMhQ0v1}V->P9MqWd9F(orqMZeKI3JiiT3Q3_yV`YS&$ZsS| zPE4Yt;*FiX|TUe7;Hiy{rtOISOU{yW0uy%e?hi$?x6@IFFlP zl^)|B7XD@9c4TSP9221L|STv*RLNXnKiR#o`0K?LbYokp93w`bk&L^J8D zaE9_~t}+ zr=NaOn(p&x!T?pp4+iW55>pPY4R=Y=jGCc#AVj^HimnZASuV4NNmltXVmFuMF25@k z@ss9okv*Yczu71=H&Wfajah%Xye~@h1KQ+(%we{HFFT}Wc7X9pw)xtax;8TTEI^9s zKVBgc8l5E^9)Wk~A&c`)hT17kq#-i=W&-ga=dvBE6@|z@0cS3yNKX*B87%}Y-O@)v z4aMgo);l~k)xJHT)#Q4=(Wq@3J4CRKzYUSh;9^jjH2$h7x0tlDIpK+HeY!-A5wX{7 z^9@T)lT|BxZ{m>z+KT%ijziUE)0d5b?nqg9-0l1)^*4@rjw6vRV}>G?*2qe}k4mjK zwMF6^av8VP!=4Km>u<-J?_u%`!cl;#rMC#6jR8e~cqo_4^Zu-s)(h@1QIJ3(-3yHg zx4b8%$y_?{4=Hg3b|q;7L2vakCF>^70*q&?4(MP2(wl1pG(T7<&)zCt#z`8mnbAdH4fk`R11piX$^z~>|u;5$d zPsm2>I^QjI_Vn#S(2(E@#N!%EF3P{R8P7n;up)xbi@}15&w2o1(o*PC52^s-FC@tS3%Ml?Aj3XP!o-~x8R7ZAuHE4D| zjY~j$rZz=S96^oF=w@|gIv4Gs=AEIP9btqVr)%UA_Tsw+3Q(Q?thKh1C28eu>E^V$D! zz&4CPOlT=saJyF=$bW6Uncw<}6&pKYlN7;WYVNy$BRCQ_r0wliLx_y4-scnB%OPdi zZR(KKFQ7gQ0(mXSjcAu|~-=8nTjGc^rmR`FR{`GHa4zJFFIWNK|~ZDGxFTsD60- zBrvLjqj}%RCf1?oz3KRjIztt&6qGfuDUKy9xub0bR5-x0I8I9K1C7=|hiXO6CXfhQ zy5!f=REBxC8EgA8VqF|~QO0G_<-S{nB5N4>Rgh}&OZ4ohe8M!luis6fh~BQe$H(gx zFX}lnhcM3$|Dx?5c+99jM%}R{(`(}D>*4@ z>m4r+tn+bMY2=WX2zO~xVAnN0){n2%sr9y!=cm&wta=f<92Nx(pF4mqTA*LIy`n}G zl)@+0KS%%fjhkO`+0bC%^$((b?7FS48~Y~62kE+^5Yswq1kn60_2T(2VCmam+x_bj z!r-{SZz%pas%|7IQvaDhVtaB7!jN%X(I&Z2C}WPN877Z>f~x)M7xWadkAzxxmM|)ec%Q3;siEhg=)^MHw#w;;0-~YA6%{r_u&;6fh_%2Y`URmG+tGB?k z=%vJz5bk;EoTDzq2UaRSf|u;#VuhD2Ye7F5G7S)pzAmqueLNPFXy(B|pS;L4`zSAl z2uP@MA_V~d@cZoIBhKM>d3c?rCds{hwM)kCS~@Hma9SgqOOZ_}=KvwrVA+;KS{?0* zIhr(jD~n{7miyA%H{26WSwc*!29oioYr!Aj;$Ua=lPH)d>m90Y_0$t+5S)=vLh|9K z!|n=?peE@`1kn4Aphv&veZZ^#{lh_XQ=gzM&3sX|Pd=lS)ouXw26XzX;Gmv!m>}wn zw|EaaZfE)$%aoMn|7bc3wbSw=^FD0cQ zAe~G6NC9c-t~=cO+`nL+ot=5-eb4ut&rwV^O)L=K@VumTkh?g}=Bpmc^jbx!HvPhZ zw_x|E6iZ&78O&o5$44x+N=AG}ID#E)t67=s4LFkOO>6w&NJ$3N6zDe}EPMhf%BL{h zaPLXu0fZ$E!uWmzy|Ji&D%vpN8n7EZDJfV%$F|PHyJ0Ndm%0=EZCD3PX4I#a0z1DI zJyt-I#26)>_w58Q63k0hTOz3k47WjLlqv$L95w$eL2WFT^51?WdCk15=sfc^*wecI zzHhZx1%ZS;F>O1(+H9c1kpB&6`ZB1nT*^u-o4mio>I9@auhGJo1t5xWj=7+NMO^;N z+JBh`^y@!cB$`c9l)4h;%#mw``e?_$r?|cD!5g_ARMH8%-}g8ab*RQ5deidz>u(OF zklXFe<|t-lkJY*H*(ld}`l%h>vCC#BiR^!z>Iyxo%pqb~ADb-Oc}zn-3e0g)oX`_w zIpy4eIhp43m<|y3w=r1!kwCV~x6}Kqz9?t3p?htCpPkQhm3d3zs!K#m?jSB(upX1< zW^O{&M~rq5_K*DIF&NUz6HFRf`-D+#u;{QF`{}Iv1@r`~7sUg*b-X*X8ahc8sGa4S4E6C8|Nb zqjmiJ)eMJOHEQJDlVz1u@6YFBmNT368WLIM3nhk+o-k9Par^4=-){lQaKX?mexZI? zY7^AkvcDxSM&k1ugrCR!&AnGGWGIZ=9<_b-;NZaC0R1&+T)+?z((tEhZF83!bZ#POLaK#5mQF?uUDC^+8EA(5^~8pG<-T^-==Ur?_Fr#n$LdMOZl+{WSCn4z zGC3Hp|7jn@>tnO$Iiba{J+8+qnPOd452<|4^07<47f7Sgp!66XPcZFD?;7ze zQRx=xm8~!n5V)agUTeZI6P-uuT^DV?XkJjTFCXu$aAsIChZtptBKUn)u>}uPj|wc> zt}t6$%Qr#o(R|2r_pTp+#MlSt>@+p_S4>?oR;DV#IA*Il%i_o(n4r#Hqm#9XXX*b& z`fVg5wVHk4cA$}#IkY=YKlEtOa~=^R1~MJ_FvZ@fKyUDqu3cj28M!oN*Vj#ZTr;YB z{|IBtO0?WiLoG{o9y|1WZdvJbmV~fLFCJatw^v!N9x8PVXg6GZ*#{fv=jWH+t12}6aJFEbPskmvWz;`svzcuPo%L}mg+}(N zYju>Zw?sXRXQ}4ld7>}4=yy7poXq+Q2xOskdpl$CLOeGY#GJL4Qt$yw#2$;E=LR37 zW~Fcv5-+OfHy&dP+3ey*JEkzI8_egkOiV4l`gV>(v*T=zqJVAF_ui+qbktURxe?dQ zmc44)s^%4gYTQI0v$Wkb&MKHLEXW{?uZp0Wr^)z@23!20VxP>56=&56&3>-gYMLwuv^e(@jp5jjSX#I6y-05ZeY+mP5z2Ws#p%dR#`C{~R7DxO z!S%G}&?vIsb~|S;hU^qun?CU>9XQLsCt+h+_mpDWna9ANoxGmCGy|+G(bLXtOnv4% zsaDF2;I}WV;Y>P6=hqH(g*&3)l2spt!tQ6UQIJtXpy&zAt)vx!pdl2w5PQrbf8IXW zdaKyS+ih2Ifo$7hsJ_;)!ZZ5i)ne)l+lsW$2B<<6;l0VCXzPA_yV(G*<`3Ryxm*=+ z;Mi3Ik!h%ydgU0JX-h2s?%9wCpP~6Tk<2m*#@Wq|qj5o>yUGTV`FV(#ERw`P@=j(5 zr~NtJfC3x1cvfKNoyd&FHJqt0uY*BX>H^yk${6?Du<{tN>91&qP*DCsWLU>ZF=xmX zsB=X&mS8v6#v&=JhS}{z*oSb~ZFijXpab>T($pk!qg9*e+#KhZDx!n-yM{|%8B+*d zOxn*T>>(5dSEh<)smq)Z!i_=;ZEWhYy|Je4)3X*g-lp)zFO52oQFx5X9Q{IzD|+JU-oP|)Km-0}!wdB|pR)$rGs^o8rGkoD9C zqTWgaA2XN;#C5<$9D{2ix?8*wED$#5pU{nayHa`Z%?*3;(>U%2m_iN|oT#SjGHz2; z?LaVhbViNPvgDxj?YmwcaEKy}Vtso_8)9?CL+lW>Mg+&-j<>htoBBeLqZVW3$^aG; z?HtvGaYzL?fnLE=*iK!S1?LreCa@XXt=`%G-OzvU?7)b5sqKULtQZC@Y>@b*Foeja zO=EQT-X$U)SQ215Oa#Ec^o>rA)`u(UX zOwn#uqLk0w_%5L1oeme5VPyWTpu2!ckyYMH-9{kcftc;cJs&P{svBb7kciQOw5CG^ zJ0dM}$iQM$ZNBxJKlJpMd3?J%(j8_l5(DXAl@twiOXX~i7Iq^(!z=ZHr;2!du3 z`l#@@D7+EDZ;I>uQn&aA6ro1)*Q=S8LowCHas1fF7&xp&-PkPn!7_t}49lnL!^K-O z*c(Kku9c#X8ndJmYL$zW9Z)vy75UaA{hD))B^B&I<>h}kpB5prP95p9i{|2_NWe24 z=L4)Ohc22`EIAzoFGUa0V@wr8+XsHs&wc4^mJf(7tTyT%(%UFe!@Id{$C_q@%{KFe zK#y0R1)!HZDbnn6Fpg?cgSyNYvcmVGacGT&W zNHrZi5U0rVozTq@8FBGdKk;EmB&dNG{BPR-&;uoZMAEXYywN}nBrXI{D%q6i_i^6}Fy+bv=8`|tW zkw4_9SWXVa+h-+&I}qQCW0FS-VAH&Q&dn14RFsxbm*=e|*)(RtQne~slCFOkviJ(75B~&cmFfiQlvxrTysfN2E29&(}EV zk6G7^A%%r{e(QE0w)YA%J@)(*HHXJ>CX?^wu~;}+IcJfEY;@X&EXr=V+04WNubf^6d`7W8K?Hjz~=60vl6e9SDkq`Rr z5Oh~v2>i-uvJv$56`QrAKWUYn+mY#(N8{DduHzB|sf9E%YE<^HhBKOsQR0vJOtBo{ zyE3vRrC@}Eu=_G>VmlF=kvcr-I`=ct@E3iKLvG@9RUDn187-SN&llfA+wFw($hx&Z zM#_mDTD^qS$TU7@7MzA{zTno8vcNWUJ*241G#a!;BG@a(Qwnd{IfY+uLys#}N39#U z&K*r`pyh{Ebq0(wuHP#+(IxXEcG7rotu8iVt`@|;c&0w9+_U7QohN@q!{5=&>$5no`GRJY!x~O1(4gLT8mV&N%Lu>b+bqO4^cWubb@RJ116!%YO zsVvD%X55w~zQcVlPkSUt-(w{Ys-hdnj*KhmEWIKvMzd$+VOw>2Hpbzj9aLB|&)@kx zopLw(>a4%bNZb>XhLZZh!AVNsZu^5V%YPxd5j4A14fy&);zv95#r0zQyy-&>gt8vC zi2?b`<1{VvZ<7TjKs*O18;5>3r%z8v&)#T)9%EMpR$tRi?nhHU!9YwMvK zL%?kap_wKfY%D@tQTvP;kU9#8d;KM&dn?o_y@yqv?6oyAXLg&zD!n z*{>hEYw>E(OKt0|USw#vvV)3GFRyNhQEHC?as)Mo>-6VirMWnjsJA%sEKsAOMx(cc z;0b##RInI16;I$H8R8mzrO(Y8O49Nkp9=xK6z4_Fl zcE`YydZiQ2_=|XbSbFwX`<4G7g`bpqfR;E3q)oPZ{Q;VabDhc)BbO9-`< z>6N1}>&_NHzymD7Rsd-Zkd}eGDUiAcrnkshK*aP?lSqH8O8u#9UVpwlyd%?V?z7~i zIhS``%N$)GOJ>2xU2L_6Dlw)JiYO=z7Wy>Knd1A>(t*DC?<0KsTna0@`O(NHQKT?GSqHDDqKnB9d3-}J(W zt~NJc4ij`#_d&59qBMjByyH;|3AUKd>0k3eKGo=K?ra;i3NoY6{ag52@4UvHaXu^J zv*!i;Tuq+`Q$4H7#W=(XGxbA;G>zDIXMpboTw4k?%%8IuNCo;|H&b_!cOIjSpoWpK z@cfYn$IzIBMxg=_Fx^bF2*&h6&xjj%ikB4sluDG8&@;1%$N`)VQTdRR+CiHe;)#n2>*9Mr=gx>Xpy<0HuVxY{GULe1-BBF_;d| zLrl9#R|wB|;G1$DX&&z7+&FH)Cd%|9&h3%Lfm9NdFV|fK-%=&Jr(6vC+k#j_8ysv8Y=*9uU(4?x zIlng3BWLGe6qLh_9|TbW7t<5K6ToUd@jqWTed{Lq;%<5!ao)fDACr~ti>f42x;TIe zST(!H<&4HVcOCFbU0t2LWg}YX3cZO0fP9G`k+h_wNpuNwMvz-NU+_M58NUK@g6EVl+R&Yc--Na8!Y6j2X7F~I zTNg4-OII4MKMn+V(LN;bH6D0avGy^cNqbdCA%6cMjDZo$t z1PEgXt>?|>gJl_bje`>3Gz!s3tzTx>>3V7Q%nl6GWbeTD6va{1ITpaTPvIo9 z*^k;4Xh(4}nWQ`NDBU}a_lq=HLBON!&kIrxS$~vVoXm9JqYCDd7$`&{Bc|d@@=3Sy zGjGF+pTsG^q6pwZJ(Pn;;DUmetH?x0Tgt$(9y0FIEa4!cV9lRIxnU1df;@25+X>GV z?rsYChUG4*Mk&sFzk0XaW5t9idnk1q+iRD?c&K#YRK-lIuqSckr$6jRrKQq8A8S5z znRYx34Jls(J|bP^kjyP3a{R;INA_1YJi)Wi^x|nz9~m}B_fKojcBWBu(x|kIPHxyV zm>?V0>5`&z4c3@EMUuU?vB2Arra`NrG?km=ekkPN}VY{VV-VSruY`%-oKEz9AUXTg$|#P_tKlU#O2?ayZsCYJX73xc2Leea}` z7mj!c&!E4@sn%&Ec*MV7&`T40X}CuV!4gt)o>PgJIY%`g(U&w0_<2pmk;q+_fh2JX%9OdfgbPN-b_)0tQ&Xa|&2Zg&8mk6G;KNxh)uUUu(|t>IS|P z3pZ}Fx}(zI;~Fhb`AVs8E|fQGJRj(ICu#Z1zEI0zcJDXHdfxm67+V576f!@#pqLsk z;kXq&KzJZYt7Uyy=xu}t~H1~js$!O<+bVrLZ_0Yhi7`&2KFT8p#AndL*7ccfe$fjM3zXwEIqvNN4#B+}6v?G_lmj z<8?)X$BZL1_*>_9bvNUYj<~!Vm!8}0E6uDVTo^(_$Wt{_U6sBrVud#nwLk>!rF4e~ zdC1y0gTp|$!19rbRMT`i{P(*<{?1{$N0J`9$W_5y0(^4HXsw?rzgrh-{N%^31dD&} zWB8eOdAT2#yYA?a#wpI&4bk#Yr9p$=yyf2UySXx1a776&PR&0xtv{$3;C zJud_~jG~d2pG_;`{tD;xYRROw>anC-rlyiB@^L&UruZfLx@==i+T2JM9vN>KY3IGV zpXB*HRtXHat%~33y^ekxM1T=VDbp+Eb!5ZQH5D+nK}4vO0wtWmh=1H6=Tf~h2-h!d{am9<9+>%{G?W-z*`GqUW370(J;frvybo0Z=n8d zrgF^&7G_K2!%>)y>Ng^>kbIqM{>qQeE3YC7b9rvk^YUbZsiGPBDkHt&WarEKU$iF; z$1ctPLAJ0K#>BfgpR?p4LaGX)f-UcoKaY+Z217L!^796Z);|c}ZMqu4aDV{IfAHb;8bsL0s-0dkc^wn` z@MZc{5mPX58^m0`rcVUEsJiRc-HAILxMyzv{FHZUHbJf~`x@81i9c7X`o25!>AE+G zk!k9DIaB&2>H5d0Jhd2Qes_DFe?Qk%egpkXPCvShU5k#nJScYmo9>|Aa$HlrKVdOq zR_BI?2E_o@|M~)RL2<0lH@0>wiD)G9*mc77^Cgz+m$pu788wbH?#N?BuT`c#hA+B$ z&Bi*1iE%*#2m>@NG1TtgMC7(*tPYkx`T~G)EacNdsyWMYD(+=Iv&cau@Lpu zM8^-F{{_Am@!2nvNpNb{8qg>OESX^^f0*t9Q2qND(#}1wp52k$isGRvUd5e@BBOZ4-t@Ic1Q~cp z*QrZ5WXASe(+tMhhuTW~i4v_=a(!d)R+NFgOR{7b^%`QCXk<5}H&7E{c$Y^)?^9TK+95-mKm~f*ObY@x+tj~=g7_`OZEaNuwT55l$W@+}8GxY*1 z7riZykh3b2lO029AqPLT!kv>Zgq9AkHnv1B2W6nWpNbx5ab2V!WlCu#ub!uL9p-3h zcDk69Zq+hp*7)g(1SAxZ-FDyF$;dZS8NJj|7JT#i#ql9vIjH${zeS6Dyt{5lzf@#t z?|ASex{8@ZrJo!e)x`Q~F9+)HW-I=stx@;P;Q*%erm|`)^k)Er?F@=UZpLU z{wD$0`1!(BZ4F0A>H5F-#Qx}bHO_mX5fs$J>))@KAo(eu0~e=B>+S>~7|T5~0SWO# zS>*#nv-T49UxqcS?Y?;L?)df?(mp(~QkR^$I{(D`o^DSe8xRZe=S4BHe7S0Hhaal% zb}6TEeEOUaNWX7#)`c~{PNT@G;5t}cc%!&ADVqVX)X6<`jETKLlt$v6fj!0RyyprW z!LlFL0ebo+ANj}@XNVf}V3bPJPsf_}(&g;WD;j?YcDqXF=2v6Vc0{0SSB}zZbwEoJPAGE;NXD>#~Dv z`1d1|jnbU=E(pRSd(-3KBp)t$gO>m+?r;%Dt0Z&$a;H}grDK-i@hoc1_I$%3EiO$m5GoT+~N{P7^jlUa{rZww~+L{VD%#5hZP%ksh3;;gsd}3j{0; z=Nh|t?kXw_5cLY+Ud+WARL(Y44>^=Y|f1<@w3^IK&H2Sfvz8na7OcCP7^1lW5)cW`iL{`|NJ&uK0Y+*%!2QwWLRr z#(vxbK^H7GCJ`CkQz44%vOvd zwR+=5bkM7WG!G+x*4t4q%3;2wDwOK2Jee({taSiar3F9sx*Iz*^$YZAFx2iMB0_`7ZW zixn+qbPtEE!t0Xaa>bqjq2?v*6DwYlkV98)s&9EWpL@T3*{%~wpy`05UFcbLtM?xx zNC=stzayAr2yy7n1I~rKvrXL#dgncv$=hzCo-6!XkAQug0P5s|fD{v&iUe4hngRng z8?=*;wo)C!JyJc&ow@?^Lr#JP_9aCWp-=!xCjVY50M#&F8L)KZ7V!nKPRV9gA%b`! zGS1C&9Q z2Cde6se|EQLw)EtmPfMhF>1eZDnaI@9!rXuV`QoxY_NK&VD(+i!Lm5S>$ zDW`q)g!9L0XEhx0DoQ}5AlxQ_HPw67V)S%k%X8?a4T@YciP$0;T1LH_ND|BC=#%7b z1`+B!=0!pCFWT89wcv41Sx;UH<a!N4tOQ|Dd$CoK)V0GiithDm zRLS+SH|jaqrGnWB^-rvs$(`^;q}fkLD%*GJ-#Lr@Hlnsu86cT45D~cf3yBBF^Xh z_=OfUwRNjuE>`EDG;(xj|RHIG63QokutfiUR8Q-fdG3J6c18N-4DLMLv%(SXI z-WpqqL$i|U0>`FryW^B5+0AK3p{m~2Goab!DUQ7xPn9y~C}Pd>tft(Xtx0VZxll3N zOl?}#WE(rP!?Z}nC``KCe1uhc_wFgWwZQQAa-Uh{aI2kb`G(3kmonduSZ}m`)>;)B2=s;Bw$l~s4yXuSfrfC zhgUHE%~>Uq){;)3Xa*>(d1_Bl1F6ybc3mhMl(VKF+k4m>TzE<=XF*{$**#x}rz$XF z*L?y~AsDr?MbKjp=Up6POSV~8shskZ;jn~vi+lVzh)Oe?w!#*8Em%c z9;2ZXO%3~4%n!#6#W>;oB%8-yo%Qmhicsy&dA9Ax_F5x4BSeVCB=IHnanl(Y0Y<_X%iA#V=UyFw1_Pd-LLto~amI7T(+>`$QG5<#&*R3)vIL z7^v*zwqumyavySL-q?EKC~#o^V;G|xOCyiwR>&77ez^`}R()f_LMcYb#L8hv7moD6 zywCO$(BX+aEOz+9t2dDMTU)Be=C=<2e|Rdd6a=rm_~iIet(b+=2bkPOiTZ`IMs`>6 zr$6%B5XW``GzB@OcGj=lK7YR~&I^U$2xd%id7#?-5-^H>s=`Py#B_tZ1*W!{ z(D-`Tp0y5LRInv1EoRk2I&YR_<4N(mzd`uvDmWAr!b;)kmyc8xgHVwWgt$@1Jv=vv z3nOYUW!Yaop-#ASh%?K*AxYmvV^k8k?js4^@mxT|5GVNiET6i>d#ve-j-I0XHWx-z zhQ>0v_O6@dVf*2<#7y5^!y9bvJb0=GfoNMyl?%5YwevyOn*Qb+61>zOEPGs*6uT!m z0R}gm`8Xec1M(Z(Pt&&i|lL<*_7*B#7Qd_{3tC{8@W1&%nPDbHNXb$aX* z@oHcb^U-`wAU2CN>Rm>2Ha$PuQeA>xef(pK@)Y2NU zrkyf>pdgOF5`gZeNJLf(Z=?|9bYw={o4Pd1S4^0b14?hHQq`G-Q*YGYRXbbz^PE%v z9ToJAn=9j*+5anbn%I+*Tb5}gJw{F~q49PMaKV^XcHf<0>igM! zLs&!-^2NODCUvwc>WT!KGIhJ&wf42Ol+=z+1u1Qt_R%QW)Cr4TV69pABzC(KX}~EW zLV=t+ycB+`arX5`w_X~f{jF6pfz!DZE#W3$DJBQWrT(0WQDNIqe2wPNE2gi_J&IQP zB7j=1cxpJVpIs<%a)9Dvt{eLNjx6;OKc4y*BLupAbi0Atsr|H`#kX<=RH|3KGBnb%O@N8{MvCD6%`eNM)HiPq&$M02Q4^5to|K|j4}1^j zeu2Nn?KN{`aF1g7(#i_W-45WRqlw=nvb>0sQ|{OmsYY_mdj2j-Yq>UE5S1FycZP(0 zrF(O+0OR;?_s$?<1kD^Song8l6z;j^BwK7FP|!~eCP+E}epkog>7TcSyPgsm=gWGk z5(2EcNo%=|YG^>^jnsXb&!j-eCG|{FxnPyPnYdH2mW|q?%Gn0|2Qi||2sz}=?N~%Y zSd^csMm$-O@}LUc7nydmjzl&_4EY(vVyLYE_WIW#7pR{DcYU#YArQ2F41T;_;i|)w zivt)F%jIK4VK5NuXZ&P4dz6&2dtg%n6i^JVJY0xQoi_IcExA8y%7zY_toaGw&Dvms zW_tW08c+QksQA$Z`|dTFS&{|n{?27nZ%Z9#?rvBS?W21GS$sb>4-xn=r!z@kx6j+@ zevyN3jA6G~0W)O|-+P$9 zm7#8HYR@a zawLm6gEid%8AHFqpI2+xsV#1;#)DH+DMp>EL5JM1VYE+G7(i4SsHmEtl@9fvsm+4n zc*TGfB=#I!T|QR}zSiT)J6}-iD6@PQR7vVuC;(Nfb2@(&KxVLD-|`!EnHZxEiQZ0r zcuW1+h(Ja%P7XzR2?lSa2w*T%R4Bg7MbmJX^QPtu3mhy%D~QkkI_h1$T$7LL39JNDO@ zvm;lk)js;6REEl+Uq|(9T(x{oN_WjVl{ME`BBmQ7!zK!qWW?(~IPJ4@Qdq@P>E{xu zN?B>ifX?JqD4+0dwwo8;ZO`yEH=W|;`%%w;pGJyPT3X@VNV^HzDrXkT31{i z`vAU5dYNljj&4z|TOKtO!fE!Ar|sN)B9`Y*@00Ee3+ zVXPS-GiRqNO85q-3A)-bT1OK)nhd<4#{@k5HkYP)$%CXD8evmw43PJ0WyB=BdkUOv zE2w8ahyG=c#1)OrdKEL~=lhSi zLdJ?*=LtUi#1|f1&Sp54a;tUeT#A^bx@a@iy~4HbyoYRJICMrUgR>nyKP#twSIx-i zJbl=Af3aZY6EP5dL_p4&LjiQW=&PbEFJlVz;w9&1sU2qJspYTpO_&Z%BEm!bMyJ?P zYf6hitnR~*_jkBhq;s4~#?aK;jYixM20^yt^CzTf7F5y1kPQ*JWm)=S&9B8nJDMN& zbA@ATq>fFf2 zHhmX=?iuli!f@u;bfIakp)G*VjhBeRMIF!PHeERIF(bX$@ooWAL(w#$@(xO2Mh)##lj^ssbysx6IWRvOaXO2OJjC4Jm z*K7jYyr*x^%#kD&LZ!N|(b5}~dweRfeh&=!Oab#*R|U{=AmTM%6;$J)0%1n9*MLYoX+G14d=Qcn*lyxIRAv0;hvGj7xR9 zfAy+|Yp`IEp-h9TCp-3tw!tly^-BeB8|t7lPlQs+vV_MM+3PFlF+wXD8%<+52zr;w zw09I_MNC9V@NX~uLs0oC1|uWDT^a&Z1)#$3ud(us0{v_l9TY#VtP7j3`%88b>7#Y!MaWcjD&$X$}K6dN+(K&pA@48Q&V+E z3rs{Rmx;}|?LOt&FS{N)N)37i#*){J3c6;$*Wim*?j^~<$LW*FM19K5n` zY#_1suNf>fR9N1%o*oFvdr8QC77NsPoB*SiCz#FD3AizK_U$g7n_>LqG){Y|XN*!v z*Rtbc*uDu7ydjSu3t-$!P z(t8WYZvbdz_2d~;sN{H}=A)LfGVc9c)@J#4zqD>ne&tYd2l{2VJ6lXToVzmycSD`PAhaG#*% zc#?L@@OztL0qVfo30Rus+d;vlPkttCSZ;nSU04m|@I#+?-VdEmD>;q}0G>%;)X(`$ zk=8boXK`>~i?l4Iwt%ZO+wxg+6#I#uCneWcAnc?%KD9>(lt$o_)L}n|vdGGV8vfMo z@ZpDxW;{QEeDGfk%KvSA**{zLp+CjxM``!pj}PIS8eZcO&k5Jt8e1b~X=rlPKPk_u z`M+#@a8hkW?A|RT_m{J=qWW?uoGo^Y>a(Koo5e{Hh6MwIeIOkHhy;FSA$g&Rz##RJ zVy@f!yD(Leo_!Y2DFTA1IpZ^Ggc6Y-S%SFhpg0o)U2J9aVqGKs89Hy*3fulLdu#nX zncmmaHShxH(35I?1&0_&-0SW5045$_YBbb)7aC;_n3U+BVJ9oRV66$y;MlPj-I<|3 z6FZ{_mh#$v5t+LTRATv)>Czxob^2hLHiTRD`9xNGwNr5dmV0IUHbwYuZ9L zp>^FhzwL`oqbQ}6*9UsXn$5>G9#bp%`MpqFO4r|=ws*l-d_NG(g(wbR)pcFLo^nl} zAfZ~LPAv=9wrkphyWu1ri3*;BkOWJCjA?ez=qF%`zT~VA1ot%&yl1U7dX<3KU%9ae z5DjVJ6=(lcD^*}rRRS3{tEkRxUSZp zA4FC1*pVT^D6cio|29^TY-SD9_S&u65f%C>v30thk|Bq+w??#_VG6Vax1m^kRG6#0 zB4XW>fGb8IYhrKUHsJyRP*$#z7U=(w(%C@}G&kdY4er`oBjm=2D=7^)nKUT^ff zh$&Dtwa?iBz9vwoDbVy)ZJ;QcoCUCXIcjfmx6+7=`dN!Jw+v)gy1$ z-T&6Qmb1YU3Y)hVaUX!L-gC0dRs7n2`%xM1?Ww+tQqAMFhQ2gd6Y63(`UY6GIs4yAFWlEe#8Wloa}9AHrqEo5Tl9a%DlsNo`^8#2@Ps=D zZ8mxML`OoD$_uz%QIuEy}7j0@t)@Gs8>jeM=H74$nhPKLB zO?NGJ0?8hAtpI!gKn(r_SP1>3fTN{8>tD|=@t7th_!o7_jF3N=yzvmYo723fR&Zig z*VTOJMQjbf>h8lsr#qPV-0YFXYn@Y}#4+d1V@B56WH}4p0P|nVxGvrFi_`#S^~H)< zh3mvE9$nX-O3}S;dCD?Tain|rM4)`D$ZR&xpVV_x{AmTJNs{>Igs5uW5Ss*MVAVVb z2Vcd|K4)74*o|GMK>X&$k8vWuzHoTz+;6G!eEmTqA+|ziADzrBp-`#D>02c7Jd>*HFZtYVkAnq?EWlBtLkI8!-T z7CfP_``n{fvr$~$?J3c*V74eeK$qZ{l#3P@$CK#+!ZLGX7g~s6J+);oCjqUKIC67~ zeXP5_$~ay5DQk8%&bR2?JhT1ecsjhCDpfy!1Xx`Wzlu{U{tI!IFjEgWDf|SU#l8yZ z#~ePx=OgNYVfT59rKe2mEJVe0vr z_%4u?5`Ly52qN+oI5FJVTciOg9$lYqQU3vA#!p=lH3S?K79hT$RPi67vMKRu(vvnb z6#`Z^ESzNndj-Xk-nn9obJ1=YI(Y<&Iq+9%mD-|z9`>X@K^`|^>vr$&YM|G1J=R4D z4Wny%n}7BTL7wZ^=y!awXK$*h*61g8R+zC2XY(`_M&*ofYwNUYMKZ7$?Wqg%$&uRt za1xmF0`bTiq2q75o$tSOs7Maa8qpu%hBoq}g-iNm5V#NNYB#5#n`2-n^RUkDT}mUJGZ|9PpU7^?lO|#m@NTX^Ag(v*H4vqrY^56 z++UEni3mg%J>T?1e)bs=9o}j#`C)ysd`anxyy7_qJ5&(TV=5U+vJjWP_@}BKJap9| zz7HbtG7({o`6S)#o9tw5R)-VB96!USn{rfDfE|3sg>Hkh9p7ZO&YJP8(*& zZyR>cX-a)&c{@6`hY};IFUuULrfxLJsp$s*YhP5;%F1O%QQL5{M0wuA;-x(?|05PA zvy$UUAM)D;tZT=Shcx*NC(Z2pm-ZuI*W|e4z1#NwRjG!Cfbk<+CzGb9io zh&q7((oDi0b3aDGF1Qz@s=PCu!e_B=y^gh8wLzo%pE;pi>fxSUc05REmX;IK%^`Dw znw&o80k?^1>pXMlo4_6LnoGQ(s8C8~0aWiN)8OGsS32;Q0FJN<>{#+bqmVuS3uB>} z*bfYUny;k(VjAEZa7ooshEQRYmVLEM3xBPiMN9i>u_!{DrzA^${XR-l6IxGz#xTLC zK`ACerB(>+*0^$oDB{XTdB%ZeQ2HFEei~tyrtkTmdkh`%e+y6h#Mt=5oD(S*{~;^aS?b(qSJ3p(ukXqz zAPoBA8^RD~+g(9%^kaUAd~hssSaG;SA(v$n z(pkOZDRCf<;m~5Mcjyw;;?S5UA$)}FJHuwp&|cQIJ!k)}`Ok&v))W_jK3AXZ6Fb-E zb8t2A4N6X5Nr9W>-U~W7Q$6zR$m;wNaOj<;raAX;-5zvm)w~*hD+I!LLuXA80i=eW zw#i*jeLK6;zDotw7Uq!0{}@d1t^l~adz{{x)rcN##m>0WRt4HXxC#j~UEN64wGaJR z8^)cXW9Pdu`cmn!aSN;vq!zjG<`GRX?a&p^`-Xv*NHeD8awimtLmUsF0@EisBm&z{MKV9bO?ElZ*s2fC1ryO%-i5y-dK9JFt28_g%0B0qoIud4fG zLN6N&-{QY&*ZCubFC9A!JG2?uMyrd|289I2q2!Z*XQG6kt>#&&-!rY2Vk}xJ<~~wg zzd|#FU;bSbaY$`HeyWB6#EFW6upO)b*&#>C^u$XDSztgaT9oCW;BL<@NJzI1(^qb% zR`hs4;vONigix!YNFwvv;>Q+~Tk^#2`Tb02tsuj6Zj7ago0ST7PjO{^e9$rVK*1)~ zcyP@k;wR+A`pkJVg-1Jj99vdYYRs_r6sYx1)9y|WJt_f#FuuQ+d!r*{q_)(UbuyOy zZofF6V%x@?H%bLDW57n~f05q;9y;oX>Y$mVo8jEE%5<-93!I3uCpbO-prLx6G7;qY z&0Nr3rnP?XDkc80BdVcvcwIb_B6)WV*QMjo-{f<~&G!rP+Cm|gd$D_}MT=Hm-H($! zkvRamflPQB-}uBDDmJA|T(;LaGZj!y`Vcjcnp{38mXa6)YA5RR;l2;8T9$dF8#6bX z&O66En+_vgMG=)0<)54%inxU%onF0fa(#99nBBLH{?XwkIUTjJ;$4SU$$58`z%Ty{ z>t#%*WEvmTWUrIT;|8=474mP^fIAyd|1Q;nqBPA4$C6TH!me!8a1O(-R}^YlN~doY zw3qGHl#%pPYuQLMWp7lz03_2!WAEDq782shij9#`TQ66__x?OR@tB46VX@2VFxKVf zoKJa=TH~rI!CWBn#b=oRypbP4t$piB4Zb3Pe8pCN6qMAN3I;DV}F->0C zMD{r(ZYz3mU1gFvObtNuzI@a-iIo#TZyX%X6|_kmA~3)kDV6qD#Jpvc|8;W%98iGc z)lHx=-n0$nzQwxDnyPmU#ntRbYhN0;?%;6D+aPpo+b`c~?KwxErHRd439bs{*@94f z1H0uAtax>OrY~G-UW&Phu``J1ovn#un4YAYoO*x3Vy;|m2lU{n9pt}`DrhhDY^>y4aZKoe<9H%{|r zK9l(=S}$9guHb|EEO~vTgeEsd-))phvlrfhvyc8wy@s@`l?YTStu|?^ltTW`e{YnT ze%C-Uvj%HWe)Mx59rI`ua#WCt>|Oj|kUocONkX>xFQeSi+bmmWsui-x;DD3$qQ|`t zj|+kiz&P|tTd>(<%C>YT61+3mOM-=}EHk8iFZ{u1I!Bc@;<*I*1{QMvPXOdpdLhf_ zQe#j7=An=F^6AE@B~`fPo(?DehjuVqkZ;PxhnZ{OLDSfeu3#_K1p`Aj*s{N4Y4{ z!Vgv1zJ2Bjd#gAhevIGrZ=#E)VAG5h=KdYzV5QXMl30nQY1b;`M={Kt($ZnIP4?Q4 z^#HPE55#6xuH@fDLh#b5n26`qXHkXWKL(8#uAdw-*r!UfahzaO7fKhawG4TQiHV!Q zc3brQ^Kww4V_(mc!xQ5+=;3Z&+s!JbMt{tC?PZ3mB$xg_rge$j7%KneTdQ2v7dh5U z6Q*s?&k>5`DV3&P93=JZWzRxZw-IFhehInIP~D$XDW-KqUO$)R)~Z-K$xG{4B@FE% zFCR>V()tJg6J#phqAh$Sb7;|f5wHQg_$cedz#H@hg({hs-; z_*3YUg*@kswbl*&a|M9owN#|nX$w%n+6vy~IJ3^3%`IIj?oN2+_y^Wn@VntaP}lFe z&0k-M(GzHl=SYO1eK&6z=AcxyG>A|ipMz7QxcyRMoIiRFg|7aJx^_ft9$#yL@azb0 RBF+E+002ovPDHLkV1nj@91s8i literal 0 HcmV?d00001 diff --git a/Templates/Empty/game/core/scripts/client/postFx/textures/caustics_2.png b/Templates/Empty/game/core/scripts/client/postFx/textures/caustics_2.png new file mode 100644 index 0000000000000000000000000000000000000000..99097fa0ed112c28958363f2951478a0955218ec GIT binary patch literal 33963 zcmXt91yGw^(+y53?yfEF?$Dy8g%+3M!L7Kv7cIrzrC6ZAi$fsA-5r9v75D$?H}i+d z1Tq8M+}(Tk>^Wz@e^F7u!XU>0fk0Rv6lK*wAOzrB1Q0qZ@S^WrW&ymQntoJ}1-<{B*J+^mJH=Z0)c2jA7tNYcrK2# zpW1?TQ{H+T>If3!6Vtt)H{*UsobAdZM{S;@binkkX7PQ?*DS}=_aD3F>&8Z8hY`-k&jPI zObj`_d$F{%guQ%LQ3-#^&B?(Y>lr)yw*7GD>wi|~ak@$+etLJ;oSmKBu)Dh(V!IJ= z=OQ5~`CngO-}U3;vctD;Oa7fS{@1s+^Vbi4KK}mHIUxb(k+Vv3;dAJ7qld2U?t;D? z#L@2V?z1YNKQApT=w_;v!fcP-TdyxKrv)>WmyX@-8Vmde-amVgH zj>@;*-rm0hV7bb3v&VP_wvC^cbEKrCXl6Yna~tyz0nM%&|jn;46ZC%aK@xu zB68PoPQPcytSOgHb}8Ih*$Ny|kH`56l2Jo@_vo^?Fx z?p!plRK~~0A75U&ay!^zx@}%#Hj7E$*B#ZJU0t-tV2=z8d{{cYF(^$W3#_ZF6U-fx zVc^ak1J>f_lz09(Vlg#3I*L6@Wb5JWy_l1eW4Ih(_|=VjLGQ4`G536>)ni{|L*ViH z_^apGt((dCCC`Ak-b{fB9&3V3eXS$I-AhxtFuD$@ovV0<-^2BWo_ni-n1~3OA<`Vq zSQOGT5JOHbuBFY*%^*5x_&98*?cINp6J2EBH%{3JBrZAH5T3=N+pjkrXOGDW^#gZ) zXJls?P4cAd9i=nqfj9l8wN?*L&rozI_h0Jx7?8r3lfXK<$e6(AxVdbsy67(pUCq0) zmWg9H^!;}6?cAVr1)m{>ox7O_hUGsI&{(sfUBMXg^e2C*Hfo>QeOGVCLLey@x3|rK zJvlx(ak$O)4p(}ED~B+#Zd~XN#2NQ_vyPoO`o9&2h%ti?Gt2U$*rc5_3VLn%%M!zq zB%M+UYUFq|PH~bEJ^?FSBqSs-iOpRg8E5ru8yg#8KEH!74yX$>c3VrNCRR1^jx2Q6#9eb?oiad8Q@>XFPxJ$*(sB;M)c&)zMw^Aa?qQ-uW0x zHCq*6?}WEzVqU{t>Qws+%2pTmFFO4m+;N{>ls4PiUuIg3Jr);#GUKV=lpj(TbrB7s@K=oO%!V#A&pDNKs=sJ3d?WU zAM`0v%z88hA5rsuWtcSLp72THC4i|(YLBFy1XJI$*m#tjZzqHJa*C-2hn&RVe z7o*{vK0H2(%f3ExoAx}jh@1=>#;rk^_@X0(6Y-l;z7?sDG}4=$(kd15*VgHTteCT{ z)_Wq9T+Fa;kb01sO#_Uq>`leDqj9 zf=>AHJF6(({9NlxTXj14djaiZ%$!~){Mg`LICm@pHa4*g+%gZB`%^zG8)p}R104}* z+_~0xl|`dWxK`u7TJ;q)zT^*nxISJw z^Wp+dgF|CouU=u`hpj6Hw$;~Hyh$P$PYG-Akabk+`S_k~$E*v>YiD0ae*GO=^=Ta! zwb1GVO#`!^>qrv(sSp}3$!~@lh&2w8T9o7ASi_KkO#Z(e5}*rG?wY?ojUO6{FuC@X z%E<38Y*k99+?|}99Dl%BNTPd;t&A}}kBteNhNFJ7m4;JdanJvHFcHjbpO>*|+r99z zLSNQhR|KKrVuv#5Xdv>hqzT7o&ouJMN+BhBo4mM+`mLwWGe}BF;RwkO2_*DIzP|)+ zkDZIV8U*3pow+L7ngqPaoIXf#ZzSXexQ@=m^}9TMeeI%qHsp$sKZkK$ec@c`hn5>! z^NG&uTa3_yZkibi36JylsB2V>VO`rAC^KhbM~x8?5$-N7d>X`GwAW5=(3bI(iJCIH zR0>Jnwpz)@F5TVT)u1ik0k^k(gC5qesE(Wx7NFX2y@N7W&f(zOFB|UnhS`Cf2)7j+ z4i!bQk*98Ed}D=3oh{g_9p3nT#$}mCYQp7KLUMf)-X6~o4$+x6%V4ZkfY;Mv+}zfg zuY05@$@$2})|PNqravRU@<%2tu z1y>nhJ3FOK7Y1$O4r8z#gt74h96RvrG>MLoxQm2lc$Rr*)A$OwEjR;!t&pj1T{;dw zBQ$(XgsF^ha&i(rmPN+eUTvev^zbReR2W8)>>zUB+~CSsZzT#>vY>q1rO3OkSix4e za3m*(oUm^vXbW6eNY98!wZI>Gsh}HYmR46h5;LSoCAMujnoXEPAATnruh$h=*dv*1 zW>=_`Lqpfl|3P0dgaUbN3=$&BHszF%%2L)N#E*!;7iuuTES%(f=EZk`aZ^YXI)502n{V9i;JFWRhaTbz9|qU`x{rVB2>d)d;QBE zb#x4Zq(^w3iz^~H-xqnb4+zFndI`nE@4Js5`>OSRoSW9a4?zo5lKt-C;Q>UwVZ}j6 z7GcGdwS@?Idj_g|<5$zmmTn{wax%3V**9( zq`K~je%T8%bK5JMCk#_KBQ)xuhbwg`1U7aGiJT!IGWezdT1Hr-*$(NrFI4^8b?DuA1Gns+|vrcle(U zHYVi9)KFcew9Dicb9tAYKXMs$VBXk>X8+e?>V#`e=RE!}+T0@g`j{oM0QBUGO}VSa zL-F^{cNIvW#hDpR04p7DY;3?+FPfKuL@vu4b_4Z%r}`S0#7oULX%Q2NR{bEE{Qhas?&zj^{& zqf=+Q;}2C?S22+r_gDq2A2g_4KsF6UM^@cr5r(nY{qKCKC{?qwvg%t~Td%i=Qjx$& z&{&!*J?o}1yj(DLxx(0Nrn<3(EN?MY0=)tqaMF)=c6I`jMJD7a#_0{xO8YreE1MoS z`X!W>Wc_>0CF?CM@}-Dt6q+WGN?upWgYsTU>67DcyEgp-Gk5ut&bT1mIHsW@>0@Hb z8~$0R!wcLc|GLOdgTdV;}Z{w0ZC_q1!jlb$|5 zH1Bp`U;sWtROt&8AZ|oX=S+~qG*&!QS8IjaAxxR8bF|wOYpl65^FpR1+orrgnveq7;I+d1K+^-~Pk4aI zbfKOwL<~FT!8e&XZ!UV04}^^a4`^=XFPE(0DN9nVE8)M)pL~E7mI)ALB6{d zI^KqF?~EoWm;9Z%c(S3=mBwcEbP{wj)8EFOv)P0&LkO*Mo8?GPZcE^`Fz|3Na?030 z`EDwDQs*2mGfh5omr?9wWDPpzdSFAv4e-bPxn;CoS zFfKE3o>`PqfB!ZNU7?@7wQg&{$6VZhB@GC(3`_K@_m7Yg@e@OfIg+r2g)2)?HIkFh zfm~ZS<*|l(U=)HQoeyD98KSBMCLvClEHaT+=@Qq!1bKS6L6Q$jI^XPz=K`(1T6`<= zN!A~aBe*Wcw?CV58mMPohwBpj%a*v@f8T(E1Xr1Ln6KdzB@=U&l=OcsRIQm>y6}F< zdtuv17aYnmm$CD~kz3-b@szN@5W-Y4L`y<`@2G;&GN*9JSFCrZ+|97lGtN{DE93%| zo|%)rBF1D_o(c;CBO@BhzYBJ=Dggeq6QrOg7Jkgk%rsI5RR^^$I&!(X(hysN*o!vM z(WT}ekU-N~TG&_>UheLZGqh)@2l=bmp~KE=)D^slvy>j4rdzl9pPC{)pi(Xy461V( zDWOz)$1#l`vnla79y-5rb;PT{_;`EU0DT_NYvrPlbZB2&K_Ws~PJ}CN z9}lluBmg*pOj{IQnSKkvU2bwFpjLrKcF)8vnkFJleq$*hQU0w+Rkz{LruWW#Gh}VB zN=}CC83Z(u3(CaF)O}@$a$fv)rmkGhw5L0QuG24f$mx29kr-ZyorsC#<(zQ4i~D%=SkyJwi{D2gLuaXL6D z845Xz+>H``E4_V*7j#55V@Zg_@eAA5dUsEy+DFwA2|jJJaFY?4wU7m=1q#6e>Xj0l zI9w&JI^t9d2BC%qJ`qcM>+#omD7czv>uSlYQu!IE!b-K1-Rt`e$LV4!OnULNxLima zok*2-(%{-h$zl3w6ChHTmqX*%8%}(BF zP&nhLDBFxc-7MbElY3ZQOKIYLR9Phv100n9>1TQHr1qLvfvW|TH6Hel{Mq?GI5;?h z1)f0cN=r-84%ebn^!v+2>{F&WeRm0#(TeykH*X?R!No}V zGd@@JzZsvG*H6D2G=+>U@Ael8%aNYI=FSZAE+ z&z48}bco&Rak`K{kqyNa21ec=(qk?6@hpPU=c@L|Yz~A45lN%ZHR_4kAO;^eRwUgM zNbbpMh*_=U>Lj|>T|#h|?b?{*H~WLOlapBb|KyboyVU9 zC+B((!&{?!W)Z~ABnA9laX|Zv4*qIcN ziOGUv{B*pSQ)O7LJe5-x`c9dKn?174lw?M*rMM9Pu-}c;4E*>kT9SE@(idu>TAfVy z+`dlMPVOau=;+nyzG;ru##D~CT|(Y#i(JCLzwau_JRz?!2XHOiBh0+Wq^5UYX`FX7 zV|uLO+W)ho?wy|o4-3f7V~Dw|1T1Fqkb;D`I1uwRWZz6CZvJp?T%vMCyw(%Xp6}E7 zxS}4iKj5bgd)d2dxpg=LGwSx(PwHm3sQq>xn-a91C5G>|c5%ejmhs*3U-ie_fAzi_ z#Ei!9=XcLF-^vFo4TI^)=Lq02ZSwa7bGy|b$M~>n~2zsGT2&6{Ow#9Kbh1|XU znNYpeJrOiOA8Ln-@v=IyFr_?zua=dmy_ns%inBtRVB`FzeuI&-_H1ipWMuq%S>cfG zFVfR}blE-)^<}y_Lbjn1wug;0=I$pyccXX?iECB`^81RN-q6<5d5|nL(IKw?w+zjX zi=nb#bd%Q#1ga$xQYBj{R9ift&!MU{S z5waH#g;DVGcjtrh6L?7Z=4wold*QG8KCMuT>FS*`G^XH5h{b{&Z?lD>LTMWIK@%Z* zzM(IBq%njx8l-%6HDK6F|J2Q3zyz)e=e{{OyYPDtHm=+#WwN2q9T-`y1>fLL%OAHI z%#_25Kx9p=U-0U7C7ChX_eLBLEk?>;bVmqb?d4->{Uv&ce#b4s#T&2G1ymWwxr2nf ziv={>CBHdp(M}@d*o`c+*EJ4Tl&j69TdrF}s(0!Bs@$g=G+_mfhIxKV5WB8<-SJW> z6>(^eLhpdI>*dunhiTd(@v|1hkj1D}5!Kv)=<62t=s&l zd+SpJ2`Iwwt4Ok`p2#C>YjHDUptQY`2~wU6&)riYizrdO+i>WT;eLFkC-08FxnaJH zJyp%UUf`4$i=c4=F~YM&-2x^p=ixA)BRXZEz(wlNcF^N>+S69cC%zC|&E(%EMeRw~ z9Is>{vF>qxSh2m~7I{{IbV7F;x?YQ~`dub9Z!kglqA3~^S}qjWRD50)mBg9be-kWS z0}I^GnnO-4T124gU1LhrFM1(xWQi;x_Yhg9Z(k;7Y_JtP#a+R*I`zlyOW9=b$(G?l zg~upN-)$L4{oX-RWlrL+BD=nnXK$4ufpj^T5|b`j$y|xQo zD^S`X*6?H$^OkGf!IhCh&o+x>T+R9)e%`q5v}Y#?N4=kPd2$mst1n6ew@$xrUjo;S76+t*T9aF6l z6A0j6cSkN3YF3ZblmmMr<8(CbYDTC2nwfpQkNTF5%xECX=!gxK-;BA`nRdfto(#2W z13f)G+!0h#GNRDUbgv`)F_HLQeFfj=9K1-(KtzAZI1iw;GSrIjViS zc0;yLzKlFpYi|sX#u%SxxcsQtP(AjmZ%v=D*%sNZlJvr{JC_9phy{|u=)3#3|>HIrJnoCKlT=C%Cfs`Ojk<9#WaIQ9wC;Kzy?n>2*)H(~tZ z+Q|Be7?8w^wn3A~vYGZXk?!_eKFgNmrvGZqO2A4}oa7_&k*$7(8?99hol3#xZaWw_ zi^+!tC=qzV0DUh0>Km;+`}*8Fy&p6E73EUNKPJM`;>g8wk*o-; zh&|qSrn7E)Kb#_7)15|`Ac;gyNn%#Q6+!Z=BkV`Y0-`%Vu1e5El>T$!O~4aobgL*S zI{Jc32OcxYb{jKSeJ)ZHb(yUybxzDL#H0my#{U3TA_9j7yVr1Sd709aUWXgC=$7&P zT~(ausT@c*TWaxB26@vOTiGnQq8Ym_sx(@>(EY8b3_B=7T0>tuREw$=xG8)R3ACYxrutWSf+F{9)8 zlT7*5d)%TZMeSb+6KKZ2@lruNRc1h!FHOr%!Ir`OJC4}G_lpXJ1~%(ZDj#GYJ3#RM zLl^(ejh^l9q%I^v^7UaIb0CqQPtIos>6j=FlNJZ(B(w&K9}EbdFSCn*uW8BmW-2Q3 zUA_gze*DgVy8Ez^l}~}E&9QccsgpETF`-qHj$qL4Fqg2fjc^Hyqn`Tofuv0PuLgld z-1h`%wYm$I50@xshooM!$x5f$ z%DER-kZ~D@7rKief{;^SSaOkwBKUA01M9HrG70lg9%XF-L{-%CR<3k>CkRa*$(`J2 zBo-)Ax5dL-J&Z}BsOEQm9e&1ZkMp{J5>Ze5%k$ccPv(fl@lYyPNQAJMm@V)FsZTMb z+X}a?9-Q3{71=_{BVQ8xhng-!4`s(M2e4?tr)26w@klY*lQS^}cuay1b_XSnG0^(~ z^ehk_L(KZUiLi=WX~Cj5rex(u=@fILy@3qNwQs7Fk`aw*C>*NA_ixH!cwR4EAdUMt zwzm7o2S`LzyAbY1=R<2}9poiK>Tw z8$C1vMV$89hm$K)H6hiOd(BrUI)T-Z1;r4xv{36c;H*?UnHu;r$yCZIwp*a+g1*y$ zmxq5j%+>km{H511B44Pbm1$#w4@Abi`(92G9oybR6(#=0z3s}1Sl>*8w;(2^U59>^ z4xT|`TSgs=4tqe{Qil}F(<%uR{xsQInWts3X6Man`PRU`SI#6p#4C0QCiVBdEewGy z6C~;K)N!-MU%09ChO;cJ#}m3Fy+f-Vxbu~y?Op%_WZaYgnpVXOZb^1-E{^pdhenFP zE-M#H%w8L68fBQ~h#S_!m9)HfL>y09y(UxbadoD3$70eJW|6nQ9K28|sN$Cxxo~R0 z0&dOjF8LD)NfKu2$1 zXEL}>ujxFxr{L+tqmzvT;In4FpfmwWha`MuWhFWjM$e>T-)K6l?@yXsu#C=(D#j3+ zih~t^$|%t+Xpb!dh;cZfdJN#7VWSR;j1*rKGGohH@qE7cV7a%h1WgMIBT}L?A(34D zGK=_Zx!D}2iE1g(=OGWTqOQKA^zs#!dZcFI2O~uOq?%bQmP-V?PWGV-)ZADyoZ-Bj z;T(T^-uWiaLHO(sNEQ9H1mcbbMMU@?ic2UFK26B#Fm_oH;w6_CyvuKQ(o>b)3{=E^ z(6kY^L9eh`5E(%|3IPOBfC--}nX+!}?3DUKAPNX;((h{C7gDC2B3$7A9?9`LzIh0$ zfDisB!R^UDGIz{#_1LoO=XDBO>Lz#PsK5nnHRA_=fBUsVp*fzW-t~*GW8Amr z=;N|f`^~aKVhTch4^lyF-Wq!>T179@wBlftWKAysRyc?(;kV404|`Vqz;SU2UQ96{gre;O4=B1g zpdc?TEv-{;UN~#heKSNeKFFK4QZ8_qQKiA`oRP zz|HN-^iqgm&+|zQGcWj7+xCU@?KXYj8jw$Dp)^1q#nor38?^?9`JmTYt*)Lb>;Rj_VPIPPhW6ow9SN%1p^C9A7*9J>LyNWi75Zy3jpS%Iv7FRTC+B%lj$(9m&EvXE+(te_unrq zHCb(YYWLD~&!kloriNj*#;^|{Ty ziJ#mBqKWyZ8KBtcV&y#;jhK*vCfc(pzdnq0Ytg0y9}HlFuL1Te=;ozV>S;f$Wz4u6ig__mx^7IjckM$+1twwnpFvkF|O|(-oh~Nj&TY zh9gxESQ4(+VG#&d3T|&(s{uTSG`sPp&_nAmrP?wF&qoI$^?V+Wmic_KI|c~1|GnHv zy;uSoojsuM0U!8!GhT{1Ml4(bi2&D}9-FT4*&d67k6)zqJ491KE!=qePvM#v06GOv zmCUh;MlI0WHk zz;9f13`AR#R5?)b2dQ7lKqA}CPD8;|dNcrVH&j)BR4oxVJE0)oB$%jM^n>66n_ zU~#rm&$nRU2y-#l4=1421bvC^c@H8lFA0p&W3I5P#M|3%yLvOJf!EZBF_lDH0TH|B zG}2B|YHL7t*J^hR59C2eRpSIK6fQ06e_`tiJ)u+; z1fIWEhrYiy@X7u-(?%nUlJxX12`%cZ0Y&Hd{=Vf2@^aM~UK7x6h;vYThWZIQj+;Re zn`|A}bTQUE`<0Amrv<>W{Wo-Lp8J_!_1^;wohVgZ{UHCjqXY8 zU^ov63*M}(7%ZmdFMgM>E7qPl82BFFyhg^UM#UZc5C_?IUXb*?b(GGxEcoJHRoUwG z1MzZvD#on)tyDIJhnt%~AhGe^r^k!2|1IoxGae8MO8lN5z511d4y44z>w(C-2L!wn z;Gw+GyAE9*Ps40KTAs?APe4hbeO1={n4NzkX#LcjTiV-SN5A{1hZ<3!$lm)z zjv6;5ALe^P=O@21MwX9F{1&*zXu1Nc{ot9;JU+I6*e}fu7soN79aO7+7(QQKDD0xO@*3DD7q%r8 z$UGa-fE>=E8btJ^gi^wL%x8u{P;}XKsn`B3zbC%>_$#XllLwh)P<)6V`-QKAVP{di zJO|gFa7?9!&PV&R!cE4w%~1o5Y$bDPNVOVK6ZZl&1esHLmJ9rDRy_U*l~`hcMDujm z`3%V4?!abw3qQ85oXGJhy$StgC#piw6jM~M-Dpxi$O-OlUxh|0QR#SLW`u~w`p5F> z^k(u9UYCdt>^J5ZK_1vLK6K6PO@d-ET;W!(kpiyQVkD)RYks4!0N2>G8m1GyX zFM$2S5a6?_a~IEF&sMW}hFOty5*O?QW%&muPQ!M~LkX)SCKFZzNi0gKkr1^}7c6cy zLOHCWy-*J>9#jf4e|m9R*q)al@_irjdwA*q>gjcA=c9Sq)#=THyN{1p=u5RfBqLbq z=a{@sw$v1_nv_ZG zZDbLQ{aQNEiKt@vk$&q-4W6gBcIUCu_*Xw^zmlF&qrJACW!PjD--`{Z|7T`UPi7__ z&A#mZiEb6#BU^=!mJ55C^`}BSAL8o7Ot}Eg(aPEy4M_9o&Ihw~kDJe2U97VpB!3_J zwO}pzixhzm{EP_7jFf~OG7($lcQ#yP#&viJVwF)}D|izr8E1!qqrg{f%X@I?I%%ca z0m<^A-Ca1FFzhLf2-!PqS{DNKlCiHHyQ7&)=hU797BB#>A4zM?S&M$3)?k3g;&f63 zq1e!Wj_+Dmh@g3`QvUZ-{Q8dbTXXyUi>xM#trhRhY}PwJt#a^}xVPDt&C*ZJx=gl` zrg&;v&F{3Sx@Aw=T<}-%tQINSXI&`C+vQfg<_UabW3+kCCQTtAzcCRe7@jt8SmFQ=F$_q0&mf$7*fkU&dPR&_X29eA^in~ zvx^|l?o7b1qPCJ3C%>wNlZxTl!ANv~7kt}NKO&R~8*i0Vt|hEAWG9xn)B7Mm{@mK} z#Qx&Js?^@#3?4Kl1e`KKFsPf!&JMsGp4})p$s_mRTM(?&aN6yN*tbQptDNmml>&eQ ztsAG?FO*aGu~HFVRjW|0QWhc3e=vIBebU58%qmlc(73w1a}F9yVjK=E$b1ZfzfvuZ z!O+)DUeyrtuJV?uj$uKVTW8OzsvY+~auhS?|@Yco%>N*KNp`Ny%< z{F)*#+w8?lBoLYDL}7$YrFq%SJ=~lck&;kfRVC=`7_g~3d0UsbpxVnerQ zSQUrv9QikSGS~7(EiqBYqs14bFGL+Xk^Lk5LgiVKmbf@M-*3cY7o-a#&s*ooA)?$$ z2wu2~+5>@&1mz+0tr+(G_{Pfs7fdWcSWu3-1)W&f5aKEmMxlmtrVd>LRu7UpDM6~g zf-9gl|2W;=e9@eECCnH;hGp(qcIfxHou5B_Aj}y3W}80dRfeMdD+zdD-puAac~G-I z>iFNBxV;|T&+o7D)x+v*KYlG-vFvGIvlB#9rSdNgrL8=am9aDs)@Irts>Fef7e(!0YBz-1wv#|R)du8)qvxzmkbcf ze9l+W^qI%*cDgJX_vE!BH6UF=Tmk8;a7W>q0k3DEeMB#Wf}lt)EJ*_*l=mWLIz5`M zn+}4RA#Evcx4J%%-7p5HAK<}|_KvF@V@txHmcbRQ6RRJo*v!vuq8*d&&m=dQrNx9A zHlWyo4mOG~rmt`wlU_&m29B%UuwVX3WX8gVwjio0b8cdITc;(3dplB8v0t>+3x5=k1n) z4+;)oXYxKQf%$3S$5C`yX|ODQ6sBA;VVazS?#b~z6Fp8fmc?TudX=h)@onOjhMW)guS|xOU}givs8i22EDV|VNh^LZ-1)df>FtTv zV~#^E>$Nb4$JSHD%t4-acf<>T&(Ypen=7%t>&@?NYi`Qwn*zMT-;84DLf|M73EpK{ zBwinh)@w07aMHV=zOnUiA6AxBEOWTpTVCj>4i1UqE~@|5hhxkInOg-r=K!9Q?--WM z;HXyw=np~c0WVKCNRgq@O|7jyUE=pr=aKzyMftc)qvSZc7OvQWn93gl?k}ws(V+8S z!<(zCtLT9?@`FRr=Uq9^ZXBNwzzYY!b!?@mHj96*=6o%7W6V~F+TmFDmf`%VT4tom z$)w)14>dbq?id;jBl~Gq?;pbjI5I)6jh(ROz>^c4Emk&FzN&ROZ1Y={^RH)) zuA^Wg?LM42TFFYE2xqHAEYB!Ij)UmGX`+x8uFPiIlWHO_yD;FM0X75J7BMK;ZUo`4 z+}q9=&g^3G!5Hwu9cAxQ*%GAHOj%Us9Fjfo~y0jg9-CY<$DdeFa5*2={ zwsBUUmmEyQeONEhGK}NBt7)p;nfQ@b1_{1mEbKIAG?=znBGCBmNw~1JulV!^GVIvVO_c57C} zA#1knhBSezzBCQlX|F_e&9sUUZ(_<=<*ij9HfjzQ2)TXVcj|7t*U<{FY*?%+@1={z z`4Bt9cE_M}#vt!AA603Mo6$jkJM{Y1xO+)V1Z1@aU5qt8=PDa6UDiKR5gOzHbfMdk z!L=xH$g7BOa&ViQJq&vvfAPHSei?EF$aSbo7Rf znU=cvO;0Gq&{ce5x%<^yD6YP~K4m@W!MaldsG>vkjTbvL?m(iY5V;+ToGRa`q&$V{ z;bFhJm*T6J*9Gy^{#Y+pe%Z5~A3X{p*-US;b8@IrQYf7<^S)xz`kOZV?~lY`nGAE055}%~}T=vyQ>oveA<)LsSqFI_#Q_ zpnhh@cTBm};bx(DLT;dNz;rfeC?(UmQd1cqQ4QSro2OW4R-PjzQ@7?E$W#yrSPFuA zh)r<7Y}}f?7WFAgE9MDbw9=ig96X<`%!E5j5BZF-K~szGF!ZXlkY1?KKAjVmsx5Dp zHaS~_W;$v7aAW_w`(5OW*i(G!WXs|&AQgDP=A}l zKWK$`h+B8i-Fta^?WK94`<~G`6&n&)jqlBF$UtH`b4V&E4R2ng`Er}TNBY)Pz5xF9s!@{KjYCq!_g`s5hACMQ)@-X zXGjrYm{PivV<_#27+p$LN1Q{F~OVqB>RRjBFNTD4Zi^}nX#4e2s1ktXP>zB|La!kRrR zn7M*=@FN2b#RoYPhWDeFh?BJ-a%vxps0^4<%VlfJcV^Wi)F zM~mI81+4ksu16rjueY|$ezeYVg)U9FX4&ZxoVw`0z5oRxFn@HG%*8RzBgfyxEq{!( zv2N7U8VOtns8u7Zz`xOMQ%(0Q-AX$4Z4#%wO;0m0gS)>!(_5NnSiXM_|cN z-{fQceHsIbsC-;tYuFsVsB`rZbSq;Tz0*5A#Y{>`YsR6D2mlD%Sastkb9(B8zA;9j zEB?18Z4(S2CR8=tYyQ$kY&2;?LBVM$)E5y8(t+2wKVbB2+|IO(k&(E#j3x}70Wbb( zcm4qZQkR%D$Ajz0(7PvxaL0<$Lo?hh=rYg__wZRL9v zB2Wx{ij@vafi8!tp`l^8DQlESdkF?ES#2Y!1>Xcx{_H2ASKS)e|D47?o}O0!L|qv3 zmsip%Jq9*e9?q9Qvran1>r&2!M=`wpIB{`%276$*?CaG3wkv4R_(5M*t*X$n{ErIG z7!~dDS5oz$J?pg#0b^3MkFFtB;jkBAaK-;_I~5q~0Gd0mS{0kL-k%OxA(8Z$k6D>p z!W@q3VRfu?wi+oFP)BnK#uHk{rm@1tyIsIG_0JLt@bX;`fZ-Pq2phX_q3FviEC0rk zxRVfnNfY;WTD-SsB-`1kkt-r3>6Nb(?NgDt-wKxyM*8vLn_N|u@2!EQu|`YOp!Ljh zGd;!u|D#(aWybLHQozHve{Nvux7Fud0e3^uwr=k;z!Ielx#oY}&>!wx01c)y&6H4} ziz-u1j@GOG89X}prez_WGmByl`42@UOOA4!lZkk>l29H7tp@*#cc3v2^7nC9N_@@7 z*u5e4&;#sF^1#R_%3mj1!g#{Ci>E_0xd+{nBdyL@c;XxeBygD~VJ^pf#a$WFBSl81?bHnX}KaKhmg+WC|ayzbVmQ zAv6MH7hsc2%P`?3h=j-)gUaN>{L)5rRaq0Ed^2-~Zv!KYTYB6I3mVcRzJ5wLby3W{ zx)h`SLkj21T#Rm8Q*PIc61*Vxj1jKD*Dl8b_vYKa8u0>z%ZJWy0EAulktfPRN9t#8 zAUh%WoisoG+7Zw*)D*-fY<%>j zYqarj+W8F_)*@y6w0?g2@_dSR7?Gf(iTuQI%aA}EqU3!cxxbGhI&AXkIVYK{&Y_PV zu`G#D|J8Syk!@!YfSV6wZ$*ZXVU=xp+kF1{pi}Mj2MLb#`iTDh!=3Tw1^r6^fV(~8 zeya2aN~Uk`HjEE6KZ;DJo%{B&&%k}+_Siqx@m3>`Kkl8qY)U;Bnx~i=88@+eFh3Kc zNp8kBSd#^#S@b*Yj{Z`s!wdS>UqI3n$EJ=KHXe`kE%_u2jEk743?t>1o( zZ%Amca`^$*9?`A^)y#=DxAMDAcAQEKMfnS?OMgc(4)WxrrX(Jkb21G!DVaL~bJ_ZQ zua~}fnk8Vc3eblBS9$K|UXItEs{n&%V{X86vwmz@=tv*6;PJw^>M}4Rzy;a{!yX$E z+l;~x%s65a`rx`QF$m0x-7fpwW1l#|Xs#S&iC$$_^cm7z;H3_kKlBAWDpc^C z0|P1JkLn*pev=1m2dSu#viH~q-of3ng9$1~%o7gM7%O7aljkXug!Oc z<}HZhwvJE$R1leZ)b7~-ge?oFy*ScmcEbmt=m27?2YBq~$6YBJOzxgdfIg4{jBdfYSUl?NJgA;pC4V~$c6hfoirprkt00Dznn|it>SEAjC-;VK`hZ(^>9u+ zmI*=*L*z|LILP*|0oROE`)VU@)Yto?b2R5oXAw z;S9(TSbp|@fJj*l%pP3tO1*d)KQ#9}Jv|}B>bbq9&+Z0aGWv+)wPFA8C0cU5jaQ$I z5@ldRyA?>T&N0bsD-qlm$3Z4am|Iz1#jxnd;*idv|*IQ8FrNM>k#_ym33IzVJp3e-F@UiB;`=B zgjzkzf*8~kK#mBvuwIiWW@pwUY^tf(`uCMa&@iKF`O%0FSb*Iiz=+j4c0P=_b}f&FINCp6NrLaN{)0E%q-x zpt6SP%qq}Na)btGoAo#wv~zCJJ3bfQttL0{FTKTCta97Vg%Q{Fcp|i=d)I8P*GV97Ofs*qD9iN1GY9F+;RNm`MV#GOh5#zfu4zdV^lp!n2PjAjJ2x9cev> zMBt;zi&Ot;%pcn@gFY)`vq`tN^y8$bYi!zOzP$0d8#h7FZeaQ2vd9J4g;VUpKf_ig zP~G5!d|S9!Rs(o=p{#TjLK7@4-v%UoIOzWDZ^sjjlu?#gZRW>BJ#-pEmP~6&v84WJF7d{4r18PDZDht+*wV znTvbMTv%ukI%j_?!v^lFHg0@Yq$=u#edvBSk8lqiYlpOxxi?cal}Oo+-$Yt9b@XXf zVc@E)UY|+dE?7d|_!Z}vyNI3Oy4D(rfOAnWI{`3f32>-iK8Is>23tol1x1Wc#SZTc zN?_*A;T>WJ5a!3d`^)AT?t+|5M!bR!Pa6=A85Ls-M~Z|E$;d&=o#jC$f`g7Nbl$XY zIy<9`&pIFVNhvJ+YSDU5$M0sATsbwKIam?W15qeID(%1f^Mv|mwr8;|14}KDMs4G5 zFfeg2K~oM_(y}rim))-4taz)c5O#z-SM{!HVt8xjDeeFEfcqqEu8uKP*Om$)gxjty z?ChMqqNaipa4~1FjPsx}KnEbIgwEGC)5QPk2K_S(*Yxr-|D zbo4Ki`CPtbq<^|y;I%#!0vDeSw#oQ64;5a}jF7-YQJrv)g`6Spw*_v)AUTo-(Wl;= zD79i!)vKdqR}Pyw4>Xn}wKs{Wyw-eJ zaQSlu5yI*p6+a^RK%loi*ni+v+?Dst&C0_3Lo&PJfeJe9p)&LyPgkQjzcecRwkNI) z5sMp2qg3NdPVVb!uGMQFjGsN9DRa5W0x!^QX)_GTzpLPD*E$%qix_;je{B2QuKu{5 zusU(U8{1u*T*QvyxEcTj@!FWVo0X6^6~h8pJX0k|KnO98qcYzN{wU z4ah?HGRT)RXHKAn;K|^RI1OM)aOV+r>q3;aePJ92;yd+>Vd9*D$DJM@)z)Nc@VN9t3kFVP>P|0vGzwVuP< zI2SKYu7iD6KB00O5na4`Y+UTd{9Duz-(zDbXGiD9YG^GXoMz}P^t5`4&r@QiycncG& z=Wi)a{WD#`d+8c~!rq!kXb33<^#HHCB!#5m6 zk!ahh2=CvnpI0eL=ea&5U3K6Q9*+cVfD*FwVVeoVNZ}p*mXeSp9CKCk=FU}YPcstK zp!nvUE7S3%_TDTN_Gmgj3uqoj*W7IoY(8RIHrqldg;p=~jj&T2o(~T3$Jok9;XJ&5 zySJ6|wy3rGSAQPXrqSE_*gMKXsS$I$&4^t41O_TKXlc2ZLN*9->6y*U(B5yzMDv`g z5Pvbf@G0P#{j0K9bLb@-7I<*C_jSUxV1LVJy)o5d)_E-@?EEG*XI63UlPQGrGx;aa zn5|A1uQCsp2DY}XRcmD0H(_M6ScaU&$26nc*QO4mj4{Rt^`CZ$rbI$H+G3eG8ZSqr zi_Mm45D9vNOQu!yVnrw^{w&{1OBRKBYr~IEQ{VvMpNPl+?j7!}chAH8cB9kJq`Z3Z0H(Nd)qVpx12$Kg&3zcP;`f*GcRM-@J05)cm-<`0dkM^5!Bu$GgbX zkWp+!f>-39H3X8W*4tVbO3H%gz#YTCI$-UYz9+FNWaZXxB(D|3`)8Mb*tP_PKHV(h zZzX;(Pd^VdDM6T*-9yKB#F-%$ORq$<^S%KOnbO5ac<#FuT}y6YhRfBnChvVz2X#~Q z(z@8>u0ldj8=o+n`7l$=qorUMs-w@OGhZNYnCUhp+bksmrnljk5)riYyiC)NLdmTv zj2je*sOl~HryyNVQUsiFti#8$sszq0O*{R$3Duz*OghaN9=x|GQMCM4YHo4e?V|Fzt}_u6WiD57y`zPUg*$b?%Vf9a#)pa{kuFSJdcsJUBR8(2rn4LT26=y16g9%Ir7G69`Wa_FOIfaC+>q zFTbd)1bH)~*w3->q}@SY0Gsf-6tXRFcDjZ|m9C{zWKPur{{kMJ9;)7DHMz z)YO2tMEKrtyOy7HwR10e!WyUwQ^7a7GbW!K_(@b!iQ~O zw5twGTc*{W4!W}ItAjH?zum`Kp_3*?{%Heg{f%pG#V{cM;3r^X z*(Vf^6q2NK;Qg9uxlHwZ#J=V1zV@(w<>VzHh%5_8D1W=Vr2y@Vqy|SfQhDsq36kn}H{{NG336p*-X3armj) z+V5z9@!rw#39_(?I>JpqJdj5Sgqd@Aq!It@FZD)O$C5UBVk4Q$n4*HhQe_f3Y!dxL=aWEY zfF}JHILJkz$3bBAqM=wKLFw2RQ=LV01F?Ds(Znk4SMSR$wECIws8fnlqW?p=Y-8YI z5bP``E^*oY^2_F0tWw_qxg2oJa)6^@5ct)Y(42i;5NF)vjtiOw*c!q?U}338zm_ty zVA9QU(Po1LYx+*@zlUCB3Btq{{3G(Yqk6VC#k(fE({N+CVx#|p!DoET=IqgA5*oeb zHTHUSfO-EC){`D0+Pk{~d7H4Ra(S8uA?8cQ!AlHC`3lK#(MVSTI6N;1igvfvM-Ebo zPT3m=pa<|$(g#jHK>Ej$+)^-y5AX3c%u#eu!U?CBddTE{eo05_zxv~LebL;{P3qKw z=t9jY5>MU6<1bc4u_PcB04SPc5Vfh-d9>^dvt7&8X)A0E-2!Pn-szG1V_7fzW6$O; z_M>}Oy8I!nb=YtTZt8U$5hcER18G|qlP4VbRX{E;Y!td{2qf{al$c_Uc=4k=uO?v2 zhhB9pDwJge+Z@ycLjK%S>hSa!Gii7T@hq=_r}NcQ3TlYuVP_bQ9dPQtzrTNhE&-=Y zAYu4&$OW|$8niX{3z`{BPMs&?^l}NXg9NR$&+U0ZEhWdk@?2TzBEC`eq3^?N4+5b#*RnQK!LeVhUy zLqJ5eln1f=n;MFlfy-$e2d6z;DL1`TfN%rhFl5@%G&rGBOU(5j`M^1rnG=wE_)F*Z%A>ZZf(kkQS zq{Jd1#{x`;|A1%;0Gl$f6rm%(efc|Ut;3d8LQsi?!j)s=% zHczMA)U7VmGdRB4Vxle`GOtDw8-pOLKeLt|0q;f5eL+N2iUN(=8&A?-_z`{45XeCP zR(j;khm)5qWA@Z4&hCN+wkJGbdk$-guEMkxu1Gl|ra?JWl9@Elg2ekI`#s)|y_J^J z6yW8AubNlCK(HiAdP1Qw(8S`CSA~DJj7Ax*SoMIQ-NQ6!_j~BD7PoxI_>P9eQ>AQW zy5>%je=Q|^Vkx8A`rc&c}zHnw%to-(PsR;oT&ASLlM9;TBp0#riW0%C5t+<5E z^^pl=^hMvWbw6h^!9R;$fSfe*M(kW&t$GY!KwGEA`|K?*b`0?>C-7OkWR?L-d;##v z<5>-ZZw;Q#z9R*IdD+2B_rH33ApATd=<-D zqlTzplM#vkx`aWtWMgUSRRs-b7l0it0Fl+w>5`WuGC&A>8uY(qL#t*6yWDhAJ&nB- zdCs;z1B>_wh!`M=1X)cCT}}1(G=Dp^`S^gbdqA7`>LW2O^;C6r7vYW)tFf~9IMd&Q zl!e052A6ZJ(rZDac&wE^P$ff+8Mh7&M)Wq2)dh6uJ)br2b|+16b!4b9;YH~aYm~bd z$@JG^6<49JXy#0<8-ME@B%YDsNQIXgD3V5?n|mM*T{Ad1X!P+PP)}N*dOAgGVg=kE z0HKrn5^U{Mx55;R!K}=4(F}KVNI;cjTo*^qJ`|kpa5$P}6jmX?EkNuIu9}{ro~Up! z62umXCK2Jf{;P@RAsH6^aRdpGtprI^Y%P===GSBLp{_Xqk*tLmh#A%MP47!itL6FWKIn{A2Fd@N z&z~y^489I*-yrBz0LT8hu^HTj5&5(%N9bqg4XuL^a9vfPRg;{nOb0jK3JhH!%<^=X zFZ6p96woY1(G_-ES9{RJY%gj{YpVmm1klsdqp;PmCHZArG`pG=!!+Z_Xhx0Rlst*0`hNHOCBo} zLqDNTfSM&CfCsPBhj(5~V#)4}ug3lNx-ltzaDZJEKe=Wi%WX>!$oT>P*l9<)bW&g6 z8Kfw$SNYxa!kVE5&fpvvp}D`*_vZTkG2X>ECV|!W>7fCTXlelflqW0NTMh(=8|4Iey6!7#$d19$mn%<4 zE7+dh*0rP^PXM1SKn~NS?H*|~>gvzuoVa(>kjam{()g&5i$bL7O@>tf)Y6T}i80E@ z-+|DxEo9Oo;PNyoP_J0F#i^{WzaNv-vF5QH6SFrtsrHg!2b@n-DBr`;(UJ0(mX;QK z0H4DsL(@1v9$K6al8+TEq><%gU-5BAT&OSTy8x;?ceDU;@BZQT9AO=f3caUs9kU_m zw(MGa@qYgTkgL!s%)CQUzlZ;MV=tk4fRl!{&l`<&ya9X~2sxkWRRkzMK`c&5g0hjm z7$LvUU~Wg`-0KQ3IDKLX`<0#MJj9i{zmMj$q$X^pas1FhjGcGB5A0>oKp8%c_N8X; zn^{rI04uN!)b+mevJJ`T9BDC9PEJKq4MHSnerG$KVgn2LWUA8D70Cujceg=rg1GfNx6vUQfjjvJW(SpzZHX)h~Y>6!j%jLWCu_Ya|L3FYC z3gp&i(V^`O`urLz-CVb z=e)gdra_WM_2uBn+|0B$G6=$q*Cp43AMHd)>NU@AePyQ|M-7qViG%>x2q^OaSqp4* zry=Yv0pq~TgQIX+S8%PL{6+7qyR-9|CM9%P$it4s_oxOj!} z=(AsmVVM+(>N1lY%Dsdbz51K2z1{#vk{HTmfb&6Ka$InScHo&g+Y9HlbMd@nf_F1D z@c?AbSU9+mZ(HEJ2Il3iNF9jP{!-7&LHhv?J`Pp4{4H!B7-%F|gh&?u>Mb5ywuhZ! z|1Hm&AFon7I4}#LNZmbU|Mdy{P>k3MGC0!sT$36mF3hL$DvM&AV@1hbs9aPk=GU2K zkK8l_`4g0iQPep1>!I(e-cH&VS8{4UkydjDbKf|Ud}p&}0(fXwTsN3s}~4i5Q@thonNS3&FccR-X-3i!Z+CewpX0sqSzFg2K8B)pF%BcAerW! zSO$yHQ-hB@X5-qgrW3UBRG8COv{F?w_SEX#oX^?8apU)|NCloLu>bJV2n6Mrxhe=$ z&*RQ3lM((rGD5;9-^Q#r%EmD!Rk`U;{%^m&R1&0}l2!o1zAzy-26nPaKSY2>^CRMY zczz}UzGKu$M?X4(CKk%O3QK%kGNtC&$|URWL>Yive)^ytlLm{@)6}=|pJq}2M+obW zT@D&_)=3yAsO5}c>OkxP{d@p8D1s?U*^BrJ^xW^ZxC1I_`1Tg0P%v5=bE?5cLl}WY zWADRCVXo9)*!kr1b8&FT9WDhF(N$rlo-PJ@dbI#0^rc6JaEP#Q*a)UeK&xvLDwy5c z5bnvc(eCMq+^ors6w~nWK;pS|;D$q_v*?&A(NyEMa|OOH`~e70hOLsBt|qUzVBlbI z=o=&D*dGb~Q!ZUccc|PQ6AZK^_2hYy+(wlsnmv;$Mv9>y=uG*E)M1$1Jq)JHrgeX@ zeC@FO0oQN^c)A1I@Sq$MdkI(NX)Y-}Z+?Qt92hg673Jy)-Kc?8S>)NNtz9NB!lYfT z!H;I8seo-vXeoaYz02B(jcJ{?93-tu$|@@TL%@{yyMZ}@_V~QbkzqF-uyU3RL5!q| z)jX);olE3Trabjwj#8J^(l9*PVrfRA3h0O9O&3{fXxvGp6rvvQ2kZvI(@OP6r$gMTzVVJ&%IX!r(%d1bSL~6mnf%In^<*NaT22lqG#=yQm2zre zws$2&rqc2|*lp<4y%wYJGIhQVp)|A{n_meQZVTKZD{nszX`6YltkJzL?y*KbLu6Qe z(;rYOK4;5|gaD*lDR%p~3`wTLmMkdqp3-6fDNAftlvE}&BxKq;lI#}@E8K~C55RcI zChx=Gu3U{i+G~b?P+l{y&_raarjF zC=0l~TTbsVa_)k6av=iW#^6(T%oc7FU$Sj)3Y$oNT2TGx%KM!)(PjU?MrlUh3Sgr! z*5>5pB_QR0{YwO&a?2&H7mZsMhq`hb@2srGOW*g@o!G*!}OtW+a9A>u?J zX;#F$UW};NTD>iwf3~47zZjs{xQ4Co04MQc-LDRBT;25EoAlwBs90cI^kAr8x!zQF z7Qa6J6E6TG^$pL*f0}C(z0K=hf8OITpwu-&I_&h9 z>s4tkKzQEp%Fx6X7SKu2Gbvymw}b%56g~+N#LOTZxG3i7z;1MTUqbLRw~J>f9GW_xS2<33<@E zv?7e5_jH9_BWi=0JKB-dgRjTne z6q}apNz4Zhf}GAxa)&ERloPXlIvLn^LOLfbYh2x{s~i21d5g1OA+Z6>&o=Lp!gc`P zYtZUf>mBHz?LGh+)4$f|`L+*xWUt^xL|?KE?2~;YYVZolR~t{g`9-BIxzjU$89kX2 ze$QhgTD&dbJ3fvZuOGXDG}Kc_O)7FZX4Z@cYW8IRxsmGPVPbl-jNw}nDHSX5P@+Gy z><4(+&j1_)Z8p*ChyLApvdc+N*)Rumo#an0Uo3OFm!mxC{QVLKKvQ@&7V_-E9u(uB zW!yo<(=aW|9r*W)vn;JY5{vn8xT~=ScpK1tWobu{v5(`xoVN)uT&=zMe4ndJD+dB zgNf_8Dl`Wc(}*}ypdZQ2&~Kpc_)-xtbyNSI(c@+wMEzjl82?Emb{!*d;7jlw?9Bd3 zf1GlVwydNVUPwupT0Jnzp7TZ9&m^;NuIf(m+;+NbvJ)QOAZJyYrr^qu7i2Krbn@>X zb4g9Sy>Y5}CL>O8vPH`|^4m;jH9$n%sJ%RuK_mqmbkvG=ZooB4-TnMT7M19amS6XC zSse^*T+QVOQ?saz3}gF9F&1}hAL=QgD0_IyC2`hswN+y>jT_f!zCX1rQyUGVOb<#m z_7riD)8KD^28)*`F?z4aND|DJAsrNVihI!jZxJZ;r7P#>=QoxcG1?g^JC2;s;w{ia zw(dYdxWMti8H2p|;p#~lK^4O>StDC|`24zRji}c%KMQYAXS`ZjYqo5*njMub9NREX z=9?5F-0rzNRyO?<)g_0v1voIWNt^#GTwCnXcGUbbQZt;3ljQa@hxl(ZTH|q21j@Vx z=&SA<$^VEus|38-uga$Y}T-Nzbg^KQR?=f z-?dTmKKIOq=t*-fVt%f1;3SXxKO6T!Pi7SZ0I_TL_vi|OCc*<+0Oc-Ikx84Cxp9mQ zeG4&NC`$|xKiwu|+?2%~f27!f4B@x+bPDnDpq4F`1m~6g%=w0D3jLchv&0Z$l20|U zdn4MXtRjdHCbrio-kw+SJSn8$U@chP2DTFjqb6{oF{7B*P==7)ONY>5U|o zNcT)^$*XXYpub<{$be^It1-wHRKYm+g&nnxEjKK|#nP^L3nw-VpX8`GyM9JpuR?!! zI7wcYYv(Q&4LYub=SWzK8`q6MPEA&TCL9wWkBbh!rGy!WIgtiN7X`u zpCSeAzG?u2F!|tTC(5tUG>#4a$;p@e-0TE+ICW|@p^<55(m9Q# z?_`WpNfR7aS|}{fN{@9%51Me9jAsP$f@o;U_6p_12^ZIDQN{RLDc|rtSA^ZYVCTd9 z8+3JoMyl}ul4NGqO3PQD09^~iq~oZf0Ys#Hyu!gm!m!9cemzv-sA1}ReT4EzKL)K> zr5B$lP2xjLy$g(%m4p^OI=n>wcQ=U95+lZqmkpZlLS(_?DTk4Yf2vco{>VOIj&|?( z0iZm9o1J1{Q`OA3A5I2b@i{Ouf-D=0w?`kM9s8e_s2M4Dae>@Y=rXwm6^z|jnb^~OYyoM2DnC5mdLrgF{Vi z;HI=?BbH{y`LRSRiN>Rt+V7tU!DJcf@;HHcILq|-sA2KMRpO33pM>L;Lxx#!vpV0> zzMrm_YF~XtT>b&PU*h>bEN))+!|!zf10eiDkHT+k|8aNC@>>U?+qEh>v|qb8`IWG3 zo70W<;bhEakA-qsC#;rR-rQLIT~&|_z+)$c3SZymKFl)`7Pt7Ri@4(jPHx8eX|_8O zjP3>OHV=@nS>a4DuyA&MZ}w>Jf9JMXoiW4(=8?ZpxsHr#TAERRWu+>3n+CCf58zg-2NZ+Ksh0pGpvh+FN7?v z6(BPKiD8GJQ^`wa6Qrwnjpd>Tf!lMN@B#gq$~qcDRL~kU4&SqxX~X0 z;?n?v1>lu9DuFGWgzIPIbCeOO6q5$R5SGnpx52)EB1B2L$m%#Yn4X{u(Aco(Co7U*gM|EKccm>65{RXXi(xA zqf%|gik}%<6C5b;yqT3E&KfNizbym?bQGlrK*9wC41`{)^q}V2H)OQ&Xf!+yu1gts z{Ie2I)tyv(ElmWdXg{8be!Mo$6{L#egI>M4P>*vn*^O})-RKq+@ z9nmca*9aET2s}7Ev@L3C!ZRItZPsQ0 zLCX}5`;1gok%2>}H0ETI&-Lp86Ui}5H21o3%wSMnsQvqMcXPL6oNU9)Rss3)x!~@z z5s71Kd%df{!v_>Dininc-$o1XFa!GAGZ%hZ$CJGZgkRp5ZBvIiQ?9Y>dD@x6NTBjj zAh4L;7WprqSoq=QBX@iPfgv(2;wx;CKV^eTbc2}`PbSjBGUFY9MD{XU;{MT(df2i4 zCrbm1ZYg)_g-)OzK2F_5$@pqTM&~`ihefzCiKB92$$ce&_wO}74)2a}CI9KErl#i0 zzzGmZYWBtB^-37(f9Z2cV9=9%qznH>Z)_}{hXRb)7u?X+d=W1syV)C(1aMhM`oJ=5)#nec*&H%pmse`8hIS)J#zuV zHGqp?-(`QAeZDg|s`vO0&mxNo#Hio#TJ=1Mut(jw{nt)KNjV|m2>{@@t$@P6UC}?|M8_235Lbwj=x;kt{B>8-| z${y>zu&J{pVs z=qR)8C>Q{%R7g$s54Ngjkp1fkPT2~IW#d5?KB3}CK9yGg&qw;o>E@*l*Xi%&H4n@* z0RZluE9|>>$#J`Gl_D=!sIUKG5dupul#K+*H(<2wfQYB?vXB=NHoWVCi^6|l(7qiW zd+1I6p8U98=v9Mp=CGFt4?i?nviYxqEuUFnIG} zwOv75BVNq}r!SO@Q8E=~F<*wZPtfa~&gbV|Bs^p$0{-0>3_PG} zY|=`ymyvd3Ldr=^3D)+9qA9CJrKw9prM|g0@_95Z!5N|3QaV^gu~aiL9jJkyXihb3 zbCxU%FxGzZMYSNJn^Tj=VS7xN3NL@mw_1&kAtUQ%s7+p71j#LD*Z%+@T@w5m2>z_m zZl?HzGG@|gT!wf0(U52bx6^r|sE}X!t7(8$y2s;%m{g9SS*)wcAXD2&3Aw%J=mFhC zzS&-E0iscjeDuDn6f|#1pM}iT6P-_Z)KzQsXZ!HB&K=gUn5YfkN|y+sV&gFvHBLgx zE-)p}_x|Yvf7wX=I~d9kIF1fIxbYR6V>WJk*J0=PRTAYmXUhUj7pPGMjb__;d3k}| z)j5CCb;zDJvhxq|INEA?jQTK1;JxZgh^#juNRfjf3{p2$`Os$&)2^&N6n50jcJ3{( z`0TgDg1Cte$cJN|1wW{1!g_Tkot(h|xB(8gh;tv9>U$w*Vv8bT^wm#@~p zXUd}QLq(kR_3;4!F!R}MU3L}1d6&Ra28d{#NvFW*8^ClScD3fk29#vBffW#fUN}WT zdqNfLc&Uu>ze$KGUCtXP;qnMULg5FXuO7w-6%oL|V?JM?h4(|rCZPJ|Lhk#=9C%_< z4=-it5YJEU6|~B1CAf}S@E8W)u^R!yfi(wlU#D3DJrnoL@z5=9$%CylB(ASMfcZZ9 zL$sAa2DpT=e^6LS59}IS6fo7X9m#g7SD(paDgso;{#QIfvm(se8Ts^EhVC$Y2U%k- zFQcVCT=2t#?l?a?NNbY;N7UU{#gzKV;j5`xGi9aZ!N^TnT1UP0E2=Afo7yU@JUO}G zGiGRd!Ix&)IGh0IE$t;>Xb-ijGayNSj7E;^#Eb0^eJSquP}2?rwI7PHNMKcALuCO3 zemQ@)ioMvog~{F6TaKFtY^se**K^9b_KvYiJjcDa6I2aMP05IcX1AO)5c@Es>RT{i@h2ny1bjH5^hStTG+`tFSouujj*u z{Perj+@P$GS#kwV6tBsP8LU&X19>X_0^QMeqwPiV2_`X3^g2fm#(cp3wn9Imr70(6mygz!W z@sc4NwFz&E{{2G;od~c!^<4DinE^4h7j>wGZ~m?7mmg^>MhM^j5Zetc(etz)bqpUW zPO+id_Q5(iQV$~U3$s}_;<6_tJjGH(;j|Bp%;s+=+Bu|$u>IIur1&894qt63NugJ9 z`4{P%N8ug|qkq8UriWbQ{Pf)3%w4>sDRybK?{vR}c@SA^J%^`KcN^!^8Go;0TDz|@ zZx-*i2+(a1xY7pb@FLs#R!5Rpp6LD_jQ9I*RAA8pcv&^SDG}6*Nn>96hEHE6kZeyz z@!NLMty{;X|9~ehdS;=CQh4{p0b5?#qoq_6gmA`7gA&Y*P^&cLqy{L0xh$5{i*MZqa{GH{us*}k{P^_o-~D&D?qp`6X{e1T7K zelfGEy}3k1MHMC#gEwBenX4bWuwi%}xc)L&s$x|O?p27P1-Zp+7VvET^kIB$_R{#< zCzPl)EFwlGtNKzL>HA)d@SAFDsxUI9#8+0PjPOnc+J2|6&y?o5sI7I^wPhut+4SML z<8xz}NwrrR+~d`{iy=3H7rEcRH}TGu^|pi|NIuS`@|nfqyoo=5GI7OV7U1(y`e{fm zWuNNm9v2l44zN`;OeU2MQe!%&tyZRDB=*rFwzp98p`*+G$}kT~vmCDK@Bc%DjXq_q zq^?sY$v)qf(XXX!C;vo2Q}N&<9M1yn=Zl?$vLNpEb3yhG=;`TSDsrl;eb3caQYs^t zI>!tt+R2s@SvUt+V@WD5fj=ghzK$-|A>2p(4|%JmIrSgM4(h15#%lu!xK4?+Av-8lW6U3d=W(ay zV1`2}m&@!pib$M?JxdlNgVRlWZuO@(DOuk*U^)8>|8y#L6*m8s_SDiV?dWTkA`1RU zIEjmuFC|3~dapP|XDwT7k2#y#C471O`EuiOOjAac$|jzvlO6!>@%vCS=fxtZ(y^5V z$*cdZkYOLNp18@15p#{XTewLNKibvrm139|CO=Q*W}B&@miy}3XRF>KOjNxqg{e)j z*C?X*t__?(IVRB0GMNJ2AJ2)*&(hw(Hc+hAd-ta_5W^&(ddBYv7s(@IkOS|OI3(C4 zf>~IpJ;yEyv0l)1%2IVp?t&6SvY|6OtQjqXqH{0Y*{Muh{d#u)V{L#93m;8l$S9_* zG)v^vuih61DZFY`F+O)TCrR7zr)jAi{4T`1>7b$K8e43LJ#sneudE5YR)Po2hg%~U z`DbU3GnKR8rm<50?!FJ5zx<|hj}lv69brs@031N6s*l2?CsHQ5VJQaxYP+*nX*OMU zsd*iQ7$m5~^_MRX6AIi|(BiV+aKWo%8=&QyX(Sk@P!K2nE*4XXO)8?WGF#wnn#ei8 z6#}X(+scqvd_rY`D1zQ5mA#}Fl|9*L!5V+8ub#kozwWdFE}yQ_Wh3*M3nVYM z=i@CwxhotNrT^9&c*4&TP$%X&U+!U&tjAMj8jPHenpX$q5Xo04w|}BsOA3jdCIAgn z3I3M%0aeY+n}B{+roaE(UUho~`_sB!oI8i< zk)pdLQtIDzB1W6$Ww|xTlUJCzYybOI(*e1V+4uIe>-|O*4Co>uUG3C)9z>n7bdeXM zAk75l>5EWROk&8eN=dskTW-3w-+o$nY{a*!F@O0fXL+9NkK%p`T)JC3tV=4iBp*7% z-%}!#8DT(+`FnL1Eu*cE3ZHOqYk_&;lO;Gu*z?@I8)lJq@i$X+|77WwHV}Ey8yG9+ zXyh{hYeLJy5mjO`8V?5`f#kcx8*MJN*|hrOK)?S_V5h$a|Jd6%%`(A~nw0^zYLX^Z z6o#H<;>DiLCF8fhVvMJu(W&T{U&xM!ysr44nh9tU3q0_UMyB$=(Mw~LA0tVciDV(> z83?+C)ou|sSn#T&RH$|l^f11ORCcFDg2Ly~d&f$q)6LR1Ns`UEBi?g?Vu5n|dZpH< z+L;xykZGT#G9jH$c|C_=m3BuaGvf&HvH9@#%1~GmcTY(x%%e|aaE=ClgihLpWDy~JpjtQ8F}>z{NinCE6f&NrFOm>7w=gQs36&MkZK>RtNs}K9F&V?D8yq&N>go=Y8akDb z)nLB#-<5%a2XbyExRF!v7(QAUyB4d<8dA$Ks8>`Ip*_vsQ<+B_FdUDzOm5t+L5y@_hSACy)4T*Zs z)*4*%tsuyu(o5dj<9M%A3_M@OB|9)Ytm31XwpuZb*#udTq2BuLee z0Kt?LdJJlepRr4dypH1y+rQp3TF0(o$S@UZdsRpNI$Ao%52w#<0sAhTz-RHXhx2hH?x}}*&`*zDy zw{oi!rU=<6U~q3k_2f6|((%{95}a{;KeR<(Yw9M^Wmm1*+jX5#k9JJzaH=R=8K-W3 z7ojo`L?kzkz9Ey3A5Vu`Rr=E9b!t&alSVj7t`?9Yh~!Vll%@nqTP?bwKS(v^};e99oX8 zyu8g*6>X$)%z^w}m7_7voT-+|%NX~rcp}{sV$=^GTRlZDBvpS=L4r)vf|IOC(hJU74jh$u-JLG%>xT#Z#`*3{=EQyC&` zEc*xe75&R~qC7}Y5|eccxgs-q%F_OH^{yEpNmF~&l5%KdyzK_X7Jp_sinqB+ZTZSw(-xCeg01KpmWcBNgto9r z`b5!<^w12=ZM8g&u@>&>q}A)ruGq6}(Hu{n{u-I`T09ToTk3?JgR3X( zG`AS!i6QLNoh1YE&y^t>h{pH%`m4rKsyieYo4|R^po=n!Ak?)P&;iHlyW_T;ttQ_S zD@d6wmaTV*6_LJ&RlqkO0mw@X7B!_JMElxSrTZO zmO(5hq|5=!0Le4zT9<_gElBvrA+tQM3Z41O_ zMVe)BbI&`W{VfJP6D{g-cjnG$2N9o|Qo>diu8ERrY47t+B=QCpE`nJ`$FG3bKYeyt z;PB*IlJDV6h}xdNmUV3|b<-xo+kW9|r3_sbSl{*w$$ zOZ^uCB!m7jAf9{sup48=BHZ>|2+f&i>>x@r}K9PcQxszqlEQjhQ(o#|wBhVW5jL zX7!tz<|RL-i%f}klx9+uuxy_RqF}cw-(W>I4#9GID*SdQs zE%H=$Br*p{+awGpIfnf}14@(y%=rcSlD!J{y`%_42oY@x-LtL)zV7ZHF{uatTf9C# z)vVcPp46yH`&}Jbu0KMS@>y0+SqDCgmH_fM03!|01`DYUN)U$T-ZyAySJj$1@(fUM zkusrc)!Ty_54X5FN9Gi{^Vl(}0g>s_)->!#gek1q6%({f$10%Tog#wTtLQ3W?A4ry z1fLb^@2D)nBjI{i;C%||u1za7i~6I*g1V~YVrNSr33}<|t0F$BBJ>o^cTJxOAbX_$ zshiJ>7wtge+#ny87?XvnA!O~{08>A?Z3SN0mwli3?W314av)>#jl!?DqKpa80*(H| zgNj3d$(JjBit$Sq~Yk($=q$0BE4bgZwXp;p}M zdg2cB{CQgjt|ro+aimM=Tn8%I^sqDi8KqyZ=b8}4b3A4Qd>r^_1tfIA4;wjD89V1| ztql!cYmZB7Cti<-rzUjN|MgFRTC8+nV}GdZ8k)aZ$4v}xQj!D!ug3};#61LA$s1u* zT_!TP1@at7Fw!}Hh2Pw;kaEJ(9ZLF{2fbYUGm83@N$CZ-re=NFo>-eLrj|4Xb}BTj zwE<^N!k6nL?waHS&2K*OpTzd(MiZO_9%SV}Y!(=pJQjQC?1x3AEne)ckh(Mbqxd?m z!&l^?{A&4NXt0fAq@dOJb^>S|;6#T!2^R`k#Zp3CITxin{m}B6p70>HRgr4kW88zc zUZNJcOxlbT2QNNw_<9@r(9U^Kb5Dba0UMcyMM||-F#gV`%!1M(jA-ny?tRQ^ZnU_Z zdDBccy(`ROA>RN~qc+R{3v{r?rICZmEtglacI+!c75&+PdXI#S*lyQSnyLcii^EhQ zjZQjYZn90gU^`=8ewWDlb_Cn6hBv`v;HtKe3L8E_oH7!x6|IXu~-{$}lqg+0LT(tPgRR;>f|#|DJj)?iRQE z&z_5Pk;UYifdPS+57-q$`vZ`FqnP=w!~Z=jrw?z3eET+d-;4cwjPqM;o-{$*$W>u_RsrK^CYrs@Oa#R|G9Sid-be~r^Ijf--d+W8(+;|EV~9YGq z8xoaAO%$N@mX{i%FNk{rgnEE=gpe|=<1_w2<#w|EnV4{CNAqU3e8;5&xTRs{Hl zoDgn+NVNr|h=HFCP|;=~dJ%BP5wA*Or=ti8KT?W8%%)(mt}Zs*PKWaKhw<0gEozSe zgj?Otwyl<2{6vOR>*NVZxq>xkf87w-u?fH5EQXGN=1gMRfG`m@JFdd3+}4dzVsNSa zwnBt#D#kaUjoIJODe7+RG-JD^8W{a+cP985HSY|Vjl9}NLgKEM0Ja*E+D%+G-z)A{ zp9tenk-l=-j=LUPXTWOnWCQuD%;881+sKUE(Jt27%)b5JKZSn5yQ%!%$g>*_=)k;Y5`ww7 zts?-K_T}^<-aCrWVtt!pp&l*pJ#o1mzT1D<);1)e(Z!o_cenuvjyiI#jbl z92iIOFWk{Jz#KP1wP4n4VJ7wKWDDx2?^sPZ-6myyKop2{GTdiwM2 z;?w4{Y7PxZKqe;U7#O*b!E0gv0*16MpmPjZW87>X7KiM~Opv`3rbv*o(VEWuRID1m z2gZO$k54gqh*-fD(dJ+EPF3+PnbkKydd@60LBB8Q~bX(p=F%NopY9sr%liu4(ERLTL zMqE9!F%%zzpvXKKq?fO<^nrg!?BPYG^TXg~iI)Z*WWRyX8<4Dz%4j9F!>n2*JeZSc z^2riHy3DOG02|6zMyFYjhxuVbHLxCg;=haOs$lzU{R7q^@vi^obkA-(#GFKOn%n|8 zcjW_ISNmG_WCR?5!OwT4(vIkD=*89%dFF2j0$5<#s4hwSo_MjYsC3_i-Za}@OV)#KWrD;Tu=#@92S-KPI`C_ynrOh?eFA}y(LYIwtAnz-G9aJo2?l*+ z^0NC=9z?5bO|*TRts3SRYqEAc&N2S^2?f99)G(}%$t<57Jm8}2OyN`u1!`D`(@2GH zEB1i_PO@B~Md|_%z>6;7BSePn&Ucz;3eS=yg4$Ibc>^z zoRB_o4FtLqrq%z6zvW0zNwbrmxv>V&~VEovntN zq+#Dc8{m=Hx@;FaEqAs=0bi(lUh9@;O>1#!)Bkk;>(k7!^|KOW%7)>j`?}7n3P}%v zvX>+j12{er{fgeCFBt`b*p?tm>?;*L#%mhG-9|{+^^i z*kZ!NfoFjweR|iAm`4CYuH2oX=uKn6!#$`Tlo2m+vdXn?zyT5*Wc4wWtNhZ&lwRTi zty0lQ*g0ypk7FMD+a(;N+D%`ALqRBVb=R|wFuwBfuKofSq|61>6|gCJlo5meX>mU)oM1L=X=D0pK~g%Rj*Ee8CdEMjQ*? zEb*y46&I=j%MTK}-Fugso}?zYZak*Fh&jFFg>q8;VCG)>@d};1@yMJ#Msun!mnt*H zT}_U`Jcu?`IY)=rYdQq?hB)c#$^4fcIX>A8JO`n9Unb!k-KfpL>t?_6vRD~ty zI`z^`%QC1ps2GHdxeR1u`OES?&b#->z-&qrb9|)p*W2^vQ3x&8)0}QDQ_2s6c`q%d z2?{OHd-8q3L_1nAcsKKVaD`@nLdoLUvJtrn$ni7}{15!@``@5(`}uS!^hUcA>8twJ zKyCH!rfv43R%KZkPmh>PYpHyl)5*a$t~upzVimJ|Y95SKIW`K_{pZf%{~3LLL%xlU&$iTp;`M%rCDs{K4s{ zreRM&rh^Sz1dfj{(X%-qoY6kadboymM_%SabQ#?(#)R)tHBrbU^nq}{>?}Srq;jcz z{Au-Z8@0JYkvcPblir5GY|9c) zT0hc)Q89O(Jz`07Vj(OrOx(a|8f~!;rq3jcFK|ns9|1Pbv%o0x`>vSasOW}5*ZNkx wPx6^^W}6!C?24m_)Od^3pro&j&sU!PHBsYjs7~_SLBQ81DMiWhkA{K&2MO=rQ2+n{ literal 0 HcmV?d00001 diff --git a/Templates/Empty/game/core/scripts/client/postFx/turbulence.cs b/Templates/Empty/game/core/scripts/client/postFx/turbulence.cs new file mode 100644 index 000000000..af4d7dc7f --- /dev/null +++ b/Templates/Empty/game/core/scripts/client/postFx/turbulence.cs @@ -0,0 +1,63 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +//----------------------------------------------------------------------------- + +singleton ShaderData( PFX_TurbulenceShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; + DXPixelShaderFile = "shaders/common/postFx/turbulenceP.hlsl"; + + samplerNames[0] = "$inputTex"; + pixVersion = 3.0; +}; + +singleton PostEffect( TurbulenceFx ) +{ + requirements = "None"; + isEnabled = false; + allowReflectPass = true; + + renderTime = "PFXAfterDiffuse"; + renderBin = "ObjTranslucentBin"; + + shader = PFX_TurbulenceShader; + stateBlock = PFX_myShaderStateBlock; + texture[0] = "$backBuffer"; + + renderPriority = 0.1; + }; + +function TurbulenceFx::setShaderConsts(%this) +{ + %this.setShaderConst(%this.timeConst, $Sim::time - %this.timeStart); +} + +function UnderwaterFogPostFx::onEnabled( %this ) +{ + TurbulenceFx.enable(); + return true; +} + +function UnderwaterFogPostFx::onDisabled( %this ) +{ + TurbulenceFx.disable(); + return false; +} \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/postFx/caustics/causticsP.hlsl b/Templates/Empty/game/shaders/common/postFx/caustics/causticsP.hlsl new file mode 100644 index 000000000..f9242734b --- /dev/null +++ b/Templates/Empty/game/shaders/common/postFx/caustics/causticsP.hlsl @@ -0,0 +1,66 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +//----------------------------------------------------------------------------- + +#include "../postFx.hlsl" +#include "shadergen:/autogenConditioners.h" + +uniform float3 eyePosWorld; +uniform float4 rtParams0; +uniform float4 waterFogPlane; +uniform float accumTime; + +float4 main( PFXVertToPix IN, + uniform sampler2D prepassTex :register(S0), + uniform sampler2D causticsTex0 :register(S1), + uniform sampler2D causticsTex1 :register(S2), + uniform float2 targetSize : register(C0) ) : COLOR +{ + //Sample the pre-pass + float2 prepassCoord = ( IN.uv0.xy * rtParams0.zw ) + rtParams0.xy; + float4 prePass = prepassUncondition( prepassTex, prepassCoord ); + + //Get depth + float depth = prePass.w; + clip( 0.9999 - depth ); + + //Get world position + float3 pos = eyePosWorld + IN.wsEyeRay * depth; + + //Use world position X and Y to calculate caustics UV + float2 causticsUV0 = (abs(pos.xy * 0.25) % float2(1, 1)); + float2 causticsUV1 = (abs(pos.xy * 0.2) % float2(1, 1)); + + //Animate uvs + float timeSin = sin(accumTime); + causticsUV0.xy += float2(accumTime*0.1, timeSin*0.2); + causticsUV1.xy -= float2(accumTime*0.15, timeSin*0.15); + + //Sample caustics texture + float4 caustics = tex2D(causticsTex0, causticsUV0); + caustics *= tex2D(causticsTex1, causticsUV1); + + //Use normal Z to modulate caustics + float waterDepth = 1 - saturate(pos.z + waterFogPlane.w + 1); + caustics *= saturate(prePass.z) * pow(1-depth, 64) * waterDepth; + + return caustics; +} diff --git a/Templates/Empty/game/shaders/common/postFx/motionBlurP.hlsl b/Templates/Empty/game/shaders/common/postFx/motionBlurP.hlsl new file mode 100644 index 000000000..348484f4d --- /dev/null +++ b/Templates/Empty/game/shaders/common/postFx/motionBlurP.hlsl @@ -0,0 +1,71 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +//----------------------------------------------------------------------------- + +#include "./postFx.hlsl" +#include "../torque.hlsl" +#include "shadergen:/autogenConditioners.h" + +uniform float4x4 matPrevScreenToWorld; +uniform float4x4 matWorldToScreen; + +// Passed in from setShaderConsts() +uniform float velocityMultiplier; + +uniform sampler2D backBuffer : register(S0); +uniform sampler2D prepassTex : register(S1); + +float4 main(PFXVertToPix IN) : COLOR0 +{ + float samples = 5; + + // First get the prepass texture for uv channel 0 + float4 prepass = prepassUncondition( prepassTex, IN.uv0 ); + + // Next extract the depth + float depth = prepass.a; + + // Create the screen position + float4 screenPos = float4(IN.uv0.x*2-1, IN.uv0.y*2-1, depth*2-1, 1); + + // Calculate the world position + float4 D = mul(screenPos, matWorldToScreen); + float4 worldPos = D / D.w; + + // Now calculate the previous screen position + float4 previousPos = mul( worldPos, matPrevScreenToWorld ); + previousPos /= previousPos.w; + + // Calculate the XY velocity + float2 velocity = ((screenPos - previousPos) / velocityMultiplier).xy; + + // Generate the motion blur + float4 color = tex2D(backBuffer, IN.uv0); + IN.uv0 += velocity; + + for(int i = 1; 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 RBF+E+002ovPDHLkV1nj@91s8i literal 0 HcmV?d00001 diff --git a/Templates/Full/game/core/scripts/client/postFx/textures/caustics_2.png b/Templates/Full/game/core/scripts/client/postFx/textures/caustics_2.png new file mode 100644 index 0000000000000000000000000000000000000000..99097fa0ed112c28958363f2951478a0955218ec GIT binary patch literal 33963 zcmXt91yGw^(+y53?yfEF?$Dy8g%+3M!L7Kv7cIrzrC6ZAi$fsA-5r9v75D$?H}i+d z1Tq8M+}(Tk>^Wz@e^F7u!XU>0fk0Rv6lK*wAOzrB1Q0qZ@S^WrW&ymQntoJ}1-<{B*J+^mJH=Z0)c2jA7tNYcrK2# zpW1?TQ{H+T>If3!6Vtt)H{*UsobAdZM{S;@binkkX7PQ?*DS}=_aD3F>&8Z8hY`-k&jPI zObj`_d$F{%guQ%LQ3-#^&B?(Y>lr)yw*7GD>wi|~ak@$+etLJ;oSmKBu)Dh(V!IJ= z=OQ5~`CngO-}U3;vctD;Oa7fS{@1s+^Vbi4KK}mHIUxb(k+Vv3;dAJ7qld2U?t;D? z#L@2V?z1YNKQApT=w_;v!fcP-TdyxKrv)>WmyX@-8Vmde-amVgH zj>@;*-rm0hV7bb3v&VP_wvC^cbEKrCXl6Yna~tyz0nM%&|jn;46ZC%aK@xu zB68PoPQPcytSOgHb}8Ih*$Ny|kH`56l2Jo@_vo^?Fx z?p!plRK~~0A75U&ay!^zx@}%#Hj7E$*B#ZJU0t-tV2=z8d{{cYF(^$W3#_ZF6U-fx zVc^ak1J>f_lz09(Vlg#3I*L6@Wb5JWy_l1eW4Ih(_|=VjLGQ4`G536>)ni{|L*ViH z_^apGt((dCCC`Ak-b{fB9&3V3eXS$I-AhxtFuD$@ovV0<-^2BWo_ni-n1~3OA<`Vq zSQOGT5JOHbuBFY*%^*5x_&98*?cINp6J2EBH%{3JBrZAH5T3=N+pjkrXOGDW^#gZ) zXJls?P4cAd9i=nqfj9l8wN?*L&rozI_h0Jx7?8r3lfXK<$e6(AxVdbsy67(pUCq0) zmWg9H^!;}6?cAVr1)m{>ox7O_hUGsI&{(sfUBMXg^e2C*Hfo>QeOGVCLLey@x3|rK zJvlx(ak$O)4p(}ED~B+#Zd~XN#2NQ_vyPoO`o9&2h%ti?Gt2U$*rc5_3VLn%%M!zq zB%M+UYUFq|PH~bEJ^?FSBqSs-iOpRg8E5ru8yg#8KEH!74yX$>c3VrNCRR1^jx2Q6#9eb?oiad8Q@>XFPxJ$*(sB;M)c&)zMw^Aa?qQ-uW0x zHCq*6?}WEzVqU{t>Qws+%2pTmFFO4m+;N{>ls4PiUuIg3Jr);#GUKV=lpj(TbrB7s@K=oO%!V#A&pDNKs=sJ3d?WU zAM`0v%z88hA5rsuWtcSLp72THC4i|(YLBFy1XJI$*m#tjZzqHJa*C-2hn&RVe z7o*{vK0H2(%f3ExoAx}jh@1=>#;rk^_@X0(6Y-l;z7?sDG}4=$(kd15*VgHTteCT{ z)_Wq9T+Fa;kb01sO#_Uq>`leDqj9 zf=>AHJF6(({9NlxTXj14djaiZ%$!~){Mg`LICm@pHa4*g+%gZB`%^zG8)p}R104}* z+_~0xl|`dWxK`u7TJ;q)zT^*nxISJw z^Wp+dgF|CouU=u`hpj6Hw$;~Hyh$P$PYG-Akabk+`S_k~$E*v>YiD0ae*GO=^=Ta! zwb1GVO#`!^>qrv(sSp}3$!~@lh&2w8T9o7ASi_KkO#Z(e5}*rG?wY?ojUO6{FuC@X z%E<38Y*k99+?|}99Dl%BNTPd;t&A}}kBteNhNFJ7m4;JdanJvHFcHjbpO>*|+r99z zLSNQhR|KKrVuv#5Xdv>hqzT7o&ouJMN+BhBo4mM+`mLwWGe}BF;RwkO2_*DIzP|)+ zkDZIV8U*3pow+L7ngqPaoIXf#ZzSXexQ@=m^}9TMeeI%qHsp$sKZkK$ec@c`hn5>! z^NG&uTa3_yZkibi36JylsB2V>VO`rAC^KhbM~x8?5$-N7d>X`GwAW5=(3bI(iJCIH zR0>Jnwpz)@F5TVT)u1ik0k^k(gC5qesE(Wx7NFX2y@N7W&f(zOFB|UnhS`Cf2)7j+ z4i!bQk*98Ed}D=3oh{g_9p3nT#$}mCYQp7KLUMf)-X6~o4$+x6%V4ZkfY;Mv+}zfg zuY05@$@$2})|PNqravRU@<%2tu z1y>nhJ3FOK7Y1$O4r8z#gt74h96RvrG>MLoxQm2lc$Rr*)A$OwEjR;!t&pj1T{;dw zBQ$(XgsF^ha&i(rmPN+eUTvev^zbReR2W8)>>zUB+~CSsZzT#>vY>q1rO3OkSix4e za3m*(oUm^vXbW6eNY98!wZI>Gsh}HYmR46h5;LSoCAMujnoXEPAATnruh$h=*dv*1 zW>=_`Lqpfl|3P0dgaUbN3=$&BHszF%%2L)N#E*!;7iuuTES%(f=EZk`aZ^YXI)502n{V9i;JFWRhaTbz9|qU`x{rVB2>d)d;QBE zb#x4Zq(^w3iz^~H-xqnb4+zFndI`nE@4Js5`>OSRoSW9a4?zo5lKt-C;Q>UwVZ}j6 z7GcGdwS@?Idj_g|<5$zmmTn{wax%3V**9( zq`K~je%T8%bK5JMCk#_KBQ)xuhbwg`1U7aGiJT!IGWezdT1Hr-*$(NrFI4^8b?DuA1Gns+|vrcle(U zHYVi9)KFcew9Dicb9tAYKXMs$VBXk>X8+e?>V#`e=RE!}+T0@g`j{oM0QBUGO}VSa zL-F^{cNIvW#hDpR04p7DY;3?+FPfKuL@vu4b_4Z%r}`S0#7oULX%Q2NR{bEE{Qhas?&zj^{& zqf=+Q;}2C?S22+r_gDq2A2g_4KsF6UM^@cr5r(nY{qKCKC{?qwvg%t~Td%i=Qjx$& z&{&!*J?o}1yj(DLxx(0Nrn<3(EN?MY0=)tqaMF)=c6I`jMJD7a#_0{xO8YreE1MoS z`X!W>Wc_>0CF?CM@}-Dt6q+WGN?upWgYsTU>67DcyEgp-Gk5ut&bT1mIHsW@>0@Hb z8~$0R!wcLc|GLOdgTdV;}Z{w0ZC_q1!jlb$|5 zH1Bp`U;sWtROt&8AZ|oX=S+~qG*&!QS8IjaAxxR8bF|wOYpl65^FpR1+orrgnveq7;I+d1K+^-~Pk4aI zbfKOwL<~FT!8e&XZ!UV04}^^a4`^=XFPE(0DN9nVE8)M)pL~E7mI)ALB6{d zI^KqF?~EoWm;9Z%c(S3=mBwcEbP{wj)8EFOv)P0&LkO*Mo8?GPZcE^`Fz|3Na?030 z`EDwDQs*2mGfh5omr?9wWDPpzdSFAv4e-bPxn;CoS zFfKE3o>`PqfB!ZNU7?@7wQg&{$6VZhB@GC(3`_K@_m7Yg@e@OfIg+r2g)2)?HIkFh zfm~ZS<*|l(U=)HQoeyD98KSBMCLvClEHaT+=@Qq!1bKS6L6Q$jI^XPz=K`(1T6`<= zN!A~aBe*Wcw?CV58mMPohwBpj%a*v@f8T(E1Xr1Ln6KdzB@=U&l=OcsRIQm>y6}F< zdtuv17aYnmm$CD~kz3-b@szN@5W-Y4L`y<`@2G;&GN*9JSFCrZ+|97lGtN{DE93%| zo|%)rBF1D_o(c;CBO@BhzYBJ=Dggeq6QrOg7Jkgk%rsI5RR^^$I&!(X(hysN*o!vM z(WT}ekU-N~TG&_>UheLZGqh)@2l=bmp~KE=)D^slvy>j4rdzl9pPC{)pi(Xy461V( zDWOz)$1#l`vnla79y-5rb;PT{_;`EU0DT_NYvrPlbZB2&K_Ws~PJ}CN z9}lluBmg*pOj{IQnSKkvU2bwFpjLrKcF)8vnkFJleq$*hQU0w+Rkz{LruWW#Gh}VB zN=}CC83Z(u3(CaF)O}@$a$fv)rmkGhw5L0QuG24f$mx29kr-ZyorsC#<(zQ4i~D%=SkyJwi{D2gLuaXL6D z845Xz+>H``E4_V*7j#55V@Zg_@eAA5dUsEy+DFwA2|jJJaFY?4wU7m=1q#6e>Xj0l zI9w&JI^t9d2BC%qJ`qcM>+#omD7czv>uSlYQu!IE!b-K1-Rt`e$LV4!OnULNxLima zok*2-(%{-h$zl3w6ChHTmqX*%8%}(BF zP&nhLDBFxc-7MbElY3ZQOKIYLR9Phv100n9>1TQHr1qLvfvW|TH6Hel{Mq?GI5;?h z1)f0cN=r-84%ebn^!v+2>{F&WeRm0#(TeykH*X?R!No}V zGd@@JzZsvG*H6D2G=+>U@Ael8%aNYI=FSZAE+ z&z48}bco&Rak`K{kqyNa21ec=(qk?6@hpPU=c@L|Yz~A45lN%ZHR_4kAO;^eRwUgM zNbbpMh*_=U>Lj|>T|#h|?b?{*H~WLOlapBb|KyboyVU9 zC+B((!&{?!W)Z~ABnA9laX|Zv4*qIcN ziOGUv{B*pSQ)O7LJe5-x`c9dKn?174lw?M*rMM9Pu-}c;4E*>kT9SE@(idu>TAfVy z+`dlMPVOau=;+nyzG;ru##D~CT|(Y#i(JCLzwau_JRz?!2XHOiBh0+Wq^5UYX`FX7 zV|uLO+W)ho?wy|o4-3f7V~Dw|1T1Fqkb;D`I1uwRWZz6CZvJp?T%vMCyw(%Xp6}E7 zxS}4iKj5bgd)d2dxpg=LGwSx(PwHm3sQq>xn-a91C5G>|c5%ejmhs*3U-ie_fAzi_ z#Ei!9=XcLF-^vFo4TI^)=Lq02ZSwa7bGy|b$M~>n~2zsGT2&6{Ow#9Kbh1|XU znNYpeJrOiOA8Ln-@v=IyFr_?zua=dmy_ns%inBtRVB`FzeuI&-_H1ipWMuq%S>cfG zFVfR}blE-)^<}y_Lbjn1wug;0=I$pyccXX?iECB`^81RN-q6<5d5|nL(IKw?w+zjX zi=nb#bd%Q#1ga$xQYBj{R9ift&!MU{S z5waH#g;DVGcjtrh6L?7Z=4wold*QG8KCMuT>FS*`G^XH5h{b{&Z?lD>LTMWIK@%Z* zzM(IBq%njx8l-%6HDK6F|J2Q3zyz)e=e{{OyYPDtHm=+#WwN2q9T-`y1>fLL%OAHI z%#_25Kx9p=U-0U7C7ChX_eLBLEk?>;bVmqb?d4->{Uv&ce#b4s#T&2G1ymWwxr2nf ziv={>CBHdp(M}@d*o`c+*EJ4Tl&j69TdrF}s(0!Bs@$g=G+_mfhIxKV5WB8<-SJW> z6>(^eLhpdI>*dunhiTd(@v|1hkj1D}5!Kv)=<62t=s&l zd+SpJ2`Iwwt4Ok`p2#C>YjHDUptQY`2~wU6&)riYizrdO+i>WT;eLFkC-08FxnaJH zJyp%UUf`4$i=c4=F~YM&-2x^p=ixA)BRXZEz(wlNcF^N>+S69cC%zC|&E(%EMeRw~ z9Is>{vF>qxSh2m~7I{{IbV7F;x?YQ~`dub9Z!kglqA3~^S}qjWRD50)mBg9be-kWS z0}I^GnnO-4T124gU1LhrFM1(xWQi;x_Yhg9Z(k;7Y_JtP#a+R*I`zlyOW9=b$(G?l zg~upN-)$L4{oX-RWlrL+BD=nnXK$4ufpj^T5|b`j$y|xQo zD^S`X*6?H$^OkGf!IhCh&o+x>T+R9)e%`q5v}Y#?N4=kPd2$mst1n6ew@$xrUjo;S76+t*T9aF6l z6A0j6cSkN3YF3ZblmmMr<8(CbYDTC2nwfpQkNTF5%xECX=!gxK-;BA`nRdfto(#2W z13f)G+!0h#GNRDUbgv`)F_HLQeFfj=9K1-(KtzAZI1iw;GSrIjViS zc0;yLzKlFpYi|sX#u%SxxcsQtP(AjmZ%v=D*%sNZlJvr{JC_9phy{|u=)3#3|>HIrJnoCKlT=C%Cfs`Ojk<9#WaIQ9wC;Kzy?n>2*)H(~tZ z+Q|Be7?8w^wn3A~vYGZXk?!_eKFgNmrvGZqO2A4}oa7_&k*$7(8?99hol3#xZaWw_ zi^+!tC=qzV0DUh0>Km;+`}*8Fy&p6E73EUNKPJM`;>g8wk*o-; zh&|qSrn7E)Kb#_7)15|`Ac;gyNn%#Q6+!Z=BkV`Y0-`%Vu1e5El>T$!O~4aobgL*S zI{Jc32OcxYb{jKSeJ)ZHb(yUybxzDL#H0my#{U3TA_9j7yVr1Sd709aUWXgC=$7&P zT~(ausT@c*TWaxB26@vOTiGnQq8Ym_sx(@>(EY8b3_B=7T0>tuREw$=xG8)R3ACYxrutWSf+F{9)8 zlT7*5d)%TZMeSb+6KKZ2@lruNRc1h!FHOr%!Ir`OJC4}G_lpXJ1~%(ZDj#GYJ3#RM zLl^(ejh^l9q%I^v^7UaIb0CqQPtIos>6j=FlNJZ(B(w&K9}EbdFSCn*uW8BmW-2Q3 zUA_gze*DgVy8Ez^l}~}E&9QccsgpETF`-qHj$qL4Fqg2fjc^Hyqn`Tofuv0PuLgld z-1h`%wYm$I50@xshooM!$x5f$ z%DER-kZ~D@7rKief{;^SSaOkwBKUA01M9HrG70lg9%XF-L{-%CR<3k>CkRa*$(`J2 zBo-)Ax5dL-J&Z}BsOEQm9e&1ZkMp{J5>Ze5%k$ccPv(fl@lYyPNQAJMm@V)FsZTMb z+X}a?9-Q3{71=_{BVQ8xhng-!4`s(M2e4?tr)26w@klY*lQS^}cuay1b_XSnG0^(~ z^ehk_L(KZUiLi=WX~Cj5rex(u=@fILy@3qNwQs7Fk`aw*C>*NA_ixH!cwR4EAdUMt zwzm7o2S`LzyAbY1=R<2}9poiK>Tw z8$C1vMV$89hm$K)H6hiOd(BrUI)T-Z1;r4xv{36c;H*?UnHu;r$yCZIwp*a+g1*y$ zmxq5j%+>km{H511B44Pbm1$#w4@Abi`(92G9oybR6(#=0z3s}1Sl>*8w;(2^U59>^ z4xT|`TSgs=4tqe{Qil}F(<%uR{xsQInWts3X6Man`PRU`SI#6p#4C0QCiVBdEewGy z6C~;K)N!-MU%09ChO;cJ#}m3Fy+f-Vxbu~y?Op%_WZaYgnpVXOZb^1-E{^pdhenFP zE-M#H%w8L68fBQ~h#S_!m9)HfL>y09y(UxbadoD3$70eJW|6nQ9K28|sN$Cxxo~R0 z0&dOjF8LD)NfKu2$1 zXEL}>ujxFxr{L+tqmzvT;In4FpfmwWha`MuWhFWjM$e>T-)K6l?@yXsu#C=(D#j3+ zih~t^$|%t+Xpb!dh;cZfdJN#7VWSR;j1*rKGGohH@qE7cV7a%h1WgMIBT}L?A(34D zGK=_Zx!D}2iE1g(=OGWTqOQKA^zs#!dZcFI2O~uOq?%bQmP-V?PWGV-)ZADyoZ-Bj z;T(T^-uWiaLHO(sNEQ9H1mcbbMMU@?ic2UFK26B#Fm_oH;w6_CyvuKQ(o>b)3{=E^ z(6kY^L9eh`5E(%|3IPOBfC--}nX+!}?3DUKAPNX;((h{C7gDC2B3$7A9?9`LzIh0$ zfDisB!R^UDGIz{#_1LoO=XDBO>Lz#PsK5nnHRA_=fBUsVp*fzW-t~*GW8Amr z=;N|f`^~aKVhTch4^lyF-Wq!>T179@wBlftWKAysRyc?(;kV404|`Vqz;SU2UQ96{gre;O4=B1g zpdc?TEv-{;UN~#heKSNeKFFK4QZ8_qQKiA`oRP zz|HN-^iqgm&+|zQGcWj7+xCU@?KXYj8jw$Dp)^1q#nor38?^?9`JmTYt*)Lb>;Rj_VPIPPhW6ow9SN%1p^C9A7*9J>LyNWi75Zy3jpS%Iv7FRTC+B%lj$(9m&EvXE+(te_unrq zHCb(YYWLD~&!kloriNj*#;^|{Ty ziJ#mBqKWyZ8KBtcV&y#;jhK*vCfc(pzdnq0Ytg0y9}HlFuL1Te=;ozV>S;f$Wz4u6ig__mx^7IjckM$+1twwnpFvkF|O|(-oh~Nj&TY zh9gxESQ4(+VG#&d3T|&(s{uTSG`sPp&_nAmrP?wF&qoI$^?V+Wmic_KI|c~1|GnHv zy;uSoojsuM0U!8!GhT{1Ml4(bi2&D}9-FT4*&d67k6)zqJ491KE!=qePvM#v06GOv zmCUh;MlI0WHk zz;9f13`AR#R5?)b2dQ7lKqA}CPD8;|dNcrVH&j)BR4oxVJE0)oB$%jM^n>66n_ zU~#rm&$nRU2y-#l4=1421bvC^c@H8lFA0p&W3I5P#M|3%yLvOJf!EZBF_lDH0TH|B zG}2B|YHL7t*J^hR59C2eRpSIK6fQ06e_`tiJ)u+; z1fIWEhrYiy@X7u-(?%nUlJxX12`%cZ0Y&Hd{=Vf2@^aM~UK7x6h;vYThWZIQj+;Re zn`|A}bTQUE`<0Amrv<>W{Wo-Lp8J_!_1^;wohVgZ{UHCjqXY8 zU^ov63*M}(7%ZmdFMgM>E7qPl82BFFyhg^UM#UZc5C_?IUXb*?b(GGxEcoJHRoUwG z1MzZvD#on)tyDIJhnt%~AhGe^r^k!2|1IoxGae8MO8lN5z511d4y44z>w(C-2L!wn z;Gw+GyAE9*Ps40KTAs?APe4hbeO1={n4NzkX#LcjTiV-SN5A{1hZ<3!$lm)z zjv6;5ALe^P=O@21MwX9F{1&*zXu1Nc{ot9;JU+I6*e}fu7soN79aO7+7(QQKDD0xO@*3DD7q%r8 z$UGa-fE>=E8btJ^gi^wL%x8u{P;}XKsn`B3zbC%>_$#XllLwh)P<)6V`-QKAVP{di zJO|gFa7?9!&PV&R!cE4w%~1o5Y$bDPNVOVK6ZZl&1esHLmJ9rDRy_U*l~`hcMDujm z`3%V4?!abw3qQ85oXGJhy$StgC#piw6jM~M-Dpxi$O-OlUxh|0QR#SLW`u~w`p5F> z^k(u9UYCdt>^J5ZK_1vLK6K6PO@d-ET;W!(kpiyQVkD)RYks4!0N2>G8m1GyX zFM$2S5a6?_a~IEF&sMW}hFOty5*O?QW%&muPQ!M~LkX)SCKFZzNi0gKkr1^}7c6cy zLOHCWy-*J>9#jf4e|m9R*q)al@_irjdwA*q>gjcA=c9Sq)#=THyN{1p=u5RfBqLbq z=a{@sw$v1_nv_ZG zZDbLQ{aQNEiKt@vk$&q-4W6gBcIUCu_*Xw^zmlF&qrJACW!PjD--`{Z|7T`UPi7__ z&A#mZiEb6#BU^=!mJ55C^`}BSAL8o7Ot}Eg(aPEy4M_9o&Ihw~kDJe2U97VpB!3_J zwO}pzixhzm{EP_7jFf~OG7($lcQ#yP#&viJVwF)}D|izr8E1!qqrg{f%X@I?I%%ca z0m<^A-Ca1FFzhLf2-!PqS{DNKlCiHHyQ7&)=hU797BB#>A4zM?S&M$3)?k3g;&f63 zq1e!Wj_+Dmh@g3`QvUZ-{Q8dbTXXyUi>xM#trhRhY}PwJt#a^}xVPDt&C*ZJx=gl` zrg&;v&F{3Sx@Aw=T<}-%tQINSXI&`C+vQfg<_UabW3+kCCQTtAzcCRe7@jt8SmFQ=F$_q0&mf$7*fkU&dPR&_X29eA^in~ zvx^|l?o7b1qPCJ3C%>wNlZxTl!ANv~7kt}NKO&R~8*i0Vt|hEAWG9xn)B7Mm{@mK} z#Qx&Js?^@#3?4Kl1e`KKFsPf!&JMsGp4})p$s_mRTM(?&aN6yN*tbQptDNmml>&eQ ztsAG?FO*aGu~HFVRjW|0QWhc3e=vIBebU58%qmlc(73w1a}F9yVjK=E$b1ZfzfvuZ z!O+)DUeyrtuJV?uj$uKVTW8OzsvY+~auhS?|@Yco%>N*KNp`Ny%< z{F)*#+w8?lBoLYDL}7$YrFq%SJ=~lck&;kfRVC=`7_g~3d0UsbpxVnerQ zSQUrv9QikSGS~7(EiqBYqs14bFGL+Xk^Lk5LgiVKmbf@M-*3cY7o-a#&s*ooA)?$$ z2wu2~+5>@&1mz+0tr+(G_{Pfs7fdWcSWu3-1)W&f5aKEmMxlmtrVd>LRu7UpDM6~g zf-9gl|2W;=e9@eECCnH;hGp(qcIfxHou5B_Aj}y3W}80dRfeMdD+zdD-puAac~G-I z>iFNBxV;|T&+o7D)x+v*KYlG-vFvGIvlB#9rSdNgrL8=am9aDs)@Irts>Fef7e(!0YBz-1wv#|R)du8)qvxzmkbcf ze9l+W^qI%*cDgJX_vE!BH6UF=Tmk8;a7W>q0k3DEeMB#Wf}lt)EJ*_*l=mWLIz5`M zn+}4RA#Evcx4J%%-7p5HAK<}|_KvF@V@txHmcbRQ6RRJo*v!vuq8*d&&m=dQrNx9A zHlWyo4mOG~rmt`wlU_&m29B%UuwVX3WX8gVwjio0b8cdITc;(3dplB8v0t>+3x5=k1n) z4+;)oXYxKQf%$3S$5C`yX|ODQ6sBA;VVazS?#b~z6Fp8fmc?TudX=h)@onOjhMW)guS|xOU}givs8i22EDV|VNh^LZ-1)df>FtTv zV~#^E>$Nb4$JSHD%t4-acf<>T&(Ypen=7%t>&@?NYi`Qwn*zMT-;84DLf|M73EpK{ zBwinh)@w07aMHV=zOnUiA6AxBEOWTpTVCj>4i1UqE~@|5hhxkInOg-r=K!9Q?--WM z;HXyw=np~c0WVKCNRgq@O|7jyUE=pr=aKzyMftc)qvSZc7OvQWn93gl?k}ws(V+8S z!<(zCtLT9?@`FRr=Uq9^ZXBNwzzYY!b!?@mHj96*=6o%7W6V~F+TmFDmf`%VT4tom z$)w)14>dbq?id;jBl~Gq?;pbjI5I)6jh(ROz>^c4Emk&FzN&ROZ1Y={^RH)) zuA^Wg?LM42TFFYE2xqHAEYB!Ij)UmGX`+x8uFPiIlWHO_yD;FM0X75J7BMK;ZUo`4 z+}q9=&g^3G!5Hwu9cAxQ*%GAHOj%Us9Fjfo~y0jg9-CY<$DdeFa5*2={ zwsBUUmmEyQeONEhGK}NBt7)p;nfQ@b1_{1mEbKIAG?=znBGCBmNw~1JulV!^GVIvVO_c57C} zA#1knhBSezzBCQlX|F_e&9sUUZ(_<=<*ij9HfjzQ2)TXVcj|7t*U<{FY*?%+@1={z z`4Bt9cE_M}#vt!AA603Mo6$jkJM{Y1xO+)V1Z1@aU5qt8=PDa6UDiKR5gOzHbfMdk z!L=xH$g7BOa&ViQJq&vvfAPHSei?EF$aSbo7Rf znU=cvO;0Gq&{ce5x%<^yD6YP~K4m@W!MaldsG>vkjTbvL?m(iY5V;+ToGRa`q&$V{ z;bFhJm*T6J*9Gy^{#Y+pe%Z5~A3X{p*-US;b8@IrQYf7<^S)xz`kOZV?~lY`nGAE055}%~}T=vyQ>oveA<)LsSqFI_#Q_ zpnhh@cTBm};bx(DLT;dNz;rfeC?(UmQd1cqQ4QSro2OW4R-PjzQ@7?E$W#yrSPFuA zh)r<7Y}}f?7WFAgE9MDbw9=ig96X<`%!E5j5BZF-K~szGF!ZXlkY1?KKAjVmsx5Dp zHaS~_W;$v7aAW_w`(5OW*i(G!WXs|&AQgDP=A}l zKWK$`h+B8i-Fta^?WK94`<~G`6&n&)jqlBF$UtH`b4V&E4R2ng`Er}TNBY)Pz5xF9s!@{KjYCq!_g`s5hACMQ)@-X zXGjrYm{PivV<_#27+p$LN1Q{F~OVqB>RRjBFNTD4Zi^}nX#4e2s1ktXP>zB|La!kRrR zn7M*=@FN2b#RoYPhWDeFh?BJ-a%vxps0^4<%VlfJcV^Wi)F zM~mI81+4ksu16rjueY|$ezeYVg)U9FX4&ZxoVw`0z5oRxFn@HG%*8RzBgfyxEq{!( zv2N7U8VOtns8u7Zz`xOMQ%(0Q-AX$4Z4#%wO;0m0gS)>!(_5NnSiXM_|cN z-{fQceHsIbsC-;tYuFsVsB`rZbSq;Tz0*5A#Y{>`YsR6D2mlD%Sastkb9(B8zA;9j zEB?18Z4(S2CR8=tYyQ$kY&2;?LBVM$)E5y8(t+2wKVbB2+|IO(k&(E#j3x}70Wbb( zcm4qZQkR%D$Ajz0(7PvxaL0<$Lo?hh=rYg__wZRL9v zB2Wx{ij@vafi8!tp`l^8DQlESdkF?ES#2Y!1>Xcx{_H2ASKS)e|D47?o}O0!L|qv3 zmsip%Jq9*e9?q9Qvran1>r&2!M=`wpIB{`%276$*?CaG3wkv4R_(5M*t*X$n{ErIG z7!~dDS5oz$J?pg#0b^3MkFFtB;jkBAaK-;_I~5q~0Gd0mS{0kL-k%OxA(8Z$k6D>p z!W@q3VRfu?wi+oFP)BnK#uHk{rm@1tyIsIG_0JLt@bX;`fZ-Pq2phX_q3FviEC0rk zxRVfnNfY;WTD-SsB-`1kkt-r3>6Nb(?NgDt-wKxyM*8vLn_N|u@2!EQu|`YOp!Ljh zGd;!u|D#(aWybLHQozHve{Nvux7Fud0e3^uwr=k;z!Ielx#oY}&>!wx01c)y&6H4} ziz-u1j@GOG89X}prez_WGmByl`42@UOOA4!lZkk>l29H7tp@*#cc3v2^7nC9N_@@7 z*u5e4&;#sF^1#R_%3mj1!g#{Ci>E_0xd+{nBdyL@c;XxeBygD~VJ^pf#a$WFBSl81?bHnX}KaKhmg+WC|ayzbVmQ zAv6MH7hsc2%P`?3h=j-)gUaN>{L)5rRaq0Ed^2-~Zv!KYTYB6I3mVcRzJ5wLby3W{ zx)h`SLkj21T#Rm8Q*PIc61*Vxj1jKD*Dl8b_vYKa8u0>z%ZJWy0EAulktfPRN9t#8 zAUh%WoisoG+7Zw*)D*-fY<%>j zYqarj+W8F_)*@y6w0?g2@_dSR7?Gf(iTuQI%aA}EqU3!cxxbGhI&AXkIVYK{&Y_PV zu`G#D|J8Syk!@!YfSV6wZ$*ZXVU=xp+kF1{pi}Mj2MLb#`iTDh!=3Tw1^r6^fV(~8 zeya2aN~Uk`HjEE6KZ;DJo%{B&&%k}+_Siqx@m3>`Kkl8qY)U;Bnx~i=88@+eFh3Kc zNp8kBSd#^#S@b*Yj{Z`s!wdS>UqI3n$EJ=KHXe`kE%_u2jEk743?t>1o( zZ%Amca`^$*9?`A^)y#=DxAMDAcAQEKMfnS?OMgc(4)WxrrX(Jkb21G!DVaL~bJ_ZQ zua~}fnk8Vc3eblBS9$K|UXItEs{n&%V{X86vwmz@=tv*6;PJw^>M}4Rzy;a{!yX$E z+l;~x%s65a`rx`QF$m0x-7fpwW1l#|Xs#S&iC$$_^cm7z;H3_kKlBAWDpc^C z0|P1JkLn*pev=1m2dSu#viH~q-of3ng9$1~%o7gM7%O7aljkXug!Oc z<}HZhwvJE$R1leZ)b7~-ge?oFy*ScmcEbmt=m27?2YBq~$6YBJOzxgdfIg4{jBdfYSUl?NJgA;pC4V~$c6hfoirprkt00Dznn|it>SEAjC-;VK`hZ(^>9u+ zmI*=*L*z|LILP*|0oROE`)VU@)Yto?b2R5oXAw z;S9(TSbp|@fJj*l%pP3tO1*d)KQ#9}Jv|}B>bbq9&+Z0aGWv+)wPFA8C0cU5jaQ$I z5@ldRyA?>T&N0bsD-qlm$3Z4am|Iz1#jxnd;*idv|*IQ8FrNM>k#_ym33IzVJp3e-F@UiB;`=B zgjzkzf*8~kK#mBvuwIiWW@pwUY^tf(`uCMa&@iKF`O%0FSb*Iiz=+j4c0P=_b}f&FINCp6NrLaN{)0E%q-x zpt6SP%qq}Na)btGoAo#wv~zCJJ3bfQttL0{FTKTCta97Vg%Q{Fcp|i=d)I8P*GV97Ofs*qD9iN1GY9F+;RNm`MV#GOh5#zfu4zdV^lp!n2PjAjJ2x9cev> zMBt;zi&Ot;%pcn@gFY)`vq`tN^y8$bYi!zOzP$0d8#h7FZeaQ2vd9J4g;VUpKf_ig zP~G5!d|S9!Rs(o=p{#TjLK7@4-v%UoIOzWDZ^sjjlu?#gZRW>BJ#-pEmP~6&v84WJF7d{4r18PDZDht+*wV znTvbMTv%ukI%j_?!v^lFHg0@Yq$=u#edvBSk8lqiYlpOxxi?cal}Oo+-$Yt9b@XXf zVc@E)UY|+dE?7d|_!Z}vyNI3Oy4D(rfOAnWI{`3f32>-iK8Is>23tol1x1Wc#SZTc zN?_*A;T>WJ5a!3d`^)AT?t+|5M!bR!Pa6=A85Ls-M~Z|E$;d&=o#jC$f`g7Nbl$XY zIy<9`&pIFVNhvJ+YSDU5$M0sATsbwKIam?W15qeID(%1f^Mv|mwr8;|14}KDMs4G5 zFfeg2K~oM_(y}rim))-4taz)c5O#z-SM{!HVt8xjDeeFEfcqqEu8uKP*Om$)gxjty z?ChMqqNaipa4~1FjPsx}KnEbIgwEGC)5QPk2K_S(*Yxr-|D zbo4Ki`CPtbq<^|y;I%#!0vDeSw#oQ64;5a}jF7-YQJrv)g`6Spw*_v)AUTo-(Wl;= zD79i!)vKdqR}Pyw4>Xn}wKs{Wyw-eJ zaQSlu5yI*p6+a^RK%loi*ni+v+?Dst&C0_3Lo&PJfeJe9p)&LyPgkQjzcecRwkNI) z5sMp2qg3NdPVVb!uGMQFjGsN9DRa5W0x!^QX)_GTzpLPD*E$%qix_;je{B2QuKu{5 zusU(U8{1u*T*QvyxEcTj@!FWVo0X6^6~h8pJX0k|KnO98qcYzN{wU z4ah?HGRT)RXHKAn;K|^RI1OM)aOV+r>q3;aePJ92;yd+>Vd9*D$DJM@)z)Nc@VN9t3kFVP>P|0vGzwVuP< zI2SKYu7iD6KB00O5na4`Y+UTd{9Duz-(zDbXGiD9YG^GXoMz}P^t5`4&r@QiycncG& z=Wi)a{WD#`d+8c~!rq!kXb33<^#HHCB!#5m6 zk!ahh2=CvnpI0eL=ea&5U3K6Q9*+cVfD*FwVVeoVNZ}p*mXeSp9CKCk=FU}YPcstK zp!nvUE7S3%_TDTN_Gmgj3uqoj*W7IoY(8RIHrqldg;p=~jj&T2o(~T3$Jok9;XJ&5 zySJ6|wy3rGSAQPXrqSE_*gMKXsS$I$&4^t41O_TKXlc2ZLN*9->6y*U(B5yzMDv`g z5Pvbf@G0P#{j0K9bLb@-7I<*C_jSUxV1LVJy)o5d)_E-@?EEG*XI63UlPQGrGx;aa zn5|A1uQCsp2DY}XRcmD0H(_M6ScaU&$26nc*QO4mj4{Rt^`CZ$rbI$H+G3eG8ZSqr zi_Mm45D9vNOQu!yVnrw^{w&{1OBRKBYr~IEQ{VvMpNPl+?j7!}chAH8cB9kJq`Z3Z0H(Nd)qVpx12$Kg&3zcP;`f*GcRM-@J05)cm-<`0dkM^5!Bu$GgbX zkWp+!f>-39H3X8W*4tVbO3H%gz#YTCI$-UYz9+FNWaZXxB(D|3`)8Mb*tP_PKHV(h zZzX;(Pd^VdDM6T*-9yKB#F-%$ORq$<^S%KOnbO5ac<#FuT}y6YhRfBnChvVz2X#~Q z(z@8>u0ldj8=o+n`7l$=qorUMs-w@OGhZNYnCUhp+bksmrnljk5)riYyiC)NLdmTv zj2je*sOl~HryyNVQUsiFti#8$sszq0O*{R$3Duz*OghaN9=x|GQMCM4YHo4e?V|Fzt}_u6WiD57y`zPUg*$b?%Vf9a#)pa{kuFSJdcsJUBR8(2rn4LT26=y16g9%Ir7G69`Wa_FOIfaC+>q zFTbd)1bH)~*w3->q}@SY0Gsf-6tXRFcDjZ|m9C{zWKPur{{kMJ9;)7DHMz z)YO2tMEKrtyOy7HwR10e!WyUwQ^7a7GbW!K_(@b!iQ~O zw5twGTc*{W4!W}ItAjH?zum`Kp_3*?{%Heg{f%pG#V{cM;3r^X z*(Vf^6q2NK;Qg9uxlHwZ#J=V1zV@(w<>VzHh%5_8D1W=Vr2y@Vqy|SfQhDsq36kn}H{{NG336p*-X3armj) z+V5z9@!rw#39_(?I>JpqJdj5Sgqd@Aq!It@FZD)O$C5UBVk4Q$n4*HhQe_f3Y!dxL=aWEY zfF}JHILJkz$3bBAqM=wKLFw2RQ=LV01F?Ds(Znk4SMSR$wECIws8fnlqW?p=Y-8YI z5bP``E^*oY^2_F0tWw_qxg2oJa)6^@5ct)Y(42i;5NF)vjtiOw*c!q?U}338zm_ty zVA9QU(Po1LYx+*@zlUCB3Btq{{3G(Yqk6VC#k(fE({N+CVx#|p!DoET=IqgA5*oeb zHTHUSfO-EC){`D0+Pk{~d7H4Ra(S8uA?8cQ!AlHC`3lK#(MVSTI6N;1igvfvM-Ebo zPT3m=pa<|$(g#jHK>Ej$+)^-y5AX3c%u#eu!U?CBddTE{eo05_zxv~LebL;{P3qKw z=t9jY5>MU6<1bc4u_PcB04SPc5Vfh-d9>^dvt7&8X)A0E-2!Pn-szG1V_7fzW6$O; z_M>}Oy8I!nb=YtTZt8U$5hcER18G|qlP4VbRX{E;Y!td{2qf{al$c_Uc=4k=uO?v2 zhhB9pDwJge+Z@ycLjK%S>hSa!Gii7T@hq=_r}NcQ3TlYuVP_bQ9dPQtzrTNhE&-=Y zAYu4&$OW|$8niX{3z`{BPMs&?^l}NXg9NR$&+U0ZEhWdk@?2TzBEC`eq3^?N4+5b#*RnQK!LeVhUy zLqJ5eln1f=n;MFlfy-$e2d6z;DL1`TfN%rhFl5@%G&rGBOU(5j`M^1rnG=wE_)F*Z%A>ZZf(kkQS zq{Jd1#{x`;|A1%;0Gl$f6rm%(efc|Ut;3d8LQsi?!j)s=% zHczMA)U7VmGdRB4Vxle`GOtDw8-pOLKeLt|0q;f5eL+N2iUN(=8&A?-_z`{45XeCP zR(j;khm)5qWA@Z4&hCN+wkJGbdk$-guEMkxu1Gl|ra?JWl9@Elg2ekI`#s)|y_J^J z6yW8AubNlCK(HiAdP1Qw(8S`CSA~DJj7Ax*SoMIQ-NQ6!_j~BD7PoxI_>P9eQ>AQW zy5>%je=Q|^Vkx8A`rc&c}zHnw%to-(PsR;oT&ASLlM9;TBp0#riW0%C5t+<5E z^^pl=^hMvWbw6h^!9R;$fSfe*M(kW&t$GY!KwGEA`|K?*b`0?>C-7OkWR?L-d;##v z<5>-ZZw;Q#z9R*IdD+2B_rH33ApATd=<-D zqlTzplM#vkx`aWtWMgUSRRs-b7l0it0Fl+w>5`WuGC&A>8uY(qL#t*6yWDhAJ&nB- zdCs;z1B>_wh!`M=1X)cCT}}1(G=Dp^`S^gbdqA7`>LW2O^;C6r7vYW)tFf~9IMd&Q zl!e052A6ZJ(rZDac&wE^P$ff+8Mh7&M)Wq2)dh6uJ)br2b|+16b!4b9;YH~aYm~bd z$@JG^6<49JXy#0<8-ME@B%YDsNQIXgD3V5?n|mM*T{Ad1X!P+PP)}N*dOAgGVg=kE z0HKrn5^U{Mx55;R!K}=4(F}KVNI;cjTo*^qJ`|kpa5$P}6jmX?EkNuIu9}{ro~Up! z62umXCK2Jf{;P@RAsH6^aRdpGtprI^Y%P===GSBLp{_Xqk*tLmh#A%MP47!itL6FWKIn{A2Fd@N z&z~y^489I*-yrBz0LT8hu^HTj5&5(%N9bqg4XuL^a9vfPRg;{nOb0jK3JhH!%<^=X zFZ6p96woY1(G_-ES9{RJY%gj{YpVmm1klsdqp;PmCHZArG`pG=!!+Z_Xhx0Rlst*0`hNHOCBo} zLqDNTfSM&CfCsPBhj(5~V#)4}ug3lNx-ltzaDZJEKe=Wi%WX>!$oT>P*l9<)bW&g6 z8Kfw$SNYxa!kVE5&fpvvp}D`*_vZTkG2X>ECV|!W>7fCTXlelflqW0NTMh(=8|4Iey6!7#$d19$mn%<4 zE7+dh*0rP^PXM1SKn~NS?H*|~>gvzuoVa(>kjam{()g&5i$bL7O@>tf)Y6T}i80E@ z-+|DxEo9Oo;PNyoP_J0F#i^{WzaNv-vF5QH6SFrtsrHg!2b@n-DBr`;(UJ0(mX;QK z0H4DsL(@1v9$K6al8+TEq><%gU-5BAT&OSTy8x;?ceDU;@BZQT9AO=f3caUs9kU_m zw(MGa@qYgTkgL!s%)CQUzlZ;MV=tk4fRl!{&l`<&ya9X~2sxkWRRkzMK`c&5g0hjm z7$LvUU~Wg`-0KQ3IDKLX`<0#MJj9i{zmMj$q$X^pas1FhjGcGB5A0>oKp8%c_N8X; zn^{rI04uN!)b+mevJJ`T9BDC9PEJKq4MHSnerG$KVgn2LWUA8D70Cujceg=rg1GfNx6vUQfjjvJW(SpzZHX)h~Y>6!j%jLWCu_Ya|L3FYC z3gp&i(V^`O`urLz-CVb z=e)gdra_WM_2uBn+|0B$G6=$q*Cp43AMHd)>NU@AePyQ|M-7qViG%>x2q^OaSqp4* zry=Yv0pq~TgQIX+S8%PL{6+7qyR-9|CM9%P$it4s_oxOj!} z=(AsmVVM+(>N1lY%Dsdbz51K2z1{#vk{HTmfb&6Ka$InScHo&g+Y9HlbMd@nf_F1D z@c?AbSU9+mZ(HEJ2Il3iNF9jP{!-7&LHhv?J`Pp4{4H!B7-%F|gh&?u>Mb5ywuhZ! z|1Hm&AFon7I4}#LNZmbU|Mdy{P>k3MGC0!sT$36mF3hL$DvM&AV@1hbs9aPk=GU2K zkK8l_`4g0iQPep1>!I(e-cH&VS8{4UkydjDbKf|Ud}p&}0(fXwTsN3s}~4i5Q@thonNS3&FccR-X-3i!Z+CewpX0sqSzFg2K8B)pF%BcAerW! zSO$yHQ-hB@X5-qgrW3UBRG8COv{F?w_SEX#oX^?8apU)|NCloLu>bJV2n6Mrxhe=$ z&*RQ3lM((rGD5;9-^Q#r%EmD!Rk`U;{%^m&R1&0}l2!o1zAzy-26nPaKSY2>^CRMY zczz}UzGKu$M?X4(CKk%O3QK%kGNtC&$|URWL>Yive)^ytlLm{@)6}=|pJq}2M+obW zT@D&_)=3yAsO5}c>OkxP{d@p8D1s?U*^BrJ^xW^ZxC1I_`1Tg0P%v5=bE?5cLl}WY zWADRCVXo9)*!kr1b8&FT9WDhF(N$rlo-PJ@dbI#0^rc6JaEP#Q*a)UeK&xvLDwy5c z5bnvc(eCMq+^ors6w~nWK;pS|;D$q_v*?&A(NyEMa|OOH`~e70hOLsBt|qUzVBlbI z=o=&D*dGb~Q!ZUccc|PQ6AZK^_2hYy+(wlsnmv;$Mv9>y=uG*E)M1$1Jq)JHrgeX@ zeC@FO0oQN^c)A1I@Sq$MdkI(NX)Y-}Z+?Qt92hg673Jy)-Kc?8S>)NNtz9NB!lYfT z!H;I8seo-vXeoaYz02B(jcJ{?93-tu$|@@TL%@{yyMZ}@_V~QbkzqF-uyU3RL5!q| z)jX);olE3Trabjwj#8J^(l9*PVrfRA3h0O9O&3{fXxvGp6rvvQ2kZvI(@OP6r$gMTzVVJ&%IX!r(%d1bSL~6mnf%In^<*NaT22lqG#=yQm2zre zws$2&rqc2|*lp<4y%wYJGIhQVp)|A{n_meQZVTKZD{nszX`6YltkJzL?y*KbLu6Qe z(;rYOK4;5|gaD*lDR%p~3`wTLmMkdqp3-6fDNAftlvE}&BxKq;lI#}@E8K~C55RcI zChx=Gu3U{i+G~b?P+l{y&_raarjF zC=0l~TTbsVa_)k6av=iW#^6(T%oc7FU$Sj)3Y$oNT2TGx%KM!)(PjU?MrlUh3Sgr! z*5>5pB_QR0{YwO&a?2&H7mZsMhq`hb@2srGOW*g@o!G*!}OtW+a9A>u?J zX;#F$UW};NTD>iwf3~47zZjs{xQ4Co04MQc-LDRBT;25EoAlwBs90cI^kAr8x!zQF z7Qa6J6E6TG^$pL*f0}C(z0K=hf8OITpwu-&I_&h9 z>s4tkKzQEp%Fx6X7SKu2Gbvymw}b%56g~+N#LOTZxG3i7z;1MTUqbLRw~J>f9GW_xS2<33<@E zv?7e5_jH9_BWi=0JKB-dgRjTne z6q}apNz4Zhf}GAxa)&ERloPXlIvLn^LOLfbYh2x{s~i21d5g1OA+Z6>&o=Lp!gc`P zYtZUf>mBHz?LGh+)4$f|`L+*xWUt^xL|?KE?2~;YYVZolR~t{g`9-BIxzjU$89kX2 ze$QhgTD&dbJ3fvZuOGXDG}Kc_O)7FZX4Z@cYW8IRxsmGPVPbl-jNw}nDHSX5P@+Gy z><4(+&j1_)Z8p*ChyLApvdc+N*)Rumo#an0Uo3OFm!mxC{QVLKKvQ@&7V_-E9u(uB zW!yo<(=aW|9r*W)vn;JY5{vn8xT~=ScpK1tWobu{v5(`xoVN)uT&=zMe4ndJD+dB zgNf_8Dl`Wc(}*}ypdZQ2&~Kpc_)-xtbyNSI(c@+wMEzjl82?Emb{!*d;7jlw?9Bd3 zf1GlVwydNVUPwupT0Jnzp7TZ9&m^;NuIf(m+;+NbvJ)QOAZJyYrr^qu7i2Krbn@>X zb4g9Sy>Y5}CL>O8vPH`|^4m;jH9$n%sJ%RuK_mqmbkvG=ZooB4-TnMT7M19amS6XC zSse^*T+QVOQ?saz3}gF9F&1}hAL=QgD0_IyC2`hswN+y>jT_f!zCX1rQyUGVOb<#m z_7riD)8KD^28)*`F?z4aND|DJAsrNVihI!jZxJZ;r7P#>=QoxcG1?g^JC2;s;w{ia zw(dYdxWMti8H2p|;p#~lK^4O>StDC|`24zRji}c%KMQYAXS`ZjYqo5*njMub9NREX z=9?5F-0rzNRyO?<)g_0v1voIWNt^#GTwCnXcGUbbQZt;3ljQa@hxl(ZTH|q21j@Vx z=&SA<$^VEus|38-uga$Y}T-Nzbg^KQR?=f z-?dTmKKIOq=t*-fVt%f1;3SXxKO6T!Pi7SZ0I_TL_vi|OCc*<+0Oc-Ikx84Cxp9mQ zeG4&NC`$|xKiwu|+?2%~f27!f4B@x+bPDnDpq4F`1m~6g%=w0D3jLchv&0Z$l20|U zdn4MXtRjdHCbrio-kw+SJSn8$U@chP2DTFjqb6{oF{7B*P==7)ONY>5U|o zNcT)^$*XXYpub<{$be^It1-wHRKYm+g&nnxEjKK|#nP^L3nw-VpX8`GyM9JpuR?!! zI7wcYYv(Q&4LYub=SWzK8`q6MPEA&TCL9wWkBbh!rGy!WIgtiN7X`u zpCSeAzG?u2F!|tTC(5tUG>#4a$;p@e-0TE+ICW|@p^<55(m9Q# z?_`WpNfR7aS|}{fN{@9%51Me9jAsP$f@o;U_6p_12^ZIDQN{RLDc|rtSA^ZYVCTd9 z8+3JoMyl}ul4NGqO3PQD09^~iq~oZf0Ys#Hyu!gm!m!9cemzv-sA1}ReT4EzKL)K> zr5B$lP2xjLy$g(%m4p^OI=n>wcQ=U95+lZqmkpZlLS(_?DTk4Yf2vco{>VOIj&|?( z0iZm9o1J1{Q`OA3A5I2b@i{Ouf-D=0w?`kM9s8e_s2M4Dae>@Y=rXwm6^z|jnb^~OYyoM2DnC5mdLrgF{Vi z;HI=?BbH{y`LRSRiN>Rt+V7tU!DJcf@;HHcILq|-sA2KMRpO33pM>L;Lxx#!vpV0> zzMrm_YF~XtT>b&PU*h>bEN))+!|!zf10eiDkHT+k|8aNC@>>U?+qEh>v|qb8`IWG3 zo70W<;bhEakA-qsC#;rR-rQLIT~&|_z+)$c3SZymKFl)`7Pt7Ri@4(jPHx8eX|_8O zjP3>OHV=@nS>a4DuyA&MZ}w>Jf9JMXoiW4(=8?ZpxsHr#TAERRWu+>3n+CCf58zg-2NZ+Ksh0pGpvh+FN7?v z6(BPKiD8GJQ^`wa6Qrwnjpd>Tf!lMN@B#gq$~qcDRL~kU4&SqxX~X0 z;?n?v1>lu9DuFGWgzIPIbCeOO6q5$R5SGnpx52)EB1B2L$m%#Yn4X{u(Aco(Co7U*gM|EKccm>65{RXXi(xA zqf%|gik}%<6C5b;yqT3E&KfNizbym?bQGlrK*9wC41`{)^q}V2H)OQ&Xf!+yu1gts z{Ie2I)tyv(ElmWdXg{8be!Mo$6{L#egI>M4P>*vn*^O})-RKq+@ z9nmca*9aET2s}7Ev@L3C!ZRItZPsQ0 zLCX}5`;1gok%2>}H0ETI&-Lp86Ui}5H21o3%wSMnsQvqMcXPL6oNU9)Rss3)x!~@z z5s71Kd%df{!v_>Dininc-$o1XFa!GAGZ%hZ$CJGZgkRp5ZBvIiQ?9Y>dD@x6NTBjj zAh4L;7WprqSoq=QBX@iPfgv(2;wx;CKV^eTbc2}`PbSjBGUFY9MD{XU;{MT(df2i4 zCrbm1ZYg)_g-)OzK2F_5$@pqTM&~`ihefzCiKB92$$ce&_wO}74)2a}CI9KErl#i0 zzzGmZYWBtB^-37(f9Z2cV9=9%qznH>Z)_}{hXRb)7u?X+d=W1syV)C(1aMhM`oJ=5)#nec*&H%pmse`8hIS)J#zuV zHGqp?-(`QAeZDg|s`vO0&mxNo#Hio#TJ=1Mut(jw{nt)KNjV|m2>{@@t$@P6UC}?|M8_235Lbwj=x;kt{B>8-| z${y>zu&J{pVs z=qR)8C>Q{%R7g$s54Ngjkp1fkPT2~IW#d5?KB3}CK9yGg&qw;o>E@*l*Xi%&H4n@* z0RZluE9|>>$#J`Gl_D=!sIUKG5dupul#K+*H(<2wfQYB?vXB=NHoWVCi^6|l(7qiW zd+1I6p8U98=v9Mp=CGFt4?i?nviYxqEuUFnIG} zwOv75BVNq}r!SO@Q8E=~F<*wZPtfa~&gbV|Bs^p$0{-0>3_PG} zY|=`ymyvd3Ldr=^3D)+9qA9CJrKw9prM|g0@_95Z!5N|3QaV^gu~aiL9jJkyXihb3 zbCxU%FxGzZMYSNJn^Tj=VS7xN3NL@mw_1&kAtUQ%s7+p71j#LD*Z%+@T@w5m2>z_m zZl?HzGG@|gT!wf0(U52bx6^r|sE}X!t7(8$y2s;%m{g9SS*)wcAXD2&3Aw%J=mFhC zzS&-E0iscjeDuDn6f|#1pM}iT6P-_Z)KzQsXZ!HB&K=gUn5YfkN|y+sV&gFvHBLgx zE-)p}_x|Yvf7wX=I~d9kIF1fIxbYR6V>WJk*J0=PRTAYmXUhUj7pPGMjb__;d3k}| z)j5CCb;zDJvhxq|INEA?jQTK1;JxZgh^#juNRfjf3{p2$`Os$&)2^&N6n50jcJ3{( z`0TgDg1Cte$cJN|1wW{1!g_Tkot(h|xB(8gh;tv9>U$w*Vv8bT^wm#@~p zXUd}QLq(kR_3;4!F!R}MU3L}1d6&Ra28d{#NvFW*8^ClScD3fk29#vBffW#fUN}WT zdqNfLc&Uu>ze$KGUCtXP;qnMULg5FXuO7w-6%oL|V?JM?h4(|rCZPJ|Lhk#=9C%_< z4=-it5YJEU6|~B1CAf}S@E8W)u^R!yfi(wlU#D3DJrnoL@z5=9$%CylB(ASMfcZZ9 zL$sAa2DpT=e^6LS59}IS6fo7X9m#g7SD(paDgso;{#QIfvm(se8Ts^EhVC$Y2U%k- zFQcVCT=2t#?l?a?NNbY;N7UU{#gzKV;j5`xGi9aZ!N^TnT1UP0E2=Afo7yU@JUO}G zGiGRd!Ix&)IGh0IE$t;>Xb-ijGayNSj7E;^#Eb0^eJSquP}2?rwI7PHNMKcALuCO3 zemQ@)ioMvog~{F6TaKFtY^se**K^9b_KvYiJjcDa6I2aMP05IcX1AO)5c@Es>RT{i@h2ny1bjH5^hStTG+`tFSouujj*u z{Perj+@P$GS#kwV6tBsP8LU&X19>X_0^QMeqwPiV2_`X3^g2fm#(cp3wn9Imr70(6mygz!W z@sc4NwFz&E{{2G;od~c!^<4DinE^4h7j>wGZ~m?7mmg^>MhM^j5Zetc(etz)bqpUW zPO+id_Q5(iQV$~U3$s}_;<6_tJjGH(;j|Bp%;s+=+Bu|$u>IIur1&894qt63NugJ9 z`4{P%N8ug|qkq8UriWbQ{Pf)3%w4>sDRybK?{vR}c@SA^J%^`KcN^!^8Go;0TDz|@ zZx-*i2+(a1xY7pb@FLs#R!5Rpp6LD_jQ9I*RAA8pcv&^SDG}6*Nn>96hEHE6kZeyz z@!NLMty{;X|9~ehdS;=CQh4{p0b5?#qoq_6gmA`7gA&Y*P^&cLqy{L0xh$5{i*MZqa{GH{us*}k{P^_o-~D&D?qp`6X{e1T7K zelfGEy}3k1MHMC#gEwBenX4bWuwi%}xc)L&s$x|O?p27P1-Zp+7VvET^kIB$_R{#< zCzPl)EFwlGtNKzL>HA)d@SAFDsxUI9#8+0PjPOnc+J2|6&y?o5sI7I^wPhut+4SML z<8xz}NwrrR+~d`{iy=3H7rEcRH}TGu^|pi|NIuS`@|nfqyoo=5GI7OV7U1(y`e{fm zWuNNm9v2l44zN`;OeU2MQe!%&tyZRDB=*rFwzp98p`*+G$}kT~vmCDK@Bc%DjXq_q zq^?sY$v)qf(XXX!C;vo2Q}N&<9M1yn=Zl?$vLNpEb3yhG=;`TSDsrl;eb3caQYs^t zI>!tt+R2s@SvUt+V@WD5fj=ghzK$-|A>2p(4|%JmIrSgM4(h15#%lu!xK4?+Av-8lW6U3d=W(ay zV1`2}m&@!pib$M?JxdlNgVRlWZuO@(DOuk*U^)8>|8y#L6*m8s_SDiV?dWTkA`1RU zIEjmuFC|3~dapP|XDwT7k2#y#C471O`EuiOOjAac$|jzvlO6!>@%vCS=fxtZ(y^5V z$*cdZkYOLNp18@15p#{XTewLNKibvrm139|CO=Q*W}B&@miy}3XRF>KOjNxqg{e)j z*C?X*t__?(IVRB0GMNJ2AJ2)*&(hw(Hc+hAd-ta_5W^&(ddBYv7s(@IkOS|OI3(C4 zf>~IpJ;yEyv0l)1%2IVp?t&6SvY|6OtQjqXqH{0Y*{Muh{d#u)V{L#93m;8l$S9_* zG)v^vuih61DZFY`F+O)TCrR7zr)jAi{4T`1>7b$K8e43LJ#sneudE5YR)Po2hg%~U z`DbU3GnKR8rm<50?!FJ5zx<|hj}lv69brs@031N6s*l2?CsHQ5VJQaxYP+*nX*OMU zsd*iQ7$m5~^_MRX6AIi|(BiV+aKWo%8=&QyX(Sk@P!K2nE*4XXO)8?WGF#wnn#ei8 z6#}X(+scqvd_rY`D1zQ5mA#}Fl|9*L!5V+8ub#kozwWdFE}yQ_Wh3*M3nVYM z=i@CwxhotNrT^9&c*4&TP$%X&U+!U&tjAMj8jPHenpX$q5Xo04w|}BsOA3jdCIAgn z3I3M%0aeY+n}B{+roaE(UUho~`_sB!oI8i< zk)pdLQtIDzB1W6$Ww|xTlUJCzYybOI(*e1V+4uIe>-|O*4Co>uUG3C)9z>n7bdeXM zAk75l>5EWROk&8eN=dskTW-3w-+o$nY{a*!F@O0fXL+9NkK%p`T)JC3tV=4iBp*7% z-%}!#8DT(+`FnL1Eu*cE3ZHOqYk_&;lO;Gu*z?@I8)lJq@i$X+|77WwHV}Ey8yG9+ zXyh{hYeLJy5mjO`8V?5`f#kcx8*MJN*|hrOK)?S_V5h$a|Jd6%%`(A~nw0^zYLX^Z z6o#H<;>DiLCF8fhVvMJu(W&T{U&xM!ysr44nh9tU3q0_UMyB$=(Mw~LA0tVciDV(> z83?+C)ou|sSn#T&RH$|l^f11ORCcFDg2Ly~d&f$q)6LR1Ns`UEBi?g?Vu5n|dZpH< z+L;xykZGT#G9jH$c|C_=m3BuaGvf&HvH9@#%1~GmcTY(x%%e|aaE=ClgihLpWDy~JpjtQ8F}>z{NinCE6f&NrFOm>7w=gQs36&MkZK>RtNs}K9F&V?D8yq&N>go=Y8akDb z)nLB#-<5%a2XbyExRF!v7(QAUyB4d<8dA$Ks8>`Ip*_vsQ<+B_FdUDzOm5t+L5y@_hSACy)4T*Zs z)*4*%tsuyu(o5dj<9M%A3_M@OB|9)Ytm31XwpuZb*#udTq2BuLee z0Kt?LdJJlepRr4dypH1y+rQp3TF0(o$S@UZdsRpNI$Ao%52w#<0sAhTz-RHXhx2hH?x}}*&`*zDy zw{oi!rU=<6U~q3k_2f6|((%{95}a{;KeR<(Yw9M^Wmm1*+jX5#k9JJzaH=R=8K-W3 z7ojo`L?kzkz9Ey3A5Vu`Rr=E9b!t&alSVj7t`?9Yh~!Vll%@nqTP?bwKS(v^};e99oX8 zyu8g*6>X$)%z^w}m7_7voT-+|%NX~rcp}{sV$=^GTRlZDBvpS=L4r)vf|IOC(hJU74jh$u-JLG%>xT#Z#`*3{=EQyC&` zEc*xe75&R~qC7}Y5|eccxgs-q%F_OH^{yEpNmF~&l5%KdyzK_X7Jp_sinqB+ZTZSw(-xCeg01KpmWcBNgto9r z`b5!<^w12=ZM8g&u@>&>q}A)ruGq6}(Hu{n{u-I`T09ToTk3?JgR3X( zG`AS!i6QLNoh1YE&y^t>h{pH%`m4rKsyieYo4|R^po=n!Ak?)P&;iHlyW_T;ttQ_S zD@d6wmaTV*6_LJ&RlqkO0mw@X7B!_JMElxSrTZO zmO(5hq|5=!0Le4zT9<_gElBvrA+tQM3Z41O_ zMVe)BbI&`W{VfJP6D{g-cjnG$2N9o|Qo>diu8ERrY47t+B=QCpE`nJ`$FG3bKYeyt z;PB*IlJDV6h}xdNmUV3|b<-xo+kW9|r3_sbSl{*w$$ zOZ^uCB!m7jAf9{sup48=BHZ>|2+f&i>>x@r}K9PcQxszqlEQjhQ(o#|wBhVW5jL zX7!tz<|RL-i%f}klx9+uuxy_RqF}cw-(W>I4#9GID*SdQs zE%H=$Br*p{+awGpIfnf}14@(y%=rcSlD!J{y`%_42oY@x-LtL)zV7ZHF{uatTf9C# z)vVcPp46yH`&}Jbu0KMS@>y0+SqDCgmH_fM03!|01`DYUN)U$T-ZyAySJj$1@(fUM zkusrc)!Ty_54X5FN9Gi{^Vl(}0g>s_)->!#gek1q6%({f$10%Tog#wTtLQ3W?A4ry z1fLb^@2D)nBjI{i;C%||u1za7i~6I*g1V~YVrNSr33}<|t0F$BBJ>o^cTJxOAbX_$ zshiJ>7wtge+#ny87?XvnA!O~{08>A?Z3SN0mwli3?W314av)>#jl!?DqKpa80*(H| zgNj3d$(JjBit$Sq~Yk($=q$0BE4bgZwXp;p}M zdg2cB{CQgjt|ro+aimM=Tn8%I^sqDi8KqyZ=b8}4b3A4Qd>r^_1tfIA4;wjD89V1| ztql!cYmZB7Cti<-rzUjN|MgFRTC8+nV}GdZ8k)aZ$4v}xQj!D!ug3};#61LA$s1u* zT_!TP1@at7Fw!}Hh2Pw;kaEJ(9ZLF{2fbYUGm83@N$CZ-re=NFo>-eLrj|4Xb}BTj zwE<^N!k6nL?waHS&2K*OpTzd(MiZO_9%SV}Y!(=pJQjQC?1x3AEne)ckh(Mbqxd?m z!&l^?{A&4NXt0fAq@dOJb^>S|;6#T!2^R`k#Zp3CITxin{m}B6p70>HRgr4kW88zc zUZNJcOxlbT2QNNw_<9@r(9U^Kb5Dba0UMcyMM||-F#gV`%!1M(jA-ny?tRQ^ZnU_Z zdDBccy(`ROA>RN~qc+R{3v{r?rICZmEtglacI+!c75&+PdXI#S*lyQSnyLcii^EhQ zjZQjYZn90gU^`=8ewWDlb_Cn6hBv`v;HtKe3L8E_oH7!x6|IXu~-{$}lqg+0LT(tPgRR;>f|#|DJj)?iRQE z&z_5Pk;UYifdPS+57-q$`vZ`FqnP=w!~Z=jrw?z3eET+d-;4cwjPqM;o-{$*$W>u_RsrK^CYrs@Oa#R|G9Sid-be~r^Ijf--d+W8(+;|EV~9YGq z8xoaAO%$N@mX{i%FNk{rgnEE=gpe|=<1_w2<#w|EnV4{CNAqU3e8;5&xTRs{Hl zoDgn+NVNr|h=HFCP|;=~dJ%BP5wA*Or=ti8KT?W8%%)(mt}Zs*PKWaKhw<0gEozSe zgj?Otwyl<2{6vOR>*NVZxq>xkf87w-u?fH5EQXGN=1gMRfG`m@JFdd3+}4dzVsNSa zwnBt#D#kaUjoIJODe7+RG-JD^8W{a+cP985HSY|Vjl9}NLgKEM0Ja*E+D%+G-z)A{ zp9tenk-l=-j=LUPXTWOnWCQuD%;881+sKUE(Jt27%)b5JKZSn5yQ%!%$g>*_=)k;Y5`ww7 zts?-K_T}^<-aCrWVtt!pp&l*pJ#o1mzT1D<);1)e(Z!o_cenuvjyiI#jbl z92iIOFWk{Jz#KP1wP4n4VJ7wKWDDx2?^sPZ-6myyKop2{GTdiwM2 z;?w4{Y7PxZKqe;U7#O*b!E0gv0*16MpmPjZW87>X7KiM~Opv`3rbv*o(VEWuRID1m z2gZO$k54gqh*-fD(dJ+EPF3+PnbkKydd@60LBB8Q~bX(p=F%NopY9sr%liu4(ERLTL zMqE9!F%%zzpvXKKq?fO<^nrg!?BPYG^TXg~iI)Z*WWRyX8<4Dz%4j9F!>n2*JeZSc z^2riHy3DOG02|6zMyFYjhxuVbHLxCg;=haOs$lzU{R7q^@vi^obkA-(#GFKOn%n|8 zcjW_ISNmG_WCR?5!OwT4(vIkD=*89%dFF2j0$5<#s4hwSo_MjYsC3_i-Za}@OV)#KWrD;Tu=#@92S-KPI`C_ynrOh?eFA}y(LYIwtAnz-G9aJo2?l*+ z^0NC=9z?5bO|*TRts3SRYqEAc&N2S^2?f99)G(}%$t<57Jm8}2OyN`u1!`D`(@2GH zEB1i_PO@B~Md|_%z>6;7BSePn&Ucz;3eS=yg4$Ibc>^z zoRB_o4FtLqrq%z6zvW0zNwbrmxv>V&~VEovntN zq+#Dc8{m=Hx@;FaEqAs=0bi(lUh9@;O>1#!)Bkk;>(k7!^|KOW%7)>j`?}7n3P}%v zvX>+j12{er{fgeCFBt`b*p?tm>?;*L#%mhG-9|{+^^i z*kZ!NfoFjweR|iAm`4CYuH2oX=uKn6!#$`Tlo2m+vdXn?zyT5*Wc4wWtNhZ&lwRTi zty0lQ*g0ypk7FMD+a(;N+D%`ALqRBVb=R|wFuwBfuKofSq|61>6|gCJlo5meX>mU)oM1L=X=D0pK~g%Rj*Ee8CdEMjQ*? zEb*y46&I=j%MTK}-Fugso}?zYZak*Fh&jFFg>q8;VCG)>@d};1@yMJ#Msun!mnt*H zT}_U`Jcu?`IY)=rYdQq?hB)c#$^4fcIX>A8JO`n9Unb!k-KfpL>t?_6vRD~ty zI`z^`%QC1ps2GHdxeR1u`OES?&b#->z-&qrb9|)p*W2^vQ3x&8)0}QDQ_2s6c`q%d z2?{OHd-8q3L_1nAcsKKVaD`@nLdoLUvJtrn$ni7}{15!@``@5(`}uS!^hUcA>8twJ zKyCH!rfv43R%KZkPmh>PYpHyl)5*a$t~upzVimJ|Y95SKIW`K_{pZf%{~3LLL%xlU&$iTp;`M%rCDs{K4s{ zreRM&rh^Sz1dfj{(X%-qoY6kadboymM_%SabQ#?(#)R)tHBrbU^nq}{>?}Srq;jcz z{Au-Z8@0JYkvcPblir5GY|9c) zT0hc)Q89O(Jz`07Vj(OrOx(a|8f~!;rq3jcFK|ns9|1Pbv%o0x`>vSasOW}5*ZNkx wPx6^^W}6!C?24m_)Od^3pro&j&sU!PHBsYjs7~_SLBQ81DMiWhkA{K&2MO=rQ2+n{ literal 0 HcmV?d00001 diff --git a/Templates/Full/game/core/scripts/client/postFx/turbulence.cs b/Templates/Full/game/core/scripts/client/postFx/turbulence.cs new file mode 100644 index 000000000..af4d7dc7f --- /dev/null +++ b/Templates/Full/game/core/scripts/client/postFx/turbulence.cs @@ -0,0 +1,63 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +//----------------------------------------------------------------------------- + +singleton ShaderData( PFX_TurbulenceShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; + DXPixelShaderFile = "shaders/common/postFx/turbulenceP.hlsl"; + + samplerNames[0] = "$inputTex"; + pixVersion = 3.0; +}; + +singleton PostEffect( TurbulenceFx ) +{ + requirements = "None"; + isEnabled = false; + allowReflectPass = true; + + renderTime = "PFXAfterDiffuse"; + renderBin = "ObjTranslucentBin"; + + shader = PFX_TurbulenceShader; + stateBlock = PFX_myShaderStateBlock; + texture[0] = "$backBuffer"; + + renderPriority = 0.1; + }; + +function TurbulenceFx::setShaderConsts(%this) +{ + %this.setShaderConst(%this.timeConst, $Sim::time - %this.timeStart); +} + +function UnderwaterFogPostFx::onEnabled( %this ) +{ + TurbulenceFx.enable(); + return true; +} + +function UnderwaterFogPostFx::onDisabled( %this ) +{ + TurbulenceFx.disable(); + return false; +} \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/postFx/caustics/causticsP.hlsl b/Templates/Full/game/shaders/common/postFx/caustics/causticsP.hlsl new file mode 100644 index 000000000..f9242734b --- /dev/null +++ b/Templates/Full/game/shaders/common/postFx/caustics/causticsP.hlsl @@ -0,0 +1,66 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +//----------------------------------------------------------------------------- + +#include "../postFx.hlsl" +#include "shadergen:/autogenConditioners.h" + +uniform float3 eyePosWorld; +uniform float4 rtParams0; +uniform float4 waterFogPlane; +uniform float accumTime; + +float4 main( PFXVertToPix IN, + uniform sampler2D prepassTex :register(S0), + uniform sampler2D causticsTex0 :register(S1), + uniform sampler2D causticsTex1 :register(S2), + uniform float2 targetSize : register(C0) ) : COLOR +{ + //Sample the pre-pass + float2 prepassCoord = ( IN.uv0.xy * rtParams0.zw ) + rtParams0.xy; + float4 prePass = prepassUncondition( prepassTex, prepassCoord ); + + //Get depth + float depth = prePass.w; + clip( 0.9999 - depth ); + + //Get world position + float3 pos = eyePosWorld + IN.wsEyeRay * depth; + + //Use world position X and Y to calculate caustics UV + float2 causticsUV0 = (abs(pos.xy * 0.25) % float2(1, 1)); + float2 causticsUV1 = (abs(pos.xy * 0.2) % float2(1, 1)); + + //Animate uvs + float timeSin = sin(accumTime); + causticsUV0.xy += float2(accumTime*0.1, timeSin*0.2); + causticsUV1.xy -= float2(accumTime*0.15, timeSin*0.15); + + //Sample caustics texture + float4 caustics = tex2D(causticsTex0, causticsUV0); + caustics *= tex2D(causticsTex1, causticsUV1); + + //Use normal Z to modulate caustics + float waterDepth = 1 - saturate(pos.z + waterFogPlane.w + 1); + caustics *= saturate(prePass.z) * pow(1-depth, 64) * waterDepth; + + return caustics; +} diff --git a/Templates/Full/game/shaders/common/postFx/motionBlurP.hlsl b/Templates/Full/game/shaders/common/postFx/motionBlurP.hlsl new file mode 100644 index 000000000..348484f4d --- /dev/null +++ b/Templates/Full/game/shaders/common/postFx/motionBlurP.hlsl @@ -0,0 +1,71 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +//----------------------------------------------------------------------------- + +#include "./postFx.hlsl" +#include "../torque.hlsl" +#include "shadergen:/autogenConditioners.h" + +uniform float4x4 matPrevScreenToWorld; +uniform float4x4 matWorldToScreen; + +// Passed in from setShaderConsts() +uniform float velocityMultiplier; + +uniform sampler2D backBuffer : register(S0); +uniform sampler2D prepassTex : register(S1); + +float4 main(PFXVertToPix IN) : COLOR0 +{ + float samples = 5; + + // First get the prepass texture for uv channel 0 + float4 prepass = prepassUncondition( prepassTex, IN.uv0 ); + + // Next extract the depth + float depth = prepass.a; + + // Create the screen position + float4 screenPos = float4(IN.uv0.x*2-1, IN.uv0.y*2-1, depth*2-1, 1); + + // Calculate the world position + float4 D = mul(screenPos, matWorldToScreen); + float4 worldPos = D / D.w; + + // Now calculate the previous screen position + float4 previousPos = mul( worldPos, matPrevScreenToWorld ); + previousPos /= previousPos.w; + + // Calculate the XY velocity + float2 velocity = ((screenPos - previousPos) / velocityMultiplier).xy; + + // Generate the motion blur + float4 color = tex2D(backBuffer, IN.uv0); + IN.uv0 += velocity; + + for(int i = 1; i