From 31822a1831d1c586c2344d4312c8f72dc18f151a Mon Sep 17 00:00:00 2001
From: DGamerL <108773801+DGamerL@users.noreply.github.com>
Date: Thu, 7 Sep 2023 12:00:45 +0200
Subject: [PATCH] Adds the Strong-Arm empowered musculature implant (#22159)
* Aaaaaaaaaaaa
* IT WORKS
* Okay now make it a martial art
* Final shit
* Forgor this
* Protolathe moment
* The sprite
* Typo fixes
* Burza review
* Contra review
* Contra review
* Contra + Henri review
* Update code/modules/surgery/organs/augments_arms.dm
Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
* Me when I push untested code
* Contra review pt 1
* Contra review
* I forgor
* I forgot v2
* Henri review
---------
Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
---
code/modules/martial_arts/muscle_implant.dm | 57 ++++++++++++++++++
.../research/designs/weapon_designs.dm | 10 +++
code/modules/surgery/organs/augments_arms.dm | 26 ++++++++
icons/obj/surgery.dmi | Bin 30948 -> 31111 bytes
paradise.dme | 1 +
5 files changed, 94 insertions(+)
create mode 100644 code/modules/martial_arts/muscle_implant.dm
diff --git a/code/modules/martial_arts/muscle_implant.dm b/code/modules/martial_arts/muscle_implant.dm
new file mode 100644
index 00000000000..a048708ddbf
--- /dev/null
+++ b/code/modules/martial_arts/muscle_implant.dm
@@ -0,0 +1,57 @@
+/datum/martial_art/muscle_implant
+ name = "Empowered Muscle Implant Fighting"
+ weight = 1
+ /// Are we EMP'ed?
+ var/is_emped = FALSE
+ /// How much damage should our punches deal
+ var/punch_damage = 13
+
+/datum/martial_art/muscle_implant/harm_act(mob/living/carbon/human/user, mob/living/carbon/human/target)
+ MARTIAL_ARTS_ACT_CHECK
+
+ if(HAS_TRAIT(user, TRAIT_PACIFISM))
+ to_chat(user, "You don't want to hurt [target]!")
+ return FALSE
+ var/picked_hit_type = pick("punch", "smash", "kick")
+ if(ishuman(target) && target.check_shields(user, punch_damage, "[user]'s' [picked_hit_type]"))
+ user.do_attack_animation(target)
+ playsound(target.loc, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1)
+ return FALSE
+ if(is_emped)
+ do_the_punch(user, user)
+ else
+ do_the_punch(user, target)
+ playsound(target.loc, 'sound/weapons/resonator_blast.ogg', 50, TRUE)
+ playsound(target.loc, 'sound/weapons/genhit2.ogg', 50, TRUE)
+
+ return TRUE
+
+/datum/martial_art/muscle_implant/proc/do_the_punch(mob/living/carbon/human/puncher, mob/living/carbon/human/punchee)
+ puncher.do_attack_animation(punchee, ATTACK_EFFECT_SMASH)
+ add_attack_logs(puncher, punchee, "Melee attacked with martial-art [src] : Punched", ATKLOG_ALL)
+ punchee.apply_damage(punch_damage, BRUTE, puncher.zone_selected)
+
+ if(!IS_HORIZONTAL(puncher)) //Throw them if we are standing
+ var/atom/throw_target = get_edge_target_turf(punchee, puncher.dir)
+ punchee.throw_at(throw_target, rand(1, 2), 0.5, puncher)
+
+ var/picked_hit_type = pick("punch", "smash", "kick")
+ punchee.visible_message(
+ "[puncher] [picked_hit_type]ed [punchee]!",
+ "You're [picked_hit_type]ed by [puncher]!",
+ "You hear a sickening sound of flesh hitting flesh!"
+ )
+
+ if(puncher == punchee)
+ to_chat(puncher, "You [picked_hit_type] yourself!")
+ else
+ to_chat(puncher, "You [picked_hit_type] [punchee]!")
+
+/datum/martial_art/muscle_implant/proc/emp_act(severity, mob/owner)
+ is_emped = TRUE
+ to_chat(owner, "Your arms spasm wildly!")
+ addtimer(CALLBACK(src, PROC_REF(reboot), owner), (18 / severity) SECONDS)
+
+/datum/martial_art/muscle_implant/proc/reboot(mob/owner)
+ is_emped = FALSE
+ to_chat(owner, "Your arms stop spasming.")
diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm
index db364d93c04..eb2d4e940bc 100644
--- a/code/modules/research/designs/weapon_designs.dm
+++ b/code/modules/research/designs/weapon_designs.dm
@@ -333,3 +333,13 @@
reagents_list = list("blood" = 50)
build_path = /obj/item/v1_arm_shell
category = list("Weapons")
+
+/datum/design/muscle_implant
+ name = "Strong-arm Empowered Musculature Implant"
+ desc = "An implant that enhances your muscles to punch harder and throw people back."
+ id = "muscle_implant"
+ req_tech = list("combat" = 7, "syndicate" = 4, "biotech" = 7)
+ build_type = PROTOLATHE
+ materials = list(MAT_GOLD = 5000, MAT_METAL = 10000, MAT_TITANIUM = 3000, MAT_BLUESPACE = 2000)
+ build_path = /obj/item/organ/internal/cyberimp/arm/muscle
+ category = list("Weapons")
diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm
index 7f70d8cb807..9789cfdafb3 100644
--- a/code/modules/surgery/organs/augments_arms.dm
+++ b/code/modules/surgery/organs/augments_arms.dm
@@ -559,3 +559,29 @@
qdel(src)
qdel(I)
return ..()
+
+/obj/item/organ/internal/cyberimp/arm/muscle
+ name = "strong-arm empowered musculature implant"
+ desc = "When implanted, this cybernetic implant will enhance the muscles of the arm to deliver more power-per-action. Only has to be installed in one arm."
+ icon_state = "muscle_imp"
+
+ parent_organ = "l_arm" //Left arm by default
+ slot = "l_arm_device"
+
+ actions_types = list()
+ var/datum/martial_art/muscle_implant/muscle_implant
+
+/obj/item/organ/internal/cyberimp/arm/muscle/insert(mob/living/carbon/M, special, dont_remove_slot)
+ . = ..()
+ muscle_implant = new()
+ muscle_implant.teach(M)
+
+/obj/item/organ/internal/cyberimp/arm/muscle/remove(mob/living/carbon/M, special)
+ . = ..()
+ muscle_implant.remove(M)
+
+/obj/item/organ/internal/cyberimp/arm/muscle/emp_act(severity)
+ . = ..()
+ if(emp_proof)
+ return
+ muscle_implant.emp_act(severity, owner)
diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi
index 6adeaf4e3cf308e5b10295cc43abc500d13a7233..bb3f95d325fb1284a88c88547e28833d49ea2e48 100644
GIT binary patch
delta 10971
zcma)ibyQVP)b^#jK@e%AL_knFr9%l(x)Hg6bmu`*r5ov#25FF#5RvZgmaa?Pcn`n#
z`}14h`tDkH-I;Ud&dlDk_cMDxGn=Pq;pb?vkI@9;*!X~N)uFrQnl2yUSH|zLUyGfx
zO&Al>osDj;u_8;`{ZYqTMLx*W8c9~GlsvIwgmlZ{_SB`-TbwDOg`v+5Gy_}A)SSh{
z{|H`D{9bPJpL6h0(x-phwnT@AZV~{X|Ma>b{b5ZchE8qwu$-*xiQ2PjJvBAn)w1YL
z1%6uU!KZovCM{X<+dZ#D7Tutajp+=MPygj0r|R2lT=~&2{T_47C>eQWcv?SZ5bXPO
zrI4x}qE~v=Q*%6haADH8K(tmCfnXdaXS1SUR!b*%NvAnzaD0)lykgBW>Rn#r`Dq9I
z-Lx{vIiG!N79n0GvVH+YEp$L)=v;H*p(U
z<9&p&t0mrnje8Sf&$`IYc%K8Ym%F^=dCXGzy4!a_@f4?DR5XH}ekj%}H^azLq9>?l
zh4n^$x9uU>E!P~ynK?ih3AyRHqQcr>CYYv`)O@B8;zyG6gzF|@0|Vwt=fXzEC#2>4
zz%RiT{W*3B1A5OoOF}+63vi8h!}igfR~i0+<0+<2a&xQ;TKntgt!H2VoY;B@%>GSU
zG(u1{4f|-QI~BNbSqS2if3v2|z;g5nQZdOH_)$KT=78*z%^7%hR~YKhhF2YIQIa)qx2voOA*1Oo@!qheKisH~U?K8Q;cSUP)T{w7Svw
zdY28m-RP_Qj*XjfAYW$_QV!vKBriimNvXFJGvqV-Q8*>am-Vkthsj<2mFwL8oy6T4
zqWlt3skU#hCr}WZ?D2VbcWfwYpKu3gJ1`70duk|-L?T~hOBvs-29wB}n*+J+rby0c
zdhzYp{U3FX5A7}jQ2tBpR>IG2irfBd7*23={>
z($~GW9yiFU=Gd$`UUMcxW}qEb?#6W|9FEXwguGvyC=&l+V1qL=fSki&oP4J3A#wloT!YiCM!Ds0)sJ#=iaKy{^uNMWjmzS6Lw%qH=UWRtz)rsMZeyfgdocmf|zn$@D
zs$CGEfA|FZI-etSf`oeC!tBP#=*{4sEZq|bxhQ?Gyy*MTu7E@c=X}Tktyqo}mCH|N
zl3@rc%-&iAz*Jd{r%!nGmL5pR+eUxGN%>X%D>)=oHg~sx6HW8~qnbvb>?~K~bo#^}
zGVpH;&dA@;C>f-v`z6h6~Zd6`@uLl}DAo9l-JWlW
zgf?-Yue65z^&zHoyK!AO?w>SNr2fdsTFWEBz@~?IrP%qJb!2RiuR2=BSuZshat5!l
z*jCz0#P4$6VI3X?7M|lgBNXCG(2rg5rpD6coL5cv0nq$2li1pa|Jq(j2aIiY!i+EF
z#&CK3tA-FY3Zo1K1(~C!d`7LR5`w@3#r#96zV#1}KZi!>;thmU%jQCJrbGj!rOyq~
zo>?su6dW$%$y`j9M3Ue++fGP#bu(q{dq(SyT&y(*?4%+$MxG2WpyzkxE6A8>=BL%L
zo;{m=T;30k9uzz@;6xk69v?q#hO3Ce@?r}KJ24UC8T7<3CljimIWoKpaC(1u;5N5??8QHwB9Z<)oj5kF
zG;Qx6LW(}o)-4c9`pSuM*4CF|5eNUqXaU#I+WaA
zQCR((V9_aQCqHVr&;vH9yR*LA56`C5kZgR@+OS4}kWyOq2oIpYufNsR{c0)=FF-m?
z@8mN4bCzVt4!A8TuB?18H8o|?`;{uMVr!NP-Qcd9#2sZ+_a}5M4gz-_V<{qh%nhW`
zHDRx|nYYOw2P_v}wjd(daXv7Vb3&8mdz*;JaJcbbcn5@puYD)Mh{TV1VA^`~%;47K
zd%LLus365qr3L>L49l6Xt9^|T;MeqWIo@$)vhJeoA_ER#fqV2BHD&&pM<)9AnZHQ;
z9Any<;XT6tM8ZIi<176V{u@p)0KG4o-ty{b>0r6-F72<403Q4*iTe=}-p%@H$Y&SF
z?B7J~zDIle9Gm@)`tR@%qX`AQ2|#x^D6juh3Omtx=ua^|?SiV-2Yi-IMP4ima?*`l
zFO@59Rca+TKm%ZrAk3>rcgepW)9?J907OF(wl#$C^%kP{nblW6*#H(4M*2yZo;FnY
zUSEi`$BAmS-7Haf)(l(zsW-n!&se@v=DOYX
za3*(9P*CN3qj@)W3vf6$hz9rHQayz=*x$ki`xqun2Mkb?Mb^n11*&6!Z(V
zz(<18sl7hv*L$kspeiB}kW7*yw|8a||8h408y3geu4cG$`{XBp1N`F##O)ruM(
z5Pm0ciFm?$bo=?ZQF3s5D1ENZhQf7w(0oo@{}qX+ITC&Yd1}-Ydw1NCZB2jhNQr}&
zYUeDPbYl!iXH!dt#HOYy+xB|jVurXt`_(+=>;yt4F7J+wH#gS#0zOfOlspoee7*D|
zS3T@g#wz?dnr=?RI>cDQ$D^-M$#Ze>r>6UO#Ju*F@n-Y*>A;D)+VD!;%$yeV?+piA
zMfJdq;hPWeAZ@O5!HsDpK^}iT&@k`8PaxxMERe0B=#$pK=`0zHSiE2Pv)kX9>z7gD
z3x$0{`;R=o{t7q(7d=P(GV$>5vACo>;#
zcMt6sQkyLl=u_?B;yc6c-x|#2mKOGBp7T7Rgzge;hMZ{VftFJ`fb&9Ew~-q+#i)1>
z-!0eo$|OU4Pr-D>R@b{d4Crk8PN0y0F@k=??;zKc%>QmsYV&&vSICXJW5YbE_yk)0
ze$E#1VbCXRYam5vj{Cdd+Z5~7tfM(-w)1{|8X>{ZDNWb+%c}S|2M1Vy&TRH<9R()N
z-Pq{H2fBO6%$Q@L5$l1-%1OI7FL-zjuVSwl9+>U_{@a>e~1jPm_@VWipUB$jlk%ZV>q+i1gXJx1oE^Ts)t@j;Y+?wUO{KBO4;M^h$gB8sGL;j!Hk4&ui6;~(y+38DT;<
zp&$R#a$^+&1BtSw;nw%kpz+WwEZQH}-Od{Tf}|hcdNutZL@1M`-tFeUN*5-HKAyS4xW3rOc~M7xK=ldS
z>D)WFxL16B<|Q$|AbRb^V*BE!24@+z`o&7p^St(!-B+FGXTtu1Lke<6yh?=Jz4h5(
zwp)m*q^oFN?2M9MjKn-WN}kcntW(m^tWckq`=bevXPfT+FsK>}CyI
zz1D_J>8gnHaBMWl=P8#jbT0ylG^B?fIl`$)wl6V%7(xsrsWmm^Xs8JW>k0N&ixfg@
zED=6JA6L}RvLuN(fY_edz0+6UuFzc>{S!MLKdzf5gaDx5Hc`GNF8?Rg(0Y6JYq`>`
z`A=_J_MT+5q9^jQ=r@MJ>#)Y{aeDbB{TGegO_bQq$iJt&m2EzsZ_g6X8-usw`xx6>
zv=U~<>0lyb)A7Dtf7VAlcZXM?FRHz&E#*vZzN=#2H4FPjyImhUct`nZv&D@~=+iJ3
z0>WpaY``IA^;q}6?44>c8^gK-X0;)EH{~HbCL+^K@XpM`qlOdcizj_=LV0Cs^Gwn|uUB}o4bR31)
zPYsIaAr!4JvG+vl%NJ#3!)~8Ds-rKrJMeVO0bkzJ|7Cse7I*~DP8Vw)oQ}>(Ke-h>W_l
zC8n&TVGWM<(^%zr|A{RDnfuM?p&tUb@%%!BK5~Iif_K5LF+V;fq2lTc%@z0e!{Ltl
z`}pJ0Wp888LyFpdo1FW!Lmbt!LoGIV^9VcqL~~J2X5%L8W3}JSn`AyypD84WU{P6C
zDY7?<2IQuGpO(19mHke!{7si*q~lYrC?FfGtj+sJEf8E>8d>n!*(DO;*9J&?OCyzK
zI!Phzi>{=BD3jW?pR!w(nHep=buyw!YPDV
zUy9f=#T8l(4)iw+IOBkdk5-tjtV%gg!Q1&B-&T|K0~9BmEjXN*0ALsLq1j))4O*m7
zl=AbXz`|0Zb2%1pMBC;qP)n|ub|oAY;cyZ-7V&)}jXt>c34}CQk$-1@>jvefbzG8o
zCc=hscjWYxKv~s54h+c~+M6R)kHeiDE#64xt2rL6vD5~%kOt~^82^bu-BS1Fkw3c{
z7PAzH^IXS0I$C}U=wxkWRxIr9?1WpZe-t^4&D?;s8!8uCAS?G7;}_W`pp1+@1PuLL_=-FT6;m;>qIF_yFy4m
zd(fzczAkcbeUpu5NLnJ`X-tTp-hKU~M7|UPp*m2JfB6=%Inr+aw{4@+ry(P1yr#kW
zMH((KY$9d{`L=VE8N1DIfH!H#oJ+QvpZ~FxBQn@%gt5Si@9|z@?&(=%a;-b^iBS2_
zj4d#CZoNwy+>MIlo<1Ze*vQvQY%)Rlr93tCe>a4Ps@Dy-?|gaydaO5MD@-CkWn>CL
zqN=7!){%kJH@G$Xl}&orGaZ+-{uZYD*1WvJ6!^824rX7uW4?ZVejyUryV1bZ{Ntm~
zUvnH3LyScsN^?M8;jf$d1PrHSe_s~}@CLGp65?(gWu|{xnUs6A#AEaUK?3Ou*cj+H
z&UOZE5%R&$tbO_?4@&*0C|g_#2ST(YSBU#60$(tq^Az#e(&J(xOzEFw$fh&ME2uQ`
z@03>g3ICx=Id>v^K~%h_(s;TxRpAYQkra3GpdIDiknqi3f9Lfz)_n*j3Y=$6SdNDM
zV%C)$aQf_a77wb`X7fV(jdoT0=MS;9rXRK*xPa!@5djRE3$EC`gwrVr!@PpEMd&DjX1S>crGKWc+HkMwZ^UBJ5xF`X6J#%wHIlm9TGBjpyL`7qy<&
zHpjKIBWFZv+c3)DK==av-_mYVTU+3~1B%8=Q{=J3%V*6+%#n?a_O7K6%GUs~1U_Mln~dw>d>h~7
z^r$`D+wdlcz1qZ52PV)jXM
zA+%2~qoU;o1h26u`o0>liYXGsAi!WUkz73nQD0I4*`ja6B3oS=`b&k(M@b^cDFNp~_X`%bdW?#16J3!{J(^3GoZQz{ca43ku=P$ZT1=rqgt4dK^8N+j<#V&IwlDIj@h%2uly9O
z#fZw?Fc&2GLzvC6zHAki+G&a?K)nSQC&9pZ1)YBAL5b${SQR41ge_OxMAjwAvv#1e
zMv32BpNlDztH~+GrLI4&1r{jj8QCECp|WEtTIe}oHIwrHQ57Qudy6e|)^FDl!MSgj
zCwD)c#lK02MR*KQFeg+_9eiWAxDe5(sv=j{VyVmkL{M
zm*_YVA3qw(*xsf>{i&cpF!CEs?n?F+E&ZX&ebQW}W(tv-g5y<+$85zX9jdJUdj2h%
zccN186BWKfpZQy_Iw||6En6#kt1qg)T%00#D*T4+eq5ff1^9p_-u~8~IYtFQkt7XG
zi%!$k`TOgn7oTYdbWOkWqX~Ps??v!ED*&n|NW6<@edP6$%Jca*QQ4VRyp0Bs(fE@%RAkF3u
zR#qd#d-LLVgge5Gl*D=$p}(vT64p^G{`FPj_Wa?;IK6;1{nG<(=J0R5n)er2`v~8|
zgZD$o(L%eb_1Kkp;)ZKWyX3>(ad*CXQI1tm|L3g2kme2P)2gzH3Q{ig8pGl_yt}w~
z)r5T)@n8(gCus<^7RK9_TbsbVdzF
zG|e{w4ewAC`{z7%cRZr*d&S2;0WlQ3FP)N-4j41A?5LR8-Cip?uGJ+48N~>;0iA@z
zIz>l35#Nu2BeNU|E34vUYmEt`8#KxL@@i+VlkTaOu4_&RC?E6tV(AeFslUT_9?uUN
z7%yEl`~ZS(hC9ZVDq$yJjIFbRxVYHvWGsc7&uNQq;==+tgy6;kP
z&l$R^y0FhxK1hAD27dnQ^JASw)l`W(0!sSEMRkm|O9z^77zLMJz_xBjsK+NB+Bj`E
zy`(DafG&15JT*0mNQt2?I*&%L@B{|Ovr=MGvbdc>{G07>y!A~Jte`lnp#P^+g=(#h
z<<%7=x~nWGtGu@AjrRtFWqpu_lk)S-*Or&T?>ynQfygVSTOQTuzR_`DhJf+Q#q_WB
zUOqC$jzDW+#@^#eMM#&it#Z}=-xqv*HUFs79Q_G858%HF8)oui61vQ^y|Kt8qQs*Ou%5d*J7r;dj~RBmfvsVRuefM_
ze(M3i(I&-@13Pns*!(I+9Qp31@$B~LLIof0+028?)@jRiA8?Pj3SaiUZIMscH>h{>
z_Mps8JQA{nJDi01vaymeLBWsO%MvHwW~E6-B-T+xEvFWRMnS=2yXYu2Y1_UdwbJ3khSR~HD2$;Y=YhK#-D0Lsr2_gB-uI!H1D(Q6W4@(NUio>h
zGOf^y6g#5M84JB`yo{;1pYm{R1*LOiZEe%4zYE=aa+jj2%EcpE+%Z!F+x~bb9Zkpe
zfQatT*U78?vK7xMgr_~+(4`JBUh{MNc;yQW*g1%zqR4*kv^v!mJJo}DK3W1(GrUD+
zzDKz&Yc-Thsit0$;{RQ`wpK^;vkd4c=Lv59Eioue6Jvk;YYS=Z{K&yjc&8ASQ0b6H?XJ6+Ye%H1c6GGVbO6Ih
z;amDw+VRpg_jeojFPwWK?t%%N!)UN&&QuVRXf|E8>;j5FxQ`5Qb3Zk>Ui9*hBoe#H7Bm
zC$BOp9rIK-s|WD|nT66(zqE`Sfw}
zmo?Bb@68r(y@9SMAXc-En;^@Fm#I2FgO+KDEmtZ95H+~G1^)(wkj*I}8p
zTiTf0?!>U#lV?&2c;j{v_$ZAasgFcpw~DLq_h;lX&o`TQxPNN;Vk(xU1-LS@b%$3W
z8cR1j0dW?(=ps#0t>YWg@nhpxE~h6-7j!oe$!Nz-x6m&Xy^22HkFi#v4zvyo0U5*M
zwz}|IQN=)sZK$*&~j;iVYnb3~Do-Yu;xtY+7o#8kmK)GG^1aobG@H>Rv{ULz^?C#sMNZ%QIA@H$cXWbmeFuWY8~?x+QO_@kyW}x}~?I
zOGivmBhZvg7sz_hD2QW5^7@O6FBvIK!44)%{@VLxXIMc%4@f%^Q$s531nb@1-KcV=
z+!XeGvc#T@8kLFwr`Cv8w6by4ebSDq5;<1_+TewVY)x%{yg`?-n#}F^&U@p7D=n2?
zT{T8uc2DsHEup+pay@^~OJXxY-+hWjH&X#%D-9TCi?_ue5OS`Y*(>7#Vebg!k=OKA
z0}t+fw*aE&!a0}WhI|*$u6?{R-tJCNAbA7~FY7U5b;k2BGGMQsTf;;zkvxZnjWQYj
zsKYq|WwEtzYFVTL(7>o5gzysJIK2t|
z=_NGf@*|})*!tfKEzjo3*sapFPV+lt$h*P&cEdqCA7nVEW^hZz~NY{}nrNEc{wSCKTx`!JbZv$v^UJrxY
zMu=507SkOGHW6*WTXH27bHyP59xQ{K`#vl)s*s|Auzu0y+Nou+qaFcT2Y;&u<5GKV
zwObca?t@u3U)BF!B!u${K;1N!0+jMf3_5<1K1m~g8q8cb_Ghg@WD`b%GfJM!5}Q~T
z2Bt%)j3W0eJO<0+WMckQW%w`H+i%@`C)o4H)v1Mw3H;zyPFE?y8cN3@Z9nnO>|^dG~IJjQkqRCL-5!vAc;818u+&(&RuEi
z1_z<*MRv8uSMdD!W8-n2;)`Jz{utJ4ib-^LciuKvmODZ5*{;eGCQ2}aVr5Za;%os-jz!&I$9B78ZVXW-P?1xz{?wyU(?CK
zhW!4wZt)2u&puelN4SzK73*KbndkzMh<+)+M0OnGdBgTDRxc>cn$=Cq?
z|E7{QHWPU#!W3!WpJ0LVy5_}q{@?P=<`PV^{O=`^4YIkKb>u~Oo%WwtGmavYx^=;M
zH@M0*LdZi#6LC2y@f8-DazVU^N@G_w4Y=_!4FmtN_)O$A1c3WqSlG_W7flXV*dfMm
zI!?L>O0_%ww?o{{$sb=V_BQ{WXz>`qA?lFXx=ws9Pdm=
z_-EU`VrjA0wc;qA6}L&}@m4J`;!4)Cl;z`r^>=qoz9??Q@&w
z*Y=UCADvYOmP46w7Qd+P=-JWnWTDTkhbh~9uRPwy-K(kO2N%TdD3UVa==}W$z1Vig
z&W(w0J~Ozo2yBQ`j~i{y7)*WjjSDRn7S=}~v-I>@-Sq-`euhW+{)4y?Ca+P`eG&{_
zE_o!B(3zc#5A!!rfBF58rrixWT?M9Pj5$ot)BUrP&uvQn)!fTUkCl$@l%4Xs;7)>H
zuMYCKfv&y6->^vN?FEtf%U3@~67E{*vdbg^WNY`pTX1ED1DALp56^6DvTf0T`^D+|
zKKGzg&2Zpjd;j>_f(vrA3F~BhTA-*N@|O6Xd6-wMD)4pw=FqDQ2t}*P>1uiD<
z$ZR~2QM}=rLI>yYl~^%hNror0{s4u#+!s&dDR*3H*Nvj$TWQ-wI9
z&?u=h9qKCX2Z~mTa7CNbc1^JuTUJLU>6(z`Y-55qnDBj}LYR{eKGxG@P$55smE@|K
z20W~yHhugOx8-9AX)JiRsScOfVYd&Pv?0sz?!K$xzpu?|SyFqJAAoM8>83-+fNrZH
zWSiEc6J8}N0~&swol!7`L!7uJS$mQXzNmb((H(?%fk#fkWZ{RFNbfI3J`I
TzH;q?fFBhFb@@tJv!MS0_?rsJcVBX8`
z{r>B#^?j^0+}U%_J@=e__St(s&)K18DC;LEaW7C`JJ9Ne_{YMG@uSL5UbOwE20QJTLk1N;Yu@EY)HAM+g*DFP?N-af24#HnC
z9rE0iWJ7FP06HaM(Z?N+1bWQ?oBC&=D5S0`$X#uNnQL-?D%yd8<}ln?-214Wyv^ye
zHZ11|LdA