From 87caa9532bf2dd9d702c53f363d94d91fec54cf1 Mon Sep 17 00:00:00 2001 From: FloFluoro <3611705+FloFluoro@users.noreply.github.com> Date: Mon, 5 Sep 2022 16:35:45 -0400 Subject: [PATCH] Adds the "Jestographic Sequencer", a clown-exclusive traitor item (#18933) * Initial commit * Removes ability for AI/door remotes to interface with cmagged doors * Adds cleaning method, fixes windoor functionality, makes cmag slippery * Cleaning cmagged doors checks for remaining space cleaner, cleanup * Reduced TC cost from 6 to 4, fixed small bug * Code review super happy funtime * Adds cooldown to cmag airlock chuckle * Cleanup, cmag door laugh no longer sounds through walls (again) * Prevents blank spare IDs from passing through cmagged airlocks * Cleanup * Cmagged state is now carried by a trait instead of a global var, cleanup * Adds early return that I missed, fixes small bug) --- code/__HELPERS/traits.dm | 1 + code/_globalvars/traits.dm | 3 +- code/datums/uplink_item.dm | 9 ++ code/game/atoms.dm | 5 +- code/game/machinery/doors/airlock.dm | 17 +++- code/game/machinery/doors/door.dm | 85 ++++++++++++++++++- code/game/machinery/doors/windowdoor.dm | 25 ++++++ code/game/objects/items/control_wand.dm | 3 + code/game/objects/items/weapons/cards_ids.dm | 21 +++++ icons/obj/card.dmi | Bin 16368 -> 17574 bytes 10 files changed, 165 insertions(+), 4 deletions(-) diff --git a/code/__HELPERS/traits.dm b/code/__HELPERS/traits.dm index 922200948bb..efe5a33b3da 100644 --- a/code/__HELPERS/traits.dm +++ b/code/__HELPERS/traits.dm @@ -199,6 +199,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Show what machine/door wires do when held. #define TRAIT_SHOW_WIRE_INFO "show_wire_info" #define TRAIT_BUTCHERS_HUMANS "butchers_humans" +#define TRAIT_CMAGGED "cmagged" // // common trait sources diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index fa009ae3102..015cfe38f2a 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -71,7 +71,8 @@ GLOBAL_LIST_INIT(traits_by_type, list( ), /obj/item = list( "TRAIT_SHOW_WIRE_INFO" = TRAIT_SHOW_WIRE_INFO, - "TRAIT_BUTCHER_HUMANS" = TRAIT_BUTCHERS_HUMANS + "TRAIT_BUTCHER_HUMANS" = TRAIT_BUTCHERS_HUMANS, + "TRAIT_CMAGGED" = TRAIT_CMAGGED ) )) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index c394b3c37fc..4d61e94048a 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -182,6 +182,15 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) surplus = 75 job = list("Clown") +/datum/uplink_item/jobspecific/cmag + name = "Jestographic Sequencer" + desc = "The jestographic sequencer, also known as a cmag, is a small card that inverts the access on any door it's used on. Perfect for locking command out of their own departments. Honk!" + reference = "CMG" + item = /obj/item/card/cmag + cost = 4 + surplus = 75 + job = list("Clown") + /datum/uplink_item/jobspecific/trick_revolver name = "Trick Revolver" desc = "A revolver that will fire backwards and kill whoever attempts to use it. Perfect for those pesky vigilante or just a good laugh." diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 90848fc9a12..8e941dfd4bb 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -423,7 +423,7 @@ SHOULD_CALL_PARENT(TRUE) if(updates & NONE) - return // NONE is being sent on purpose, and thus no signal should be sent. + return // NONE is being sent on purpose, and thus no signal should be sent. updates &= ~SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_ICON, updates) if(updates & UPDATE_ICON_STATE) @@ -514,6 +514,9 @@ /atom/proc/unemag() return +/atom/proc/cmag_act() + return + /** * Respond to a radioactive wave hitting this atom * diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 54b52dade9c..9d6f100ad6c 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -605,6 +605,8 @@ GLOBAL_LIST_EMPTY(airlock_emissive_underlays) . = ..() if(emagged) . += "Its access panel is smoking slightly." + if(HAS_TRAIT(src, TRAIT_CMAGGED)) + . += "The access panel is coated in yellow ooze..." if(note) if(!in_range(user, src)) . += "There's a [note.name] pinned to the front. You can't [note_type() == "note" ? "read" : "see"] it from here." @@ -802,7 +804,7 @@ GLOBAL_LIST_EMPTY(airlock_emissive_underlays) /obj/machinery/door/airlock/proc/ai_control_check(mob/user) if(!issilicon(user)) return TRUE - if(emagged) + if(emagged || HAS_TRAIT(src, TRAIT_CMAGGED)) to_chat(user, "Unable to interface: Internal error.") return FALSE if(!canAIControl()) @@ -1336,6 +1338,19 @@ GLOBAL_LIST_EMPTY(airlock_emissive_underlays) emagged = TRUE return 1 +/obj/machinery/door/airlock/cmag_act(mob/user) + if(operating || HAS_TRAIT(src, TRAIT_CMAGGED) || !density || !arePowerSystemsOn()) + return + operating = TRUE + update_icon(AIRLOCK_EMAG, 1) + sleep(6) + if(QDELETED(src)) + return + operating = FALSE + update_icon(AIRLOCK_CLOSED, 1) + ADD_TRAIT(src, TRAIT_CMAGGED, "clown_emag") + return TRUE + /obj/machinery/door/airlock/emp_act(severity) . = ..() if(prob(20 / severity)) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 289e0098b21..c6f82284212 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -36,6 +36,9 @@ var/unres_sides = 0 //Multi-tile doors var/width = 1 + //Whether nonstandard door sounds (cmag laughter) are off cooldown. + var/sound_ready = TRUE + var/sound_cooldown = 1 SECONDS /// ID for the window tint button, or another external control var/id @@ -116,8 +119,14 @@ if(world.time - mecha.occupant.last_bumped <= 10) return if(mecha.occupant && allowed(mecha.occupant) || check_access_list(mecha.operation_req_access)) + if(HAS_TRAIT(src, TRAIT_CMAGGED)) + cmag_switch(FALSE, mecha.occupant) + return open() else + if(HAS_TRAIT(src, TRAIT_CMAGGED)) + cmag_switch(TRUE, mecha.occupant) + return do_animate("deny") return @@ -149,6 +158,9 @@ if(density && !emagged) if(allowed(user)) + if(HAS_TRAIT(src, TRAIT_CMAGGED)) + cmag_switch(FALSE, user) + return open() if(isbot(user)) var/mob/living/simple_animal/bot/B = user @@ -156,6 +168,9 @@ else if(pry_open_check(user)) return + if(HAS_TRAIT(src, TRAIT_CMAGGED)) + cmag_switch(TRUE, user) + return do_animate("deny") /obj/machinery/door/proc/pry_open_check(mob/user) @@ -204,10 +219,18 @@ return if(requiresID() && (allowed(user) || user.can_advanced_admin_interact())) if(density) + if(HAS_TRAIT(src, TRAIT_CMAGGED) && !user.can_advanced_admin_interact()) //cmag should not prevent admin intervention + cmag_switch(FALSE, user) + return open() else + if(HAS_TRAIT(src, TRAIT_CMAGGED) && !user.can_advanced_admin_interact()) + return close() return TRUE + if(HAS_TRAIT(src, TRAIT_CMAGGED)) + cmag_switch(TRUE, user) + return if(density) do_animate("deny") @@ -226,7 +249,28 @@ /obj/machinery/door/proc/try_to_crowbar(mob/user, obj/item/I) return +/obj/machinery/door/proc/clean_cmag_ooze(obj/item/I, mob/user) //Emags are Engineering's problem, cmags are the janitor's problem + var/cleaning = FALSE + if(istype(I, /obj/item/reagent_containers/spray/cleaner)) + var/obj/item/reagent_containers/spray/cleaner/C = I + if(C.reagents.total_volume >= C.amount_per_transfer_from_this) + cleaning = TRUE + else + return + if(istype(I, /obj/item/soap)) + cleaning = TRUE + + if(!cleaning) + return + user.visible_message("[user] starts to clean the ooze off the access panel.", "You start to clean the ooze off the access panel.") + if(do_after(user, 50, target = src)) + user.visible_message("[user] cleans the ooze off [src].", "You clean the ooze off [src].") + REMOVE_TRAIT(src, TRAIT_CMAGGED, "clown_emag") + /obj/machinery/door/attackby(obj/item/I, mob/user, params) + if(HAS_TRAIT(src, TRAIT_CMAGGED)) + clean_cmag_ooze(I, user) + if(user.a_intent != INTENT_HARM && istype(I, /obj/item/twohanded/fireaxe)) try_to_crowbar(user, I) return 1 @@ -235,7 +279,6 @@ return 1 return ..() - /obj/machinery/door/crowbar_act(mob/user, obj/item/I) if(user.a_intent == INTENT_HARM) return @@ -272,6 +315,46 @@ emagged = TRUE return TRUE +/obj/machinery/door/cmag_act(mob/user) + if(!density) + return + flick("door_spark", src) + sleep(6) //The cmag doesn't automatically open doors. It inverts access, not provides it! + ADD_TRAIT(src, TRAIT_CMAGGED, "clown_emag") + return TRUE + +//Proc for inverting access on cmagged doors."canopen" should always return the OPPOSITE of the normal result. +/obj/machinery/door/proc/cmag_switch(canopen, mob/living/user) + if(!canopen || locked || !hasPower()) + if(density) //Windoors can still do their deny animation in unpowered environments, this bugs out if density isn't checked for + do_animate("deny") + if(hasPower() && sound_ready) + playsound(loc, 'sound/machines/honkbot_evil_laugh.ogg', 25, TRUE, ignore_walls = FALSE) + soundcooldown() + return + if(ishuman(user)) + var/mob/living/carbon/human/H = user + var/obj/item/card/id/idcard = H.get_idcard() + if(!idcard?.assignment) //Humans can't game inverted access by taking their ID off or using spare IDs. + if(!density) + return + do_animate("deny") + to_chat(H, "The airlock speaker chuckles: 'What's wrong, pal? Lost your ID? Nyuk nyuk nyuk!'") + if(sound_ready) + playsound(loc, 'sound/machines/honkbot_evil_laugh.ogg', 25, TRUE, ignore_walls = FALSE) + soundcooldown() //Thanks, mechs + return + if(density) + open() + else + close() + +/obj/machinery/door/proc/soundcooldown() + if(!sound_ready) + return + sound_ready = FALSE + addtimer(VARSET_CALLBACK(src, sound_ready, TRUE), sound_cooldown) + /obj/machinery/door/proc/toggle_polarization() return diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 07e4d7a5a26..14b3fdcc979 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -62,6 +62,8 @@ . = ..() if(emagged) . += "Its access panel is smoking slightly." + if(HAS_TRAIT(src, TRAIT_CMAGGED)) + . += "The access panel is coated in yellow ooze..." /obj/machinery/door/window/emp_act(severity) . = ..() @@ -83,8 +85,14 @@ if(ismecha(AM)) var/obj/mecha/mecha = AM if(mecha.occupant && allowed(mecha.occupant)) + if(HAS_TRAIT(src, TRAIT_CMAGGED)) + cmag_switch(FALSE) + return open_and_close() else + if(HAS_TRAIT(src, TRAIT_CMAGGED)) + cmag_switch(TRUE) + return do_animate("deny") return if(!SSticker) @@ -98,8 +106,14 @@ return add_fingerprint(user) if(!requiresID() || allowed(user)) + if(HAS_TRAIT(src, TRAIT_CMAGGED)) + cmag_switch(FALSE, user) + return open_and_close() else + if(HAS_TRAIT(src, TRAIT_CMAGGED)) + cmag_switch(TRUE, user) + return do_animate("deny") /obj/machinery/door/window/unrestricted_side(mob/M) @@ -247,6 +261,17 @@ open(2) return 1 +/obj/machinery/door/window/cmag_act(mob/user, obj/weapon) + if(operating || !density || HAS_TRAIT(src, TRAIT_CMAGGED)) + return + ADD_TRAIT(src, TRAIT_CMAGGED, "clown_emag") + operating = TRUE + flick("[base_state]spark", src) + playsound(src, "sparks", 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + sleep(6) + operating = FALSE + return TRUE + /obj/machinery/door/window/attackby(obj/item/I, mob/living/user, params) //If it's in the process of opening/closing, ignore the click if(operating) diff --git a/code/game/objects/items/control_wand.dm b/code/game/objects/items/control_wand.dm index cb347fe9105..a0235f9f4a7 100644 --- a/code/game/objects/items/control_wand.dm +++ b/code/game/objects/items/control_wand.dm @@ -48,6 +48,9 @@ /obj/item/door_remote/afterattack(obj/machinery/door/airlock/D, mob/user) if(!istype(D)) return + if(HAS_TRAIT(D, TRAIT_CMAGGED)) + to_chat(user, "The door doesn't respond to [src]!") + return if(D.is_special) to_chat(user, "[src] cannot access this kind of door!") return diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 62e54e713e8..082ad69ca61 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -80,6 +80,27 @@ return A.emag_act(user) +/obj/item/card/cmag + desc = "It's a card coated in a slurry of electromagnetic bananium." + name = "jestographic sequencer" + icon_state = "cmag" + item_state = "card-id" + origin_tech = "magnets=2;syndicate=2" + flags = NOBLUDGEON + flags_2 = NO_MAT_REDEMPTION_2 + +/obj/item/card/cmag/Initialize(mapload) + . = ..() + AddComponent(/datum/component/slippery, src, 16 SECONDS, 100) + +/obj/item/card/cmag/attack() + return + +/obj/item/card/cmag/afterattack(atom/target, mob/user, proximity) + if(!proximity) + return + target.cmag_act(user) + /obj/item/card/id name = "identification card" desc = "A card used to provide ID and determine access across the station." diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi index f51593e021617d5b132ac284d8cd72b21beb1e69..41882bb12c04649fd6420a4077cf1e78dc9fd0a9 100644 GIT binary patch literal 17574 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 R{5K>wbo8$kYS}#he*kUY2*dyY literal 16368 zcmb8WcQjmI{5Cp+A%sYfAcTlcln9aNB~haHC^3@g#E3fTCUqfc(gKX$i&?B-0aLQU0e{{-?o!J>?U zEw@~BNzQkw5pK|O-2J&(Lt2Y{js7UJbgRE2hL!GtHY>x zF+^1V;OiCO69%h@3B0+gYnY^WqHlY62cllPnjOj z2!ko#DE@xSeVcMh6in$9k0TVzeJb79Xl?os>{}Tr=;7^|nZDsZ={{Jp;ro1jef^=^ zQV-k2mor+|rL~tyq}iOR4|>7Fahxp6ptYX3s3tV{V@yo)!r~%#H)>a&9sithL!j9H zKu8jGx&2ta{N?=jca@O?NRui{kn`V$5q-oJ6o1!{yS1NsIiT_ zxjcz1G(yB0>3g5&=0f=daLc&|n29pR)6>(X)m8J2p?PWUAnBJ)U+if9O8zz@7U*op zfpUY_!gOlxAl?-azOs)ejqP~L{$kG5Iukm^{UwAjhkPhTF0c4G%$Am^c3*soSkhhc z-@Ul)_DuaTs0wJ9D0y~~` zORmX$AJ_gpxZJ+(I~_6ox9k+OG(fhZTL1@ZoGe4GyDNY#QEdU>XU$%(t#5nKdd`_W zn#*$^%96hs#GCmn->1!C43+YLk>$~zAZ7My1#)_!ibAJChkcf|9qnB;A%m*6(HL7% znmd=z@_X-YdL1SH}B4~C1Z!$21;5F^&Il|39=mI7^T{edVT zjz!0NP_<;N5{`*n>U05TN8CI-D7Tp7FMD6VR2o?yEn=-gMTt$7 zk^ht=k9azA#GQmYdnyA%Q>Mg`5YC5ej6!*>ZK-fDqWpF2+kQ<&B4LsrO?mpX;|sm( zc(ERxLY7>>+HA9Ak#@#tOJ-bL$HqjNX|=WbGu4cf6S%{CZ7UUA$xjqA>M-{8u*z$5`nR0!_Z1XLU(mGzxFQT z=k!IF$P7an>FJeQeGfs!=JmoxMn;B4MtXXBikh0#WhPZuCRFZsH*wmwl4OCZUd`IA z%Qodzx9U+1WXY$tv{bb0_10w@sBI&v*ALNQIzf_e2+Z0i>WcTz4^=H-Xl7aBdfwSo zn;*M@Dwxy9~5Qo0I%S7d4Qz;`zETUj@S42`ieA#)4G8>8vWQ(Y`kNdl>5|botw>|x>q`W-8w3JFcz8LtB zn;RnKxe*J@fZk7nrghFK^LpKUZ;XkX^q`&7%`EX5+*8H8&T9ffLWSo`*FZ6OS#iYO zE9~H5(KAJ5L>>e6Bs8E?$l?>ZLXF>$1E1jA%;FrfT{(6bpCvP1@Zzr}-MJT_~cECLs2}lNZ01-Izm;2cN(Zb@%LW+1fI|n8yjw5^u{a9CwYT_8L1zN6MFx_k;E|6qzN=LY4c>GQ#7Ii2geq_O6W3iZo975uAnwp5n%p z{IO3N&lcq5A8s8+C*g_?pLKoH`+}I^0gbArPn`HsD_(Sn61~%mIRc4rb3=j}8XgYp zV_NpF#B=SQEXEiBYrx3pxmL#{m+M_m}a0)Gdtxb<%m<#w0%2?j6yDSvu%e7}|6`3u1k1_VuOA>xA>_ z2s{!V!kZ6bx(ny$=WnnOX7k&+$4xnuA>Dmhq$P+;9r($HuG1VBy{<8?nrv- zr3ol&@VivmWkQKG&IJ`H*o|qUUKuo!gCE9;Kf~TxXTJoGJ7BLHmIvN+h|TxlN)oNX z_3+)7AeCs=bub&e5MApqCVp9HtWe7!EGM4pYrvV8aizujCM>76_Ol-W$7@XNlZJ0} zMNKC+RXy_f;eFJ3rLb%JcA!dgY^4{UkPwf+nPT)}z)sN-%yfokc4#l=ye5=?4w)h4 zDR=1?vbdm}wC>Lc@gP-55T{(eolv#t9e!hRO<I$%he2pRXYL z{_7$tbo>lkZf&O3Gf>ud6&vtqWB{Spr~MkIike8<$sGyD@$Bkq{VA)B@e*K8EoWVW zzXY$Kh=h86L}H+@tx>mp*7=0{wKA#9MOZ5`J_v{!{%63x^0fG246nY9e0N_@j}@?& zf&8%@6or_?QT@gaW3Ti5i|0n&J{rAxVveb5q_h3=<%K?xfRBiX&;$9e7bJ_rbVC_` z!I~pALd)lNqmhfS0wj6+{Eu*r{4uKDrs$!YM~=EX|8zXJ zhQ*ICngq~5{WJhnqWYG_UPrI?#BrLkO@@4U1XWQXcW`iMu&Dfk9M}PVe#IQf^6~^b zPlpa#?a_Pd*)hjF6PHJXJQtN*@myL%=v@hlW}V`rP*9C_PW*@E1QtMIpn4ujdVb zyU-~}qkp8cT8f^8xpR58jZ@V2L22fG<<_L%mDq069wa?Qm7VnI490ov+oU9w@&GK@sp5YRrnuQ~1ua%RL3e6a_m zs9LYb2D-GFmQgI?@9n8Jj)_g`)8@)opyHjb#PE!u4VF}|?P()Yb_IQXx&$7r>U=r# z=5$sXe~?IF!LAaKaP7FhSq_M>!914v@uI_>k%n}*X<|V963d}5Ys`;hWdn$P1qkmRQDrtUE9F9mW|Kku*8wd+hK zPA$l9U}&F$CJ$f>;K`0}+#rkD`mZZK_YJV`y4m7DJI<)zq?J|2%OtLTGY?W%2Q(EC zoLAz40^(h4=Ft_Mi0J`WB1J|};AY-7b7{~&@O6l&O(4mPP2uNj_Y>b$kKURdNF#q| ze#ewuH|V&XUio2L)kjZM%Zm~u2vhjR#N8RCPUAn8AG;UVYLaG20{Bhs zqB5}M4jXgDyU;RBpRn*a&0bq zOmLh*{Ar74!UMq{nzHcSEU)|LvN$|O60BSrQ>f7a4Dg=5&gIRTb$x8uxOPjebPLX- z{;$7?H&NI;SSP67X-j6VytK%f{TJ?SfYgB=njW3;Z2EmfpuQ+80>4fM&H`bY!p(77 z9idJd4^2IOznW3Vm(REjl%v_1?t)PTwu&U@E%P#ue{&z^w@-uzht$u9jvcV+ne3k( zoS~dZ!pzyV`XSq;Lp&=X^EkgU+6JJ`fg=@lCZI~*Bu7}DOXA!46F>6_hM?!it{NBr z;%ld;!%%WTS}Po>+R44QbEoF`C?RmA&?YZ(5)DPDd&|4f`q9Ey5Hw56auwoxc2TXj zH^nyLSWRJUBd_AUZS&ciieR_6clp5=h-(E^lSGmwe#i>byYI*%t*bF6{WJw5u zZ^h_3Fr$cfh_7)6_seNd3(ij^TMW)l{SwqmN)Z=3jqa$!+rFR~8bq)R38g?Vaeat0;y6pmsOk*jR!`ckYWD0{;wdj#Pp{Dh+ zzjgz}TQc13aKr=g>)@4w^=M42N zD-{G7CTpbm)5IjM;z)D((F6*&4ZJZKme;0-AAQ-HILRQQQYvS58~tQd{wlU* zg2Gu!XQv-PRX`$yeR2~RS;e@W@wcXjl(bc{mzZc3_xFA;PETh1aH4JED7Q?d{Y|Xt zDtiuu4pllzzJn*Ze}6^AYk_zJKQO#ScbHedEO0t$2gj=^pdjY3s^@dVM!KcP~> zqJ3tFxx|Qr8El6G$i`;B{?2JT3$SUVlC>~x)|42TnQ2;Vk>;O(b^2=pad~GL_aEMi zj1ILFZO$k;YhtobIKNZt5PqCMGh=xryWQI#bq|+_YH#LEe!GMK_O(jCh5{4pc%3u|MDM`JtsAj=ES5M z^q#Av=vO;MY>tFl)i4)ecJ`iy-g;xNt!(k}aO!~2F;2nY-ob)YTQoX$`a#0FkvcE3 z64HHqYq7c29Q6KF)wzdoF(hJ7rJ+Uiz!D8Q&N}0>{uf(S99B0yfCPd9yC988X(CRn z?)eYwDhR*2>JgxTr)M+|c+eUG?4b)I^am&Ff&>jX`rQUQamqUEH-Ymi8{F~MjJLk& z$6ar!`JO^C?c`p;f%%}K-$0*i?)^lqzs1n5zS&BYxl2tU^KJYLifq^$V-v@w=+$;F zK5mhEXSu;o3n{-#?XWayYhYWCl!7Qf%D7rN&d=1l{?@f%j@SoH4o?D- zR_hglWDCRg%hDlRuI5eB>1`4H;iuSfI(~a@xMKt!_LFrei(2GK^XH8kpZ$w)nL)rc zW*ea?*H=S~gL$o&3CF(oj=J=-2GX`FY3=Kg4QtaE*E2phr_3}n-bNr9UqROZ6oPma zp)poYuA^p=YAXR(svD>90N9pqZZ7?s0N3OO0=}s{0!g`9=dprrJ*xh{!=dT14>%xZ5azlPaoc`EJTO{k{w0(N4G52#^7KCAD2& zkJn0j0Ld;c?(rZN(7!BrQB#JbFl**BmYNZtH3Hso`(q|x*R>txy~vT+xsiS8yuwKe zL(EA_i_G5MUVq)C9#pZ{+fM}Tv+dUiAW7gC5h;=hIRu9fXnU7%$N+Z%FdmlY^)=bcocN<+N*<_lzZ+FS1q7)g~!CreUx%JU4(_ zuzh<+q8!Fje{=%V{RC^7XWnjK$%xe@&wdhU`}v1x|*>)g#eD?4{T zkwz%Qb0z(>0b!3vV$(rFa!wuL?14@jz<`cwkWW?aQvKD}xA<)ny6BLZH0E;u{6#nWv%Np{wNrQHwf~R|356^Td|Cg* zxl|em)jb4bHVgrnQoCh$I+r--)nu8&1_`Z5TGE;yr|7SghJtnYyk?;wr)iWZuPRu_ zUUApDUE0I<-58;I+6LIrJdrTSv&lek=5X4MW6ys$=Yloe@Tel!u|Mm!1IQ6FtKnfq zwfM)8g66uWroW2E^3>pcvd1%bie9A+414$(Bng?{un1^3t+90qkFWv^Oe0Ou4O`=t3q z`4?rIZdb)6hbXN-R_d&;_TAW5Bvs&AW@rM1|WN7c3p=$)G(*|Prn@>H^dx*56jF{ z&?N?yTfcBs%A^PmY=4TTZzmIN9ULYv{|2S8^rTY4-#qkL%LxamsjKTvBY>n)Ebtu8rJk!2b<;o4P1wEp zd%DOfi2M*d(TRD+nH;e`is2t%Ul)V~Y@cLEdsn+;_}9!TY>*mrRe)m4*h-eF*;L`% z-u@8s<26!hH&r<4awS95R^_SeoIVz5(t4@Ag6lMT|N^|A25jAg%jR9Nz^9@U0rW}lmvo;MrR{-m(EI*F-d{_?eLcLNth(vs)C zjPhRoLq&UOV$X>E>N(295ETe!OPH0n+Zj>#{Oq^+*=2$|Q_z*7tV@k}fVmZSxoeVg z9UZY#b4%!L#n`AghVip(Jv2~N6itcnJZt5rLsJrqi}?mKKhZx4Dk7XuTs=D3RUJ5U zug@6sCzx35Myz;3|CNQn2f|lDx?l2J$-h505){Xv8XhqQ-B0PLN4>h#^lD%eKu=tr zAAWq3ez#2#bC0j^6AAilAdUECF@jf1oIt!WpR`=;Yy1QS^-)`H#APYt(A6jVH($qc zoDaPisGG_&cD!M&_B;g?@qa1K zY|Gjc=9?Gf)N5|jKRrtm9y~ZZg*C48_@19|HqH!=NS2b{0{x6G(3&($g)oCHeSCb{ z2{5~Uz4raWO-E{LlL@K^E`y)yXYZmOH(?qcSeWEV@sT(n3+1v2ml|Z0aCy%4}V1|Pbxb0QPsa!nRY1Ls+kFqZ=3BM;H@d>*BytuZnFyU()2su@;+?rTaw!{B^hmI{SeYBf;wsBs<^y-melO>>r~pIoW-^cF{+MQ zsC)5LqdV_&oNSjHySx0M?jo*i`3Vyks<`g(^e^Ul19mocgY-eFc&uP+KfZI}X@yx_ z32lS>s`g4$@Z;n0-b*qABtMA>n*)MayspYiFIB1ZO!|0)x_Sh4T1;b>@0+fGjMlw< zf!l&YQHvbEdH({n0juVSGP4Qqi|xJqy#JYWsEQrSyCo=~!hBHiI(~F)-s~U}!H$o( z;AER=TS31N29`*w9^9_#(;xOk=*yq`M|2o>dCxPy*=ZHRkld*qp~}X&Kl4XQzvu?( zMt7CU&zCIs81M4QYW>>14?0H{g;3~h!wlJnQKf|`hu}~Lq!{CQ4t4c%=omP_pW7G?pJ-bVOT-FS$Gb)&YQ`ZhmI{ z80GTva$UXror^}^j{n)lr9UiyJ*aNR-+_e6W>_U{xggaPv(V3PZy%en>%MlGh&DN! zdCrdYcSHg`z;C-CeTCOBGL~HD6^_VBdSPkr-sRwmzq^i8&)J7}j*=4-LC>al$AKGu zbLulmc@_s(sV>F;hyUtFP$je%Qsw_o6v^V*F-dV(Naz!=FN&BEO%q-gm?kI*vN?op z5ze=dh6V;cxw*Ty;?gWLHPxW(!g6w!)qB-M;p5F*7T*(8OplY6i3`ND+WLM;KB~ZC6oNpv{m{%l2d@?G=4mMM zYj;uIc=+Y(GBx@=X$WWMyU&|EcB!&V32k&$QD?>lahi&r0W#(rq{7?WV9iFmMj_xo zu!FS`&|R}ywfz=7D)J0qV|N&;=WurtHm@@`XWv2a@7{?EX`>rrfh*bOXX^#XaA<6h zHg#~`G$Wkz`}j;qYE^$nnJip@Gd@UYDec4a4pxXvj$Pp)$sH*Bpe9yHo#Pv_!PGGP z$}O2X`eCqT$K@_4ZKm$AQ`D;e9D^ejt~7??#so#neRHtR+R2dn-QD9PI3asXBP&D^ z$YrlfJOh}a;}~X^sp^2r>ei{l`N8_mzQI9TK>hI8`J1vnR^(JS!J7&HTcE+XGLXg? zk7SbpLyw)7mk$-t8c^CsWIJaJc~(g9c((y6T2}uMY&VeFl}nTLeQ0l=q$N!9V-b`W z#m^Lttnb_>&m7s$Q;jLi&JL;txG@ImMme;+t@A&4GCv+3DGnz9qe~plQD%PN%v57H zbVO+k4E0rCD&Mq4n#Q7=GMptZ7|@imd-jJIY;s7)csJ=Hmw29Bwj?o3(jHT|@B9-4 zViUUX0z9+5pqePs;BD>nPu)>!rWqlMKspjyq^(%9@gqYgA~_>N%gd`yY&=~qKD`h$`!_wryaU|hNfUkpaQpg!2lc+jRZX%o&9tzzX!ziAk3zhh z7N9w&pF3=Pn=-rPXCZIAA365BM?TqqTy8Ba^zW&(_l|Qz@ry8jPk$IeIs8fiz@q0D z77ASD;o^!-Pw!9UH{cTxxbx^y%G~C0? zx8;;s5~SMXDNm%lcgll!^j(Lu6+3_aj89K@{(#s4Gq)ccPN02ey<(_e_}-Mc?{#Cn zNByB}iSHGrOTfO@B$sK4anUFzABx0z_Sy~XB#FUC6q3&Uivp`IaLFzPg+!8M$`=$B z-S<7PhqPM(Je4UsR-*AFYW}LnVEPd?LNt8Rw(siBUn9Kl7n+z4AKbS8HX4WtftX_rPQQ;<2v3-1E?5O&9XLKqJ{#tIZ0}%Tv&7tM%cN+p$BIj{j3~4S6yxVEtf} zwr*i#8tHv(oexVQblYoc$PEk+F9|uvV>0k}rTb_BJD%`W{pEZ%C zrdf7ml-^ie$Fpxs#dz1WT+m8FPR%*)S*iAaUW#H|62fzHP8b;(6Oxiv+;@sH7b8Bo zfS~~Pd}qY2+YdQr51QQ(c=;8tgzPV=tu>^wxyJK18nz^I;{}iA=WON>l~JfXBg0-@ z=~N+SAwbou2DG@IcUgRS5!taN$A>(^eTm{YyO=rksKDm#{hYg%WTjs=NZabSC{r!v z*e}t_d<#)mtO1l|1h5q*&hs!80pYOA;;Mg^cF$~4z-&3}(X;35BCJG|QN?QW2cIQ& zYT%j=k&&PHRk=Fo#d74beV{N(4`HSVKpjO1U=^epoyY2KR$7@zD1W+jxcmKBl0pWX zewpgz4v?w(m;(6>l}hPi7L0HQQbD34(kzc?#y_D_p_9qkua?UW6t)KhGw8V;@W9FZ zje)fMU;GIaW}?Kt9h|`hEwE7h6UU(GAM5F4zWs}ujGp|Q5a8zK?79{=Z9Olp?<#OG z27Dv`E^ZJP(nnK1Is{*kJA+X^|IZxH|FR$bpOny@D^|`6e)_)R2KNm^)oO?2R=U9)=a>0UYEIz#NJceY4&K0=S&VMqcc_q-K+ZfN1t6} zop8n-bT5)|W@pCD%=W3HeMBClNG(<0z zpDf z0_MG#0;8RA#{y_dnuMjaWZ!>&AwU2e-ZMxhoy)n9m>AGDc2!&{2$EP$G4t*o!G4K3 z!n1^s^N*TY>h2vEN@J{3EJ^0@s75l$@9|Y9bKMK&s>M>a?;O^&&I7=csTw=;mH)^d zzWtRnFlKnYKnF0t6lX3zpR8-UAZJPh-!aNzGeRblgm|T;(^6%5$TLDVa%|^TSRp`n zvVFVly|iB0_~kKJoGn|5#U$;Yhe`rPCeVjqfgnV$Xq2e}$>p`WcKoBK>^_CJ6+Fbv z^MaS|edOR+V=x?g^TASB|3bEszW32RCexrU#yX(wZ_54aCuHzY?Tp;tJ#k4V%7+yK zWN>;OO>A0-Eif-9B5wj3oj*y-j{JH1i{mK&j)#yK)<@stIDt$($y`Q%*og$tix`50 zJRLAu{}C#wvP;r(6!9T*D{zu8iign-0NtYm><|02b9}^G;QVZoxz(W#Sd8(cpewKC z?~r@F*ili+E(_5{Uj)!rGy|X=!TvhGbX&l^cPk#MOaztKk@|#0{#U+V;Q3j4 z3*1O<)Xlr|Z(hfd0U*Y}B}E5IMVlBK&yDd9!11GHWm)5kn(2pVp4XQ7(owV-=+exk zT~2JY@-V)EjEewNi`!pta0((f3Wnc6T2?rO158Yf9BMUzm(&&2pAtq;;kPeDyp%o- zdH}{4*|{teJ0BV8QqaFl1|J%}9)$R! zMVjM#jU4@Fg&nL`!HpVu$b?mxJB?Xh!rpCAbPwgVdio4Rxl{jylnXQ=m_G9AhJAaP z-h>Hr*xvmwZ|JwnRKUR#-Sp@~Ck_*&sk?O)`FAsnBV+mzfd@0QJnDA)90yE4(+V@N z=sgh~()q@&NC^zIMx%1Drpm|N;2Z* z+6P?>jeS;)#HY6vA(<@!lE0n{>TYZX4u#hey>4DT**?5N*vux$l+5ruVEr~%(KUxU z8m)RF4{0xAk*oM8;MHa6WR?R0-Zz!#rN0YZ;!+qovi?PurABwq~88< zE$t-ppxMjKt=4`d1TaJlw>GDH;5gQzKCwJ(z%xyJ2Dt{uNK&a#uZ2Dwr%@ zJ&YSVM(Fz0i@7omg|fp2t~ENb0CZB!>ir&x_Y$hVhk;HXWfThw+ZzY8MeGbZ1D-1p zp@Is(G@!Fzb6zNq;iXw)kE{NpeH3AJAsG(Cjq-gprMwe4xJc1!bXEX8g@nzee}zDt z0ryr$1fW#stG65Q_LWR-I{@>S1|CvW?x><#vK>JB2Nk6*);5>l3L=62N}=l|82yxTcn+v|1L?mW1FY0H z1ah;I)GGAs%~7T->t~sifPu8|E%_J<^-f8+QlCyEK!P+XSX#2NNV+U_vm>Z~A%WEy zHqiZ7NA`|P{+ZA9*iT76caMT6yT{YRbc?dh=Cpa=H(HI1EV2qEbgU82csQUd2@kE` z=Vu{(A9_4jW{6w=qFmh5`@(f64^7*LPZ&8+)5p)!aot71h~n~M>R zRu@ek>^(f)(Q2C%L)>HRpQ{NcH8KKe;WS*qpIM7eF;B zjIRdB$~H)+`1ONzGVYq(cm)`>;I@iVd6iT?l ziOZ08F2wrvojv|rQsN{xKYM)&5Ix)t#NlODa{*+{rX3b-1|OhkMSH{OxHfZvpR`Ic2TBC0gp?6=o1f2YLIq@)Dz6yUh6Z?IFj%3 z4|ZkO1xBwE`%>#6*$a=a>23SoskkQ~%9Ya+xN3rO~bFBMX(n z%6E~Vo_w@mRm(!nA}=@h6LCnz!6dEc?@H*<0iz|zYULaTS{pmN@<9hmU->C#TzMd& zHZ+|a)vZpY^2lnLOmZUu=q@I6oY>Fx| zaJzbw-k9oVSC{&vg?rTKE|7pHP9EHX_VhDU_aOkz(o+6J%5xd-zf$Xe9Ktf4o~zx> z1bASXOEbc6);p^L57jW8kE9m8Ezd=4{v7~2dSb&)H&I#Q#t6A@?S00%jbT&>Sctfu z4S1f#NqRF`$$}a<@Dm2523NChxIXt1o0^(RXH8%~u+Ww5#u3gi61RwHu%(QgofAi< z{?9Q0^ZC2~6b1LkLLhsqyGCY^GWjafo(vv3_nbir_B{~nFZJm+Ia(nbyRdWOPobG7 z*1~ILcnwV8$E?jQ@SVv(C?Uh8HAc#_H{|G;D*I;3H`R^3LlLCgBQZEgf|rIY`^{^< zN9GxC??9YLwy7qab_8$sTMXO3d1X^+aotXVrIBIcb^R>4!iyI<9MlW=oc!20B4H>Q z?7AJG%(+AR1z0u7Oym=7dk>a<4k?IBuV$GKf?7y?h62{h2{K7@t$u0oBnuBdffl8; zUes9JS0SAnER(nP|L9NU?EkSdo!Uq7=SK$WTKw$ZlGz=}ElkhQ%_3 z=O3dEqSIGsUni`#uvcpai_#H%uV=M|8TZiRJz3gFmT1|sft7dBDZd>JyJ5UvkSt(8 z{yEOT^molhArpYx^r;E+FM&>FRk8le!i3Kt|5^c*trHRG(R>*G7IX8CI%sSLGlakj z+4$oEI6sI%Z4_-?2~!Z!R-#B2glrIl)tfkB{$APbsWZ6nM6 zxvir+pGiydx7N1SjdxLDHRv)jtt@C&AvxI zxDXd=;siAI86l-*_#4h$Q(G|~PKY`9SytT8)Z^ML4}J8JC@sK9eZ7bqIK_h4W(Qii zaunwzLil*fzcz&A+c!$}Lj1<_VHwIP#r(BW#X0gY^-GOMt}|9X-!|7QQig;Lc)t4W zp+G)e^hQ*GI(qcC(N#$N90L>I^5rdZv{WoOJM@xX(X+77ycZmt93Q^`Ff|F4?u^8% z0?+QC%Ji}VU)uXhK?!L9b5-Oc`-fp~h4{jxk*ZV<-#IJ}ZPUHujNp_g@dMfC_+tmm zd(dW?6HL$Z>zIG!5GtZe~ecjh!A(MkR2eCx;i!t6FY1on$tFI8T+3KYeB zpZtjaE5rDiPFCO_e9gCoa#lVyyEj$YZQyKg^L z$`d6F90k%27Om#z8-j>9%_Y@9Wd;D-^d~wmlJ9Cow|lllo*SxdlJD&i=j*TVUsaKU zyd(Cfbcy=}3Rrg>tc&np4T}$v$iZcv;25h|&A~l_sS+&Wi}8C(3T%$Hr~u~vjLWaO z_1#Am9Q9joyD!5U85r%tsM+id)M(fYhrVtcx$1q%mj%?~;l-KN#L0oR6GtFvbR@bQ zE*ts-t#0$H#Ay%O1~Zo5$p~>|zU~s`K~*|Y`tI*KEvABPPgM#cK?m_AnBxuk_=_W& zK7T`4386+OX)J+oQ|#G9wmayg-4iMJ&CxS=9)Za73C9#aa>&>tR9A~V4NYG>9Rn=> zSCth17{tr)j>KOH zX`=2c8sZU|PZOGpaKO9=7U2fKPN-{bG#}kAOv$)XHC*oKrW_~3;Hk6M+uIvrX+ilI z*Z6tu{AIM!Gd|wEkv!EYBm%jYdASRv#>~u|O8>(*f`MTs)kptkwg-kMclvOt{Ok=t z=89KEGLW5ASg~`TI*A%=9GyK?{8}-!J-LNo=VvNLuIP&&zSInuWNSj)Q!)5lvk^0- zyKnI*IgwGnYQf}Kcg!C@->Vd~1f+Bs_p{x+k*7c;yOq3G9W&~noefWI!U0gRuF+a>KC{JmsF<;SRmj(zjwEffZp{)CH!I}u zxnF~@Q`l>?q9;`Z5$a5sv$pBJAO8u>{A=eZZ60>w$#svB?2cTwJ40%x-k<1bilgMJ znr6K1sUKeM0!gwyYGPXY=c`kBba5!)|BIoH8{&&71uEeEUGNlGAR+f@hQCS-r;z6!vuxcS475oL@~TJmlLn!lFx@*Y4Oo6%K7;*K$R*NalbTu(Sm+Er z!iJ8QnZ)cacBdKh{K=BHFPr$hUiJH3!zJ{|%qF`o$%n2exmHYe_HC#-Yn+q~t^B3- zvSn4%FIHgSyrq}~aLVuU$&I_uu3kg5ie+xwo*>HdGq=pYVdqa&f1*T!`jUj)UzN-9J`MV5KLpG3B9V9%-XoU0Rg<8d-l&kM0e5fLr|I z1sph0B~$|0BWfcK&0Zc5PG5Hv(r* zBGbH4Ly0Xvn(Q