From e08997852748d1155820139dfacf4745c9181ce3 Mon Sep 17 00:00:00 2001 From: Rykka Date: Sun, 14 Aug 2022 15:40:31 -0600 Subject: [PATCH] Ports Taur Loafing from Cit-RP & Chompstation13 Ports https://github.com/Citadel-Station-13/Citadel-Station-13-RP/pull/2950 Doesn't work for sleeping *yet* due to some fuckiness with sprites updating that I'll probably actually work on properly later. Does work for resting, and when you're stunned/knocked over/etc you will tip upwards like normal as a visual indicator that you're fucked (until we get fancy on-side sprites or smth). At the very least, despite my frustrations, y'all can rest on your belly now as a taur and transform/size matrixes should work. LMK if there's any issues, my testing didn't find any. Bear in mind that this presently only works for the drake-taur bc it's the only one that has sprites for it. The code is there, just enable can_loaf and set the offset accordingly to match if you want to sprite more taur loafs. --- .../mob/living/carbon/human/update_icons.dm | 19 ++++++++++++++++-- .../mob/new_player/sprite_accessories_tail.dm | 4 ++++ .../new_player/sprite_accessories_taur_vr.dm | 4 +++- icons/mob/vore/taurs_vr.dmi | Bin 155696 -> 157771 bytes 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 6da73bc4712..a85af459623 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -144,6 +144,17 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() var/matrix/M = matrix() var/anim_time = 3 + // VOREStation Edit Start: Porting Taur Loafing + if(tail_style?.can_loaf && resting) // Only call these if we're resting? + update_tail_showing() + return // No need to do the rest, we return early + /* // Commenting this out as sleeping is fucky + if(tail_style?.can_loaf && lying && sleeping) // If we're put under by anesthetic or fainting + update_tail_showing() + // return // No need to do the rest, we return early + */ + // VOREStation Edit End + //Due to some involuntary means, you're laying now if(lying && !resting && !sleeping) anim_time = 1 //Thud @@ -163,6 +174,8 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() else M.Scale(desired_scale_x, desired_scale_y)//VOREStation Edit M.Translate(0, (vis_height/2)*(desired_scale_y-1)) //VOREStation edit + if(tail_style?.can_loaf) // VOREStation Edit: Taur Loafing + update_tail_showing() // VOREStation Edit: Taur Loafing layer = MOB_LAYER // Fix for a byond bug where turf entry order no longer matters animate(src, transform = M, time = anim_time) @@ -1233,11 +1246,12 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() //If you have a custom tail selected if(tail_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL && !istaurtail(tail_style))) - var/icon/tail_s = new/icon("icon" = tail_style.icon, "icon_state" = wagging && tail_style.ani_state ? tail_style.ani_state : tail_style.icon_state) + var/icon/tail_s = new/icon("icon" = tail_style.icon, "icon_state" = (tail_style.can_loaf && resting) ? "[tail_style.icon_state]_loaf" : (wagging && tail_style.ani_state ? tail_style.ani_state : tail_style.icon_state)) // VOREStation Edit: Taur Loafing + pixel_y = (tail_style.can_loaf && resting) ? -tail_style.loaf_offset : 0 //move player down, then taur up, to fit the overlays correctly // VOREStation Edit: Taur Loafing if(tail_style.do_colouration) tail_s.Blend(rgb(src.r_tail, src.g_tail, src.b_tail), tail_style.color_blend_mode) if(tail_style.extra_overlay) - var/icon/overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay) + var/icon/overlay = new/icon("icon" = tail_style.icon, "icon_state" = (tail_style?.can_loaf && resting) ? "[tail_style.extra_overlay]_loaf" : tail_style.extra_overlay) // VOREStation Edit: Taur Loafing if(wagging && tail_style.ani_state) overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay_w) overlay.Blend(rgb(src.r_tail2, src.g_tail2, src.b_tail2), tail_style.color_blend_mode) @@ -1267,6 +1281,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if(istaurtail(tail_style)) var/datum/sprite_accessory/tail/taur/taurtype = tail_style working.pixel_x = -16 + working.pixel_y = (tail_style.can_loaf && resting) ? tail_style.loaf_offset : 0 // VOREStation Edit: Taur Loafing if(taurtype.can_ride && !riding_datum) riding_datum = new /datum/riding/taur(src) verbs |= /mob/living/carbon/human/proc/taur_mount diff --git a/code/modules/mob/new_player/sprite_accessories_tail.dm b/code/modules/mob/new_player/sprite_accessories_tail.dm index 06dcdb9ebb0..f5b6aefe4a7 100644 --- a/code/modules/mob/new_player/sprite_accessories_tail.dm +++ b/code/modules/mob/new_player/sprite_accessories_tail.dm @@ -25,6 +25,10 @@ var/clip_mask_state = null //Icon state to generate clip mask. Clip mask is used to 'clip' off the lower part of clothing such as jumpsuits & full suits. var/icon/clip_mask = null //Instantiated clip mask of given icon and state + // VOREStation Edit: Taur Loafing + var/can_loaf = FALSE + var/loaf_offset = 0 + //species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) //Removing Polaris whitelits, ones we need are defined in our files /datum/sprite_accessory/tail/New() diff --git a/code/modules/mob/new_player/sprite_accessories_taur_vr.dm b/code/modules/mob/new_player/sprite_accessories_taur_vr.dm index 2a574510b04..4eee0021770 100644 --- a/code/modules/mob/new_player/sprite_accessories_taur_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_taur_vr.dm @@ -419,6 +419,8 @@ extra_overlay = "drake_markings" suit_sprites = 'icons/mob/taursuits_drake_vr.dmi' icon_sprite_tag = "drake" + can_loaf = TRUE // VOREStation Edit: Taur Loafing + loaf_offset = 6 // VOREStation Edit: Taur Loafing /datum/sprite_accessory/tail/taur/ch/fatdrake name = "Drake (Fat Taur dual-color)" @@ -614,4 +616,4 @@ extra_overlay2 = "noodle_markings_2" suit_sprites = 'icons/mob/taursuits_noodle_vr.dmi' clip_mask_state = "taur_clip_mask_noodle" - icon_sprite_tag = "noodle" \ No newline at end of file + icon_sprite_tag = "noodle" diff --git a/icons/mob/vore/taurs_vr.dmi b/icons/mob/vore/taurs_vr.dmi index 20ddaee2a400511ed889dee1820d5c0d38738b3d..8ae4803803c3dee7ade77ac2d7e0f8d422887868 100644 GIT binary patch delta 7554 zcmYj$2Rzh&{QsF{Br93jNivQ&Wp9;HQnEKmHX-XHWrr_iR~L$qjLY7RkS%9joRLw+ zIpWCp{N8^5$K(I_-Qym25BIpoeLnBkcrN9wbiG4#|A|0%g72C6YdiZn`abgZf8^zf zKm@&co6(gXg3p#?$#BJuwZpN{N zZTMT!h02gg^mDNe!9no?(^JN=)0B_ncoqiYzWyxRN*bWf{G@W~j9)o^lHpsVd9gn_K_4F#7jt%JZ5u z5lk2cuogS9)z6nv~7AZ~^h2&k`_S=TLG$Zz9F7q!^z)o4g zV#G_8UsYW{WD4&{=s#ARyzBbwlWkgsf~{<7#SJbitIutyP{+CT#+w6UXE~F|DN2g{ z!(#0!x&1Jck)JV<1@{S zV&i&?!3XhnKXPt_M&5a$G?94pAg<|G)=0Wk9M{)PfH?CBlf?8+~|Tp`Mw;b%c*Eo6$q-*|T^(1d$hlaH!XHH}4pv{e7-_$L{d$^Wd}Jh2Td0C3 z=Ib(&lTmZcmq$Ea$ekxn8}WI{CQ+hyXmtn4ooHre*82NLphy;J(LDJ0`u$jtEYvt#J^I6j&7FPVIG zXTLdJMVxC35<#dt?H~d zZ?pxNTRS?aed~Bfe#^O|a$;#q)U;UaA}452Kj>^&W6^1b zv#vfA-)KhnyHFqk8mxu=*8`La3JN-Qry~+CY#yZ9 zHY!>KD#vj9>5~_!CMG6S&)WnFv{!e68$98C7|@MV%`0sAFb+UPw_S z=o0u_`+$mhH)!h@o##yBexg$N;yb;@bMPf`v>O?QZfQ#f?^lI8JJYllBX1S{xWi8K z+u!1Y8fiUEnYs4s*L!l5p_{WBBCmQPkMzyid)=zym$6uEZNPeV(gTlxhG|B#bM;^r zg#As5UT5<48z`V6%{f*hpldZQDCf| zv3NpP)gSAdrwiUpEr^bl=moWy$26AC1g}a?S3Ms02Ul{ieZoVsv3a9(Pb03VZ$j(>VQ%wK?x53fhy+@L=^(RpI!_;ng%qHk=Z z*Zn(-M6~puyG5_NdFp)^>D^I0C&h;5JK`eSnbN++v0XyS%U{$T;#Unl{T_)vH8GL2 z>a)FMSbf1E_>$NXti9v=d*tHu?5seEDBR-z`>y%Fr2wR|a$gdkinvhSZ-4HT8`}Ou zEjy)N8piBqrKTMYGN6xCW=*HI4!_;fP8E@pmv1AIsUnzt2L91gV7_?TnMiEpU?^-lDy>tnBtzXJtO=iNVz!w_S?jLT0AHr;9pLU##jPgOrmF z$V954DSu%l-*~#|D-XWBudB;C`gKX|vOXj@+@P>RBue*Ozvppm3(?=g1$1^xyY={S zIaY95SXxr3$G)dJ#T2VNaZBp;JzLvkC)v1FDj zSM#9Jt6Lw3#>S$xg($#^4h$I8PJ4b6ZdJZC;erulr*CsdJ#QJ*F>mHvDy!S0G0i`W z)7I1$T3%YZ!pjp4apa{YSU%M7)`+mchn24z2V=? zvMYUXOq(4u6%s)QP=_NvjsT81JZwy=Z)o6ACmA8iPy;Ot5xU52qEt+*tIQs$>|*#c z9FGcm>u@Q@E1q13T&k`I-7vXL)tfAyfh7?dpT6>eo^d31Q6R`ff;4kAM*>Y)SlDCF z2PS9IQpUOWj2Y}b%Nzpw2m?_*b-E!5#(nUqQ>P~D{FZn7WSH@{0fJqeCm#$?PbbdJ z*;kjB3v3WgOU^x0SI2k>FoPw~QRXX~xJbHN#10@c^G{!f7Nx0<=k42PMMXtH5l@%k zAaQZMWxQMA2?A}jJwMgA=o_aIJ2NvAnRnBukPQZ?${eTNac{>C8A}W&Hz4SBkmp-4 z7!2ZTq)oar!1%nHn!shI&jvnYn{1@l{C{<`XbZ8(p->zXql>Pv!F1T5yqS4x~$IU9ld86HbnUH? z@!u8P1KV@@BENTnsUb>=8>uhuO2&2QAQ4}ys~rLYOizn}Io1|>7IT(AuezE;SXg-I zw|}kALiEPKTP62^01i<8Yrel?_f(~p5U%u(e0*GxoOU&MeIHlnxM|OEgU3t50f<_^ zWhN?9lco5{Q775CM1`55>E^H;nQuctSDgHENs0c~v>wQ*eQizRrEdNTx~NlHoibCP zI?4|DDQ>>lIB-iV7buG71sH5$z^2iG#r%2o$$+)O!a{pFZkFUO(l;J2I~NyP4-XH7 zX`!!I^$MNs_8GH&E;m=#)*_Qaq@rT{#>Pe}f6L(V^B=!o^t-TWUV+eHZ2%S992|uU z4vh&ze98IXjLH0J9CbdbXfI0$x<0qP|6(ufa8KsX>MFR-xbiseQ=y~|;62VfT@@q? zQ;fb_ukF#F2W#s!gm1c$>$dQ}^RJxiKEXui@P9whmG9p1@m}+O{|SaJ2wF0AMue*J z)6&vT7%hHgVq&TU>gFx)EGH+Y9eHCK!pD`(uv<}wG}#yv1TuOlBD(h%O|I=fMx4vx zv9Ps0i{d;h}Q#9yHG|io@kr zRo#z$f2fDpYk?11A_uR;M*IB2us*IJ|HsKB8q>&1PBh>#h{Pev5v=B{^QoIBdGLn=Gij}Q#V+e z*7m!ron3^yf&$i|!qqq8WLm2%beNF*L--zwjA=V3rx&D0#gpzFr_S>$zkr>+ZJHlw`0$|%W^(A~&zEKr(XTGuo(DQRTiM=jHE-Ols(p2b zBlPygg@A^v@m0xB-HjZNCr8%D5cZ1&$Ao50Fh!n zYch10+-1U#R&6nuhl3ov3K51X@CnxH)4Wl9LZ2#(;-zWf{VMjxOB{KK!?x*e{ZEnO#*o)B$=W$S1SfE zX+Z@xxZ1+T=G(7dA`v*2X~(Xlxy?B&&B0qWh%dZ_AE4gFnneW?YEA$=pPmYS z*LaaR{XkF$tyhgBk;n-B45>M3XrCc`56kcQuO?WTZ^>V=ll8{*^fc#%3sC@jIvpHq3B8tYKN#G`}t*tZBXgz&>hHu}#ZIZh9GpYu+mt+ zy&2N0$N$D#D$~-=0fqFwqQclj>BCRzO$)rp&8bR+)NZ&u-K>NAeMH&f0|ZJkf-X|v z^#6UPZBiCzFjG)6L7!aw8;+=AzYFB_SAs_T-r^5D2)s|}WEm+C`~75X7Fz<|$%d3>2 zLICT=uET=*Qc{8iW7hqJT7x+xA~#pi6o70-FAanM&I7nA1X5Ks32@~bm5}r=zrmL- zzIRbLek7aaw6n7_3%SV{ygo|`dgF{S-~C;PmPHTNxbR$1^uKXFP8+n8k(P>GhXNru zwnu)w7DMy_3!Tul@Dk4!p?jz+l=7srY;f5T9scj~0>Pw`--wx7gB^J?e`r-Gad$W1 zWpZ*t$cH>JPJVv9kPs#Cv9+9{0r-}?+Cjhq+C`R2gf(t@Z@fb^u4_Requ1WSf%2I; zB2}cc0R}D?7%!k+tF?s$b?fSwjYL>oy}ZU_Yl4&q8f~P5gM*75{^A!%$ig3V37vV@ zZP0^V2BK`hd$JI$q@Wm3GkcTgZ4o^^Jx^L7U*EeE({tVee94$YScjRq!t&k%BT~nB zc6)zlW=2Y=1#$8=L%0&8%xC)GL5#oRnH|T64<8O!{|!=>c-4bI*g!`+#jeECt^H;6 zRm7*#QfrK~-1X}{TORL>3QG!z+RXT#FQ;c8*gVxKOcH~Z7=#=G=jO=(`9ZV*{M}Ua zdVbO!-&*h9MPCQEzhKlDR3BHE`ST?g7V9=A(2ZnB+tSaKjITzm+|N%cFYC1QYWhfp z`2Q}pvy!b1Hvx>Bn@ecu8+m#8TtM`oiStKJvOTg{jFD{uR#Fc-tr>K6bu)XR#mGD{ zGb^hXHf7^h*qvY%j`Qa!5KmE@^^3%jT}yEBM+f8+V~hZGb9wkMO1;-f7EIvm zAO$cOT)+K;1H%vbTHR6kU%oJb1w}*0*Go!Eb*!x~05l#QOy<2#iD=(_^5jW&wV;dv zbB<#d_2%X#Qps0<;%=}#zi8@9E+&;cl%#ETC#7$;GU_> zLTEV&HgUlA-xH@n0GA7lse`2$J0+r`$*P~$G6d{&Rxm;(k0tZYM%c4d%2{fgbD$KwOjQf{%THt{5b7%3UH)uC)pc?KR`8T z)=dq=u0&4ID+xu!#KcSv=j)A67h*6bLlwtynfaikEvo(U=#X|nHS5X-byQfTB-^qGYJlBWxj`p z!4-I&Q+2Q(OP?*Ut`)bB?Ji&9PON-5_|CqmZMz95auB1iQB>pCGqbZtPUlQVCy4R= zwl+6!o5RLXxZ;f@2T<8r9psNNUo0i; zJTNe@evpy_dQ-?A+eCA|+0oH42x!Zh(Cz-n^-y&%PJ$^nTAd)-^?K$K_S&#I4+{2) z2kFj-pi)?n3TTI{7aZY^TguDdPmWDZ(U*-g#9*JP3q&j}x$GT!I)!UPlK4`0<%WdbU-^qIvJ_+qa!-Ywp9t`VQw#?AHg5wtduM^~~wyF5v>z3`K{U6u9um zBe8hR;RxB24gtjjRB0R;XiNF!k-k1gNaUs_5S32my5N;Hjyi8xEI~J4BB!52IsH)m z`x^(;{I0$TD>wdD>Wi!_uKs15hb#&e4Sq*Ef7lv>ArSQf0~NsPaBbrL+JIG67Xa}+ z(4hzc=F_ciRhmt<7lm%Jf|PQWe855<1vDp+u_CM*vRT?lPHk~0jdj2EWY<9q@gXg@ zZm(+6UC2<90Po8yaU{g~Rb;|`qfgrr<-=>OZZGg61k+YGw|g>hhRDsn;yVPrI(XUl z`iCEnfMYi+9Wx{^p3bwFNI8u}?@}W`pdpcVYcB19P3~|ZOgbV$wkO^U^*xFd+~i)P zi>+ZzgBpNeTG)0wxQ0MbkKEMOxYwR|-W3rsIcZJ`y|Ukdi&vZqUmmzXix@q`%Fp@M0pqOAXD1U>xHpM;sI>i@j2wKY zqUGqAU(QnY9(^{sASpTdy!%2C3tw^!4KRWRhK3+@t-MPJ!5tHTr_a|*cJTIQ*3D-@ z%z9sAPUr+ryDE#h|K~Hg0Q`RGe%ubHhjxsNuyS*Aci4FY(sHQa1klM6r(OQ_tB9(} zcM3tSDBm4As`-+k=8zm$S~2cX&jpu_vBx$95@kzp^_K~|!A*U? z{nHzv{{4T$fd6?uYW%GA(F#1+^;q()YgNNu$=Vh>|Ipsv9-HJVpC?8ya#NgBy}RaO zxp??^30137EdT@D=;+$5l+O;w=-x%dNxOCUpM7r<{c!g(7zY`gdDB{oO_|>R%{@Tu zvF-Y_sNAB|;bSxyN_pr=jh#NXsp$g97Hh+g6jcv5wGbsy<)~G7(mfr3(tVE<(c~^H zuvO(=1l4JmBgo!fLpYp*ee`}08A`&r;eO4rX;)$Ldj&l1bvppMzXXR(`hgt8z`&r@ zRjwT@Gocx`)a`-+nFRioLR6E`&@O8Tu7GD>4NVD|d#puq2{e|ExR95HIQNRV-NUIJ z?d>T*raY^eH6#n%7b4pTS(978-GCDcYPer+untpEQS~`g2yi3-2YC+RJ=;n_;-rtV zt1uIng~`8qUeyDEH8wIriJ5!}6rzNbln^fy_P0O%v+X}6Wp32B1(?P51%f0vei%S4 zG^SCn|5fFQWxjhCjh#~mw%(Yfk8F~^3zu41iog9|6+!lY3~EA_OtA^?e93xL)*5wn1*94w_Wuq!KKKzp4*fc)mfr)Nl6izg78tw+bl zvF@mZ-~FoSv%n!>{=O2qInRwmp=k4m&F;dtKi+kH{P+jEmAI+;Fp(^rWgx_SI#z5K z810DC1GPcJGf|q(e$5+lU}By&*`$yMCO^X^4E9@Gl&BoYkWr$@xaK2BQ3*ssx}!ks zt@q+m*MQdL=MUYaDA}cW4;^o#`&{LOGJ5ZKFf#MeEV1Wo9BwoaH+mfLkBB)#)7t<3l@qzyjw^ZaWN`@ws}GDh zUCK`AVutOPIwA;TfCB~6E(zc#;F+_kd+M0mGH_s>mAB$s@Q)x)9v&?Kw7~qAIEc$7 z?`}D6{P`0p(YqPkq;u-*))86{+E0x|hi=6c=-yBz><xqM>(SB?Qo_QVj@xTe|&Y1+;3B?_bB8gm#3Zo7zt+tBz0?a9-Prisu~hh<5mk-)ec z$ZdV9d)fuQcX3&luP{W&h<~TLYbNW?YmM5xcY~5r@FaqrcVs1Zqp9T4`*BK7gYl00 z8QSKmnp848ht;}~8yiWH-h=9qs{6xVAyRE2#d{~Z23FAHvT3LK#=h=@NkNLS-;y$)@cCy0J(%0q&(iiPR5*GY9>vBfesc+6OOrLFI zCDo0o-N`x0U;3owDiH@1c5n+>NJyqjR$(2ZD(?m260r>I!ksbeVy|615Er_OZ1IM#ZE zO*1$`_m%AA+jFa!rsY&eEhfW!E8Ljl$*IiwX<2RgW^(Q=BHxe88>}g435N)xNK_6- zgB-1OFU7YvofH?7>g61=cl0Z9S^EFUjND3%T>16*9bDM?zTV@VBo|Hc08er?xy9mK z3L(YY8HcQadHuFlzE1xBBoZ9;8tQ-f6yEb`Mk-`oWNWo$j$yhjH|J@OrNsz@*>0D+ z=|+YSMuiX(ph5@}Av^8=+0e%I_fS3csy|_1UJdy14bF%hV`j~BAt_MM8frFb_D?x*qu5Ftbl%Ad*fyKlJ zUj0n)nt_o~A08+ zUxl0=w24x|C(8*GGHI`0zkbupNiryG#p`zm#Yn-^yvM26zN{XLA5Z=uO*rfA?0QgI z|6(atW8Yg_o7&XWw6a90P!k+-|I(ZWFqUK^HHZk!(E~dTI)KsNAjQUm* z5)!bmu_9wTdwU*%d7=eRleZ^3r{`Yst)VTPtsD7Yk~T<^7be_Mb}wGg4?8i=&d&Y~ zY+7AgBY@Rl^|Kci7QS-TXX$FZ7DtQf>gyAtFeUM2-<)sK$B=7}e3mtkPWOR)e4-~q zkf?@PcRhW5dSl1kuS)PK8d}=CV9Nk_U|=A2KX7<<_N|j-?2jLslbe2HZ0x7Z2QY?` zu-B4=Y3b>md6}VUUId|hJ#+KsIFfN+dEwP(CF2?E=L8p*fh%6{HepBxwW_!Lx5vOp-ok$M*(%2{`yqb(e=AclCu@(uYS!zs7ggxK0qmCN~diySoo`9|Z&il$!{;XjD(ZyQ-cK z(y^V;2YvKbgFpMR%Y6O1nk1`XTuv@OQ(R|+=e;-kxQXsr4sv4b;VIn*WFPK~nem>7m!wOdXT^k;94H z@6J)EH?+6#cIyyJmX#kY^+R*#M=l^0_3knK8%D1{sly*)| zn*2IgGiU5`tSZQ~5N1kCOMCoc%rS3-FKp@y?(pX2)Y@&XxyxtKl2ua*%7NkapmEycyqnQx| zE%Rj@0tsUkcHNJ)wY6^}`*Od(mG6QDg~cR~Dl41)&L~SuW2K^@$u2F`**}qzmX1@2 zqFFechpYyW4U3;q_ykTxQqhKKs|~V;_t+l-SoF(Y-rkE4kOEu20FnhyW~p@QoSdAL&!0&} zPg(A)NIP;{OjOvQN%sy9iNda2v{}>H+1W93LYz_kj!${j@5{<|CJUMUlH&FE@iEw^ z|MuJGK7jC{p<&V$hYC058=(ugH3!T-rKX0@Zzq_^r#S++Y^|+ffTKNwgJfY}#dS7p zkWDMs;z)9HbIFMb`OgM!9q4Pqh(w3qJG;AI^Y!&DH!bl(xuzj1Dk^HbvYBPUgqwesk8u?C>U@Sn z@&UU%{QUeK>YO1T6Zc;_hVyXD2OAKK&KRR_qZivj*jk0dCa}h zz4Hn%XmotMea+{}6p`QxF=o^6=sfgeaaSveYH7*5SQhTUj4OTG9lB zu6%kqx+%`wSLp&UsX#-m^g&4yHu%9$vb^>WMkJ|Wp8M-#U#(qhOot~Y@2#9yys&Xt ztkXH`AhmgBSNq6Q_MWU$}T)MUYa&l8(FMP?dUXA1ZXL5l0^>)01{9YaI! zPJ&TWaG=Ltn7}5>Nw}0#T5=7tgN>6jYS!IY<UapNVmI(zn3p&^ko2~Uy0h2zvx|;Dxrb1^&2SiL5 z4r8Z@GTmFr%M&Ae6XQ;Fr#cLo&h|?ME{&- zOxCd5rt}J#BBe~yMsV)=?L)L}MaNyg#UYw0r%Zt}!k$UQd5(Gl_&=5Qi05L@e{uo4 z#Ocx=q@uDPgRa^w{C@;r*>@m75xP?vtYb-O?jkRW*%2z8zuDi z&71rWTotxY9)n6&CoeHs1#`u7D#ovne7Azm4Ve*%l@~2P6)ukK^gyTIbshg&jK|;V zacsAJ;ErM|fl5kj>z0eZU#fZuzAqpmr>4fRx~4{``>9AYRa;0%h)YPMljIec%Rm`> zJ0C>$uEtx1l9E!-)U*&G4P1-r&Hs9|R0yKY*ei>QC;|4)lr8V6G{nhq_3@tfiV>nn zB(mrO)2>M;!i;5x-XpK`nN#XDM#lW_4gmo&^-z6140e2cT!^xm*#C+Z5Q8xYg}1dS z&D435k&uw&mzElF-Pw_ao$YjUY9`P|p;x!Iy2eY)cEHHXsjp{MQ&ZDK|F*@mJf|-j ziv`{SxR=WcD`Y+iNl8jhw#9sRbHQ|U?JW1FkJ(Y7TY(k01ov_gn9%yLYq@C6k`ArM33&r8_m?lFO~o>Y4jhere*MfE1Oy!(b7fBSHPH?KOS8hY! z*QckaE7Wa5LPE;pc+^}VB?jfu9mN@XG&A9UaTZ|66gE?gUm46~$_(E9;eB}Au-(iM zvk#RXH+??H4yc)olGd^x~X}*ibSf$C1hI7=*p((fvO}ShaDudVDNcs8mymx2= z-~z!2jB9UKhEG>h08?8SrBg~lAEP=nIa!;1n#r6JdbB`hgTjDEg%1zw0Tz;hO}|O! zr4m%wn}$p6?eE``eX=%p6og685to!i&~=*)PKRY=fkH+Z8prO3JUmu3Ul& zO+T0+!%f3}FKm6?#k|2!2wF>_p`yZqQn&~|a&y~k+zy{SY)4SD{ayUQ;Olj`-GW!( zPT16!@m_ud3j+#a_iwr1Yf04Vnf8+>IeB?xts5+}ZkX>j;OUx}>vH~d=jZ269v)AE zo;7QnCL8=e_o*KpiIC70pr~{@JV)fdO8-!)9-Fhs3T~*35A`Q9v&!DP5GSy9 z^`&UszHJsSLuGw=%&*P8wGm~Vxyq}YnfbxThH(BG#L`p`c2Vz}msjzu- zuuKlF7>*TGh0A1cwmRXCqr!~ym_ zI?CA9)un4<63xJ?lM;He#=En(_LTAJ)vV%TLHEsfk11QdXY+6;jM+qSYG8M zOwPE8upA3}jNI`ifG7J9utIwgHxr{Z_CHy&_a#Sz<>Z`Vv`(Aw_HDt#U@xzo*e04l zFEko$3-TW@o(P*(xD>aD2rUfE+j5sNevWzk4G{LwqA(bUhaf*Dc_}FojF(vrzPNQ0 zEYnwwNk=)r*<}NRw<{n;^>leiQX5FB*S}@$1-}MpMeZSPqD-13QVC>(|Ai+i7=Q7P z6-^8!^h53De_76H@0KWT2%nKgwgsTeFq_w;J?0p91AZN}$6S7|_)IJ@HZ_&yl`_}< zT?vUQdXdOwa8LBZ9H66!37p!KCxeX`T3Xto^4l#@%3REda3{&a2+zVBCC+K9tI%ps z>X-51;Y9J2`dRm@!49dfmAPQi0vHf&12S7c`&*VV0f7L|vnIcNxudk2n*{!|^}e^! zqBmNAPIqTzu&5&DzkiqVZ?crUdp9-yx~$Z;*n9bp6}!8;qi*7(@<9iJYZXRCcUR(} z!jRB|jnpg6t?Q zQ$hHUWYu=TK6Ui0Gk0=vG4&K3^R*z6#?CJc!bZhtz$t>dgdS+@fmhhNgS(7ZxD*vR zVZYZwKxIXMvk0cWmy4Q|AkML}vRZDaG5iOXL%0K^nJJ9af`k3cxw*KyYF|#Il9K*Z z?1%n=&+@K>bQ6CBegqV$sHiYAGn=F`9nphp>(CJ0Vz3L}cXj3?RPp~{aPmqnIjzah zU#-J1GBOHIWacp$n3;k1)#ck%z0e5yz1?Q5+y5{0WN+U z&`n_Fh1YOAm-P*NCS(TN+TQL4fqdoqH_xTstHV=Mbzdsia5$|Xmfqt6YHDhe)!zot z#c>|&g4$U;|Hq|61%3u3cjTsT%f?T~Dt=y;i10=6B!_c3aCG9b>McA_^*{I?Rm0z2 zmbKVOps=V&3{p_|{35Fe7+@gvi65x{u}Ql}S5}H&j>LiUZ5)oFzSM5;vpkE%L*T6R z!{NZ_uKNMI7Hau3*w!|c{<4ljQ4Veo8q9^WaQE41$Si|4YreMZAMM!ftQVCn!?`ck z$BMGSB!}smnzEv5FFias;*n4|yB$j%=uYLN73uIu6|8DWqiV6)>1qCW4*9ey>XYsS z&bZH?IT)FkxLM!YjulR+)q%mq%EspX-Tbokqob42l@_GVT)>hW?GBdJ0wVp1q*bsU i`XBW!i+Q=Sb9bQP^fcyIlH>$1ur$?lR7;huBmNINN#T?L