From dcc5034f9e9881945a0664839e581ce755893e4c Mon Sep 17 00:00:00 2001 From: DeityLink Date: Fri, 5 Jan 2024 10:44:24 +0100 Subject: [PATCH] Yet More Moody Lights (#35689) * wip * more moody lights * woops * green screen --- code/game/machinery/airlock_control.dm | 14 ++++++++++++++ code/game/machinery/computer/aifixer.dm | 2 ++ code/game/machinery/computer/arcade/arcade.dm | 1 + code/game/machinery/computer/camera.dm | 2 ++ code/game/machinery/computer/climate.dm | 1 + code/game/machinery/computer/computer.dm | 6 ++++++ code/game/machinery/computer/medical.dm | 1 + code/game/machinery/computer/pda_terminal.dm | 1 + code/game/machinery/computer/security.dm | 1 + code/game/machinery/door_control.dm | 7 +++++++ .../airlock_controllers.dm | 3 +++ .../embedded_controller_base.dm | 5 ++++- .../game/machinery/kitchen/snackbarmachine.dm | 1 + code/game/machinery/requests_console.dm | 1 + .../objects/items/devices/radio/intercom.dm | 4 ++++ code/game/turfs/simulated/shuttle.dm | 1 + .../computers/remote_gallery_access.dm | 1 + .../media/broadcast/receivers/radio.dm | 2 ++ .../modules/reagents/machinery/chem_master.dm | 12 ++++++++---- .../machinery/artifact_analyser.dm | 1 + icons/lighting/special.dmi | Bin 6541 -> 8710 bytes 21 files changed, 62 insertions(+), 5 deletions(-) diff --git a/code/game/machinery/airlock_control.dm b/code/game/machinery/airlock_control.dm index 6141b951732..59fafad41dc 100644 --- a/code/game/machinery/airlock_control.dm +++ b/code/game/machinery/airlock_control.dm @@ -188,10 +188,13 @@ if(on) if(alert) icon_state = "airlock_sensor_alert" + update_moody_light('icons/lighting/special.dmi', "overlay_airlock_sensor_alert") else icon_state = "airlock_sensor_standby" + update_moody_light('icons/lighting/special.dmi', "overlay_airlock_sensor_standby") else icon_state = "airlock_sensor_off" + kill_moody_light() /obj/machinery/airlock_sensor/attack_hand(mob/user) if(..()) @@ -203,6 +206,9 @@ playsound(src,'sound/misc/click.ogg',30,0,-1) radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) flick("airlock_sensor_cycle", src) + update_moody_light('icons/lighting/special.dmi', "overlay_airlock_sensor_cycle") + spawn(10) + update_moody_light('icons/lighting/special.dmi', "overlay_[icon_state]") /obj/machinery/airlock_sensor/process() if(on) @@ -261,6 +267,7 @@ //build=0 //stat |= MAINT //src.update_icon() + update_icon() /obj/machinery/airlock_sensor/multitool_menu(var/mob/user,var/obj/item/device/multitool/P) return {" @@ -346,13 +353,16 @@ //build=0 //stat |= MAINT //src.update_icon() + update_icon() /obj/machinery/access_button/update_icon() if(on) icon_state = "access_button_standby" + update_moody_light('icons/lighting/special.dmi', "overlay_button_standby") else icon_state = "access_button_off" + kill_moody_light() /obj/machinery/access_button/attack_hand(mob/user) @@ -370,6 +380,10 @@ radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = customfilter) flick("access_button_cycle", src) + update_moody_light('icons/lighting/special.dmi', "overlay_button_cycle") + spawn(10) + update_moody_light('icons/lighting/special.dmi', "overlay_button_standby") + /obj/machinery/access_button/attackby(var/obj/item/W, var/mob/user) diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index d6886eee185..499fb4a4371 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -112,6 +112,8 @@ if(stat & (BROKEN | NOPOWER | FORCEDISABLE)) return + update_moody_light('icons/lighting/special.dmi', moody_state) + if (occupant) switch (occupant.stat) if (0) diff --git a/code/game/machinery/computer/arcade/arcade.dm b/code/game/machinery/computer/arcade/arcade.dm index da066490527..4b65bf373f3 100644 --- a/code/game/machinery/computer/arcade/arcade.dm +++ b/code/game/machinery/computer/arcade/arcade.dm @@ -3,6 +3,7 @@ desc = "Does not support pinball." icon = 'icons/obj/computer.dmi' icon_state = "arcade" + moody_state = "overlay_arcade" circuit = "/obj/item/weapon/circuitboard/arcade" var/datum/arcade_game/game machine_flags = EMAGGABLE | SCREWTOGGLE | CROWDESTROY | WRENCHMOVE | FIXED2WORK diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index e9c9472ba40..3fb5321ee73 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -305,12 +305,14 @@ var/list/obj/machinery/camera/cyborg_cams = list( /obj/machinery/computer/security/telescreen/entertainment/wooden_tv icon_state = "security_det" + moody_state = "overlay_security_det" icon = 'icons/obj/computer.dmi' /obj/machinery/computer/security/wooden_tv name = "Security Cameras" desc = "An old TV hooked into the stations camera network." icon_state = "security_det" + moody_state = "overlay_security_det" circuit = /obj/item/weapon/circuitboard/security/wooden_tv light_color = null pass_flags = PASSTABLE diff --git a/code/game/machinery/computer/climate.dm b/code/game/machinery/computer/climate.dm index 06015b94243..91393731db3 100644 --- a/code/game/machinery/computer/climate.dm +++ b/code/game/machinery/computer/climate.dm @@ -5,6 +5,7 @@ var/list/climatecomps = list() desc = "A computer designed to report on the weather conditions nearby." icon = 'icons/obj/computer.dmi' icon_state = "climate" + moody_state = "overlay_climate-wall" light_color = LIGHT_COLOR_CYAN circuit = "/obj/item/weapon/circuitboard/labor" diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 5faf027830c..635837e23ed 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -17,6 +17,7 @@ use_auto_lights = 1 light_power_on = 1 light_range_on = 3 + var/moody_state = "overlay_computer" /obj/machinery/computer/cultify() new /obj/structure/cult_legacy/tome(loc) @@ -28,6 +29,8 @@ if(!(computer_flags & NO_ONOFF_ANIMS)) anim(target = src, a_icon = 'icons/obj/computer.dmi', flick_anim = on_flick) initialize() + if (icon_state == "old") + moody_state = "overlay_computer_old"//I hate doing that but a bunch of computers got varedited in maps so this covers them /obj/machinery/computer/Cross(atom/movable/mover, turf/target, height=1.5, air_group = 0) if(istype(mover) && mover.checkpass(pass_flags_self)) @@ -101,18 +104,21 @@ // Broken if(stat & BROKEN) icon_state = "[initial(icon_state)]b" + update_moody_light('icons/lighting/special.dmi', moody_state) // Unpowered/Disabled else if(stat & (FORCEDISABLE|NOPOWER)) if(icon_state != "[initial(icon_state)]0" && !(computer_flags & NO_ONOFF_ANIMS)) anim(target = src, a_icon = 'icons/obj/computer.dmi', flick_anim = off_flick) icon_state = "[initial(icon_state)]0" + kill_moody_light() // Functional else if(icon_state == "[initial(icon_state)]0" && !(computer_flags & NO_ONOFF_ANIMS)) anim(target = src, a_icon = 'icons/obj/computer.dmi', flick_anim = on_flick) icon_state = initial(icon_state) + update_moody_light('icons/lighting/special.dmi', moody_state) /obj/machinery/computer/power_change(var/nodelay = 0) diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index d98e3b9f529..a853e0809bd 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -595,6 +595,7 @@ name = "Medical Laptop" desc = "A cheap laptop connected to the medical records." icon_state = "medlaptop" + moody_state = "overlay_laptop" pass_flags = PASSTABLE machine_flags = 0 diff --git a/code/game/machinery/computer/pda_terminal.dm b/code/game/machinery/computer/pda_terminal.dm index eac8e72d38b..03c0ac4a1f3 100644 --- a/code/game/machinery/computer/pda_terminal.dm +++ b/code/game/machinery/computer/pda_terminal.dm @@ -2,6 +2,7 @@ name = "\improper PDA Terminal" desc = "It can be used to download Apps on your PDA." icon_state = "pdaterm" + moody_state = "overlay_pdaterm" circuit = "/obj/item/weapon/circuitboard/pda_terminal" light_color = LIGHT_COLOR_ORANGE diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 301d4dc2c4b..cf9cb01e18a 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -582,6 +582,7 @@ What a mess.*/ /obj/machinery/computer/secure_data/detective_computer icon = 'icons/obj/computer.dmi' icon_state = "messyfiles" + moody_state = "overlay_messyfiles" light_color = null computer_flags = NO_ONOFF_ANIMS diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index 34d63266459..80ea8080c29 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -75,11 +75,15 @@ if(!allowed(user) && (wires & 1)) to_chat(user, "Access Denied.") + update_moody_light('icons/lighting/special.dmi', "overlay_doorctrl-denied") flick("doorctrl-denied",src) + spawn(5) + update_moody_light('icons/lighting/special.dmi', "overlay_doorctrl1") return use_power(5) icon_state = "doorctrl1" + update_moody_light('icons/lighting/special.dmi', "overlay_doorctrl1") add_fingerprint(user) if(normaldoorcontrol) @@ -116,13 +120,16 @@ spawn(15) if(!(stat & (FORCEDISABLE|NOPOWER))) icon_state = "doorctrl0" + update_moody_light('icons/lighting/special.dmi', "overlay_doorctrl0") /obj/machinery/door_control/power_change() ..() if(stat & (FORCEDISABLE|NOPOWER)) icon_state = "doorctrl-p" + kill_moody_light() else icon_state = "doorctrl0" + update_moody_light('icons/lighting/special.dmi', "overlay_doorctrl0") /obj/machinery/door_control/npc_tamper_act(mob/living/L) attack_hand(L) diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm index 9fb7c0622e9..04167c4386a 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers.dm @@ -372,10 +372,13 @@ if(on && program) if(program.memory["processing"]) icon_state = "access_control_process" + update_moody_light('icons/lighting/special.dmi', "overlay_control_process") else icon_state = "access_control_standby" + update_moody_light('icons/lighting/special.dmi', "overlay_control_standby") else icon_state = "access_control_off" + kill_moody_light() /obj/machinery/embedded_controller/radio/access_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open=NANOUI_FOCUS) if(!program)//we need to initialize the controller to get a program diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index ba29850ddaa..55b5c638bb6 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -28,7 +28,7 @@ build=0 stat |= MAINT - src.update_icon() + update_icon() /obj/machinery/embedded_controller/attackby(var/obj/item/W as obj, var/mob/user as mob) . = ..() @@ -196,10 +196,13 @@ if(on && program) if(program.memory["processing"]) icon_state = "airlock_control_process" + update_moody_light('icons/lighting/special.dmi', "overlay_control_process") else icon_state = "airlock_control_standby" + update_moody_light('icons/lighting/special.dmi', "overlay_control_standby") else icon_state = "airlock_control_off" + kill_moody_light() /obj/machinery/embedded_controller/radio/post_signal(datum/signal/signal) signal.transmission_method = TRANSMISSION_RADIO diff --git a/code/game/machinery/kitchen/snackbarmachine.dm b/code/game/machinery/kitchen/snackbarmachine.dm index 32a22d47871..6c50335b12e 100644 --- a/code/game/machinery/kitchen/snackbarmachine.dm +++ b/code/game/machinery/kitchen/snackbarmachine.dm @@ -4,6 +4,7 @@ condi = 1 icon_state = "snackbar" chem_board = /obj/item/weapon/circuitboard/snackbar_machine + light_color = LIGHT_COLOR_GREEN windowtype = "snackbar_machine" /obj/machinery/chem_master/snackbar_machine/Topic(href, href_list) diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 4db9dcfcfc9..37ed1fd997d 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -55,6 +55,7 @@ var/list/obj/machinery/requests_console/requests_consoles = list() var/priority = -1 ; //Priority of the message being sent var/announceSound = 'sound/vox/_bloop.wav' luminosity = 0 + use_auto_lights = 1 /obj/machinery/requests_console/power_change() ..() diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index f3155d9a0d9..58cb059c7bb 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -149,6 +149,10 @@ icon_state="intercom-frame" return icon_state = "intercom[!on?"-p":""][b_stat ? "-open":""]" + if (on) + update_moody_light('icons/lighting/special.dmi', "overlay_intercom") + else + kill_moody_light() /obj/item/device/radio/intercom/process() if(((world.timeofday - last_tick) > 30) || ((world.timeofday - last_tick) < 0)) diff --git a/code/game/turfs/simulated/shuttle.dm b/code/game/turfs/simulated/shuttle.dm index f67755658ee..5c50ebdafcc 100644 --- a/code/game/turfs/simulated/shuttle.dm +++ b/code/game/turfs/simulated/shuttle.dm @@ -245,6 +245,7 @@ linked_pod?.crashing_this_pod = FALSE /obj/machinery/podcomputer/update_icon() + update_moody_light('icons/lighting/special.dmi', "overlay_podcomputer") if(panel_open) icon_state = "podcomputer_maint" else if(emergency_shuttle.online) diff --git a/code/modules/library/computers/remote_gallery_access.dm b/code/modules/library/computers/remote_gallery_access.dm index f0c8905a70e..361d2a0cd7f 100644 --- a/code/modules/library/computers/remote_gallery_access.dm +++ b/code/modules/library/computers/remote_gallery_access.dm @@ -6,6 +6,7 @@ name = "remote gallery computer" icon = 'icons/obj/computer.dmi' icon_state = "artcomp" + moody_state = "overlay_artcomp" anchored = 1 density = 1 req_access = list(access_library) //This access requirement is currently only used for the delete button showing diff --git a/code/modules/media/broadcast/receivers/radio.dm b/code/modules/media/broadcast/receivers/radio.dm index e135e129f57..e6dc3ce4e54 100644 --- a/code/modules/media/broadcast/receivers/radio.dm +++ b/code/modules/media/broadcast/receivers/radio.dm @@ -129,8 +129,10 @@ /obj/machinery/media/receiver/boombox/wallmount/update_icon() if(buildstage==SYSTEMISDONE && on) icon_state="wallradio-p" + update_moody_light('icons/lighting/special.dmi', "overlay_wallradio") else icon_state="wallradio" + kill_moody_light() /obj/machinery/media/receiver/boombox/wallmount/attack_hand(var/mob/user) if(buildstagegFQBse`xCC8WFYbmzLct&` zt)hN!fM;;-SzV}oJab|G8*j6f>bhXs=jxF(yld`~QU?c4=v~X;!2N~*qpl?rViboc zxk}C9H<;$!LN5wB!o;L{bZ5U5<>gLr|t$GE;|&SckQ7cXY(U2QJ^c zw`85HcT6GrCA~&j;LE{`yN6>A*s0a~ca;s&jf0FtayPLv8^7-PHS#z{hNdg?eNS|8 zp|jOrZUkQ?S#>)e^V}6(9XR2`EpXiQ%nj36+C8<|ChHQ15BD2HIu$)NGu{uicZbh2P(|q zovti~nhLwXRx>I4HGnRNwXtTKvZF3;xib~Utgoyj6eqbZJ3ObU8_V-~f-_Ocu_OKu zuecB!ZtE%8m+EiwW6yLweA=*CHAQb*a37aVVOC#fAm_Jh^`+w#VV@vZ zOV379H_#2fTh~#q;AtbTV#R-0J}bXKjc@xV%gT1*cGDO4g4CO#LNzCNXy9B*8ms&# za~~2nxh|;bk*YHWr`NmJyT5LAEB1!Wh|~FwPh{BNxA###=vGt-mDa!Uz=#gfLJU&V z42dT^o!^@>>Ux^<6BQYhyEGFfV_Lk1wYkO7ra`L;5?92>EnxtRs{%MM<^?cto*o52 zlJWrVIB0ycH%E(Dt@dQ*v6}zMVKUWP(GhA*>I?D(c~)uhXt%rKYBi3mWY?`S_R`WGD>b9N(#eN(_rj zv1%8UDk$Ox6M0Gy|Cpd_s8ngw6}%l6B6Wm?g(tIMit3=UuzSNXQ6ws-(#+AUCofH&Qd38+;4grjo! zT#Cs6vj6xg<-isn7_=fajyApn5EXg&%M6_(&OJ*Hr(@-b%0b0$G%oOf+ss=1k19uC zujySE7xXEg=MSJu9ki+Uuhg!+O}0EgNix}&WA2Hxsg2`@jW+Z`=0WNBOWiU)GbZ4s zO|9LwsWGj`Y;w7>BaObL^{4!Aa{vbzY*ZOe2h1Ux#o;$VHaWD~dkPr_bMq#Y;StE; z;o;+4Di6PFwm3<#!KfNjma>q_RY{gZ8^Xu0SG#z7%lMMaXwW&_GBE%#o1ViReo{-# zkxkzII>`sa@yKeh(oUR$UTH{&RA zq_?`swhtaWArv>VyVXgSkS=A!iin7mkeD{sw%qK5D(a5W7svC>9>M@JBnL*skQi6BAb57hd@uK6?^m#!c|i`j6#+?&Q+|yt8h5D>~(a+2S03Cnh{52 z+vw`*))ZB|=RDNn;;(kGvEljCqu~>KhX>)y&j7RqTDt$&7XAb|G)?2xY21LWIE`Lp zO=YD(K|z6@ZGK~o=Mn{u^wDW#A<4|rh9vwjW!@Eiv(?HVr-mG}N-Tr{Gx(MYze zv^y!aAuo7cC1}mbYGQ}PbvR3zWN9VMt_Y1S=to9xii(NlR>lUx`_y(PJ$oBw_`ui@`OM2b5 z@p60=ujl{i`<}9kH1WdKh~r>Xt7~==@`yEyXqYD>3ZP(#oFTl->#z?+MNG<;-r9)0 zrSXqWHM_rBQ|V#EWiN&BxMb+aAz>5Tv9RbN3}2Huj0!#F8n~Eb79Hdy0&%_Q-JgRJ zPyX+ixOJjYhfAFj%*qMF-q~?n1YvuVEi9(+YhCglz-PWoJm@GaYClNPrc8YFI|>M2 zYb3jK9nsAPU~LbrXiDyVCwrDi5p?-g9`G* zQCgW=vq1ynqgEC0a4836+Cll;!+~w$?@Xh=4LJrx{TXflk1ir-RYT-H)T;>x&a7NO zMIxG6Z$8C?maj=#=m1D4=X0@YpZN3qs5}=?mPWazldaA&IJC4LQxQu80S`}>{K1w@ zxrd|t*?O_@w*ueN6+~i`m#BF6vo@tOn!#iVqua z*b!SlVYT>g#ovx5JO!ubvY`tW^`XFOoglXhB$d}M?}Zb{A=_Z-QH-%^*bp0JlXPtU z-8*m-)Ir{#--3SA_kYBV-=XP0ygpiJz63Ze10ajw9}y6Pca(BH$ez9OJn{qAsG&s9 z;=T9o{HzgQA3fl>5n`>UXeQf-tlyIltxg)$68I3?A;tn_!n zwe?qhI|=V&3<4m7^;icdypIeztPf&8)*-k}w*A;JqafJa3!Zy_Z!R-OmdmJGHK;XmL0hmv;yV^MR#bA+sa0p*_q%gJcpJ5n5XGc; z;27Q+4ms>Sy4NYbDxNZo)Vs(IrH;{sg(KWKLrDHp?fe%bJ^`yO?TivJ_d01;1%s&? zIjPZzBkVSY3_OXq-j_IJfIx^PJJ8|!H=J0%*lF%HUj+J`;5Nv9{zCLgV+=kJSf7}Bp-bm93kUV3huo>1S9!SaiN~y z|uuVaZd-{A|4=)ZzCZ z70=`GwbSm&!}qSP_#8w4>1g^X*pxiwUKprAxgn2;d-z+4Vsp8;_t4iOdOG0+3~4+{PSD0_%+=I!s4P5#U2VgHXE;Aibxx;BT=Pj1Go%bd&zQV zlJLj%w-z-XTI*<1NSKrKEl3;NjVj5Bik_NSecDE7yFcWjrL#wK8OTPy8a;f$A~tUR zw$h(OFA)QrsWeKPPKnA`G|IwDc&NWnP$y4e$}Y0*lmy;&Nyf0z>~f{jv7n^JGh^Sa zVI|vt1fhP1Gm|hIGVqKCD3w-M|LnO!QZ5n(^-yhKD|#iEiaBeT3FSI@6f%OTeus?T zI_)T}{!h^=$t;92Zx&LJ|8-G^!%e1COqB_d4YTjfJTtbmc8K2^t|ixV#QO^l*D;=( zaLYe*Czd|KCNA204sWiu+iCUtb7^cWbR>SlAlH`=!!R#rW$)eGP-c zn2akjZb-R9Q%|Dw2v?}S5F@r;Z#6Gb&@lIplV=iGEd6W>M^v!wd>%W$Ow{{q5Z3x~ zu9HH9rpa>qxJ}y7VQh<#Ldxe&<_U}$er)Cab8p=0ScPMD%+|{gLBmYFs>)x%Bl3P5 z+_0Y#Vvm?vaZS_Z_J(~2u(Z_F(=~Mld3?NIxVkgDEV6XJ?|sSb!Yu9Mc8OVQa#aKy zdD6`U5tU12hhC1R3}f%j8zR$-JT6xF2CE!yv|P6d>=La)EcIs5>OJNbV26#`e|u82 z6y~hAyRdta{z)xu{irRzUU8gQ&U?W=z(U#$*=yHpulpRmRVNU%H}}Uf3wrO%_1<8@ z&dA_x*BZO;VdBSI(CbJMgM^u?Qn3a$Vc=qL?cKK}etoNF+@sH=GZOeEL+<)=OcVzm zWbAx@D&ColK3puda?+JMJh`YCl0+xsRtOY>_DYT@75sI1Ft5#=$E9|L_^-m?rhFO7zQDHar zW483o@^eH}YxoJ4am%;brG&38q<{%w)LiYHj|`oEH7QG)F~m1|pCw|>I5oTQJ$uLv z-U~_OHfO$pgKZpp+0k|#jDA0mL;fThA7H6ZYS@U(8oVW%}k?RavDM$YlOen z?qS{4OdXMwdoo`n5v8daA}~Q{ViQ$~TbY=7dIYX9346XSTG?U#50(wm^3N@9WcvR| z-TpPSCZgc=^O+)XZ(cie^Ltwk`c%AOWV>4|Ns@>rqFKT%ShcvA;tiwPZ|iW7IzHFx zork+eUbv_BlFjn{(wh=b4~MctMHg4nyHbhrrE-E#CGy+N?D-ce59S2REZA2Ggw3`X znf8OvgUGZGPb1Uu-Wz8AJfq^#IdNBCHi+}`s!514dKvm&yfvLdyJTmcTV6oR?u{X1 zKxsTL5*=lWvGT-EnfEu^H3-;i^wkjv$r^!N7y@!^jN2CO7*e0C7^v~}``f-5=*|+N z?KWTT zr>Vc*G*S>aHt5$Qu9L7^ySp7KLER;->ffgAbd9konFqkW<%mv}wMw|iJ$|4ehj3$z z_w7`ydSvoG93W5(zkH&yPAMa9-$GXdVS4TYnU9K z*wO(GJCd?YImcIzKu)U^)I7lU9!Y8&ZxLI*~8RyU(J6=GkYSVM2C4T~bMF z#g!9WT+r<}4rDQ!7_f{7E`=J%U5c582Li7fB z<}VdRyq`WYb*2q1Q!kbx0!W{==Z_v+$lONbwtfG z-|q~Pp9wBcp71YkVX3TA@qd$qofyUu&73E}yR{ynm-*PkPxICH{Fpjj195leF>2x7 zDW7-I*W?a!YteF?p;KG^#=E;$m)>^5Zstia*3OLtmoKr?Ho5NUdn3(QLR~OO7MY#3 z-F5j8Ud$#@oZrOo1yg6QQa;WN{RP|QO7b-qL-+5Z^RZjDb5&x??<3nQ5T5!GvtRK- zQ({)3)*m|k^RLTAT7$S2j~_1l}>EQZZS?1D`+bIZo98C@f0e*MC!q;@)nu~pQQ zEWT~6`JO)kPpnPuqgcNeK6lvG;vVvT>4Xlcp~M64k~g_-czYtNe5&T-`_MH^uxruo ztDgieqmVU^F1G8+SF`DL9vWJLOim4 zvS-cA>sZAaAr5C;lV^)1-Z0veHfazZ4zT$?j-0d)^;YBmXPvqJ8;$37>&zKvYJrJK^ zvN<&+!0Q{?eo2P|ZH7BiiH_Kh$EwebS6Kz(#i(98TpjST2(_;5JU9}kb=ov^0ChZt z2L4aA{*Qjne=RBg(M|hLpSAiNbxVGKFPl{YzoVc&`Mx9<_iSY5MquN0`r^nv_D~zv zkb+-M3H8WbZ4?BRam`Ik*`e?H)x`XanEB3H%!d$u z$9CRiF}zQ{cBRIA?yRRjEdxsE?NXSLS6|PQluL~k3=uZwKm2tP5D`(*XF|p<9D_eM zI(zedJIyOudK7E^LRHbwx~Jd;1Wb<;PG@I~*RDR#iO48Tn*tR>*@?; zv~7Wuf|(9Q3=`^;0!3c_6*@g#I@=5mIkw}ECKgM*EcjDyC$Eh!LBykpX!OB*Hr>(v zICDvJIBlGG@thT(=ZA9P*{71)^7&=X>LqdUY}O2I>^7&?4qfl2x?fJ%R{&SfO1HqJ%b@0k0iAo>TdaKgOU*!Jy;D^e3P zjLwL3CECdLnOo*K(l=H_8ZqeVcJP=?gR}674^0z+sE(;kF3knnt`1zic>I0#N4AT) zb-@_JH)G;3owCEs$hs<#HD{IX<1Ow+s}VCdMTJgxXmPQGbuzn=m6%Nk5-Y_ID(eaF z+$K?F5Wn)4SU%djTx<{oouxa(1{SwpA zBo2P=)XSL!)GZsO=TE%a5&*0_p7a;(+;3&cR1^x-o#oAP&dIisY0SAeO7YmnK?Knv zA?-0JtCL_Z7xzeZZLC~S$zvh%PD9Ww-1?O8krwYt7Vl~bqqK8!(k(;VsRVMN19sjY z;(L+P_=y;Hxjm7+MNxWuO1NE=^eGYY#VQjY9#zRcWZP@rz;=nt`7{q2hupB6 z@*c5R{_*3!J0823LD$_ZmKbhnDHPTIVWaDXeSnfpjHjB-mDHC%d%pzjvG4+6h%{E^ zGl~58WZ99kTf_rQ7m;w_OVCSrj8zhIf?k4%z~mXL;U7PKe8}?etzY@@X`rY`bbdwX zI??o4)s?<`qe>mcQ8ir+Z|P7>)eHgk`-bfYyO`u;tB_Ra76nxTW@e^R(r3O+Z3ug( zeO?ev;IRuT=-x_Ms}I%+W~Y(f%NOyLSUpeaJHoLGdM^2_-rOH|D*jk`X1q(zCf%id zos=pc(ITPeGD%tJ7c1ctB6KrZC8^-avIZVAz2> z+ovr?Hb~oN)E0Y2*R6iX^dfX$VZMtF;xmsQR@q>t>suXBxA@q|wZpB(mQ?A*9w`W1 zx-}iJQdH(P(_j%NW5hmS*>KFeipOd5LFX%tKiKNUPwa)VWowkNY505(I#{c+n`sD6 zP?9Yau=zevio=?A#AiF_H`vNmT+hHuavb1QjP zrmfY7_2G@&&_lC#KjU!|ZkYYs7!sy#>ubhRS{=u``XEL<*OuYo7aWRy?sQ)*;fMyp6yFXM`)#Ef{Zvu(h766K3u@knLeHxI8VX+pi}g{Hfhfeds|~9qD{hxxhtt{70!V+q!HcDhc(J3T z(Y2ZCIVYG?Lf@V8{v-*}h@5#k?}yAFr_Q%&h9Rtv=_E|{;}ihszCLpFR{;8WRZVj@ zoj*+buhOBeDi4E^GOO?MC!sf%NC6rplqs^IKFsv&3Na-2%MJ|qwN?R<8!fMysQ_z7 z6*xtY$H>Pf?{lpx<7Pw)X+figG6gpPAMvaxtEilxUZk+8wuW!b`v52|+y-BLkn6{r z8aC3-_%Q(x9JER~I?;ai)6&T8Ek022ii;a01yMKZA)O3E-4r2VoD_6YHAM};uRUoh zNi(XfyjsKz*wktIK9ubWPt+Cb&_HYc2GU9g{Z*oJR!j2&iORxLuO|01FISxeC6C#% zm2MS@`7XQ^it?$)1cwFK_ddu8q=drpdHgVKpIi-8Z(Z8JHWwerw|s)3&i+fY_kEbO znb7pHg0G=D#<%`;W|FMJX;#_VkXw0bcao?rp-+Qpg*w2{FUdarkVxXt06Y{bk>Eg h`*KAh`^auYu6G5IH5W^7J^;{5N6SF-gSvI-{{pH2+hYI# literal 6541 zcma)AcU%)|mwppM7X_tV5J4=U(o|47K|<3@2T?i~QHp>R>1F7MbOjWpcLjnFq!&R2 zL3)#p(xsP#7Q#-v_kO!~_uKvLA4%Ssd1rFYd7kH#d7`PV%s|IM2LNDDRl#TjfPly! z8Y=iqR&!ZBd~m~4_l^t3(%Hhv`jLyZgFOK5ud|hmhfQA$Ulz9$u6rI7 zr?5e9Zs#E2f42JVPai}9;xS6cXE>syQD3WoR}?;q8%HN zV=j2B@{3|dH!dkx!OZM=wo&A;ND-!oov!5hOBEs1(cFW?H`Tm%E0Qmv+}POUo)%h* zg?2wG%%nz}Hroou+)A91ewrmufBkN2VXJOViSEqLSk?Cr<2u#ePYiLKJU%)!_}jkI zgX=c$F*n3HCIn2aoiKyKuY?%c6lhra>sYrUKAP1ibaqE`vAfem($)qWihi=X+!r*T zIn~e19lkbYU{)egMEurHYZ)b$`7)rty&ZK~nR2 z?qJ|#gXPc(wxexf6nvsXv}gQt+w3lIpfJVM+;L&_+F=3L#vew^P{dh2p}5kqBAJOf ztu18rOr;VEIHROuuTL!y{N;X-)1+CU^JHA_ec_YnSUs=ewgox8G2<}@y;=>qiRhps zmenN9{#ESH1O0gZaNY}A+1d+)Whvf`@*NHK5IMYoDIy;167cu!;5{iUnIQk;wcdSK#r zfX}=A_OZZrCC>-!xbOaQy6<66_O0&e>3hu^{r!5C9-BG6n;PKxs``+W=9Q{1@ALa@ z6xevXY@M96b8>U(hgcDsb@lPJ6z9$WD2@@#l%4|M<_+*X8fcn%dREPa?as_t{+vsv zLui)x<|MLP$}>K%rI!gdXK(N9+{Qc0Gm6vtN6YTDe6rCDAUNw|2WNhKdirwUT}{oB zQ=&E#K(qDs_I4AAHLvCT>Q+;^396Iu25D9Pc$bwDR+5g6PH?gxRR99gLcx$J0<>U` z6IF-;0OS*WbODq1hW3G#k}!`IfoGLLKv-D6QDkYc&_j;6MqzvwM(Fra5bS3V(;$chkXugx%KkD7ifrvK zEB{)=iyUbirv_+RcNn}(8URGXVP*fhh;4}S*_}z`68?C{*f{>xb%!e@-4M2(R5eA! z78ZW#={Y_(0Z|`2`s6GTm8_z175j96cl>?{P_?eOqzb-ZO$r2e-lMtk~PKO7LZM`qG_ zzPZ#&2xjFQ^4H(g{5Oj^iVtx)3Q=lmYIvDvW7)S7GroNJl0M-7JMi}H+x)iDjxbsu*cWXWJ*E?TeT(?MnY#}@Vo0y4 z(Zg+>rK}`td1QTdZKzhVKost=TH#!%9s`p$hEH@w>tT%H%*gL?Lr}x8lS0+#?0(breJFDWU`R+`v z;4l?J07~*)ErXyi4)I@^heJ%8IXb?ZnFy?5u=Vg5nh{DzFVES>lz-Qn!0PW;dTmUr z&OSD(c5Uxpars1V{{KfZS=Og&_2tt2`}Z@RJbCgrlCP4Ie(sNEw}&NJa`Bt=xU{@m z9K`;6B+0z}8_9nuZ*lUE^SxQWY5m5vd`b@u%$N}XC@}$G_I&diR905@3$h^D{{%Ee z+9U3czFbShiz@is%%BHDTChz$p*@=z>fuoo$uBB%IPfAb(~l1=)EmO4PqM_^;qd zq%w$F^XNYG_O4l#KT1zeuLWz|h6_M0mA_Lbi*jw0*$!SQ%!F$}0pFse$jKb@5L+W1 z-*h^fCofcv6gjHxh5|J2`Qw4MfhIaAC0`nlm9Z9T8^}zO7MpJN;6&G&Xc)`N%C2}i z1Ep^rIuy%P66>zlG(8arbX^Us33QzmoJyK;xVwx1OvdDd*pl^kS&(Aw+35K*D=g`m57vZaN z`g9TIBD%>7jk^K1V?`Ip0?nYK`LlBVF9QAvi(DlL4vyrbl!qz|ASAm9#)L~;!_|e0 z_G__A#b>c>in%XTIROwIvkK%Tifr=IRRz0~wBX_z3REbQbG|MD5v8R^DM$kvP7hy7 zqt!!07C3!0{r_n|T0o93K8e8co(Zg_9P19F8LY^0x$x7QEEwj0$mhSa9hm8+BN|jNuy>ClZCf>h zDM3^B<4Nfcu*ZHZlE+_spNFF`$uamm^#vUgL}>TYe4RQ2DzbS&o&xG&@7B;D4to)4 z=IdLh{k9)-iz_3C9;_wjaH7@rFW%sUoYyJSE);_aYa7e}4vRt`6*UH6i5G5L_*v{= z32pzg2*SjX5j^-=rgZ`s0Z46_O5Zwz7gPXHjcZ4xJxOu|N${y*ec+n!j$~vKTj=bi zGkcZOS(gO50-E(2gzT(N4Lk4hmu#KBZPT<^7>7 z%QpNXkAkR7QottV_AvJU#|s*ubc!rbI9LQ63N&?ohvRbeHQy^qCFE7&NmxS*4IU+- z`8=?99R7&rJSBft6qsauywDW{AUXp&T@zY5H5%ZqF=8whEQd>DV!zm>K=}x6F+gS> z68Vpoz+L0kDmR)F2~2tiD4Dy0OwenmjM4tyu(&7p!w;| zh%_S|D<$9_Uad0bEl8})A>Q7qOlON}o+pucL1dwJiPeaPTPgR9dFVVDiDB{=nOwhc z`5%kCQ3}X>4ov16Q9zZ-F5iEVqke`1$aaQ@-3}6idAMP^qK9Us_lsncHfIb2>Z)h+LU2sE;;GQGMJzVzvlTd=B80fm82)bT@;-{THzPc!AW*h}s zjuK~J62o5iq`hGxC%$}gWd0P@uY1n}Q9QB>hXqS;@0e5-K&Hd{`~}La{7Wx#d??Kl zli+Yx;9r%v0Z?pbZ!aY2_yZ%fXku!b2-l$UzTe5|$-iRF)WD$C^5E*#t8gu56AOjH zmCP#Sn?xtE()4~zvDw+@to^EZKt!6`amZB{@!PwrnHOuHL8o=!_V;n-DP^Xwlzut^ zon|KO6&4g=`fbGC+GQYmw>MB1vRZ8Zb{W(nun-_Hq6cf6L+*%(JlAwfe!D^1oV z{UVo#!q&fe!p&x0oNl`=rvF)sYrOtGAuhohE>z*qwdSHsh@!l|}T*F^2|!cPuO{;^DvGuj4G}w~-lyrx3+^`$bn4gi011 z4`-CveYLg-BfGxD_QTm7>Iqpy8d}adh_4+Vx#a0nJasJYmJ~NBQSt1zyIYE}BMv$9 zI}a46;}(71xe~b$np^a=T_aCU@ZGbv&R^`D-aVi0ii&dTDDb;<@0O84s6A10;p2IHg-V@G8%<=9ex z199I~3Ns%cpS-FqJpQqS7ong@25G<|p^%%sye+kOu32t}Poj~OwmF(xxjBmK?MGAR5zT-=>SL`^t2Jl1z1Kdh3}!eIGd+l04k!yrtHYgZ z2ODG6ZkfLKDP+6|0&~NN6-a_q6P2oegZJtLlD5I@muO7TfAwv@YBV{|{c8aaj%Ifl zQF4hj^nMe|uguwxiY1(-2}sd7XZZO9oIPizY0c)A#f-B=l^|8})@sIH*f z{qR{rs;b}PyVZ)3ryqT93{F3F+F`8flMBsS!kix3L45eLpM*hYiz)+@+<17uv0SJu z6wS2fv3&O`+p}}V6^~9!`VuR=NxO3t2P9i;?fK|aGQ6ls!Dxy}spgU0+9~|Zf-=)? zGw-$M29!9RmR#1Yejf2rnx=NL{^)1ly?b|)=yliC$<_5*t3lea4JlPBLE_YejCaL@ zW%e%fhYtlLJvOqWy>~PTOG9Vim?nlE<8J-l6l&@0tn*{_lj*BOInON>Uw9B6TeY*Z zv#v($YGFvHLm!7T>lWuctS_+3{YeAa;A^jQMsCY3+%ArejMO{pX|2sM;!uo*m3>_o zJ2+L}aXT<=^=H~_0P)jPHlN`3@mjA-PoF+z(LX&|x;fYBMob;8^QkVjc#k{Cc>j31 zCDzKqB6DNyd(#+W82$boqj|pIfG`|0X?@RV^+8n4C4R15bx*k`-h3-f!g{xWsNTLe zZ=6x_b(ZOBIsG6uVG|6tX5*%*oYx`gz-o28Hc4p5|A4sJ=``8kpMZ^23S7Q4J^+i| zo<8XBq(gmyRTG8&IoJ$|dbB@XH2sw?vH!q0zp zu)kd{a4CZaSLeePA`?>49DNB!RTyVX<%y$ixYekGe#*PQ*6bDmZ{J=`%+*M3O;-pt zs7t*K!G$!h+v-RecA$I$Yd^v<%l?NhBAs6~vf{*%;fk?^fC;NUA8b>l zWJrZqF1_P*Egsdj6X?u!5?}vMuj)hlpBpcywbl2h3*GM(hlz82A2E6)?X!oQ@oGPe zT0Lt#_|$Nsj$SC*9H!V&ZrPfVT4(lkb_9>AGACNPz3JPxJKM+Z%HP#Fmt)0 z;QfBzi_B>--z;gr%2ZDn-Gm z_~mL5x@KTl)j`>3#MM_*vpbO~%V||QdogwP#<-rIrWe9#zAJr9>hsRNb^T%nqHm9| z-*0Ewbdo|7S2Tv+e~B+;3VGGfb7yI8u4L(jo+E;ZjaPBvvH|RH(%fNY5XWO zl_Q%bV5jtx8MTsCepvVJot8Dpq-SHUGqv2?0ct-q zRrmWkT>9W)^p+4&5#w9GSsDzFZ6XD2CmIgL$NL;~5)3_&Yb%!97vZLud8M3pLpW*x z|3G=M`)hThX%GN0E1hsc#?N{k8)omKgh!Y^Urp#?vbIu~`B|pUflN_ZM8Ri2+NR>; zA?D{6ya2Q!N(F_r#Lou!&8_O+9OVX@%7$ReIkZy;fGv4L5Ee!}ccdws5G>V3(rzRH z=q3j|Nl!wb!Hy0i>gqDRTf#wp&;bI(<0u=ZI|dUNtu7JyqRVa9cBAM6H)_s!gOmPtF$@_KmVH1WrvS(7r#a_ddq9$ur`J_2p_dY=^%yjTw5t zlVH!aqv%&38%?vy8Z<5v-4d?WQbMD@h7&{#_M`PBjKN!I_-$a)pBK8QVz5!JP!77H zn^3wO*`TQAAkRsTU5s#*KXMIz$9yD}I)Dkb1_d{j4SD8N0hjF%fd5*{3DA2vnl%NU zkU~6=R;lCAN;pVU8E^zodO2~CckHknNZ@W2<8KBZi@>+cH>#Kc5t|sG@_HPyrU&T6 z0z{X_F>bgmhLC}`5o0PZz83h{a{{QDo%RUa87LjdG1Ap9iJYojga-$ps;G`Bx?vXZ EANtIz@c;k-