From 5501c85523e01d529f4ad73300985a3b0831f6df Mon Sep 17 00:00:00 2001 From: Alberyk Date: Mon, 11 Oct 2021 22:44:59 -0300 Subject: [PATCH] Add hammers (#12505) --- code/__defines/obj.dm | 3 + code/game/machinery/deployable.dm | 29 +++++----- code/game/machinery/doors/door.dm | 54 +++++++++--------- code/game/machinery/vending_types.dm | 3 +- code/game/objects/items/weapons/melee/misc.dm | 3 + .../objects/items/weapons/storage/belt.dm | 4 +- code/game/objects/items/weapons/tools.dm | 33 +++++++++++ code/game/objects/random/random.dm | 1 + code/modules/tables/interactions.dm | 17 ++++++ html/changelogs/alberyk-hammertime.yml | 6 ++ icons/mob/items/lefthand_tools.dmi | Bin 1925 -> 2157 bytes icons/mob/items/righthand_tools.dmi | Bin 1927 -> 2143 bytes icons/obj/tools.dmi | Bin 8299 -> 8967 bytes 13 files changed, 112 insertions(+), 41 deletions(-) create mode 100644 html/changelogs/alberyk-hammertime.yml diff --git a/code/__defines/obj.dm b/code/__defines/obj.dm index 3a62191b0a1..a4cb682d087 100644 --- a/code/__defines/obj.dm +++ b/code/__defines/obj.dm @@ -26,6 +26,9 @@ /obj/proc/iscoil() return FALSE +/obj/proc/ishammer() + return FALSE + /obj/proc/ispen() return FALSE diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index c331db9470b..99679488df2 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -100,20 +100,23 @@ for reference: visible_message(SPAN_WARNING("\The [src] is hit by \the [P]!")) /obj/structure/barricade/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/stack)) - var/obj/item/stack/D = W - if(D.get_material_name() != material.name) - return //hitting things with the wrong type of stack usually doesn't produce messages, and probably doesn't need to. - if(health < maxhealth) - if(D.get_amount() < 1) + if(W.ishammer() && user.a_intent != I_HURT) + var/obj/item/I = usr.get_inactive_hand() + if(I && istype(I, /obj/item/stack)) + var/obj/item/stack/D = I + if(D.get_material_name() != material.name) to_chat(user, SPAN_WARNING("You need one sheet of [material.display_name] to repair \the [src].")) - return - user.visible_message("[user] begins to repair \the [src].", SPAN_NOTICE("You begin to repair \the [src].")) - if(do_after(user, 2 SECONDS) && health < maxhealth) - if(D.use(1)) - health = maxhealth - visible_message("[user] repairs \the [src].", SPAN_NOTICE("You repair \the [src].")) - return + return ..() + if(health < maxhealth) + if(D.get_amount() < 1) + to_chat(user, SPAN_WARNING("You need one sheet of [material.display_name] to repair \the [src].")) + return + user.visible_message("[user] begins to repair \the [src].", SPAN_NOTICE("You begin to repair \the [src].")) + if(do_after(user, 2 SECONDS) && health < maxhealth) + if(D.use(1)) + health = maxhealth + visible_message("[user] repairs \the [src].", SPAN_NOTICE("You repair \the [src].")) + return else user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) switch(W.damtype) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 2865d507270..6c7a56a01fa 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -299,37 +299,39 @@ if(!istype(I, /obj/item/forensics)) src.add_fingerprint(user) - if(istype(I, /obj/item/stack/material) && I.get_material_name() == src.get_material_name()) - if(stat & BROKEN) - to_chat(user, "It looks like \the [src] is pretty busted. It's going to need more than just patching up now.") - return - if(health >= maxhealth) - to_chat(user, "Nothing to fix!") - return - if(!density) - to_chat(user, "\The [src] must be closed before you can repair it.") - return + if(I.ishammer() && user.a_intent != I_HURT) + var/obj/item/W = usr.get_inactive_hand() + if(W && istype(W, /obj/item/stack) && W.get_material_name() == src.get_material_name()) + if(stat & BROKEN) + to_chat(user, SPAN_NOTICE("It looks like \the [src] is pretty busted. It's going to need more than just patching up now.")) + return + if(health >= maxhealth) + to_chat(user, SPAN_NOTICE("Nothing to fix!")) + return + if(!density) + to_chat(user, SPAN_WARNING("\The [src] must be closed before you can repair it.")) + return - //figure out how much metal we need - var/amount_needed = (maxhealth - health) / DOOR_REPAIR_AMOUNT - amount_needed = (round(amount_needed) == amount_needed)? amount_needed : round(amount_needed) + 1 //Why does BYOND not have a ceiling proc? + //figure out how much metal we need + var/amount_needed = (maxhealth - health) / DOOR_REPAIR_AMOUNT + amount_needed = (round(amount_needed) == amount_needed)? amount_needed : round(amount_needed) + 1 //Why does BYOND not have a ceiling proc? - var/obj/item/stack/stack = I - var/transfer - if (repairing) - transfer = stack.transfer_to(repairing, amount_needed - repairing.amount) - if (!transfer) - to_chat(user, "You must weld or remove \the [repairing] from \the [src] before you can add anything else.") - else - repairing = stack.split(amount_needed) + var/obj/item/stack/stack = I + var/transfer if (repairing) - repairing.forceMove(src) - transfer = repairing.amount + transfer = stack.transfer_to(repairing, amount_needed - repairing.amount) + if (!transfer) + to_chat(user, SPAN_WARNING("You must weld or remove \the [repairing] from \the [src] before you can add anything else.")) + else + repairing = stack.split(amount_needed) + if (repairing) + repairing.forceMove(src) + transfer = repairing.amount - if (transfer) - to_chat(user, "You fit [transfer] [stack.singular_name]\s to damaged and broken parts on \the [src].") + if (transfer) + to_chat(user, SPAN_NOTICE("You fit [transfer] [stack.singular_name]\s to damaged and broken parts on \the [src].")) - return + return if(repairing && I.iswelder()) if(!density) diff --git a/code/game/machinery/vending_types.dm b/code/game/machinery/vending_types.dm index a5eb34af8f7..2440407d8ed 100644 --- a/code/game/machinery/vending_types.dm +++ b/code/game/machinery/vending_types.dm @@ -966,7 +966,8 @@ /obj/item/device/analyzer = 5, /obj/item/device/t_scanner = 5, /obj/item/screwdriver = 5, - /obj/item/tape_roll = 3 + /obj/item/tape_roll = 3, + /obj/item/hammer = 3 ) contraband = list( /obj/item/weldingtool/hugetank = 2, diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm index 6057cc710f3..b6ec13ff74b 100644 --- a/code/game/objects/items/weapons/melee/misc.dm +++ b/code/game/objects/items/weapons/melee/misc.dm @@ -76,6 +76,9 @@ w_class = ITEMSIZE_NORMAL origin_tech = list(TECH_MATERIAL = 3, TECH_ILLEGAL = 2) +/obj/item/melee/hammer/ishammer() + return TRUE + /obj/item/melee/hammer/powered name = "powered hammer" desc = "A heavily modified plasteel hammer, it seems to be powered by a robust hydraulic system." diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 3a882e8e36f..2e7e6dbe52d 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -100,6 +100,7 @@ /obj/item/weldingtool, /obj/item/wirecutters, /obj/item/wrench, + /obj/item/hammer, /obj/item/device/multitool, /obj/item/device/flashlight, /obj/item/stack/cable_coil, @@ -139,7 +140,8 @@ /obj/item/crowbar = 1, /obj/item/wirecutters/toolbelt = 1, /obj/item/stack/cable_coil/random = 1, - /obj/item/powerdrill = 1 + /obj/item/powerdrill = 1, + /obj/item/hammer = 1 ) /obj/item/storage/belt/utility/very_full diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 15d32ef3f1c..9b439757411 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -955,3 +955,36 @@ new /obj/effect/decal/cleanable/ash(get_turf(src)) qdel(src) + + +/obj/item/hammer + name = "hammer" + desc = "A tool with a weighted head used for striking." + icon = 'icons/obj/tools.dmi' + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_tools.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_tools.dmi', + ) + icon_state = "hammer" + item_state = "hammer" + flags = CONDUCT + slot_flags = SLOT_BELT + force = 8 + throwforce = 5 + throw_speed = 3 + throw_range = 3 + w_class = ITEMSIZE_SMALL + matter = list(DEFAULT_WALL_MATERIAL = 75) + attack_verb = list("smashed", "hammered") + drop_sound = 'sound/items/drop/crowbar.ogg' + pickup_sound = 'sound/items/pickup/crowbar.ogg' + usesound = /decl/sound_category/crowbar_sound + +/obj/item/hammer/Initialize() + . = ..() + var/mutable_appearance/handle = mutable_appearance('icons/obj/tools.dmi', "hammer_handle") + handle.color = pick(COLOR_BLUE, COLOR_RED, COLOR_PURPLE, COLOR_BROWN, COLOR_GREEN, COLOR_CYAN, COLOR_YELLOW) + add_overlay(handle) + +/obj/item/hammer/ishammer() + return TRUE diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index 0db863690ec..3a0c5f9cf7f 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -65,6 +65,7 @@ /obj/item/weldingtool, /obj/item/crowbar, /obj/item/wrench, + /obj/item/hammer, /obj/item/device/flashlight ) diff --git a/code/modules/tables/interactions.dm b/code/modules/tables/interactions.dm index 5102482215b..21ba97aff98 100644 --- a/code/modules/tables/interactions.dm +++ b/code/modules/tables/interactions.dm @@ -215,6 +215,23 @@ to_chat(user, "There's nothing to put \the [W] on! Try adding plating to \the [src] first.") return + + if(W.ishammer() && user.a_intent != I_HURT) + var/obj/item/I = usr.get_inactive_hand() + if(I && istype(I, /obj/item/stack)) + var/obj/item/stack/D = I + if(D.get_material_name() != material.name) + return ..() + if(health < maxhealth) + if(D.get_amount() < 1) + to_chat(user, SPAN_WARNING("You need one sheet of [material.display_name] to repair \the [src].")) + return + user.visible_message("[user] begins to repair \the [src].", SPAN_NOTICE("You begin to repair \the [src].")) + if(do_after(user, 2 SECONDS) && health < maxhealth) + if(D.use(1)) + health = maxhealth + visible_message("[user] repairs \the [src].", SPAN_NOTICE("You repair \the [src].")) + // Placing stuff on tables if(user.unEquip(W, 0, loc)) //Loc is intentional here so we don't forceMove() items into oblivion user.make_item_drop_sound(W) diff --git a/html/changelogs/alberyk-hammertime.yml b/html/changelogs/alberyk-hammertime.yml new file mode 100644 index 00000000000..386c4d69a25 --- /dev/null +++ b/html/changelogs/alberyk-hammertime.yml @@ -0,0 +1,6 @@ +author: Alberyk, Dongwaiver + +delete-after: True + +changes: + - rscadd: "Added hammers a tool option. They can be used to repair tables, airlocks, and barricades." diff --git a/icons/mob/items/lefthand_tools.dmi b/icons/mob/items/lefthand_tools.dmi index 0efbc63e443db954f9156e11df27eadc7af8d0ee..e66cfa3ce160e02f82502aa249e27ef3023dcac4 100644 GIT binary patch delta 2113 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 BnSB5N diff --git a/icons/mob/items/righthand_tools.dmi b/icons/mob/items/righthand_tools.dmi index 037f1cc49c0180b9046039ea51e3a23b81b21abc..3209d160b88e3bbf1fa682d94052e5510b06ae77 100644 GIT binary patch delta 2098 zcmY*Z2{hDQ8=qcTUb1`!6=iuzGGj{`eZ?4zB^joMM3xvNyP?LAe~P3b%9iD|jZ%sh zWE)NP$i8Hm5EDbTnKZ8@GyiY;&Ua3I&pG$p-~HWtpXc{H_c=E~a#{*Vw8vPAi^_{a zAP{kDEAz7u$S!66fQSh288x;`9Dka!KZ8TRd-rZ;?6a+{?X~c5N>LG?&VWFAArL$s z-_p_ohr^Lbq=kh=W@ctK1X3?3NFtH2=dj7i$)28`Uj+p8yY;&vklfr{{ccbn1ogAQ z+BjWHOPFOCT65}+k%57MkB^VCs@7Nft@QMCdk4I(fyJKsj@ZQ|F(bEzwvKx#5ATai*^#uDcszf;1%W< z67Clq1c4CqG6s7jnw9qmv-D31j`zybD%_ID<4ujt&4miKc(~x?(uZM+5Vg82O%GaRytNeug# zR`qh2{^E^+a>P+x)!6z3Dc|i5A7hNJW*Q!fNwt=(t4munioR%*n*RWId$F=xv#}LD z4mX(7@GG|oZW))jMW`tmHvEEuB6-(S9zDrfUm7c@?xg2NE1twaAVPqvwK)n$%v;Iv zKRc)tbGgswH+?wB^IRcvikR<&n?+#>B_HGg@$`Z-1s_ z)q4+X=a6c~_6dlJYjExynLX$tkR2r^!o>`7q~$opWfDid4?Yw8%`G2(61hT8*hT~F zil+J1Vh54Rs(^g}m5OiRiI?kH1frae1==1c*PO8M1mLP5;QEKzib;ZYA`fa zGBBYzv7PKgAP_1G>lDTVw!@_26U{s>G_HAZV^^kL7_pQL7fJ7m*dZ-4{q1Hd%CwNh z!tydEKexztVISi;B}?^Y3~b?!f9(OqNCN-zt@x)9?H2X;_arn`h2Tju9~1RqOiXJ~nuxTM72*xj^juOpw*bJ$AMN~&9e zQ~atr&3L|K+zdBh-1FyiRx;WBA{w+WfnEt=X?H4j$dM zX$VZzQv(9M>-u>N_-gn~wCkaDp@GHLn5GNi8S)RVdVUX%y0s84P5TVLnjR%JL4z5u za>VEA(grz#18Z$DDkS-9bI>n$?UH!q2i>K(ZnJxfOFJH` zC>eOr$J(;F8P&5=2&5UVykB2zXV_imW)Wl zXIBZ=L1(sU{8JmM@4r5+k7Owl%85<1IZWQDyY#2^L)$ds{xO;()udEs=TLgwj%D+C z;yp*|@)~HP@n;SY0#4v#r$+tS;-^0-{i=Q8$DL(f!PePO&@NrVN0TWXDCXxoJdA#VvcIWfA^neGx` z0UKDT)G8QYVyk9PSPc%HZ};le&^k`hp@7frl5^Q@2+K1SaUIbE&H+17BlqX;bY`%g zNIt@(mb~xWZ}inX5vt~zm8KuHlb_1};c;!CuzrgotLU-#Pc_zPjCqBr$Ibr$3s>uI delta 1881 zcmY*ac|6n!8~=@=oD(@eyEX%o@yMj3Yvhgoaphhx!dUTGmmUdoU<#ouv{Z zcSee_lN_64$hdPBvC*vFefQmc|9Q^O^L)O~^LY-YVCo6*M*`kbfEUgS0Du6_%G?0} zAV(qu;D#QttF;%Lju?$#j10ngUu~oXKef-tN5dy! zc~y5ncK`tRj6GX>`!cigi;9YL2iUr7wr&C2($W%%MEd*t-@AA3PBj)pd}rVO4PS%< z-Vs1AjQbxcU9nCVBFz25FNXz$Mg)ZX001%MoHw?xZaG1&86-LJ$<++dU5`eKxYY0) zAwL&)|19*~s`bbNp~*o-rozwS-(Raf9jQPcD>Nk;QSGIAFSX4ESxDPl+(ps(XS}=P zw#<&*zC0`1Rm*c3te>$_*jIYxYWJr5Oi0JOQPSJ~&Yw6}WH8T{WsCOpyQ*yN+UlDr zpJy%LE93T>bLDO*{mMUlrQkgE1@?CYa$Yr{&idJGP-<6;yF;MV&29&$!Tp`|(mB>| zr0Dvr5CGsR$C;Zs#gNy?tIiWvf=OJi++&?q+gJ`2Z@ESs=o2NcjOLc#U^}1`R3xK} zM+!%`?mQ|TsShM8m)oS>1m^sxG2p7WS} zZh{M+dzMJucaIMqb)pW^rW5`b^WW%g1fzJmV&t_6l;p}#%o2NTmfLCoYP^E*umg3{ z=;hboF`S%RIZ^SKMF&unRV1R&&tCWxhCDCxZvg*Emhq_4z|h@enD;@lNZ8@iZuSn< zxyskp#yIAwh(*vARXwuVjaLC)TNkh*K01dk@1<3)SGY4L3A{O)&gUq2iQ3?x>PhK` z1UZoCKB>I|TUvF28==M_f0y|;L^h+RmLz77I+M5SBsH~sX zc|s#$Mq`eOPRJQ)e29$uA}XYqkZ(YV@q?b~MX8$!kT4Mzum$~b zQ^RxXnF`6?Ub;PsDPkT)p3QB&qsv+%Jmo!zmP^ftoBH^a_B?5k@&RyHIYn&hXGcFM z-VO~V$r--v-?(&kS)bxJ@+*Y;S=|zPiw8De7?dLCily&GMGzGCqX?#Iur z>pO7oB6X#*NLbyE5ZTT6PK3e8{sGYl{M7b=BIwtor{Jw)jW>|pgbW^!NnV;$ndSEU z9_Fjvh@!=rWO25#XN8*c$xPGC!C$iAW=4s5ccJ$U_WEyeE^|NM*(Ws(El%vJ{Hx^b zJWC^2D+#rp;E22SNp-*!pfWWVPYJ# zq*4LDC7mRUlB44trs+iw56|D#2hU!J@sWRl#O-bE=@dc}Fr>i*W|k1m!+7h9_JAib7RA$vk^C!luW?B ko)g7{p2TlkKSb_;XsqXdxiqw~bM%J*92Re0kMU0Y6N)BU{r~^~ diff --git a/icons/obj/tools.dmi b/icons/obj/tools.dmi index b196d280514e895aeada2a66abac80fffcb2a875..872d15e0660f6b79b9e9184831b22c631739f14c 100644 GIT binary patch literal 8967 zcmbVycQhRF+wbVTi(Vqc3Zh0YtCwgIz4uNKHCQ$xO4JZRl+~jKLG&IiIw87<=w;Qg zi`~0^_uTjXb>DN|d(Q0coSm7ceZNopJQMd!SDlQQi5LI?GEEJY=a}E$cOOE0%s10x z_jLfkvJWvd^;dE7b9m|I|$p*!(k=FUXw_aDGjQmAIj z?AQJ%u1jmR6Mk?z?XD6{cwqe;2R4(e_qx13d8)YwGBow!$!yg?9mXbjxkqXv$uZu~cn!opSLiGI3^?N2}VVty#; zXe~xwxuN;xFgC!m@GWsMnUHWn=Glo>vM4Zgb!*cWux)j7V_!3EzZg&Iu8l2wI$6ugR_*?kf+)d$LAn!&g|Z zu>kgT*p6`S1tPu6p$MeiJBu&+ar5z>@Wq2-^^fDzG@LM*?D9}bdFDs_q3%?CwMEL^G8htq~k%rooH&v73D722fSfe+9+^Ne1_G% z&xckPyIhZ1=ty?7H3i=Tgj!^?9e@@i;OKUO=KF!61gli0deO~*J}4#MD|M*c0|H*OXg6q&9eB)+gP$njB(^OZ*M zbi~0_j3!v)LX|!8<=LV9vqzPP0g>}t|HdP=`ONi6FtX%_C2ln8b~A;JuzE4^jq(Ek zhzUGYab>r4T~-NOn|{}o{-G8v8uX>uYh5#9ldndp+8778KIU}uW;refU!c8I37_H1 z7RI7%e$4`Q!vLGH3OXV>?CtT%dTxh>;Ah|-2kX>_B#VBF)%TAtSB8 zkWKXR!=-QKNvvr6YjPICV54z%NZN2QHuP+Jg0B#r^E4eFK-+6m-7%3C7`F~lqq=R? z+cVSweX^84TY|O&Ppup&X5ZE|7c*GOLa3^%AAkKMn8HkYL~67#(}Awe>}1dvqJ#(+ z+A2r{-$?TO=3$7HPmW~iA|2v{Ez>VZ(V!nEJsgi!-@qd|_+{>t9QJzIwib19!K(#% zV~><2<}H~h%72cm(A<1C2UAy+Cq4X%6>k$_`7Kl?QH@iSDN&&BZMDU>udRKFk_G`x z5-+UMR>JI;ZGBwIm^>sr4^D+N_-`?0>xwS0-;DvBP^8MLZ9N-qNmr+G(PL!jtNW(9PSld;84#78ZQvi1QFR z;65)eae8|Cmi)WKvTwJ88fs3Ywdi(mQ zm@uh*()Eett5dFlMCO>&)0aCJA(|Jt`g`~|({MSY60X05jg}V4-u}Mui)BdwI_9kG zuF{NZ?@{AId2)ubN!H^OTpQa}*`?XKS#wMWBSz5}C;j1g8 z0D*J}v849_1qB6>-!N2MUCSsFOVoy$Nj18Hc0(=kHs2>R|Nc9i_H_&`$&`q%udnaw z>Pq?J`}>!K73XC5#cOTnR-{8Q;YV8}6cia>Ne^S$#Hhuy$4ayTTk&kWrlp5su+;zX zpYaZ2?0vPf&4T#*PQfdpZH3Zg?=3wlRG?(My?9OL0uN_Z?hqsiIl_LzLPB7)wcYc+D##dx``JPqvM7god7o37_^Zc25YJb*~i`V zHmwIgXU5biaTWj1!6DXAOI@s;BdOm^7jkpuE3GR>D_yHN^gWKo%+ay<7&Tp@<=D&i zG+DlEVPQca=%?puyV)EPSu`;w;W~N9o`AaANPd?o#Lcb76MTn+7YF(}nm%;w;du**j-hb50@^<6rQbB7&W`SPdQ zoj*4)D4O2C@Pw~+xO#c@?@Se)9Mn(PBThFHw0X!2nNqgZErh%U{+Yn2Pm46uDf?*R zwd*{4KRgPCcU=0QZeATM)T`qyvytb4Bdnj_%H3Yq8({6QgTpNw8yh}IWhGO{Eo2Hi z)OL=Z@T4aKX}wWl^TRPY;}iHH{}xL*Jh}L(B6TgBSnJ3#eA2t@I1BRapNmp%3;Z+ZL_!Vz^iATV$St%)oI_%5 zJsE}H9nixmBa^L@C4yH{Qj(gLnhn>0$xDXbwz?uMw6wCE##yup7PGuP+{(GU+#AiQ zn3+kk$D$YNT}WUc5XfP5xurP_@s;*#2lbS+gF0er&UTFLaYJn{@%0aOm#4xk0pe>( z9VT^kRjs)LRc7^>hFg5N^UIwOytB;^*Ix?f64(jMwG&O|6)J^j%rj1JO3@Dmt=zhiIW{;&A(IHj6jqAq8%KYy0}+1OwNmP04xBrg`$ zo;AqPo1GC4M`2O>Y#=_dk1a$Q2ss(&w<`E#O_17_eCJEc)0SlIwolXar}?DK?JS=C z{^Lh{;OgdV!cK?*>ZhJ^xsw~4RoKJ2;ryNmhbuq&j1IAE_C_p}jr~?K5Vn%Y?}+E9 zG$iz`ADTwq zUP_!w8DQ80t)2?ov*W9t^16CY>=YHTW?Y{fM#G>Egg2 z6f>=N;dTymW7r!h!GA;~e&!oeK_s(SI^~*@on86o+TZ0YAP!SNdj4v){0IhRoq#m( zu#+P@YcXEJq}Mr$+D{+$eE-P!W1D-=2BMIA3eG>ap*Jpn7(R`rGeAiHcp{UgpcZKrPB7{<4pm_H2 zPR&W%K^L!m=fQzz;8}H35RdS!T_4{W@lHmUc|@E#?XCed$_(?{MX{BMsB%3$k3 z{MB+N9Gp*8K0m5J_#tJAKwLvR#7AD! zH2V=3q45=1=FVM#OnX=yJ2Ya9TZRAhOtYW+kOQ{zQ}ac8f*>~LaVZ%cbxje;#>Pg) zDI%ANys-xJ$M4>~E7t5?P|Q9*NA3^q&r>9lHo_--5n-z`gKyEWa_PkKshRsu*O!Ki zs@;*1*c>ur7$-^2l?e*Ga!OQtgGWM_-`;LHt%Qs;u6!&0p!cDfnuiA;rYfm*7)*lF zLM{J9vDq6X@C}3z|h!RiyzWhhv zDb8$wMBHF@3T=X7F@#v?Kl^ag!HaiTG8yOqZ&0qvMo+?rrZ1Y*i7O-rFc7$Hy8-7b# zYP_JTaQ3Zw7B}|3)sx5(3>r?>Y6KKmTJQ z)!7!#IuM>z>A1x#0YOaJRNKF(bt_yzN^-H5wnUXuzmFR$zWO+A3!PBJ z7Rv@nyQk%uM_i6j5=4m6LJGMzjBlwje!YUT4EE2^%k9=H=wXi?(7Ah`!%r^-R{S%a z#y*L$lCwjy2=FT=VmetmtOak@JjF@S@P_+gJF|?P;@uwA# z$f2=Lv-Ud|w23Z9rR3#}|3v!%0A*<_q)S7z?cvQD!f*R9s3v%-B&}^@#9lie34{F0 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 literal 8299 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 r-mjuzzV)Ztv&7?A&i