diff --git a/bin/tgui-fix.cmd b/bin/tgui-fix.cmd new file mode 100644 index 0000000000..f2844408ef --- /dev/null +++ b/bin/tgui-fix.cmd @@ -0,0 +1,2 @@ +@echo off +call "%~dp0\..\tools\build\build.bat" --wait-on-error tgui-fix %* diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index 9478891464..77e1e2d74a 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -341,6 +341,7 @@ #define SPECIES_REPLICANT "Replicant" #define SPECIES_REPLICANT_ALPHA "Alpha Replicant" #define SPECIES_REPLICANT_BETA "Beta Replicant" +#define SPECIES_REPLICANT_CREW "Gamma Replicant" // Used to seperate simple animals by ""intelligence"". #define SA_PLANT 1 diff --git a/code/_helpers/type2type.dm b/code/_helpers/type2type.dm index 908618128c..c9dffc7c2b 100644 --- a/code/_helpers/type2type.dm +++ b/code/_helpers/type2type.dm @@ -574,3 +574,22 @@ continue if(!isnull(path)) . += path + +/proc/path2text_list(list/L) + . = list() + for(var/key in L) + var/text = "[key]" + if(!isnull(L[text])) + .[text] = L[text] + continue + if(!isnull(L[key])) + .[text] = L[key] + continue + if(!isnull(text)) + .[text] = "" + +/proc/check_list_copy(var/i) + if(islist(i)) + var/list/l = i + return l.Copy() + return i diff --git a/code/datums/looping_sounds/_looping_sound.dm b/code/datums/looping_sounds/_looping_sound.dm index 3b48fc1a84..d842dd8336 100644 --- a/code/datums/looping_sounds/_looping_sound.dm +++ b/code/datums/looping_sounds/_looping_sound.dm @@ -100,7 +100,7 @@ if(direct) if(ismob(thing)) var/mob/M = thing - if(M.check_sound_preference(pref_check)) + if(!M.check_sound_preference(pref_check)) continue SEND_SOUND(thing, S) else diff --git a/code/datums/supplypacks/engineering.dm b/code/datums/supplypacks/engineering.dm index 1289600458..f0a8e4d4b7 100644 --- a/code/datums/supplypacks/engineering.dm +++ b/code/datums/supplypacks/engineering.dm @@ -330,6 +330,13 @@ containertype = /obj/structure/closet/crate/einstein contains = list(/obj/item/circuitboard/fusion_fuel_compressor) +/datum/supply_pack/eng/deuterium + name = "Deuterium crate" + cost = 50 + containername = "Deuterium crate" + containertype = /obj/structure/closet/crate/einstein + contains = list(/obj/fiftyspawner/deuterium) + /datum/supply_pack/eng/tritium name = "Tritium crate" cost = 75 diff --git a/code/game/objects/effects/decals/posters/posters.dm b/code/game/objects/effects/decals/posters/posters.dm index a096c50423..ea3f93589b 100644 --- a/code/game/objects/effects/decals/posters/posters.dm +++ b/code/game/objects/effects/decals/posters/posters.dm @@ -3,7 +3,7 @@ if(exact) return decls_repository.get_decl(path) else - var/list/L = decls_repository.get_decls_of_type(path) + var/list/L = decls_repository.get_decls_of_subtype(path) // Use get_decls_of_subtype instead of get_decls_of_type, or it will get the map placing icon_state return L[pick(L)] return null diff --git a/code/game/objects/items/devices/scanners/sleevemate.dm b/code/game/objects/items/devices/scanners/sleevemate.dm index b9c025a9a0..563d4ef37d 100644 --- a/code/game/objects/items/devices/scanners/sleevemate.dm +++ b/code/game/objects/items/devices/scanners/sleevemate.dm @@ -72,6 +72,13 @@ var/global/mob/living/carbon/human/dummy/mannequin/sleevemate_mob return M = new_M + if(isrobot(M)) + var/mob/living/silicon/robot/R = M + var/obj/item/dogborg/sleeper/S = locate() in R.module.modules + if(S && S.patient) + scan_mob(S.patient, user) + return + if(ishuman(M)) scan_mob(M, user) else diff --git a/code/game/objects/structures/alien/alien.dm b/code/game/objects/structures/alien/alien.dm index b3808276c1..f161d8cfc3 100644 --- a/code/game/objects/structures/alien/alien.dm +++ b/code/game/objects/structures/alien/alien.dm @@ -81,6 +81,13 @@ health = 0 healthcheck() return + if(locate(/obj/item/organ/internal/xenos/resinspinner/replicant) in M.internal_organs) + if(!do_after(M, 3 SECONDS)) + return + visible_message ("[usr] strokes the [name] and it melts away!", 1) + health = 0 + healthcheck() + return visible_message("[usr] claws at the [name]!") health -= rand(5,10) healthcheck() diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index b4908911a1..0f7dad89e2 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -29,6 +29,7 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart) equippable_item_whitelist = typecacheof(list( /obj/item/storage/bag/trash, /obj/item/mop, + /obj/item/mop/advanced, /obj/item/reagent_containers/spray, /obj/item/lightreplacer, /obj/item/clothing/suit/caution, @@ -49,7 +50,7 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart) mybag = I setTguiIcon("mybag", mybag) - else if(istype(I, /obj/item/mop)) + else if(istype(I, /obj/item/mop) || istype(I, /obj/item/mop/advanced)) if(mymop) to_chat(user, "[src] already has \an [I].") return FALSE diff --git a/code/modules/admin/modify_robot.dm b/code/modules/admin/modify_robot.dm index b754c71948..a25fde3765 100644 --- a/code/modules/admin/modify_robot.dm +++ b/code/modules/admin/modify_robot.dm @@ -6,12 +6,14 @@ return var/datum/eventkit/modify_robot/modify_robot = new() - modify_robot.target = target + modify_robot.target = isrobot(target) ? target : null + modify_robot.selected_ai = target.is_slaved() modify_robot.tgui_interact(src.mob) /datum/eventkit/modify_robot var/mob/living/silicon/robot/target var/mob/living/silicon/robot/source + var/mob/living/silicon/ai/selected_ai var/ion_law = "IonLaw" var/zeroth_law = "ZerothLaw" var/inherent_law = "InherentLaw" @@ -49,6 +51,7 @@ .["target"]["name"] = target.name .["target"]["ckey"] = target.ckey .["target"]["module"] = target.module + .["target"]["emagged"] = target.emagged .["target"]["crisis_override"] = target.crisis_override .["target"]["active_restrictions"] = target.restrict_modules_to var/list/possible_restrictions = list() @@ -121,6 +124,15 @@ package_laws(., "supplied_laws", target.laws.supplied_laws) .["isAI"] = isAI(target) + .["isMalf"] = is_malf(user) + .["isSlaved"] = target.is_slaved() + var/list/active_ais = list() + for(var/mob/living/silicon/ai/ai in active_ais()) + if(!ai.loc) + continue + active_ais += list(list("displayText" = "[ai]", "value" = "\ref[ai]")) + .["active_ais"] = active_ais + .["selected_ai"] = selected_ai ? selected_ai.name : null var/list/channels = list() for(var/ch_name in target.law_channels()) @@ -144,14 +156,16 @@ target.real_name = params["new_name"] return TRUE if("select_target") - target = locate(params["new_target"]) - log_and_message_admins("changed robot modifictation target to [target]") + var/new_target = locate(params["new_target"]) + if(new_target != target) + target = locate(params["new_target"]) + log_and_message_admins("changed robot modifictation target to [target]") return TRUE if("toggle_crisis") target.crisis_override = !target.crisis_override return TRUE if("add_restriction") - target.restrict_modules_to += params["new_restriction"] + target.restrict_modules_to |= params["new_restriction"] return TRUE if("remove_restriction") target.restrict_modules_to -= params["rem_restriction"] @@ -498,6 +512,41 @@ if(usr != target) to_chat(usr, "Laws displayed.") return TRUE + if("select_ai") + selected_ai = locate(params["new_ai"]) + return TRUE + if("swap_sync") + var/new_ai = selected_ai ? selected_ai : select_active_ai_with_fewest_borgs() + if(new_ai) + target.lawupdate = 1 + target.connect_to_ai(new_ai) + return TRUE + if("disconnect_ai") + if(target.is_slaved()) + target.disconnect_from_ai() + target.lawupdate = 0 + return TRUE + if("toggle_emag") + if(target.emagged) + target.emagged = 0 + target.clear_supplied_laws() + target.clear_inherent_laws() + target.laws = new global.using_map.default_law_type + target.laws.show_laws(target) + target.hud_used.update_robot_modules_display() + else + target.emagged = 1 + target.lawupdate = 0 + target.disconnect_from_ai() + target.clear_supplied_laws() + target.clear_inherent_laws() + target.laws = new /datum/ai_laws/syndicate_override + if(target.bolt) + if(!target.bolt.malfunction) + target.bolt.malfunction = MALFUNCTION_PERMANENT + target.laws.show_laws(target) + target.hud_used.update_robot_modules_display() + return TRUE /datum/eventkit/modify_robot/proc/get_target_items(var/mob/user) var/list/target_items = list() @@ -650,3 +699,9 @@ package_laws(packaged_laws, "supplied_laws", ALs.supplied_laws) law_sets[++law_sets.len] = list("name" = ALs.name, "header" = ALs.law_header, "ref" = "\ref[ALs]","laws" = packaged_laws) return law_sets + +/datum/eventkit/modify_robot/proc/is_malf(var/mob/user) + return (is_admin(user) && !target.is_slaved()) || is_special_role(user) + +/datum/eventkit/modify_robot/proc/is_special_role(var/mob/user) + return user.mind.special_role ? TRUE : FALSE diff --git a/code/modules/admin/verbs/modify_robot.dm b/code/modules/admin/verbs/modify_robot.dm index c802d338a4..210530ca74 100644 --- a/code/modules/admin/verbs/modify_robot.dm +++ b/code/modules/admin/verbs/modify_robot.dm @@ -229,7 +229,7 @@ var/selected_radio_channel = tgui_input_list(usr, "Please select the radio channel to add", "Channels", available_channels) if(!selected_radio_channel || selected_radio_channel == "Cancel") break - if(selected_radio_channel == CHANNEL_SPECIAL_OPS) + if(selected_radio_channel == CHANNEL_SPECIAL_OPS || selected_radio_channel == CHANNEL_RESPONSE_TEAM) target.radio.centComm = 1 if(selected_radio_channel == CHANNEL_RAIDER) qdel(target.radio.keyslot) @@ -249,7 +249,7 @@ var/selected_radio_channel = tgui_input_list(usr, "Please select the radio channel to remove", "Channels", target.radio.channels) if(!selected_radio_channel || selected_radio_channel == "Cancel") break - if(selected_radio_channel == CHANNEL_SPECIAL_OPS) + if(selected_radio_channel == CHANNEL_SPECIAL_OPS || selected_radio_channel == CHANNEL_RESPONSE_TEAM && !(target.module.channels[CHANNEL_SPECIAL_OPS] || target.module.channels[CHANNEL_RESPONSE_TEAM])) target.radio.centComm = 0 target.module.channels -= selected_radio_channel if((selected_radio_channel == CHANNEL_MERCENARY || selected_radio_channel == CHANNEL_RAIDER) && !(target.module.channels[CHANNEL_RAIDER] || target.module.channels[CHANNEL_MERCENARY])) diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index f5035673a9..566b91fcd4 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -20,10 +20,11 @@ var/msg = "" + span_blue("[icon2html(cross, GLOB.admins)] " + span_purple("PRAY: ") + "[key_name(src, 1)] [ADMIN_QUE(src)] [ADMIN_PP(src)] [ADMIN_VV(src)] [ADMIN_SM(src)] ([admin_jump_link(src, src)]) [ADMIN_CA(src)] [ADMIN_SC(src)] [ADMIN_SMITE(src)]: [raw_msg]") + "" for(var/client/C in GLOB.admins) - if(R_ADMIN|R_EVENT & C.holder.rights) - if(C.prefs?.read_preference(/datum/preference/toggle/show_chat_prayers)) - to_chat(C, msg, type = MESSAGE_TYPE_PRAYER, confidential = TRUE) - C << 'sound/effects/ding.ogg' + if(!check_rights(R_ADMIN, 0, C)) + continue + if(C.prefs?.read_preference(/datum/preference/toggle/show_chat_prayers)) + to_chat(C, msg, type = MESSAGE_TYPE_PRAYER, confidential = TRUE) + C << 'sound/effects/ding.ogg' to_chat(usr, "Your prayers have been received by the gods.", confidential = TRUE) feedback_add_details("admin_verb","PR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -32,13 +33,15 @@ /proc/CentCom_announce(var/msg, var/mob/Sender, var/iamessage) msg = span_blue("" + span_orange("[uppertext(using_map.boss_short)]M[iamessage ? " IA" : ""]:") + "[key_name(Sender, 1)] [ADMIN_PP(Sender)] [ADMIN_VV(Sender)] [ADMIN_SM(Sender)] ([admin_jump_link(Sender)]) [ADMIN_CA(Sender)] [ADMIN_BSA(Sender)] [ADMIN_CENTCOM_REPLY(Sender)]: [msg]") for(var/client/C in GLOB.admins) //VOREStation Edit - GLOB admins - if(R_ADMIN|R_EVENT & C.holder.rights) - to_chat(C,msg) - C << 'sound/machines/signal.ogg' + if(!check_rights(R_ADMIN, 0, C)) + continue + to_chat(C,msg) + C << 'sound/machines/signal.ogg' /proc/Syndicate_announce(var/msg, var/mob/Sender) msg = span_blue("" + span_crimson("ILLEGAL:") + "[key_name(Sender, 1)] [ADMIN_PP(Sender)] [ADMIN_VV(Sender)] [ADMIN_SM(Sender)] ([admin_jump_link(Sender)]) [ADMIN_CA(Sender)] [ADMIN_BSA(Sender)] [ADMIN_SYNDICATE_REPLY(Sender)]: [msg]") for(var/client/C in GLOB.admins) //VOREStation Edit - GLOB admins - if(R_ADMIN|R_EVENT & C.holder.rights) - to_chat(C,msg) - C << 'sound/machines/signal.ogg' + if(!check_rights(R_ADMIN, 0, C)) + continue + to_chat(C,msg) + C << 'sound/machines/signal.ogg' diff --git a/code/modules/awaymissions/redgate.dm b/code/modules/awaymissions/redgate.dm index 4b38f1d417..28b3a7d35f 100644 --- a/code/modules/awaymissions/redgate.dm +++ b/code/modules/awaymissions/redgate.dm @@ -1763,3 +1763,37 @@ //todo; throw the ball in a random direction src.visible_message("\The [ball] bounces off \the [src]'s rim!") global_announcer.autosay("[ball.last_holder] threw the HYPERball and +missed!+ |Oooh!|","Laserdome Announcer","Entertainment") + +/obj/structure/prop/machine/biosyphon/laserdome + name = "Laserdome Orientation Holo" + desc = {"This device is holoprojecting a wall of flickering text into the air. It seems to be incomprehensible gibberish at first, perhaps an alien language, but the longer you stare the more it starts to make sense, slowly coalescing into coherent sentences in your preferred language. The overall word choice is a little eclectic or unusual at times, and some words remain impossible for you to decipher, but you get the gist pretty quickly. It reads:
+ MANY GREETINGS, BRAVE VISITOR! + THE (LIGHT AMPLIFIED BY STIMULATED EMISSION OF RADIATION) DOME IS FINEST PHYSICAL EXERCISE AND RECREATIONAL FACILITY LOCATED UPON THIS RELATIVE SIDE OF THE \[illegible\] SUPERMASSIVE OBSIDIAN VOID. + OUR GREAT BRAINS HERE AT THE \[incomprehensible\] HAPPY FUN TIME CORPORATION ARE SURE YOU WILL DEFINITELY MUCH ENJOY PARTAKING IN THE SIGHTS AND SOUNDS OF OUR ESTABLISHMENT. + EVEN IF YOU DO NOT WISH TO BE (OR ARE PHYSICALLY INCAPABLE OF) TAKING PART IN THE ACCELERATED LIGHT GAMES, PLEASE WITNESS OUR HEROIC GLADIATORS BATTLE FOR YOUR ENJOYMENT, AND VISIT LOCAL SERVICES SUCH AS THE \[incoherent\] ACCELERATED SUSTENANCE JOINT. + PLEASE TO BE FOLLOWINGS FLOOR-BASED POINTED INDICATORS TOWARDS PLACEMENTS OF INTERESTING! AND BE SURE TO BE TAKINGS FREE RADIO HEADSET CHIP TO BE HEARING ARENA ANNOUNCER! + THANKINGS YOU FOR YOUR PATRONAGE!!! + (p.s. please to be cleanings up after selves, do not leave messes on concourse, thankings you again muchly)"} + +/obj/structure/prop/machine/biosyphon/laserdome/hyperball + name = "Laserdome HYPERball Orientation Holo" + desc = {"This device is holoprojecting a wall of flickering text into the air. It seems to be incomprehensible gibberish at first, perhaps an alien language, but the longer you stare the more it starts to make sense, slowly coalescing into coherent sentences in your preferred language. The overall word choice is a little eclectic or unusual at times, and some words remain impossible for you to decipher, but you get the gist pretty quickly. It reads:
+ RULES OF HYPERBALL ARE SIMPLE!
+ TAKE BALL, SLAM-DUNKIFY INTO OPPOSING TEAM GOAL! + THREE POINTS AWARD FOR THROW (BUT WATCH OUT, CAN MISS)! + SEVEN POINTS IF ENDUNKENING IS BY HAND! + POINTS AM DEDUCT IF OWN-DUNKING! + FIRST TEAM TO TWENTY-AND-ONE POINTS IS WIN! + MUST WEAR TEAM PLATINGS FOR SCORINGS TO COUNT! + GOOD LUCK!!!"} + +/obj/structure/prop/machine/biosyphon/laserdome/flagcap + name = "Laserdome Capture-The-Flag Orientation Holo" + desc = {"This device is holoprojecting a wall of flickering text into the air. It seems to be incomprehensible gibberish at first, perhaps an alien language, but the longer you stare the more it starts to make sense, slowly coalescing into coherent sentences in your preferred language. The overall word choice is a little eclectic or unusual at times, and some words remain impossible for you to decipher, but you get the gist pretty quickly. It reads:
+ RULES OF CAPTURING FLAG ARE SIMPLE! + GO TO ENEMY BASE, TAKE THEIR FLAG, BRING BACK TO OWN BASE! + NO SCORE IF ENEMY TEAM HAS FLAG, SO PROTECT OWN FLAG! + RETURN OWN FLAG TO BASE BY TOUCHINGS! + FIRST TEAM TO THREE CAPTURES IS WIN! + MUST WEAR TEAM PLATINGS FOR SCORINGS TO COUNT! + GOOD LUCK!!!"} diff --git a/code/modules/client/preference_setup/general/02_language.dm b/code/modules/client/preference_setup/general/02_language.dm index 4c7f408239..eee2513420 100644 --- a/code/modules/client/preference_setup/general/02_language.dm +++ b/code/modules/client/preference_setup/general/02_language.dm @@ -8,18 +8,19 @@ var/static/list/forbidden_prefixes = list(";", ":", ".", "!", "*", "^", "-") /datum/category_item/player_setup_item/general/language/load_character(list/save_data) - pref.alternate_languages = save_data["language"] + pref.alternate_languages = check_list_copy(save_data["language"]) pref.extra_languages = save_data["extra_languages"] pref.language_prefixes = save_data["language_prefixes"] + pref.species = save_data["species"] pref.preferred_language = save_data["preflang"] - pref.language_custom_keys = save_data["language_custom_keys"] + pref.language_custom_keys = check_list_copy(save_data["language_custom_keys"]) /datum/category_item/player_setup_item/general/language/save_character(list/save_data) - save_data["language"] = pref.alternate_languages + save_data["language"] = check_list_copy(pref.alternate_languages) save_data["extra_languages"] = pref.extra_languages save_data["language_prefixes"] = pref.language_prefixes save_data["language_custom_keys"] = pref.language_custom_keys - save_data["preflang"] = pref.preferred_language + save_data["preflang"] = check_list_copy(pref.preferred_language) /datum/category_item/player_setup_item/general/language/sanitize_character() if(!islist(pref.alternate_languages)) diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index 4e2a44a046..a71049c51e 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -113,16 +113,20 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.b_eyes = save_data["eyes_blue"] pref.b_type = save_data["b_type"] pref.disabilities = save_data["disabilities"] - pref.organ_data = save_data["organ_data"] - pref.rlimb_data = save_data["rlimb_data"] - pref.body_markings = save_data["body_markings"] + pref.organ_data = check_list_copy(save_data["organ_data"]) + pref.rlimb_data = check_list_copy(save_data["rlimb_data"]) + pref.body_markings = check_list_copy(save_data["body_markings"]) + for(var/i in pref.body_markings) + pref.body_markings[i] = check_list_copy(pref.body_markings[i]) + for(var/j in pref.body_markings[i]) + pref.body_markings[i][j] = check_list_copy(pref.body_markings[i][j]) pref.synth_color = save_data["synth_color"] pref.r_synth = save_data["synth_red"] pref.g_synth = save_data["synth_green"] pref.b_synth = save_data["synth_blue"] pref.synth_markings = save_data["synth_markings"] pref.bgstate = save_data["bgstate"] - pref.body_descriptors = save_data["body_descriptors"] + pref.body_descriptors = check_list_copy(save_data["body_descriptors"]) pref.ear_style = save_data["ear_style"] pref.r_ears = save_data["r_ears"] pref.g_ears = save_data["g_ears"] @@ -178,16 +182,21 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O save_data["eyes_blue"] = pref.b_eyes save_data["b_type"] = pref.b_type save_data["disabilities"] = pref.disabilities - save_data["organ_data"] = pref.organ_data - save_data["rlimb_data"] = pref.rlimb_data - save_data["body_markings"] = pref.body_markings + save_data["organ_data"] = check_list_copy(pref.organ_data) + save_data["rlimb_data"] = check_list_copy(pref.rlimb_data) + var/list/body_markings = check_list_copy(pref.body_markings) + for(var/i in pref.body_markings) + body_markings[i] = check_list_copy(body_markings[i]) + for(var/j in body_markings[i]) + body_markings[i][j] = check_list_copy(body_markings[i][j]) + save_data["body_markings"] = body_markings save_data["synth_color"] = pref.synth_color save_data["synth_red"] = pref.r_synth save_data["synth_green"] = pref.g_synth save_data["synth_blue"] = pref.b_synth save_data["synth_markings"] = pref.synth_markings save_data["bgstate"] = pref.bgstate - save_data["body_descriptors"] = pref.body_descriptors + save_data["body_descriptors"] = check_list_copy(pref.body_descriptors) save_data["ear_style"] = pref.ear_style save_data["r_ears"] = pref.r_ears save_data["g_ears"] = pref.g_ears diff --git a/code/modules/client/preference_setup/general/04_equipment.dm b/code/modules/client/preference_setup/general/04_equipment.dm index 57146e5832..554885046c 100644 --- a/code/modules/client/preference_setup/general/04_equipment.dm +++ b/code/modules/client/preference_setup/general/04_equipment.dm @@ -7,8 +7,10 @@ sort_order = 4 /datum/category_item/player_setup_item/general/equipment/load_character(list/save_data) - pref.all_underwear = save_data["all_underwear"] - pref.all_underwear_metadata = save_data["all_underwear_metadata"] + pref.all_underwear = check_list_copy(save_data["all_underwear"]) + pref.all_underwear_metadata = check_list_copy(save_data["all_underwear_metadata"]) + for(var/i in pref.all_underwear_metadata) + pref.all_underwear_metadata[i] = path2text_list(pref.all_underwear_metadata[i]) pref.backbag = save_data["backbag"] pref.pdachoice = save_data["pdachoice"] pref.communicator_visibility = save_data["communicator_visibility"] @@ -17,7 +19,10 @@ /datum/category_item/player_setup_item/general/equipment/save_character(list/save_data) save_data["all_underwear"] = pref.all_underwear - save_data["all_underwear_metadata"] = pref.all_underwear_metadata + var/list/underwear = list() + for(var/i in pref.all_underwear_metadata) + underwear[i] = check_list_copy(pref.all_underwear_metadata[i]) + save_data["all_underwear_metadata"] = underwear save_data["backbag"] = pref.backbag save_data["pdachoice"] = pref.pdachoice save_data["communicator_visibility"] = pref.communicator_visibility diff --git a/code/modules/client/preference_setup/loadout/gear_tweaks.dm b/code/modules/client/preference_setup/loadout/gear_tweaks.dm index b479962206..58111139a1 100644 --- a/code/modules/client/preference_setup/loadout/gear_tweaks.dm +++ b/code/modules/client/preference_setup/loadout/gear_tweaks.dm @@ -151,6 +151,11 @@ GLOBAL_DATUM_INIT(gear_tweak_free_matrix_recolor, /datum/gear_tweak/matrix_recol continue else path = contents[metadata[i]] + if(!path) + var/mob/user = ismob(I.loc) ? I.loc : I.loc?.loc + if(istype(user)) + to_chat(user, span_warning("The content \"[metadata[i]]\" from \"[I]\" does no longer exist and has not been loaded. Please replace it in the character setup.")) + continue new path(I) /* diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index fd92052458..71b42bcf97 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -46,17 +46,32 @@ var/list/gear_datums = list() var/current_tab = "General" /datum/category_item/player_setup_item/loadout/load_character(list/save_data) - pref.gear_list = save_data["gear_list"] + pref.gear_list = list() + var/all_gear = check_list_copy(save_data["gear_list"]) + for(var/i in all_gear) + var/list/entries = check_list_copy(all_gear["[i]"]) + for(var/j in entries) + entries["[j]"] = path2text_list(entries["[j]"]) + pref.gear_list["[i]"] = entries pref.gear_slot = save_data["gear_slot"] if(pref.gear_list!=null && pref.gear_slot!=null) pref.gear = pref.gear_list["[pref.gear_slot]"] else - pref.gear = save_data["gear"] + pref.gear = check_list_copy(save_data["gear"]) pref.gear_slot = 1 /datum/category_item/player_setup_item/loadout/save_character(list/save_data) pref.gear_list["[pref.gear_slot]"] = pref.gear - save_data["gear_list"] = pref.gear_list + var/list/all_gear = list() + var/worn_gear = check_list_copy(pref.gear_list) + for(var/i in worn_gear) + var/list/entries = check_list_copy(worn_gear["[i]"]) + if(!length(entries)) + entries = check_list_copy(worn_gear[i]) + for(var/j in entries) + entries["[j]"] = check_list_copy(entries["[j]"]) + all_gear["[i]"] = entries + save_data["gear_list"] = all_gear save_data["gear_slot"] = pref.gear_slot /datum/category_item/player_setup_item/loadout/proc/valid_gear_choices(var/max_cost) diff --git a/code/modules/client/preference_setup/occupation/occupation.dm b/code/modules/client/preference_setup/occupation/occupation.dm index 4557e0c5f5..3b5ec68c25 100644 --- a/code/modules/client/preference_setup/occupation/occupation.dm +++ b/code/modules/client/preference_setup/occupation/occupation.dm @@ -18,7 +18,7 @@ pref.job_talon_med = save_data["job_talon_med"] pref.job_talon_high = save_data["job_talon_high"] //VOREStation Add End - pref.player_alt_titles = save_data["player_alt_titles"] + pref.player_alt_titles = check_list_copy(save_data["player_alt_titles"]) /datum/category_item/player_setup_item/occupation/save_character(list/save_data) save_data["alternate_option"] = pref.alternate_option @@ -36,7 +36,7 @@ save_data["job_talon_med"] = pref.job_talon_med save_data["job_talon_high"] = pref.job_talon_high //VOREStation Add End - save_data["player_alt_titles"] = pref.player_alt_titles + save_data["player_alt_titles"] = check_list_copy(pref.player_alt_titles) /datum/category_item/player_setup_item/occupation/sanitize_character() pref.alternate_option = sanitize_integer(pref.alternate_option, 0, 2, initial(pref.alternate_option)) diff --git a/code/modules/client/preference_setup/skills/skills.dm b/code/modules/client/preference_setup/skills/skills.dm index eef0512acc..60e916241f 100644 --- a/code/modules/client/preference_setup/skills/skills.dm +++ b/code/modules/client/preference_setup/skills/skills.dm @@ -3,12 +3,12 @@ sort_order = 1 /datum/category_item/player_setup_item/skills/load_character(list/save_data) - pref.skills = save_data["skills"] + pref.skills = check_list_copy(save_data["skills"]) pref.used_skillpoints = save_data["used_skillpoints"] pref.skill_specialization = save_data["skill_specialization"] /datum/category_item/player_setup_item/skills/save_character(list/save_data) - save_data["skills"] = pref.skills + save_data["skills"] = check_list_copy(pref.skills) save_data["used_skillpoints"] = pref.used_skillpoints save_data["skill_specialization"] = pref.skill_specialization diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm index da08d2b14e..b759c87b6b 100644 --- a/code/modules/client/preference_setup/vore/07_traits.dm +++ b/code/modules/client/preference_setup/vore/07_traits.dm @@ -125,15 +125,15 @@ var/global/list/valid_bloodreagents = list("default","iron","copper","phoron","s pref.custom_ask = save_data["custom_ask"] pref.custom_exclaim = save_data["custom_exclaim"] - pref.custom_heat = save_data["custom_heat"] - pref.custom_cold = save_data["custom_cold"] + pref.custom_heat = check_list_copy(save_data["custom_heat"]) + pref.custom_cold = check_list_copy(save_data["custom_cold"]) /datum/category_item/player_setup_item/vore/traits/save_character(list/save_data) save_data["custom_species"] = pref.custom_species save_data["custom_base"] = pref.custom_base - save_data["pos_traits"] = pref.pos_traits - save_data["neu_traits"] = pref.neu_traits - save_data["neg_traits"] = pref.neg_traits + save_data["pos_traits"] = check_list_copy(pref.pos_traits) + save_data["neu_traits"] = check_list_copy(pref.neu_traits) + save_data["neg_traits"] = check_list_copy(pref.neg_traits) save_data["blood_color"] = pref.blood_color save_data["blood_reagents"] = pref.blood_reagents @@ -146,8 +146,8 @@ var/global/list/valid_bloodreagents = list("default","iron","copper","phoron","s save_data["custom_ask"] = pref.custom_ask save_data["custom_exclaim"] = pref.custom_exclaim - save_data["custom_heat"] = pref.custom_heat - save_data["custom_cold"] = pref.custom_cold + save_data["custom_heat"] = check_list_copy(pref.custom_heat) + save_data["custom_cold"] = check_list_copy(pref.custom_cold) /datum/category_item/player_setup_item/vore/traits/sanitize_character() if(!pref.pos_traits) pref.pos_traits = list() diff --git a/code/modules/client/preference_setup/vore/08_nif.dm b/code/modules/client/preference_setup/vore/08_nif.dm index 2f4520b0a2..05d2481fa5 100644 --- a/code/modules/client/preference_setup/vore/08_nif.dm +++ b/code/modules/client/preference_setup/vore/08_nif.dm @@ -21,7 +21,7 @@ pref.nif_path = save_data_file["nif_path"] pref.nif_durability = save_data_file["nif_durability"] - pref.nif_savedata = save_data_file["nif_savedata"] + pref.nif_savedata = check_list_copy(save_data_file["nif_savedata"]) /datum/category_item/player_setup_item/vore/nif/save_character() var/datum/json_savefile/savefile = new /datum/json_savefile(nif_savefile_path(pref.client_ckey)) @@ -29,7 +29,7 @@ save_data_file["nif_path"] = pref.nif_path save_data_file["nif_durability"] = pref.nif_durability - save_data_file["nif_savedata"] = pref.nif_savedata + save_data_file["nif_savedata"] = check_list_copy(pref.nif_savedata) savefile.set_entry("character[pref.default_slot]", save_data_file) savefile.save() diff --git a/code/modules/materials/materials/organic/resin.dm b/code/modules/materials/materials/organic/resin.dm index ee9031e3e2..6c5cf20309 100644 --- a/code/modules/materials/materials/organic/resin.dm +++ b/code/modules/materials/materials/organic/resin.dm @@ -19,17 +19,27 @@ var/mob/living/carbon/M = user if(istype(M) && locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs) return TRUE + if(istype(M) && locate(/obj/item/organ/internal/xenos/resinspinner/replicant) in M.internal_organs) + return TRUE return FALSE /datum/material/resin/wall_touch_special(var/turf/simulated/wall/W, var/mob/living/L) var/mob/living/carbon/M = L if(istype(M) && locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs) - to_chat(M, "\The [W] shudders under your touch, starting to become porous.") + to_chat(M, "\The [W] shudders under your touch, starting to become porous.") playsound(W, 'sound/effects/attackblob.ogg', 50, 1) - if(do_after(L, 5 SECONDS)) - spawn(2) - playsound(W, 'sound/effects/attackblob.ogg', 100, 1) - W.dismantle_wall() + if(!do_after(L, 5 SECONDS)) + return FALSE + playsound(W, 'sound/effects/attackblob.ogg', 100, 1) + W.dismantle_wall() + return TRUE + if(istype(M) && locate(/obj/item/organ/internal/xenos/resinspinner/replicant) in M.internal_organs) + to_chat(M, "\The [W] shudders under your touch, starting to become porous.") + playsound(W, 'sound/effects/attackblob.ogg', 50, 1) + if(!do_after(L, 5 SECONDS)) + return FALSE + playsound(W, 'sound/effects/attackblob.ogg', 100, 1) + W.dismantle_wall() return TRUE return FALSE diff --git a/code/modules/mob/living/carbon/human/species/station/replicant_crew.dm b/code/modules/mob/living/carbon/human/species/station/replicant_crew.dm new file mode 100644 index 0000000000..d5d3ed3c04 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/station/replicant_crew.dm @@ -0,0 +1,50 @@ +/datum/species/shapeshifter/replicant/crew + name = SPECIES_REPLICANT_CREW + blurb = "Replicants are one of the few remaining living examples of precursor technology. \ + While their origins remain unknown, they are a facsimile of organic life held together by amalgamate, \ + rubbery flesh and anomalous organs. Whilst their original purpose is speculated to be used through cortical \ + mirrors as a way to 'wirelessly exist' in a different body via VR pods, this specific variant has had its \ + forking capabilities severed in exchange for a more stable, self-sufficient (albeit weaker) form." + + min_age = 18 + max_age = 200 + blood_color = "#C0C0C0" + + radiation_mod = 1.2 //Affected more by radiation + siemens_coefficient = 1.5 //Don't get electrocuted + + secondary_langs = list() // None by default + + has_organ = list( + O_HEART = /obj/item/organ/internal/heart/replicant/rage/crew, + O_LUNGS = /obj/item/organ/internal/lungs/replicant/mending/crew, + O_VOICE = /obj/item/organ/internal/voicebox/replicant, + O_LIVER = /obj/item/organ/internal/liver/replicant, + O_KIDNEYS = /obj/item/organ/internal/kidneys/replicant, + O_BRAIN = /obj/item/organ/internal/brain/replicant/torso, + O_EYES = /obj/item/organ/internal/eyes/replicant, + O_AREJECT = /obj/item/organ/internal/immunehub/replicant, + O_VENTC = /obj/item/organ/internal/metamorphgland/replicant, + O_PLASMA = /obj/item/organ/internal/xenos/plasmavessel/replicant/crew, + O_RESIN = /obj/item/organ/internal/xenos/resinspinner/replicant, + O_STOMACH = /obj/item/organ/internal/stomach, + O_INTESTINE = /obj/item/organ/internal/intestine + ) + + appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_HAIR_COLOR | HAS_UNDERWEAR | HAS_LIPS + spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE + color_mult = 1 + valid_transform_species = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_ALTEVIAN, SPECIES_TESHARI, SPECIES_MONKEY, SPECIES_LLEILL, SPECIES_VULPKANIN, SPECIES_ZORREN_HIGH, SPECIES_RAPALA, SPECIES_NEVREAN, SPECIES_VASILISSAN, SPECIES_AKULA) + + inherent_verbs = list( + /mob/living/carbon/human/proc/shapeshifter_select_shape, + /mob/living/carbon/human/proc/shapeshifter_select_colour, + /mob/living/carbon/human/proc/shapeshifter_select_hair, + /mob/living/carbon/human/proc/shapeshifter_select_hair_colors, + /mob/living/carbon/human/proc/shapeshifter_select_gender, + /mob/living/carbon/human/proc/shapeshifter_select_wings, + /mob/living/carbon/human/proc/shapeshifter_select_tail, + /mob/living/carbon/human/proc/shapeshifter_select_ears, + /mob/living/carbon/human/proc/shapeshifter_select_eye_colour, + /mob/living/proc/set_size + ) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm b/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm index a7c942de66..9f492b9421 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm @@ -354,14 +354,14 @@ I think I covered everything. body = pick(body_styles) overlay_colors["Body"] = pick(bodycolors) ears = pick(ear_styles) - overlay_colors["Ears"] = "#[get_random_colour(0, 100, 150)]" + overlay_colors["Ears"] = get_random_colour(0, 100, 150) mane = pick(mane_styles) overlay_colors["Mane"] = pick(bodycolors) horns = pick(horn_styles) var/list/horncolors = list("#000000","#151515","#303030","#606060","#808080","#AAAAAA","#CCCCCC","#EEEEEE","#FFFFFF") overlay_colors["Horns"] = pick(horncolors) eyes = pick(eye_styles) - overlay_colors["Eyes"] = "#[get_random_colour(1)]" + overlay_colors["Eyes"] = get_random_colour(1) var/image/I = image(icon, "dragon_under[under][resting? "-rest" : (vore_fullness? "-[vore_fullness]" : null)]", pixel_x = -48) I.color = overlay_colors["Underbelly"] diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index f40ea45613..99bb451410 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -398,7 +398,11 @@ var/list/organ_cache = list() rejecting = null if(istype(owner)) - var/datum/reagent/blood/organ_blood = locate(/datum/reagent/blood) in reagents.reagent_list + // VOREstation edit begin - Posibrains don't have blood reagents, so they crash this + var/datum/reagent/blood/organ_blood = null + if(reagents) + organ_blood = locate(/datum/reagent/blood) in reagents.reagent_list + // VOREstation edit end if(!organ_blood || !organ_blood.data["blood_DNA"]) owner.vessel.trans_to(src, 5, 1, 1) @@ -418,7 +422,11 @@ var/list/organ_cache = list() if(!istype(target)) return - var/datum/reagent/blood/transplant_blood = locate(/datum/reagent/blood) in reagents.reagent_list + // VOREstation edit begin - Posibrains don't have blood reagents, so they crash this + var/datum/reagent/blood/transplant_blood = null + if(reagents) + transplant_blood = locate(/datum/reagent/blood) in reagents.reagent_list + // VOREstation edit end transplant_data = list() if(!transplant_blood) transplant_data["species"] = target?.species.name diff --git a/code/modules/organs/subtypes/replicant.dm b/code/modules/organs/subtypes/replicant.dm index 51605ab098..2aaa4c6fd2 100644 --- a/code/modules/organs/subtypes/replicant.dm +++ b/code/modules/organs/subtypes/replicant.dm @@ -53,6 +53,20 @@ can_reject = FALSE icon_state = "plasma_grey" +/obj/item/organ/internal/xenos/plasmavessel/replicant/crew/handle_organ_proc_special() + if(!istype(owner)) + return + + var/modifier = 1 - 0.5 * is_bruised() + + if(owner.bloodstr.has_reagent("phoron")) + adjust_plasma(round(4 * modifier)) + + if(owner.ingested.has_reagent("phoron")) + adjust_plasma(round(2 * modifier)) + + adjust_plasma(2) //Make it a decent amount so people can actually build stuff without stealing all of medbays phoron + /obj/item/organ/internal/xenos/acidgland/replicant name = "replicant aerosol tubule" desc = "A long, rubbery tube that ends in a hard plastic-like bulb." @@ -152,6 +166,22 @@ owner.add_modifier(/datum/modifier/berserk, 20 SECONDS) take_damage(5) +/obj/item/organ/internal/heart/replicant/rage/crew/handle_organ_proc_special() + if(!owner) + return + + var/damage_tally = 0 + var/pain_tally = 0 + damage_tally += owner.getBruteLoss() + damage_tally += owner.getFireLoss() + pain_tally += owner.getHalLoss() + + if(((damage_tally >= 50 || prev_damage_tally >= 50) && prev_damage_tally - damage_tally < 0) || pain_tally >= 60) + if(world.time > last_activation_time + 60 MINUTES) //Can only be activated once every 60 minutes to prevent it being able to be spammed + last_activation_time = world.time + owner.add_modifier(/datum/modifier/berserk, 40 SECONDS) //Lasts a little longer so that it can actually get some use seeing as it activates so infrequently + take_damage(5) + /obj/item/organ/internal/lungs/replicant/mending name = "replicant hive lungs" desc = "A pair of rubbery sacs with large portions dedicated to honeycombed nanite filters." @@ -169,3 +199,15 @@ var/obj/item/organ/O = owner.internal_organs_by_name[o_tag] if(O) O.take_damage(-1 * modifier) + +/obj/item/organ/internal/lungs/replicant/mending/crew/handle_organ_proc_special() + if(!owner) + return + + var/modifier = 1 - (0.5 * is_bruised()) + + if(istype(owner)) + for(var/o_tag in repair_list) + var/obj/item/organ/O = owner.internal_organs_by_name[o_tag] + if(O) + O.take_damage(-0.01 * modifier) //Very very slow regen, but still cool flavour diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index c4b5d23608..9270fa422c 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -113,6 +113,8 @@ for(var/atom/movable/A in affecting) if(istype(A,/obj/effect/abstract)) // Flashlight's lights are not physical objects continue + if(istype(A,/obj/effect/decal/jan_hud)) // Ignore these too + continue if(!A.anchored) if(A.loc == src.loc) // prevents the object from being affected if it's not currently here. step(A,movedir) diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index 4d52873e1f..0fe2e47895 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -485,7 +485,17 @@ "You have installed \the [tool] into [target]'s [affected.name].") var/obj/item/mmi/M = tool - var/obj/item/organ/internal/mmi_holder/holder = new(target, 1) + // VOREstation edit begin - Select the proper mmi holder subtype based on the brain inserted + var/obj/item/organ/internal/mmi_holder/holder = null + if(istype(M,/obj/item/mmi/digital/posibrain/nano)) + holder = new /obj/item/organ/internal/mmi_holder/posibrain/nano(target, 1) + else if(istype(M,/obj/item/mmi/digital/posibrain)) + holder = new /obj/item/organ/internal/mmi_holder/posibrain(target, 1) + else if(istype(M,/obj/item/mmi/digital/robot)) + holder = new /obj/item/organ/internal/mmi_holder/robot(target, 1) + else + holder = new /obj/item/organ/internal/mmi_holder(target, 1) // Fallback to old behavior if organic MMI or if no subtype exists. + //VOREstation edit end target.internal_organs_by_name["brain"] = holder user.drop_from_inventory(tool) tool.loc = holder diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 0bf247f50b..760aa561a4 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -192,7 +192,14 @@ if(isnull(selected_surgery)) //They clicked 'cancel' return 1 selected_surgery = available_surgeries[selected_surgery] //Sets the name they selected to be the datum. - + // VOREstation edit start + if(istype(selected_surgery,/datum/surgery_step/generic/amputate)) + var/obj/item/organ/external/affected = M.get_organ(zone) + to_chat(user, "You are preparing to amputate \the [M]'s [affected.name]!") + if(!do_after(user, 3 SECONDS, M)) + to_chat(user, "You reconsider performing an amputation...") + return 0 + // VOREstation edit end M.op_stage.in_progress += zone selected_surgery.begin_step(user, M, zone, src) //start on it var/success = TRUE diff --git a/code/modules/ventcrawl/ventcrawl.dm b/code/modules/ventcrawl/ventcrawl.dm index 954bdd2278..098fc3c5ee 100644 --- a/code/modules/ventcrawl/ventcrawl.dm +++ b/code/modules/ventcrawl/ventcrawl.dm @@ -90,6 +90,13 @@ var/list/ventcrawl_machinery = list( /mob/living/carbon/human/is_allowed_vent_crawl_item(var/obj/item/carried_item) if(carried_item in organs) return 1 + if(species.name == SPECIES_REPLICANT_CREW) + if(istype(carried_item, /obj/item/clothing/under)) + return 1 //Allow them to not vent crawl naked + if(istype(carried_item, /obj/item)) + var/obj/item/I = carried_item + if(I.w_class <= 2) + return 1 //Allow them to carry items that fit in pockets return ..() /mob/living/proc/ventcrawl_carry() diff --git a/code/modules/vore/chat_healthbars.dm b/code/modules/vore/chat_healthbars.dm index 7442d99d59..0ddab45b7a 100644 --- a/code/modules/vore/chat_healthbars.dm +++ b/code/modules/vore/chat_healthbars.dm @@ -117,6 +117,16 @@ set category = "Abilities" var/nuffin = TRUE + + var/obj/belly/amprey = src.loc + + if(istype(amprey)) + var/datum/digest_mode/selective/DM_S = GLOB.digest_modes[DM_SELECT] + var/digest_mode = amprey.digest_mode == DM_SELECT ? DM_S.get_selective_mode(amprey, src) : amprey.digest_mode + to_chat(src, "[digest_mode] - You are in [amprey.owner]'s [amprey.name]:") + src.chat_healthbar(src, TRUE, TRUE) + nuffin = FALSE + for(var/obj/belly/b in vore_organs) if(!b.contents.len) continue @@ -127,10 +137,10 @@ if(!belly_announce) var/datum/digest_mode/selective/DM_S = GLOB.digest_modes[DM_SELECT] var/digest_mode = b.digest_mode == DM_SELECT ? DM_S.get_selective_mode(b, thing) : b.digest_mode - to_chat(src, "[digest_mode] - Within [b.name]:") //We only want to announce the belly if we found something + to_chat(src, "[digest_mode] - Within your [b.name]:") //We only want to announce the belly if we found something belly_announce = TRUE var/mob/living/ourmob = thing ourmob.chat_healthbar(src, TRUE, TRUE) nuffin = FALSE if(nuffin) - to_chat(src, "There are no mobs within any of your bellies to print health bars for.") + to_chat(src, "There are no mobs within any of your bellies to print health bars for, and you are not in a belly yourself.") diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 9497dc8dca..f2681de169 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -737,10 +737,10 @@ user.update_icon() var/mob/living/carbon/victim = prey // Check for afk vore - if(istype(victim) && !victim.client && !victim.ai_holder) + if(istype(victim) && !victim.client && !victim.ai_holder && victim.ckey) log_and_message_admins("[key_name_admin(pred)] ate [key_name_admin(prey)] whilst the prey was AFK ([pred ? ADMIN_JMP(pred) : "null"])") var/mob/living/carbon/victim_pred = pred // Check for afk vore - if(istype(victim_pred) && !victim_pred.client && !victim_pred.ai_holder) + if(istype(victim_pred) && !victim_pred.client && !victim_pred.ai_holder && victim_pred.ckey) log_and_message_admins("[key_name_admin(pred)] ate [key_name_admin(prey)] whilst the pred was AFK ([pred ? ADMIN_JMP(pred) : "null"])") // Inform Admins diff --git a/config/alienwhitelist.txt b/config/alienwhitelist.txt index 06a1d4e64f..72481432c8 100644 --- a/config/alienwhitelist.txt +++ b/config/alienwhitelist.txt @@ -114,6 +114,7 @@ mewchild - Vox milu - Xenochimera mrsebbi - Xenochimera mullins111 - Black-Eyed Shadekin +murchant - Teppi natje - Xenochimera nerdass - Protean newyorks - Protean @@ -126,6 +127,7 @@ ontejbjoav - Black-Eyed Shadekin ontejbjoav - Diona oreganovulgaris - Xenochimera oscarholmes - Protean +oscarholmes - Gamma Replicant owwy - Black-Eyed Shadekin oxenfree - Protean ozyton - Black-Eyed Shadekin diff --git a/config/jobwhitelist.txt b/config/jobwhitelist.txt index 9c4290b7c6..df8628cbbc 100644 --- a/config/jobwhitelist.txt +++ b/config/jobwhitelist.txt @@ -13,6 +13,7 @@ h0lysquirr3l - clown joey4298 - mime lm40 - clown losstinspess - mime +murchant - mime pastelprincedan - mime pastelprincedan - clown radishfriend - clown diff --git a/maps/redgate/laserdome.dmm b/maps/redgate/laserdome.dmm index 88a0b27e9a..ee6346f6cf 100644 --- a/maps/redgate/laserdome.dmm +++ b/maps/redgate/laserdome.dmm @@ -45,6 +45,12 @@ /obj/structure/closet/lasertag/red/laserdome, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/ctf_prep) +"awb" = ( +/obj/structure/table/rack, +/obj/random/drinksoft, +/obj/random/desatti_snacks, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby/store_1) "awn" = ( /obj/item/bikehorn/rubberducky, /turf/simulated/floor/tiled/white, @@ -81,6 +87,12 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/hyperball) +"baX" = ( +/obj/effect/floor_decal/industrial/arrows/blue{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/arena/hyperball) "bdI" = ( /obj/structure/table/bench/steel, /obj/effect/floor_decal/corner/blue{ @@ -101,11 +113,16 @@ /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/hbl_prep) "blC" = ( -/turf/simulated/floor/tiled/milspec/raised, -/area/redgate/laserdome/lobby) +/obj/structure/closet/secure_closet/freezer/fridge, +/turf/simulated/floor/tiled/eris/cafe, +/area/redgate/laserdome/lobby/restaurant) "bqk" = ( /turf/simulated/wall/tgmc/darkwall/deco3, /area/redgate/laserdome/arena/capture_the_flag) +"brx" = ( +/obj/effect/floor_decal/corner/red/full, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "brB" = ( /obj/structure/flag_decor/blue, /turf/simulated/wall/tgmc/darkwall, @@ -116,6 +133,10 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/capture_the_flag) +"bwE" = ( +/obj/structure/bed/chair/sofa/bench/left, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "bBP" = ( /obj/effect/floor_decal/corner/blue/diagonal, /turf/simulated/floor/tiled/milspec, @@ -124,13 +145,7 @@ /turf/simulated/wall/tgmc/darkwall/deco0, /area/redgate/laserdome/arena/hyperball) "bFM" = ( -/obj/structure/table/marble, -/obj/item/reagent_containers/food/snacks/chickenfillet, -/obj/item/reagent_containers/food/snacks/chickenfillet, -/obj/item/reagent_containers/food/snacks/chickenfillet, -/obj/item/reagent_containers/food/snacks/chickenfillet, -/obj/item/reagent_containers/food/snacks/chickenfillet, -/obj/item/reagent_containers/food/snacks/chickenfillet, +/obj/structure/closet/secure_closet/freezer/meat, /turf/simulated/floor/tiled/eris/cafe, /area/redgate/laserdome/lobby/restaurant) "bFV" = ( @@ -146,6 +161,21 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/capture_the_flag) +"bRk" = ( +/obj/structure/table/marble, +/obj/item/device/encryptionkey/ent, +/obj/item/device/encryptionkey/ent, +/obj/item/device/encryptionkey/ent, +/obj/item/device/encryptionkey/ent, +/obj/item/device/encryptionkey/ent, +/obj/item/device/encryptionkey/ent, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) +"bVo" = ( +/obj/structure/table/rack, +/obj/random/instrument, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby/store_1) "bXT" = ( /obj/effect/floor_decal/corner/red{ dir = 10 @@ -182,6 +212,28 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/hyperball) +"cIt" = ( +/obj/item/clothing/shoes/black, +/obj/item/clothing/under/color/red, +/obj/item/clothing/suit/redtag, +/obj/item/clothing/gloves/red, +/obj/item/clothing/head/redtag, +/mob/living/carbon/human/dummy/mannequin/autoequip{ + autorotate = 0; + name = "Laserdome Mannequin"; + real_name = "Laserdome Mannequin" + }, +/obj/effect/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) +"cIU" = ( +/obj/effect/floor_decal/arrow{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "cMi" = ( /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/ctf_prep) @@ -200,6 +252,20 @@ "cSX" = ( /turf/simulated/wall/tgmc/window/darkwall/reinf, /area/redgate/laserdome/arena/capture_the_flag) +"cUF" = ( +/obj/effect/floor_decal/industrial/arrows/blue{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/arena/capture_the_flag) +"cUN" = ( +/obj/structure/table/marble, +/obj/structure/prop/machine/random_radio{ + desc = "It looks like a radio, but all the markings are in a strange language. It's tuned to a station playing music you don't recognize."; + pixel_y = 10 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "cXB" = ( /turf/simulated/wall/tgmc/darkwall/deco0, /area/redgate/laserdome/arena/capture_the_flag) @@ -213,6 +279,22 @@ /obj/structure/flag_decor/red, /turf/simulated/wall/tgmc/darkwall, /area/redgate/laserdome/arena/hyperball) +"dbA" = ( +/obj/item/clothing/shoes/black, +/obj/item/clothing/under/color/red, +/obj/item/clothing/suit/redtag, +/obj/item/clothing/gloves/red, +/obj/item/clothing/head/redtag, +/mob/living/carbon/human/dummy/mannequin/autoequip{ + autorotate = 0; + name = "Laserdome Mannequin"; + real_name = "Laserdome Mannequin" + }, +/obj/effect/floor_decal/corner/red/full{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "dhX" = ( /turf/space, /area/redgate/laserdome/space) @@ -256,13 +338,21 @@ /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena) "dJu" = ( -/obj/structure/closet/crate/bin, -/turf/simulated/floor/tiled/milspec, +/obj/structure/closet/crate/bin{ + anchored = 1 + }, +/turf/simulated/floor/tiled/monotile, /area/redgate/laserdome/lobby/spaceview_lounge) "dLr" = ( -/obj/structure/redgate/away, -/turf/simulated/floor/tiled/milspec/raised, -/area/redgate/laserdome/lobby) +/obj/structure/table/marble, +/obj/item/weapon/reagent_containers/food/snacks/chickenfillet, +/obj/item/weapon/reagent_containers/food/snacks/chickenfillet, +/obj/item/weapon/reagent_containers/food/snacks/chickenfillet, +/obj/item/weapon/reagent_containers/food/snacks/chickenfillet, +/obj/item/weapon/reagent_containers/food/snacks/chickenfillet, +/obj/item/weapon/reagent_containers/food/snacks/chickenfillet, +/turf/simulated/floor/tiled/eris/cafe, +/area/redgate/laserdome/lobby/restaurant) "dPZ" = ( /obj/effect/floor_decal/corner/yellow/diagonal, /turf/simulated/floor/tiled/milspec, @@ -304,6 +394,12 @@ /obj/machinery/chem_master/condimaster, /turf/simulated/floor/tiled/eris/cafe, /area/redgate/laserdome/lobby/restaurant) +"erC" = ( +/obj/effect/floor_decal/arrow{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby/spaceview_lounge) "evM" = ( /obj/effect/floor_decal/corner/blue{ dir = 1 @@ -322,6 +418,12 @@ /obj/structure/table/marble, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/lobby/store_1) +"eJA" = ( +/obj/structure/bed/chair/sofa/bench/left{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "eND" = ( /obj/structure/hyperball_pedestal, /obj/item/laserdome_hyperball, @@ -432,6 +534,12 @@ /obj/effect/floor_decal/corner/yellow, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/hyperball) +"fAL" = ( +/obj/structure/table/marble, +/obj/item/device/encryptionkey/ent, +/obj/item/device/encryptionkey/ent, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "fCY" = ( /obj/structure/flag_decor/blue, /turf/simulated/wall/tgmc/darkwall, @@ -486,12 +594,39 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/hyperball) +"gch" = ( +/obj/effect/floor_decal/corner/blue/full{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) +"geF" = ( +/obj/structure/table/rack, +/obj/random/cigarettes, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby/store_1) "ggB" = ( /obj/effect/floor_decal/corner/blue{ dir = 5 }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/capture_the_flag) +"ghx" = ( +/obj/item/clothing/shoes/black, +/obj/item/clothing/under/color/blue, +/obj/item/clothing/suit/bluetag, +/obj/item/clothing/gloves/blue, +/obj/item/clothing/head/bluetag, +/mob/living/carbon/human/dummy/mannequin/autoequip{ + autorotate = 0; + name = "Laserdome Mannequin"; + real_name = "Laserdome Mannequin" + }, +/obj/effect/floor_decal/corner/blue{ + dir = 5 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "giO" = ( /turf/simulated/wall/tgmc/darkwall, /area/redgate/laserdome/lobby/store_1) @@ -529,6 +664,11 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/ctf_prep) +"gKd" = ( +/obj/structure/table/rack, +/obj/random/drinksoft, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby/store_1) "gKy" = ( /obj/effect/floor_decal/corner/blue/full, /obj/structure/closet/lasertag/blue/laserdome, @@ -574,6 +714,10 @@ }, /turf/simulated/floor/tiled/white, /area/redgate/laserdome/lobby/showers) +"gZw" = ( +/obj/structure/flag_decor/red, +/turf/simulated/wall/tgmc/darkwall, +/area/redgate/laserdome/lobby) "had" = ( /obj/effect/floor_decal/corner/red{ dir = 6 @@ -583,6 +727,12 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/hyperball) +"haQ" = ( +/obj/effect/floor_decal/arrow{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "heF" = ( /obj/structure/flag_decor, /turf/simulated/wall/tgmc/darkwall, @@ -617,6 +767,13 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/ctf_prep) +"hiN" = ( +/obj/structure/table/marble, +/obj/structure/prop/machine/biosyphon/laserdome/flagcap{ + pixel_y = 6 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/arena/ctf_prep) "hnp" = ( /obj/effect/floor_decal/steeldecal/steel_decals10{ dir = 4 @@ -648,6 +805,12 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/ctf_prep) +"hxU" = ( +/obj/effect/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "hBv" = ( /obj/machinery/body_scanconsole{ dir = 4 @@ -667,6 +830,12 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/hyperball) +"hPx" = ( +/obj/effect/floor_decal/corner/blue/full{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "icL" = ( /obj/effect/floor_decal/corner/red/diagonal, /obj/effect/floor_decal/corner/red/diagonal{ @@ -817,12 +986,34 @@ "jCB" = ( /turf/simulated/wall/tgmc/darkwall, /area/redgate/laserdome/lobby/spaceview_lounge) +"jIH" = ( +/obj/effect/floor_decal/arrow{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/arena/ctf_prep) "jKh" = ( /obj/effect/floor_decal/corner/blue{ dir = 10 }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/capture_the_flag) +"jPA" = ( +/obj/item/clothing/shoes/black, +/obj/item/clothing/under/color/blue, +/obj/item/clothing/suit/bluetag, +/obj/item/clothing/gloves/blue, +/obj/item/clothing/head/bluetag, +/mob/living/carbon/human/dummy/mannequin/autoequip{ + autorotate = 0; + name = "Laserdome Mannequin"; + real_name = "Laserdome Mannequin" + }, +/obj/effect/floor_decal/corner/blue{ + dir = 9 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "jQs" = ( /obj/effect/floor_decal/corner/yellow/full{ dir = 1 @@ -862,6 +1053,10 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/hyperball) +"kiJ" = ( +/obj/structure/table/marble, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "klg" = ( /obj/effect/floor_decal/corner/blue{ dir = 10 @@ -871,12 +1066,26 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/capture_the_flag) +"kms" = ( +/obj/structure/table/rack, +/obj/random/drinksoft, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby/store_2) +"kqL" = ( +/obj/structure/prop/machine/tgmc_console2, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "krH" = ( /obj/effect/floor_decal/corner/red{ dir = 8 }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/hyperball) +"krQ" = ( +/obj/structure/table/rack, +/obj/random/nukies_can_legal, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby/store_1) "ktn" = ( /obj/effect/floor_decal/corner/red{ dir = 6 @@ -897,6 +1106,12 @@ /obj/structure/closet/lasertag/red/laserdome, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/hbl_prep) +"kEA" = ( +/obj/structure/bed/chair/sofa/bench/right{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "kFg" = ( /obj/effect/floor_decal/corner/red{ dir = 5 @@ -927,6 +1142,12 @@ /obj/machinery/recharger/wallcharger, /turf/simulated/wall/tgmc/darkwall, /area/redgate/laserdome/arena/capture_the_flag) +"kPg" = ( +/obj/effect/floor_decal/corner/red{ + dir = 6 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "kRK" = ( /obj/effect/floor_decal/corner/blue{ dir = 5 @@ -948,6 +1169,12 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/capture_the_flag) +"kUV" = ( +/obj/structure/table/rack, +/obj/random/cigarettes, +/obj/random/desatti_snacks, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby/store_2) "kYn" = ( /obj/effect/floor_decal/corner/red/full{ dir = 4 @@ -987,7 +1214,10 @@ /turf/simulated/floor/tiled/eris/cafe, /area/redgate/laserdome/lobby/restaurant) "lpp" = ( -/obj/structure/closet/secure_closet/freezer/fridge, +/obj/structure/table/marble, +/obj/item/weapon/reagent_containers/food/snacks/fries, +/obj/item/weapon/reagent_containers/food/snacks/fries, +/obj/item/weapon/reagent_containers/food/snacks/fries, /turf/simulated/floor/tiled/eris/cafe, /area/redgate/laserdome/lobby/restaurant) "lDM" = ( @@ -1001,6 +1231,11 @@ }, /turf/simulated/floor/tiled/milspec/sterile, /area/redgate/laserdome/lobby/aid_station) +"lEw" = ( +/obj/structure/table/rack, +/obj/random/flashlight, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby/store_2) "lEQ" = ( /obj/effect/floor_decal/corner/yellow{ dir = 9 @@ -1018,6 +1253,12 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/ctf_prep) +"lPM" = ( +/obj/effect/floor_decal/corner/blue{ + dir = 10 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "lRb" = ( /obj/effect/floor_decal/corner/red{ dir = 8 @@ -1062,6 +1303,12 @@ "mhi" = ( /turf/simulated/wall/tgmc/darkwall, /area/redgate/laserdome/lobby/store_2) +"mib" = ( +/obj/structure/table/rack, +/obj/random/drinksoft, +/obj/random/desatti_snacks, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby/store_2) "mmm" = ( /obj/effect/floor_decal/corner/red{ dir = 10 @@ -1075,9 +1322,25 @@ /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/lobby/store_1) "myA" = ( -/obj/structure/closet/secure_closet/freezer/meat, +/obj/structure/table/marble, +/obj/random/pizzabox, +/obj/random/pizzabox, +/obj/random/pizzabox, +/obj/random/pizzabox, +/obj/item/weapon/material/knife/plastic, /turf/simulated/floor/tiled/eris/cafe, /area/redgate/laserdome/lobby/restaurant) +"mBZ" = ( +/obj/structure/table/rack, +/obj/random/instrument, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby/store_2) +"mCM" = ( +/obj/effect/floor_decal/industrial/arrows/blue{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/arena/hbl_prep) "mIW" = ( /obj/effect/floor_decal/corner/blue{ dir = 10 @@ -1094,6 +1357,10 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/hyperball) +"mMT" = ( +/obj/structure/flag_decor/blue, +/turf/simulated/wall/tgmc/darkwall, +/area/redgate/laserdome/lobby) "mPK" = ( /obj/effect/floor_decal/corner/blue{ dir = 9 @@ -1125,6 +1392,10 @@ /obj/structure/closet/lasertag/red/laserdome, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/ctf_prep) +"njI" = ( +/obj/structure/redgate/away, +/turf/simulated/floor/tiled/milspec/raised, +/area/redgate/laserdome/lobby) "nlK" = ( /obj/effect/floor_decal/corner/blue{ dir = 5 @@ -1134,9 +1405,18 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/hyperball) +"nuz" = ( +/turf/simulated/floor/tiled/milspec/raised, +/area/redgate/laserdome/lobby) "nxb" = ( /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/capture_the_flag) +"nyb" = ( +/obj/effect/floor_decal/corner/red/full{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "nBo" = ( /obj/effect/floor_decal/corner/red{ dir = 5 @@ -1226,13 +1506,19 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/hyperball) +"ohk" = ( +/obj/structure/bed/chair/sofa/bench/right, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "ont" = ( -/obj/structure/closet/crate/bin, /obj/machinery/light/small/neon/generic_green{ dir = 1; pixel_y = -23 }, -/turf/simulated/floor/tiled/milspec, +/obj/structure/closet/crate/bin{ + anchored = 1 + }, +/turf/simulated/floor/tiled/monotile, /area/redgate/laserdome/lobby) "oqT" = ( /obj/effect/floor_decal/corner/blue/full{ @@ -1272,6 +1558,10 @@ }, /turf/simulated/floor/tiled/milspec/sterile, /area/redgate/laserdome/lobby/aid_station) +"oAc" = ( +/obj/structure/bed/chair/sofa/bench, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "oHj" = ( /obj/machinery/recharger/wallcharger, /turf/simulated/wall/tgmc/darkwall, @@ -1327,16 +1617,21 @@ /obj/machinery/recharger/wallcharger, /turf/simulated/wall/tgmc/darkwall, /area/redgate/laserdome/arena/ctf_prep) +"pex" = ( +/obj/effect/floor_decal/corner/red{ + dir = 5 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "pfr" = ( -/obj/structure/table/marble, -/obj/item/reagent_containers/food/snacks/fries, -/obj/item/reagent_containers/food/snacks/fries, -/obj/item/reagent_containers/food/snacks/fries, -/obj/item/reagent_containers/food/snacks/fries, -/obj/item/reagent_containers/food/snacks/fries, -/obj/item/reagent_containers/food/snacks/fries, +/obj/machinery/door/airlock/freezer{ + name = "Restaurant Backroom" + }, /turf/simulated/floor/tiled/eris/cafe, /area/redgate/laserdome/lobby/restaurant) +"pfA" = ( +/turf/simulated/wall/tgmc/window/darkwall/reinf, +/area/redgate/laserdome/lobby) "pgz" = ( /obj/structure/table/marble, /obj/item/storage/firstaid/toxin{ @@ -1357,6 +1652,12 @@ }, /turf/simulated/floor/tiled/milspec/sterile, /area/redgate/laserdome/lobby/aid_station) +"poL" = ( +/obj/item/weapon/stool/baystool/padded{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "ppf" = ( /obj/structure/hyperball_goal/red, /turf/simulated/floor/tiled/milspec/raised, @@ -1364,6 +1665,18 @@ "pvv" = ( /turf/simulated/wall/tgmc/window/darkwall/reinf, /area/redgate/laserdome/arena/hbl_prep) +"pyU" = ( +/obj/structure/table/rack, +/obj/random/cigarettes, +/obj/random/nukies_can_legal, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby/store_1) +"pAB" = ( +/obj/effect/floor_decal/corner/blue{ + dir = 5 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "pBv" = ( /obj/effect/floor_decal/corner/blue/full{ dir = 4 @@ -1392,6 +1705,18 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/capture_the_flag) +"pVQ" = ( +/obj/structure/table/marble, +/obj/structure/prop/machine/biosyphon/laserdome{ + pixel_y = 6 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) +"pXq" = ( +/obj/structure/table/rack, +/obj/random/flashlight, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby/store_1) "pYa" = ( /obj/effect/floor_decal/corner/blue{ dir = 10 @@ -1458,6 +1783,12 @@ /obj/machinery/appliance/cooker/fryer, /turf/simulated/floor/tiled/eris/cafe, /area/redgate/laserdome/lobby/restaurant) +"qJa" = ( +/obj/effect/floor_decal/industrial/arrows/red{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/arena/hyperball) "qRv" = ( /obj/effect/floor_decal/corner/red{ dir = 1 @@ -1466,7 +1797,8 @@ /area/redgate/laserdome/arena/hyperball) "qVN" = ( /obj/structure/table/rack, -/obj/item/encryptionkey/ent, +/obj/random/cigarettes, +/obj/random/nukies_can_legal, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/lobby/store_2) "qWQ" = ( @@ -1481,6 +1813,12 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/capture_the_flag) +"qYD" = ( +/obj/structure/bed/chair/sofa/bench{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "raq" = ( /obj/effect/floor_decal/corner/yellow{ dir = 6 @@ -1488,8 +1826,10 @@ /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/capture_the_flag) "rjJ" = ( -/obj/structure/closet/crate/bin, -/turf/simulated/floor/tiled/milspec, +/obj/structure/closet/crate/bin{ + anchored = 1 + }, +/turf/simulated/floor/tiled/monotile, /area/redgate/laserdome/lobby) "rkC" = ( /obj/machinery/light/small/neon/generic_green{ @@ -1592,6 +1932,12 @@ /obj/structure/closet/crate/bin, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/ctf_prep) +"sbU" = ( +/obj/effect/floor_decal/industrial/arrows/red{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/arena/hbl_prep) "shp" = ( /obj/effect/floor_decal/corner/red{ dir = 10 @@ -1601,9 +1947,17 @@ /area/redgate/laserdome/arena/ctf_prep) "sox" = ( /obj/structure/table/rack, -/obj/item/encryptionkey/ent, +/obj/random/drinksoft, +/obj/random/drinksoft, +/obj/random/desatti_snacks, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/lobby/store_1) +"soY" = ( +/obj/effect/floor_decal/industrial/arrows/red{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/arena/ctf_prep) "suI" = ( /obj/effect/floor_decal/corner/yellow{ dir = 10 @@ -1658,6 +2012,22 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/hyperball) +"sRZ" = ( +/obj/item/clothing/shoes/black, +/obj/item/clothing/under/color/red, +/obj/item/clothing/suit/redtag, +/obj/item/clothing/gloves/red, +/obj/item/clothing/head/redtag, +/mob/living/carbon/human/dummy/mannequin/autoequip{ + autorotate = 0; + name = "Laserdome Mannequin"; + real_name = "Laserdome Mannequin" + }, +/obj/effect/floor_decal/corner/red{ + dir = 9 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "sSK" = ( /obj/effect/floor_decal/corner/blue/diagonal, /obj/effect/floor_decal/corner/blue/diagonal{ @@ -1674,6 +2044,10 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/hyperball) +"sWc" = ( +/obj/effect/floor_decal/arrow, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "sXa" = ( /obj/effect/floor_decal/corner/red/full, /turf/simulated/floor/tiled/milspec, @@ -1768,6 +2142,12 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/hbl_prep) +"tXj" = ( +/obj/effect/floor_decal/industrial/arrows/blue{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/arena/ctf_prep) "tZO" = ( /turf/simulated/wall/tgmc/darkwall, /area/redgate/laserdome/lobby/aid_station) @@ -1787,6 +2167,10 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/ctf_prep) +"udY" = ( +/obj/effect/floor_decal/arrow, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/arena/hbl_prep) "ugA" = ( /obj/structure/curtain/open/privacy{ name = "shower curtain" @@ -1877,6 +2261,12 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/capture_the_flag) +"uCy" = ( +/obj/effect/floor_decal/corner/blue{ + dir = 6 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "uIp" = ( /obj/effect/floor_decal/corner/red/full{ dir = 8 @@ -1900,6 +2290,22 @@ /obj/structure/closet/lasertag/blue/laserdome, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/ctf_prep) +"uTh" = ( +/obj/item/clothing/shoes/black, +/obj/item/clothing/under/color/blue, +/obj/item/clothing/suit/bluetag, +/obj/item/clothing/gloves/blue, +/obj/item/clothing/head/bluetag, +/mob/living/carbon/human/dummy/mannequin/autoequip{ + autorotate = 0; + name = "Laserdome Mannequin"; + real_name = "Laserdome Mannequin" + }, +/obj/effect/floor_decal/corner/blue/full{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "val" = ( /obj/effect/floor_decal/corner/red{ dir = 5 @@ -1924,6 +2330,12 @@ }, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/capture_the_flag) +"vid" = ( +/obj/structure/table/rack, +/obj/random/drinksoft, +/obj/random/nukies_can_legal, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby/store_2) "vjW" = ( /obj/effect/floor_decal/corner/red{ dir = 9 @@ -2030,6 +2442,12 @@ /obj/effect/floor_decal/corner/blue/full, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/hbl_prep) +"vYY" = ( +/obj/effect/floor_decal/industrial/arrows/red{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/arena/capture_the_flag) "vZq" = ( /obj/effect/floor_decal/corner/blue{ dir = 10 @@ -2053,6 +2471,13 @@ /obj/structure/table/bench/steel, /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/hbl_prep) +"wkd" = ( +/obj/structure/table/marble, +/obj/structure/prop/machine/biosyphon/laserdome/hyperball{ + pixel_y = 6 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/arena/hbl_prep) "wkM" = ( /obj/effect/map_effect/portal/line/side_b{ dir = 8 @@ -2087,6 +2512,10 @@ /obj/structure/table/marble, /turf/simulated/floor/tiled/milspec/sterile, /area/redgate/laserdome/lobby/aid_station) +"wws" = ( +/obj/effect/floor_decal/corner/blue/full, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "wDy" = ( /obj/effect/floor_decal/corner/blue/full{ dir = 1 @@ -2197,9 +2626,17 @@ /turf/simulated/floor/tiled/milspec, /area/redgate/laserdome/arena/capture_the_flag) "xHi" = ( -/obj/structure/closet/crate/bin, -/turf/simulated/floor/tiled/milspec, +/obj/structure/closet/crate/bin{ + anchored = 1 + }, +/turf/simulated/floor/tiled/monotile, /area/redgate/laserdome/lobby/restaurant) +"xIq" = ( +/obj/effect/floor_decal/corner/red/full{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/laserdome/lobby) "xIt" = ( /obj/effect/floor_decal/corner/red/diagonal{ dir = 1 @@ -6248,7 +6685,7 @@ asC oes fbv evM -xPN +baX fLE wFI oes @@ -6345,7 +6782,7 @@ vkq kOV qsu aIy -nxb +cUF iyV ayr kOV @@ -7858,7 +8295,7 @@ ikl ikl ikl ikl -ikl +erC ikl ikl ikl @@ -8142,7 +8579,7 @@ ikl ikl ikl ikl -ikl +erC ikl ikl ikl @@ -8426,7 +8863,7 @@ xLH xMG xMG xMG -xMG +cIU xMG xMG xMG @@ -8710,7 +9147,7 @@ xMG xMG xMG xMG -xMG +cIU xMG xMG xMG @@ -8718,8 +9155,8 @@ rkC giO mmw sox -sox -sox +pXq +pyU mmw eCL xLH @@ -8995,7 +9432,7 @@ xMG xMG xMG xMG -xMG +cIU xMG xMG xMG @@ -9139,13 +9576,13 @@ xMG xMG xMG xMG -xMG +haQ xMG eCL mmw -sox -sox -sox +awb +geF +bVo mmw eCL xLH @@ -9263,10 +9700,10 @@ vHZ vHZ vHZ xLH -xLH -xLH -xLH -xLH +uab +uab +uab +uab uab uab wHk @@ -9279,15 +9716,15 @@ dCG dCG xMG xMG -xMG +cIU xMG xMG xMG eCL mmw -sox -sox -sox +pyU +pXq +gKd mmw eCL xLH @@ -9405,10 +9842,10 @@ vHZ vHZ vHZ xLH -xLH -xLH -xLH -xLH +uab +bFV +pPz +pPz uab coy pPz @@ -9547,10 +9984,10 @@ vHZ vHZ vHZ xLH -xLH -xLH -xLH -xLH +uab +blC +pPz +pPz uab twc pPz @@ -9563,7 +10000,7 @@ oWY dCG xMG xMG -xMG +cIU xMG xMG xMG @@ -9689,12 +10126,12 @@ vHZ vHZ vHZ xLH -xLH -xLH -xLH -xLH uab -lpp +blC +pPz +pPz +pfr +pPz pPz pPz pPz @@ -9711,9 +10148,9 @@ xMG jZT giO mmw -sox -sox -sox +krQ +gKd +awb mmw eCL xLH @@ -9831,12 +10268,12 @@ vHZ vHZ vHZ xLH -xLH -xLH -xLH -xLH uab -myA +bFM +pPz +pPz +uab +bFV pPz pPz nVx @@ -9847,7 +10284,7 @@ bFV hfU xMG xMG -xMG +cIU xMG xMG xMG @@ -9973,10 +10410,10 @@ vHZ vHZ vHZ xLH -xLH -xLH -xLH -xLH +uab +bFM +pPz +pPz uab nXX pPz @@ -10115,10 +10552,10 @@ vHZ vHZ vHZ xLH -xLH -xLH -xLH -xLH +uab +bFM +pPz +pPz uab qAM pPz @@ -10131,7 +10568,7 @@ bFV hfU xMG xMG -xMG +cIU xMG xMG wPO @@ -10257,10 +10694,10 @@ vHZ vHZ vHZ xLH -xLH -xLH -xLH -xLH +uab +dLr +pPz +pPz uab qBt pPz @@ -10399,10 +10836,10 @@ vHZ vHZ vHZ xLH -xLH -xLH -xLH -xLH +uab +fsP +pPz +pPz uab uzs pPz @@ -10415,7 +10852,7 @@ bFV hfU xMG xMG -xMG +cIU xMG xMG wPO @@ -10541,10 +10978,10 @@ vHZ vHZ vHZ xLH -xLH -xLH -xLH -xLH +uab +lpp +pPz +pPz uab gTS pPz @@ -10555,11 +10992,11 @@ pPz pPz bFV hfU +sWc xMG xMG xMG -xMG -xMG +haQ aSF rLV aSF @@ -10683,10 +11120,10 @@ xLH xLH xLH xLH -xLH -xLH -xLH -xLH +uab +lpp +pPz +pPz uab wFp pPz @@ -10699,7 +11136,7 @@ bFV hfU xMG xMG -xMG +cIU xMG xMG wPO @@ -10825,10 +11262,10 @@ xLH xLH xLH xLH -xLH -xLH -xLH -xLH +uab +myA +pPz +pPz uab eqO pPz @@ -10967,10 +11404,10 @@ xLH xLH xLH xLH -xLH -xLH -xLH -xLH +uab +myA +pPz +pPz uab lgv pPz @@ -10983,7 +11420,7 @@ bFV hfU xMG xMG -xMG +cIU xMG xMG wPO @@ -11109,15 +11546,15 @@ xLH xLH xLH xLH -xLH -xLH -xLH -xLH uab uab -fsP -pfr -bFM +uab +uab +uab +uab +uab +uab +uab uab uab uab @@ -11266,7 +11703,7 @@ rjJ xMG xMG xMG -xMG +cIU xMG xMG xMG @@ -11412,7 +11849,7 @@ xMG xMG xMG xMG -xMG +rjJ vDA vDA vDA @@ -11531,7 +11968,7 @@ xLH ymc wZd mad -cXM +sbU pCi wZd ymc @@ -11550,11 +11987,11 @@ xMG xMG xMG xMG +cIU xMG xMG xMG xMG -rjJ vDA fCY vDA @@ -11569,7 +12006,7 @@ vDA vDA jSI fhw -cMi +soY nEA jSI vDA @@ -11689,13 +12126,13 @@ akp vXs pvv xMG +eJA +ohk xMG xMG xMG -xMG -xMG -xMG -xMG +eJA +ohk xMG qnI diP @@ -11815,7 +12252,7 @@ xLH oIG whp cXM -cXM +sbU cXM uqG yet @@ -11831,13 +12268,13 @@ fxa tVf pvv xMG +qYD +oAc xMG +cIU xMG -xMG -xMG -xMG -xMG -xMG +qYD +oAc xMG qnI oVB @@ -11853,7 +12290,7 @@ vDA ngN fqR cMi -cMi +soY cMi rAb shp @@ -11973,13 +12410,13 @@ pvv pvv ymc xMG +kEA +bwE xMG xMG xMG -xMG -xMG -xMG -xMG +kEA +bwE xMG vDA qnI @@ -12117,9 +12554,9 @@ wgC xMG xMG xMG -blC -blC -blC +xMG +cIU +xMG xMG xMG xMG @@ -12241,45 +12678,45 @@ xLH oHj dSM cXM -cXM +wkd cXM uzE +udY cXM +udY cXM +udY cXM +udY cXM +udY cXM -cXM -cXM -cXM -cXM -cXM -cXM +udY uzE +sWc +xMG +sWc xMG xMG xMG -blC -dLr -blC -xMG -xMG +haQ xMG +haQ +dWp +jIH +cMi +jIH +cMi +jIH +cMi +jIH +cMi +jIH +cMi +jIH dWp cMi -cMi -cMi -cMi -cMi -cMi -cMi -cMi -cMi -cMi -cMi -dWp -cMi -cMi +hiN cMi sbo pbF @@ -12401,9 +12838,9 @@ blf xMG xMG xMG -blC -blC -blC +xMG +cIU +xMG xMG xMG xMG @@ -12541,13 +12978,13 @@ pvv pvv ymc xMG +eJA +ohk xMG xMG xMG -xMG -xMG -xMG -xMG +eJA +ohk xMG vDA qnI @@ -12667,7 +13104,7 @@ xLH wXJ whp cXM -cXM +mCM cXM bdI fga @@ -12683,13 +13120,13 @@ vjW iJM pvv xMG +qYD +oAc xMG +cIU xMG -xMG -xMG -xMG -xMG -xMG +qYD +oAc xMG qnI uIp @@ -12705,7 +13142,7 @@ vDA wED hhi cMi -cMi +tXj cMi rAb tRw @@ -12825,13 +13262,13 @@ qba rWF pvv xMG +kEA +bwE xMG xMG xMG -xMG -xMG -xMG -xMG +kEA +bwE xMG qnI ucr @@ -12951,7 +13388,7 @@ xLH ymc vsH fbG -cXM +mCM pYa vsH ymc @@ -12970,7 +13407,7 @@ xMG xMG xMG xMG -xMG +cIU xMG xMG xMG @@ -12989,7 +13426,7 @@ vDA vDA fCY djp -cMi +tXj xVN fCY vDA @@ -13254,7 +13691,7 @@ xMG xMG xMG xMG -xMG +cIU xMG xMG xMG @@ -13262,8 +13699,8 @@ jZT mhi xaR qVN -qVN -qVN +mib +lEw xaR vIe vDA @@ -13538,7 +13975,7 @@ xMG xMG xMG xMG -xMG +cIU xMG xMG xMG @@ -13687,9 +14124,9 @@ xMG xMG vIe xaR -qVN -qVN -qVN +mBZ +vid +kms xaR vIe xLH @@ -13822,16 +14259,16 @@ xMG xMG xMG xMG -xMG +cIU xMG xMG xMG xMG vIe xaR -qVN -qVN -qVN +kms +kUV +lEw xaR vIe xLH @@ -13966,7 +14403,7 @@ xMG xMG xMG xMG -xMG +haQ xMG xMG vIe @@ -14106,7 +14543,7 @@ hGF xMG xMG xMG -xMG +cIU xMG xMG xMG @@ -14246,7 +14683,7 @@ lcP jho hGF xMG -xMG +sWc xMG xMG xMG @@ -14255,9 +14692,9 @@ xMG ont mhi xaR -qVN -qVN -qVN +kms +kUV +vid xaR vIe xLH @@ -14390,7 +14827,7 @@ hGF xMG xMG xMG -xMG +cIU xMG xMG xMG @@ -14675,7 +15112,7 @@ xMG xMG xMG xMG -xMG +cIU xMG xMG xMG @@ -14959,7 +15396,7 @@ xMG xMG xMG xMG -xMG +cIU xMG xMG xLH @@ -15099,9 +15536,9 @@ nXQ xLH xLH xLH -xLH -xLH -xLH +xMG +xMG +xMG xLH xLH xLH @@ -15241,9 +15678,9 @@ nXQ xLH xLH xLH -xLH -xLH -xLH +xMG +xMG +cIU xLH xLH xLH @@ -15383,9 +15820,9 @@ xLH xLH xLH xLH -xLH -xLH -xLH +xMG +xMG +xMG xLH xLH xLH @@ -15520,19 +15957,19 @@ xLH xLH xLH xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH +mMT +hPx +jPA +wws +pfA +xMG +xMG +cIU +pfA +nyb +sRZ +brx +gZw xLH xLH xLH @@ -15663,17 +16100,17 @@ xLH xLH xLH xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH +pAB +xMG +lPM +pfA +xMG +xMG +xMG +pfA +pex +xMG +hxU xLH xLH xLH @@ -15805,17 +16242,17 @@ xLH xLH xLH xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH +pAB +xMG +lPM +pfA +xMG +xMG +cIU +pfA +pex +xMG +hxU xLH xLH xLH @@ -15947,17 +16384,17 @@ xLH xLH xLH xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH +pAB +xMG +lPM +pfA +xMG +xMG +xMG +pfA +pex +xMG +hxU xLH xLH xLH @@ -16088,19 +16525,19 @@ xLH xLH xLH xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH +mMT +ghx +xMG +lPM +pfA +xMG +xMG +cIU +pfA +pex +xMG +cIt +gZw xLH xLH xLH @@ -16231,17 +16668,17 @@ xLH xLH xLH xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH +pAB +xMG +lPM +pfA +xMG +xMG +xMG +pfA +pex +xMG +hxU xLH xLH xLH @@ -16373,17 +16810,17 @@ xLH xLH xLH xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH +pAB +xMG +lPM +pfA +xMG +xMG +cIU +pfA +pex +xMG +hxU xLH xLH xLH @@ -16515,17 +16952,17 @@ xLH xLH xLH xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH +pAB +xMG +lPM +pfA +xMG +xMG +xMG +pfA +pex +xMG +hxU xLH xLH xLH @@ -16656,19 +17093,19 @@ xLH xLH xLH xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH +mMT +gch +uCy +uTh +pfA +xMG +xMG +cIU +pfA +dbA +kPg +xIq +gZw xLH xLH xLH @@ -16803,9 +17240,9 @@ xLH xLH xLH xLH -xLH -xLH -xLH +xMG +xMG +xMG xLH xLH xLH @@ -16943,12 +17380,12 @@ xLH xLH xLH xLH -xLH -xLH -xLH -xLH -xLH -xLH +cUN +xMG +xMG +xMG +cIU +kiJ xLH xLH xLH @@ -17085,12 +17522,12 @@ xLH xLH xLH xLH -xLH -xLH -xLH -xLH -xLH -xLH +kqL +poL +kiJ +xMG +xMG +xMG xLH xLH xLH @@ -17227,12 +17664,12 @@ xLH xLH xLH xLH -xLH -xLH -xLH -xLH -xLH -xLH +bRk +kiJ +pVQ +xMG +cIU +xMG xLH xLH xLH @@ -17370,11 +17807,11 @@ xLH xLH xLH xLH -xLH -xLH -xLH -xLH -xLH +xMG +xMG +xMG +xMG +xMG xLH xLH xLH @@ -17511,13 +17948,13 @@ xLH xLH xLH xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH +fAL +xMG +nuz +nuz +nuz +xMG +fAL xLH xLH xLH @@ -17653,13 +18090,13 @@ xLH xLH xLH xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH +fAL +xMG +nuz +njI +nuz +xMG +fAL xLH xLH xLH @@ -17795,13 +18232,13 @@ xLH xLH xLH xLH -xLH -xLH -xLH -xLH -xLH -xLH -xLH +fAL +xMG +nuz +nuz +nuz +xMG +fAL xLH xLH xLH @@ -17938,11 +18375,11 @@ xLH xLH xLH xLH -xLH -xLH -xLH -xLH -xLH +xMG +xMG +xMG +xMG +xMG xLH xLH xLH @@ -18081,9 +18518,9 @@ xLH xLH xLH xLH -xLH -xLH -xLH +fAL +fAL +fAL xLH xLH xLH @@ -18176,7 +18613,7 @@ asC oes mUp wlw -xPN +qJa aue tUV oes @@ -18273,7 +18710,7 @@ vkq kOV dxx fYj -nxb +vYY bZe uBq kOV diff --git a/tgui/packages/tgui/components/Button.tsx b/tgui/packages/tgui/components/Button.tsx index 7265006312..cb7f3b0af3 100644 --- a/tgui/packages/tgui/components/Button.tsx +++ b/tgui/packages/tgui/components/Button.tsx @@ -91,8 +91,20 @@ export const Button = (props: Props) => { const toDisplay: ReactNode = content || children; + const ref = useRef(null); + + function handleButtonClick(event) { + if (!disabled && onClick) { + onClick(event); + if (ref?.current) { + (ref.current as HTMLElement).blur(); + } + } + } + let buttonContent = (
{ ])} tabIndex={!disabled ? 0 : undefined} onClick={(event) => { - if (!disabled && onClick) { - onClick(event); - } + handleButtonClick(event); }} onKeyDown={(event) => { if (!captureKeys) { diff --git a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotAccess.tsx b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotAccess.tsx index a5780f93e3..9234107589 100644 --- a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotAccess.tsx +++ b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotAccess.tsx @@ -29,7 +29,7 @@ export const ModifyRobotAccess = (props: { return ( <> {!target.active && } - + {!target.active && } - + {!target.active && } - +
Robot to salvage diff --git a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotPKA.tsx b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotPKA.tsx index 1662c8053c..a0cadfb4ec 100644 --- a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotPKA.tsx +++ b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotPKA.tsx @@ -27,7 +27,7 @@ export const ModifyRobotPKA = (props: { target: Target }) => { {!target.pka ? ( {target.name} has no PKA installed. ) : ( - + Remaining Capacity: {target.pka.capacity} diff --git a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotRadio.tsx b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotRadio.tsx index 5af3a8cd06..02a6828c9d 100644 --- a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotRadio.tsx +++ b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotRadio.tsx @@ -25,7 +25,7 @@ export const ModifyRobotRadio = (props: { target: Target }) => { return ( <> {!target.active && } - + { /> - + { has_inherent_laws, has_supplied_laws, isAI, + isMalf, + isSlaved, + active_ais, + selected_ai, channel, channels, law_sets, @@ -90,9 +94,8 @@ export const ModifyRobot = (props) => { tabs[6] = ( { has_inherent_laws={has_inherent_laws} has_supplied_laws={has_supplied_laws} isAI={isAI} + isMalf={isMalf} channel={channel} channels={channels} /> ); tabs[7] = ( -
+
{ <> setRobotName(value)} /> @@ -162,7 +166,7 @@ export const ModifyRobot = (props) => { + + + + )} + + {!!target?.module && ( + + + + act('select_ai', { + new_ai: value, + }) + } + /> + + + + + + + + + )} + {!!target && diff --git a/tgui/packages/tgui/interfaces/ModifyRobot/types.ts b/tgui/packages/tgui/interfaces/ModifyRobot/types.ts index d5bb7aeadf..5191e38422 100644 --- a/tgui/packages/tgui/interfaces/ModifyRobot/types.ts +++ b/tgui/packages/tgui/interfaces/ModifyRobot/types.ts @@ -24,9 +24,13 @@ export type Data = { has_inherent_laws: number; has_supplied_laws: number; isAI: BooleanLike; + isMalf: BooleanLike; + isSlaved: string | null; channel: string; channels: { channel: string }[]; law_sets: law_pack[]; + active_ais: DropdownEntry[]; + selected_ai: string | null; }; export type DropdownEntry = { @@ -38,6 +42,7 @@ export type Target = { name: string; ckey: string; module: string; + emagged: BooleanLike; active: BooleanLike; crisis_override: BooleanLike; active_restrictions: string[]; diff --git a/tgui/public/tgui-panel.bundle.js b/tgui/public/tgui-panel.bundle.js index 0247b0147d..5bbdfc2c99 100644 --- a/tgui/public/tgui-panel.bundle.js +++ b/tgui/public/tgui-panel.bundle.js @@ -6,7 +6,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */function n(e,r){return r!=null&&typeof Symbol!="undefined"&&r[Symbol.hasInstance]?!!r[Symbol.hasInstance](e):e instanceof r}function o(e){"@swc/helpers - typeof";return e&&typeof Symbol!="undefined"&&e.constructor===Symbol?"symbol":typeof e}var i=t(61358),s=t(20686);function u(e){for(var r="https://reactjs.org/docs/error-decoder.html?invariant="+e,a=1;ar}return!1}function j(e,r,a,c,T,M,W){this.acceptsBooleans=r===2||r===3||r===4,this.attributeName=c,this.attributeNamespace=T,this.mustUseProperty=a,this.propertyName=e,this.type=r,this.sanitizeURL=M,this.removeEmptyString=W}var B={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){B[e]=new j(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var r=e[0];B[r]=new j(r,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){B[e]=new j(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){B[e]=new j(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){B[e]=new j(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){B[e]=new j(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){B[e]=new j(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){B[e]=new j(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){B[e]=new j(e,5,!1,e.toLowerCase(),null,!1,!1)});var F=/[\-:]([a-z])/g;function P(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var r=e.replace(F,P);B[r]=new j(r,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var r=e.replace(F,P);B[r]=new j(r,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var r=e.replace(F,P);B[r]=new j(r,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){B[e]=new j(e,1,!1,e.toLowerCase(),null,!1,!1)}),B.xlinkHref=new j("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){B[e]=new j(e,1,!1,e.toLowerCase(),null,!0,!0)});function b(e,r,a,c){var T=B.hasOwnProperty(r)?B[r]:null;(T!==null?T.type!==0:c||!(2q||T[W]!==M[q]){var gt="\n"+T[W].replace(" at new "," at ");return e.displayName&>.includes("")&&(gt=gt.replace("",e.displayName)),gt}while(1<=W&&0<=q);break}}}finally{ht=!1,Error.prepareStackTrace=a}return(e=e?e.displayName||e.name:"")?rt(e):""}function jt(e){switch(e.tag){case 5:return rt(e.type);case 16:return rt("Lazy");case 13:return rt("Suspense");case 19:return rt("SuspenseList");case 0:case 2:case 15:return e=dt(e.type,!1),e;case 11:return e=dt(e.type.render,!1),e;case 1:return e=dt(e.type,!0),e;default:return""}}function xt(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case K:return"Fragment";case z:return"Portal";case J:return"Profiler";case k:return"StrictMode";case it:return"Suspense";case at:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case X:return(e.displayName||"Context")+".Consumer";case H:return(e._context.displayName||"Context")+".Provider";case Y:var r=e.render;return e=e.displayName,e||(e=r.displayName||r.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case _:return r=e.displayName||null,r!==null?r:xt(e.type)||"Memo";case $:r=e._payload,e=e._init;try{return xt(e(r))}catch(a){}}return null}function pt(e){var r=e.type;switch(e.tag){case 24:return"Cache";case 9:return(r.displayName||"Context")+".Consumer";case 10:return(r._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=r.render,e=e.displayName||e.name||"",r.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return r;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return xt(r);case 8:return r===k?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof r=="function")return r.displayName||r.name||null;if(typeof r=="string")return r}return null}function Bt(e){switch(typeof e=="undefined"?"undefined":o(e)){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Se(e){var r=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(r==="checkbox"||r==="radio")}function xe(e){var r=Se(e)?"checked":"value",a=Object.getOwnPropertyDescriptor(e.constructor.prototype,r),c=""+e[r];if(!e.hasOwnProperty(r)&&typeof a!="undefined"&&typeof a.get=="function"&&typeof a.set=="function"){var T=a.get,M=a.set;return Object.defineProperty(e,r,{configurable:!0,get:function(){return T.call(this)},set:function(q){c=""+q,M.call(this,q)}}),Object.defineProperty(e,r,{enumerable:a.enumerable}),{getValue:function(){return c},setValue:function(q){c=""+q},stopTracking:function(){e._valueTracker=null,delete e[r]}}}}function ee(e){e._valueTracker||(e._valueTracker=xe(e))}function Rt(e){if(!e)return!1;var r=e._valueTracker;if(!r)return!0;var a=r.getValue(),c="";return e&&(c=Se(e)?e.checked?"true":"false":e.value),e=c,e!==a?(r.setValue(e),!0):!1}function Ft(e){if(e=e||(typeof document!="undefined"?document:void 0),typeof e=="undefined")return null;try{return e.activeElement||e.body}catch(r){return e.body}}function Yt(e,r){var a=r.checked;return Q({},r,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:a!=null?a:e._wrapperState.initialChecked})}function kt(e,r){var a=r.defaultValue==null?"":r.defaultValue,c=r.checked!=null?r.checked:r.defaultChecked;a=Bt(r.value!=null?r.value:a),e._wrapperState={initialChecked:c,initialValue:a,controlled:r.type==="checkbox"||r.type==="radio"?r.checked!=null:r.value!=null}}function de(e,r){r=r.checked,r!=null&&b(e,"checked",r,!1)}function ve(e,r){de(e,r);var a=Bt(r.value),c=r.type;if(a!=null)c==="number"?(a===0&&e.value===""||e.value!=a)&&(e.value=""+a):e.value!==""+a&&(e.value=""+a);else if(c==="submit"||c==="reset"){e.removeAttribute("value");return}r.hasOwnProperty("value")?Ut(e,r.type,a):r.hasOwnProperty("defaultValue")&&Ut(e,r.type,Bt(r.defaultValue)),r.checked==null&&r.defaultChecked!=null&&(e.defaultChecked=!!r.defaultChecked)}function ie(e,r,a){if(r.hasOwnProperty("value")||r.hasOwnProperty("defaultValue")){var c=r.type;if(!(c!=="submit"&&c!=="reset"||r.value!==void 0&&r.value!==null))return;r=""+e._wrapperState.initialValue,a||r===e.value||(e.value=r),e.defaultValue=r}a=e.name,a!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,a!==""&&(e.name=a)}function Ut(e,r,a){(r!=="number"||Ft(e.ownerDocument)!==e)&&(a==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+a&&(e.defaultValue=""+a))}var Ht=Array.isArray;function Ct(e,r,a,c){if(e=e.options,r){r={};for(var T=0;T"+r.valueOf().toString()+"",r=Re.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;r.firstChild;)e.appendChild(r.firstChild)}});function pe(e,r){if(r){var a=e.firstChild;if(a&&a===e.lastChild&&a.nodeType===3){a.nodeValue=r;return}}e.textContent=r}var Ot={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},wt=["Webkit","ms","Moz","O"];Object.keys(Ot).forEach(function(e){wt.forEach(function(r){r=r+e.charAt(0).toUpperCase()+e.substring(1),Ot[r]=Ot[e]})});function ae(e,r,a){return r==null||typeof r=="boolean"||r===""?"":a||typeof r!="number"||r===0||Ot.hasOwnProperty(e)&&Ot[e]?(""+r).trim():r+"px"}function Te(e,r){e=e.style;for(var a in r)if(r.hasOwnProperty(a)){var c=a.indexOf("--")===0,T=ae(a,r[a],c);a==="float"&&(a="cssFloat"),c?e.setProperty(a,T):e[a]=T}}var Ke=Q({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Le(e,r){if(r){if(Ke[e]&&(r.children!=null||r.dangerouslySetInnerHTML!=null))throw Error(u(137,e));if(r.dangerouslySetInnerHTML!=null){if(r.children!=null)throw Error(u(60));if(typeof r.dangerouslySetInnerHTML!="object"||!("__html"in r.dangerouslySetInnerHTML))throw Error(u(61))}if(r.style!=null&&typeof r.style!="object")throw Error(u(62))}}function or(e,r){if(e.indexOf("-")===-1)return typeof r.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var sr=null;function vr(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var nt=null,Et=null,lt=null;function mt(e){if(e=ja(e)){if(typeof nt!="function")throw Error(u(280));var r=e.stateNode;r&&(r=Na(r),nt(e.stateNode,e.type,r))}}function Nt(e){Et?lt?lt.push(e):lt=[e]:Et=e}function Kt(){if(Et){var e=Et,r=lt;if(lt=Et=null,mt(e),r)for(e=0;e>>=0,e===0?32:31-(Vr(e)/Rn|0)|0}var Yr=64,Pr=4194304;function hn(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function un(e,r){var a=e.pendingLanes;if(a===0)return 0;var c=0,T=e.suspendedLanes,M=e.pingedLanes,W=a&268435455;if(W!==0){var q=W&~T;q!==0?c=hn(q):(M&=W,M!==0&&(c=hn(M)))}else W=a&~T,W!==0?c=hn(W):M!==0&&(c=hn(M));if(c===0)return 0;if(r!==0&&r!==c&&!(r&T)&&(T=c&-c,M=r&-r,T>=M||T===16&&(M&4194240)!==0))return r;if(c&4&&(c|=a&16),r=e.entangledLanes,r!==0)for(e=e.entanglements,r&=c;0a;a++)r.push(e);return r}function Hr(e,r,a){e.pendingLanes|=r,r!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,r=31-Fr(r),e[r]=a}function Sn(e,r){var a=e.pendingLanes&~r;e.pendingLanes=r,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=r,e.mutableReadLanes&=r,e.entangledLanes&=r,r=e.entanglements;var c=e.eventTimes;for(e=e.expirationTimes;0=Ja),Pi=" ",Ci=!1;function ms(e,r){switch(e){case"keyup":return mu.indexOf(r.keyCode)!==-1;case"keydown":return r.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function gs(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var co=!1;function ys(e,r){switch(e){case"compositionend":return gs(r);case"keypress":return r.which!==32?null:(Ci=!0,Pi);case"textInput":return e=r.data,e===Pi&&Ci?null:e;default:return null}}function xs(e,r){if(co)return e==="compositionend"||!Ai&&ms(e,r)?(e=Er(),Dr=Xr=nr=null,co=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(r.ctrlKey||r.altKey||r.metaKey)||r.ctrlKey&&r.altKey){if(r.char&&1=r)return{node:a,offset:r-e};e=c}t:{for(;a;){if(a.nextSibling){a=a.nextSibling;break t}a=a.parentNode}a=void 0}a=Es(a)}}function Oa(e,r){return e&&r?e===r?!0:e&&e.nodeType===3?!1:r&&r.nodeType===3?Oa(e,r.parentNode):"contains"in e?e.contains(r):e.compareDocumentPosition?!!(e.compareDocumentPosition(r)&16):!1:!1}function Ts(){for(var e=window,r=Ft();n(r,e.HTMLIFrameElement);){try{var a=typeof r.contentWindow.location.href=="string"}catch(c){a=!1}if(a)e=r.contentWindow;else break;r=Ft(e.document)}return r}function bi(e){var r=e&&e.nodeName&&e.nodeName.toLowerCase();return r&&(r==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||r==="textarea"||e.contentEditable==="true")}function ea(e){var r=Ts(),a=e.focusedElem,c=e.selectionRange;if(r!==a&&a&&a.ownerDocument&&Oa(a.ownerDocument.documentElement,a)){if(c!==null&&bi(a)){if(r=c.start,e=c.end,e===void 0&&(e=r),"selectionStart"in a)a.selectionStart=r,a.selectionEnd=Math.min(e,a.value.length);else if(e=(r=a.ownerDocument||document)&&r.defaultView||window,e.getSelection){e=e.getSelection();var T=a.textContent.length,M=Math.min(c.start,T);c=c.end===void 0?M:Math.min(c.end,T),!e.extend&&M>c&&(T=c,c=M,M=T),T=Os(a,M);var W=Os(a,c);T&&W&&(e.rangeCount!==1||e.anchorNode!==T.node||e.anchorOffset!==T.offset||e.focusNode!==W.node||e.focusOffset!==W.offset)&&(r=r.createRange(),r.setStart(T.node,T.offset),e.removeAllRanges(),M>c?(e.addRange(r),e.extend(W.node,W.offset)):(r.setEnd(W.node,W.offset),e.addRange(r)))}}for(r=[],e=a;e=e.parentNode;)e.nodeType===1&&r.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof a.focus=="function"&&a.focus(),a=0;a=document.documentMode,Co=null,Di=null,Ta=null,Is=!1;function Bi(e,r,a){var c=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;Is||Co==null||Co!==Ft(c)||(c=Co,"selectionStart"in c&&bi(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset}),Ta&&Ea(Ta,c)||(Ta=c,c=Ca(Di,"onSelect"),0ba||(e.current=js[ba],js[ba]=null,ba--)}function xr(e,r){ba++,js[ba]=e.current,e.current=r}var $o={},on=eo($o),mn=eo(!1),Ko=$o;function Vo(e,r){var a=e.type.contextTypes;if(!a)return $o;var c=e.stateNode;if(c&&c.__reactInternalMemoizedUnmaskedChildContext===r)return c.__reactInternalMemoizedMaskedChildContext;var T={},M;for(M in a)T[M]=r[M];return c&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=r,e.__reactInternalMemoizedMaskedChildContext=T),T}function On(e){return e=e.childContextTypes,e!=null}function Zi(){Tr(mn),Tr(on)}function aa(e,r,a){if(on.current!==$o)throw Error(u(168));xr(on,r),xr(mn,a)}function Ns(e,r,a){var c=e.stateNode;if(r=r.childContextTypes,typeof c.getChildContext!="function")return a;c=c.getChildContext();for(var T in c)if(!(T in r))throw Error(u(108,pt(e)||"Unknown",T));return Q({},a,c)}function Ji(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||$o,Ko=on.current,xr(on,e),xr(mn,mn.current),!0}function qi(e,r,a){var c=e.stateNode;if(!c)throw Error(u(169));a?(e=Ns(e,r,Ko),c.__reactInternalMemoizedMergedChildContext=e,Tr(mn),Tr(on),xr(on,e)):Tr(mn),xr(mn,a)}var kn=null,oi=!1,_i=!1;function ai(e){kn===null?kn=[e]:kn.push(e)}function Mu(e){oi=!0,ai(e)}function mo(){if(!_i&&kn!==null){_i=!0;var e=0,r=ir;try{var a=kn;for(ir=1;e>=W,T-=W,yo=1<<32-Fr(r)+T|a<qe?(sn=Ye,Ye=null):sn=Ye.sibling;var mr=_t(It,Ye,Pt[qe],he);if(mr===null){Ye===null&&(Ye=sn);break}e&&Ye&&mr.alternate===null&&r(It,Ye),St=M(mr,St,qe),ke===null?Be=mr:ke.sibling=mr,ke=mr,Ye=sn}if(qe===Pt.length)return a(It,Ye),jr&&ia(It,qe),Be;if(Ye===null){for(;qeqe?(sn=Ye,Ye=null):sn=Ye.sibling;var va=_t(It,Ye,mr.value,he);if(va===null){Ye===null&&(Ye=sn);break}e&&Ye&&va.alternate===null&&r(It,Ye),St=M(va,St,qe),ke===null?Be=va:ke.sibling=va,ke=va,Ye=sn}if(mr.done)return a(It,Ye),jr&&ia(It,qe),Be;if(Ye===null){for(;!mr.done;qe++,mr=Pt.next())mr=re(It,mr.value,he),mr!==null&&(St=M(mr,St,qe),ke===null?Be=mr:ke.sibling=mr,ke=mr);return jr&&ia(It,qe),Be}for(Ye=c(It,Ye);!mr.done;qe++,mr=Pt.next())mr=Ce(Ye,It,qe,mr.value,he),mr!==null&&(e&&mr.alternate!==null&&Ye.delete(mr.key===null?qe:mr.key),St=M(mr,St,qe),ke===null?Be=mr:ke.sibling=mr,ke=mr);return e&&Ye.forEach(function(mf){return r(It,mf)}),jr&&ia(It,qe),Be}function kr(It,St,Pt,he){if(typeof Pt=="object"&&Pt!==null&&Pt.type===K&&Pt.key===null&&(Pt=Pt.props.children),typeof Pt=="object"&&Pt!==null){switch(Pt.$$typeof){case L:t:{for(var Be=Pt.key,ke=St;ke!==null;){if(ke.key===Be){if(Be=Pt.type,Be===K){if(ke.tag===7){a(It,ke.sibling),St=T(ke,Pt.props.children),St.return=It,It=St;break t}}else if(ke.elementType===Be||typeof Be=="object"&&Be!==null&&Be.$$typeof===$&&st(Be)===ke.type){a(It,ke.sibling),St=T(ke,Pt.props),St.ref=ut(It,ke,Pt),St.return=It,It=St;break t}a(It,ke);break}else r(It,ke);ke=ke.sibling}Pt.type===K?(St=Ga(Pt.props.children,It.mode,he,Pt.key),St.return=It,It=St):(he=qs(Pt.type,Pt.key,Pt.props,null,It.mode,he),he.ref=ut(It,St,Pt),he.return=It,It=he)}return W(It);case z:t:{for(ke=Pt.key;St!==null;){if(St.key===ke)if(St.tag===4&&St.stateNode.containerInfo===Pt.containerInfo&&St.stateNode.implementation===Pt.implementation){a(It,St.sibling),St=T(St,Pt.children||[]),St.return=It,It=St;break t}else{a(It,St);break}else r(It,St);St=St.sibling}St=cl(Pt,It.mode,he),St.return=It,It=St}return W(It);case $:return ke=Pt._init,kr(It,St,ke(Pt._payload),he)}if(Ht(Pt))return Ne(It,St,Pt,he);if(G(Pt))return be(It,St,Pt,he);et(It,Pt)}return typeof Pt=="string"&&Pt!==""||typeof Pt=="number"?(Pt=""+Pt,St!==null&&St.tag===6?(a(It,St.sibling),St=T(St,Pt),St.return=It,It=St):(a(It,St),St=ll(Pt,It.mode,he),St.return=It,It=St),W(It)):a(It,St)}return kr}var zt=Dt(!0),Mt=Dt(!1),Xt=eo(null),se=null,ue=null,le=null;function Ie(){le=ue=se=null}function De(e){var r=Xt.current;Tr(Xt),e._currentValue=r}function Qt(e,r,a){for(;e!==null;){var c=e.alternate;if((e.childLanes&r)!==r?(e.childLanes|=r,c!==null&&(c.childLanes|=r)):c!==null&&(c.childLanes&r)!==r&&(c.childLanes|=r),e===a)break;e=e.return}}function Ee(e,r){se=e,le=ue=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&r&&(zn=!0),e.firstContext=null)}function Ae(e){var r=e._currentValue;if(le!==e)if(e={context:e,memoizedValue:r,next:null},ue===null){if(se===null)throw Error(u(308));ue=e,se.dependencies={lanes:0,firstContext:e}}else ue=ue.next=e;return r}var Ze=null;function $e(e){Ze===null?Ze=[e]:Ze.push(e)}function _e(e,r,a,c){var T=r.interleaved;return T===null?(a.next=a,$e(r)):(a.next=T.next,T.next=a),r.interleaved=a,oe(e,c)}function oe(e,r){e.lanes|=r;var a=e.alternate;for(a!==null&&(a.lanes|=r),a=e,e=e.return;e!==null;)e.childLanes|=r,a=e.alternate,a!==null&&(a.childLanes|=r),a=e,e=e.return;return a.tag===3?a.stateNode:null}var Fe=!1;function He(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function cr(e,r){e=e.updateQueue,r.updateQueue===e&&(r.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function yr(e,r){return{eventTime:e,lane:r,tag:0,payload:null,callback:null,next:null}}function zr(e,r,a){var c=e.updateQueue;if(c===null)return null;if(c=c.shared,hr&2){var T=c.pending;return T===null?r.next=r:(r.next=T.next,T.next=r),c.pending=r,oe(e,a)}return T=c.interleaved,T===null?(r.next=r,$e(c)):(r.next=T.next,T.next=r),c.interleaved=r,oe(e,a)}function Sr(e,r,a){if(r=r.updateQueue,r!==null&&(r=r.shared,(a&4194240)!==0)){var c=r.lanes;c&=e.pendingLanes,a|=c,r.lanes=a,cn(e,a)}}function qr(e,r){var a=e.updateQueue,c=e.alternate;if(c!==null&&(c=c.updateQueue,a===c)){var T=null,M=null;if(a=a.firstBaseUpdate,a!==null){do{var W={eventTime:a.eventTime,lane:a.lane,tag:a.tag,payload:a.payload,callback:a.callback,next:null};M===null?T=M=W:M=M.next=W,a=a.next}while(a!==null);M===null?T=M=r:M=M.next=r}else T=M=r;a={baseState:c.baseState,firstBaseUpdate:T,lastBaseUpdate:M,shared:c.shared,effects:c.effects},e.updateQueue=a;return}e=a.lastBaseUpdate,e===null?a.firstBaseUpdate=r:e.next=r,a.lastBaseUpdate=r}function Fn(e,r,a,c){var T=e.updateQueue;Fe=!1;var M=T.firstBaseUpdate,W=T.lastBaseUpdate,q=T.shared.pending;if(q!==null){T.shared.pending=null;var gt=q,Lt=gt.next;gt.next=null,W===null?M=Lt:W.next=Lt,W=gt;var Wt=e.alternate;Wt!==null&&(Wt=Wt.updateQueue,q=Wt.lastBaseUpdate,q!==W&&(q===null?Wt.firstBaseUpdate=Lt:q.next=Lt,Wt.lastBaseUpdate=gt))}if(M!==null){var re=T.baseState;W=0,Wt=Lt=gt=null,q=M;do{var _t=q.lane,Ce=q.eventTime;if((c&_t)===_t){Wt!==null&&(Wt=Wt.next={eventTime:Ce,lane:0,tag:q.tag,payload:q.payload,callback:q.callback,next:null});t:{var Ne=e,be=q;switch(_t=r,Ce=a,be.tag){case 1:if(Ne=be.payload,typeof Ne=="function"){re=Ne.call(Ce,re,_t);break t}re=Ne;break t;case 3:Ne.flags=Ne.flags&-65537|128;case 0:if(Ne=be.payload,_t=typeof Ne=="function"?Ne.call(Ce,re,_t):Ne,_t==null)break t;re=Q({},re,_t);break t;case 2:Fe=!0}}q.callback!==null&&q.lane!==0&&(e.flags|=64,_t=T.effects,_t===null?T.effects=[q]:_t.push(q))}else Ce={eventTime:Ce,lane:_t,tag:q.tag,payload:q.payload,callback:q.callback,next:null},Wt===null?(Lt=Wt=Ce,gt=re):Wt=Wt.next=Ce,W|=_t;if(q=q.next,q===null){if(q=T.shared.pending,q===null)break;_t=q,q=_t.next,_t.next=null,T.lastBaseUpdate=_t,T.shared.pending=null}}while(!0);if(Wt===null&&(gt=re),T.baseState=gt,T.firstBaseUpdate=Lt,T.lastBaseUpdate=Wt,r=T.shared.interleaved,r!==null){T=r;do W|=T.lane,T=T.next;while(T!==r)}else M===null&&(T.shared.lanes=0);$a|=W,e.lanes=W,e.memoizedState=re}}function pr(e,r,a){if(e=r.effects,r.effects=null,e!==null)for(r=0;ra?a:4,e(!0);var c=es.transition;es.transition={};try{e(!1),r()}finally{ir=a,es.transition=c}}function zl(){return In().memoizedState}function zc(e,r,a){var c=ca(e);if(a={lane:c,action:a,hasEagerState:!1,eagerState:null,next:null},Wl(e))$l(r,a);else if(a=_e(e,r,a,c),a!==null){var T=Pn();To(a,e,c,T),Kl(a,r,c)}}function Wc(e,r,a){var c=ca(e),T={lane:c,action:a,hasEagerState:!1,eagerState:null,next:null};if(Wl(e))$l(r,T);else{var M=e.alternate;if(e.lanes===0&&(M===null||M.lanes===0)&&(M=r.lastRenderedReducer,M!==null))try{var W=r.lastRenderedState,q=M(W,a);if(T.hasEagerState=!0,T.eagerState=q,bn(q,W)){var gt=r.interleaved;gt===null?(T.next=T,$e(r)):(T.next=gt.next,gt.next=T),r.interleaved=T;return}}catch(Lt){}finally{}a=_e(e,r,T,c),a!==null&&(T=Pn(),To(a,e,c,T),Kl(a,r,c))}}function Wl(e){var r=e.alternate;return e===Rr||r!==null&&r===Rr}function $l(e,r){Yn=ui=!0;var a=e.pending;a===null?r.next=r:(r.next=a.next,a.next=r),e.pending=r}function Kl(e,r,a){if(a&4194240){var c=r.lanes;c&=e.pendingLanes,a|=c,r.lanes=a,cn(e,a)}}var Us={readContext:Ae,useCallback:tn,useContext:tn,useEffect:tn,useImperativeHandle:tn,useInsertionEffect:tn,useLayoutEffect:tn,useMemo:tn,useReducer:tn,useRef:tn,useState:tn,useDebugValue:tn,useDeferredValue:tn,useTransition:tn,useMutableSource:tn,useSyncExternalStore:tn,useId:tn,unstable_isNewReconciler:!1},$c={readContext:Ae,useCallback:function(r,a){return Xn().memoizedState=[r,a===void 0?null:a],r},useContext:Ae,useEffect:jl,useImperativeHandle:function(r,a,c){return c=c!=null?c.concat([r]):null,Bs(4194308,4,Ll.bind(null,a,r),c)},useLayoutEffect:function(r,a){return Bs(4194308,4,r,a)},useInsertionEffect:function(r,a){return Bs(4,2,r,a)},useMemo:function(r,a){var c=Xn();return a=a===void 0?null:a,r=r(),c.memoizedState=[r,a],r},useReducer:function(r,a,c){var T=Xn();return a=c!==void 0?c(a):a,T.memoizedState=T.baseState=a,r={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:r,lastRenderedState:a},T.queue=r,r=r.dispatch=zc.bind(null,Rr,r),[T.memoizedState,r]},useRef:function(r){var a=Xn();return r={current:r},a.memoizedState=r},useState:wl,useDebugValue:Bu,useDeferredValue:function(r){return Xn().memoizedState=r},useTransition:function(){var r=wl(!1),a=r[0];return r=Uc.bind(null,r[1]),Xn().memoizedState=r,[a,r]},useMutableSource:function(){},useSyncExternalStore:function(r,a,c){var T=Rr,M=Xn();if(jr){if(c===void 0)throw Error(u(407));c=c()}else{if(c=a(),an===null)throw Error(u(349));Ho&30||Il(T,a,c)}M.memoizedState=c;var W={value:c,getSnapshot:a};return M.queue=W,jl(Pl.bind(null,T,W,r),[r]),T.flags|=2048,ns(9,Al.bind(null,T,W,c,a),void 0,null),c},useId:function(){var r=Xn(),a=an.identifierPrefix;if(jr){var c=Mo,T=yo;c=(T&~(1<<32-Fr(T)-1)).toString(32)+c,a=":"+a+"R"+c,c=No++,0<\/script>",e=e.removeChild(e.firstChild)):typeof c.is=="string"?e=W.createElement(a,{is:c.is}):(e=W.createElement(a),a==="select"&&(W=e,c.multiple?W.multiple=!0:c.size&&(W.size=c.size))):e=W.createElementNS(e,a),e[Gn]=r,e[Wo]=c,uc(e,r,!1,!1),r.stateNode=e;t:{switch(W=or(a,c),a){case"dialog":Or("cancel",e),Or("close",e),T=c;break;case"iframe":case"object":case"embed":Or("load",e),T=c;break;case"video":case"audio":for(T=0;Thi&&(r.flags|=128,c=!0,os(M,!1),r.lanes=4194304)}else{if(!c)if(e=si(W),e!==null){if(r.flags|=128,c=!0,a=e.updateQueue,a!==null&&(r.updateQueue=a,r.flags|=4),os(M,!0),M.tail===null&&M.tailMode==="hidden"&&!W.alternate&&!jr)return yn(r),null}else 2*Qe()-M.renderingStartTime>hi&&a!==1073741824&&(r.flags|=128,c=!0,os(M,!1),r.lanes=4194304);M.isBackwards?(W.sibling=r.child,r.child=W):(a=M.last,a!==null?a.sibling=W:r.child=W,M.last=W)}return M.tail!==null?(r=M.tail,M.rendering=r,M.tail=r.sibling,M.renderingStartTime=Qe(),r.sibling=null,a=Ar.current,xr(Ar,c?a&1|2:a&1),r):(yn(r),null);case 22:case 23:return il(),c=r.memoizedState!==null,e!==null&&e.memoizedState!==null!==c&&(r.flags|=8192),c&&r.mode&1?Qn&1073741824&&(yn(r),r.subtreeFlags&6&&(r.flags|=8192)):yn(r),null;case 24:return null;case 25:return null}throw Error(u(156,r.tag))}function Qc(e,r){switch(Ls(r),r.tag){case 1:return On(r.type)&&Zi(),e=r.flags,e&65536?(r.flags=e&-65537|128,r):null;case 3:return no(),Tr(mn),Tr(on),ts(),e=r.flags,e&65536&&!(e&128)?(r.flags=e&-65537|128,r):null;case 5:return xo(r),null;case 13:if(Tr(Ar),e=r.memoizedState,e!==null&&e.dehydrated!==null){if(r.alternate===null)throw Error(u(340));U()}return e=r.flags,e&65536?(r.flags=e&-65537|128,r):null;case 19:return Tr(Ar),null;case 4:return no(),null;case 10:return De(r.type._context),null;case 22:case 23:return il(),null;case 24:return null;default:return null}}var Ks=!1,xn=!1,Zc=typeof WeakSet=="function"?WeakSet:Set,Me=null;function di(e,r){var a=e.ref;if(a!==null)if(typeof a=="function")try{a(null)}catch(c){$r(e,r,c)}else a.current=null}function Xu(e,r,a){try{a()}catch(c){$r(e,r,c)}}var fc=!1;function Jc(e,r){if(Ki=Vn,e=Ts(),bi(e)){if("selectionStart"in e)var a={start:e.selectionStart,end:e.selectionEnd};else t:{a=(a=e.ownerDocument)&&a.defaultView||window;var c=a.getSelection&&a.getSelection();if(c&&c.rangeCount!==0){a=c.anchorNode;var T=c.anchorOffset,M=c.focusNode;c=c.focusOffset;try{a.nodeType,M.nodeType}catch(he){a=null;break t}var W=0,q=-1,gt=-1,Lt=0,Wt=0,re=e,_t=null;e:for(;;){for(var Ce;re!==a||T!==0&&re.nodeType!==3||(q=W+T),re!==M||c!==0&&re.nodeType!==3||(gt=W+c),re.nodeType===3&&(W+=re.nodeValue.length),(Ce=re.firstChild)!==null;)_t=re,re=Ce;for(;;){if(re===e)break e;if(_t===a&&++Lt===T&&(q=W),_t===M&&++Wt===c&&(gt=W),(Ce=re.nextSibling)!==null)break;re=_t,_t=re.parentNode}re=Ce}a=q===-1||gt===-1?null:{start:q,end:gt}}else a=null}a=a||{start:0,end:0}}else a=null;for(Vi={focusedElem:e,selectionRange:a},Vn=!1,Me=r;Me!==null;)if(r=Me,e=r.child,(r.subtreeFlags&1028)!==0&&e!==null)e.return=r,Me=e;else for(;Me!==null;){r=Me;try{var Ne=r.alternate;if(r.flags&1024)switch(r.tag){case 0:case 11:case 15:break;case 1:if(Ne!==null){var be=Ne.memoizedProps,kr=Ne.memoizedState,It=r.stateNode,St=It.getSnapshotBeforeUpdate(r.elementType===r.type?be:So(r.type,be),kr);It.__reactInternalSnapshotBeforeUpdate=St}break;case 3:var Pt=r.stateNode.containerInfo;Pt.nodeType===1?Pt.textContent="":Pt.nodeType===9&&Pt.documentElement&&Pt.removeChild(Pt.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(u(163))}}catch(he){$r(r,r.return,he)}if(e=r.sibling,e!==null){e.return=r.return,Me=e;break}Me=r.return}return Ne=fc,fc=!1,Ne}function as(e,r,a){var c=r.updateQueue;if(c=c!==null?c.lastEffect:null,c!==null){var T=c=c.next;do{if((T.tag&e)===e){var M=T.destroy;T.destroy=void 0,M!==void 0&&Xu(r,a,M)}T=T.next}while(T!==c)}}function Vs(e,r){if(r=r.updateQueue,r=r!==null?r.lastEffect:null,r!==null){var a=r=r.next;do{if((a.tag&e)===e){var c=a.create;a.destroy=c()}a=a.next}while(a!==r)}}function Qu(e){var r=e.ref;if(r!==null){var a=e.stateNode;switch(e.tag){case 5:e=a;break;default:e=a}typeof r=="function"?r(e):r.current=e}}function dc(e){var r=e.alternate;r!==null&&(e.alternate=null,dc(r)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(r=e.stateNode,r!==null&&(delete r[Gn],delete r[Wo],delete r[Xi],delete r[Qi],delete r[wu])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function vc(e){return e.tag===5||e.tag===3||e.tag===4}function hc(e){t:for(;;){for(;e.sibling===null;){if(e.return===null||vc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue t;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Zu(e,r,a){var c=e.tag;if(c===5||c===6)e=e.stateNode,r?a.nodeType===8?a.parentNode.insertBefore(e,r):a.insertBefore(e,r):(a.nodeType===8?(r=a.parentNode,r.insertBefore(e,a)):(r=a,r.appendChild(e)),a=a._reactRootContainer,a!=null||r.onclick!==null||(r.onclick=ni));else if(c!==4&&(e=e.child,e!==null))for(Zu(e,r,a),e=e.sibling;e!==null;)Zu(e,r,a),e=e.sibling}function Ju(e,r,a){var c=e.tag;if(c===5||c===6)e=e.stateNode,r?a.insertBefore(e,r):a.appendChild(e);else if(c!==4&&(e=e.child,e!==null))for(Ju(e,r,a),e=e.sibling;e!==null;)Ju(e,r,a),e=e.sibling}var dn=null,Eo=!1;function sa(e,r,a){for(a=a.child;a!==null;)pc(e,r,a),a=a.sibling}function pc(e,r,a){if(br&&typeof br.onCommitFiberUnmount=="function")try{br.onCommitFiberUnmount(fr,a)}catch(q){}switch(a.tag){case 5:xn||di(a,r);case 6:var c=dn,T=Eo;dn=null,sa(e,r,a),dn=c,Eo=T,dn!==null&&(Eo?(e=dn,a=a.stateNode,e.nodeType===8?e.parentNode.removeChild(a):e.removeChild(a)):dn.removeChild(a.stateNode));break;case 18:dn!==null&&(Eo?(e=dn,a=a.stateNode,e.nodeType===8?Ma(e.parentNode,a):e.nodeType===1&&Ma(e,a),Po(e)):Ma(dn,a.stateNode));break;case 4:c=dn,T=Eo,dn=a.stateNode.containerInfo,Eo=!0,sa(e,r,a),dn=c,Eo=T;break;case 0:case 11:case 14:case 15:if(!xn&&(c=a.updateQueue,c!==null&&(c=c.lastEffect,c!==null))){T=c=c.next;do{var M=T,W=M.destroy;M=M.tag,W!==void 0&&(M&2||M&4)&&Xu(a,r,W),T=T.next}while(T!==c)}sa(e,r,a);break;case 1:if(!xn&&(di(a,r),c=a.stateNode,typeof c.componentWillUnmount=="function"))try{c.props=a.memoizedProps,c.state=a.memoizedState,c.componentWillUnmount()}catch(q){$r(a,r,q)}sa(e,r,a);break;case 21:sa(e,r,a);break;case 22:a.mode&1?(xn=(c=xn)||a.memoizedState!==null,sa(e,r,a),xn=c):sa(e,r,a);break;default:sa(e,r,a)}}function mc(e){var r=e.updateQueue;if(r!==null){e.updateQueue=null;var a=e.stateNode;a===null&&(a=e.stateNode=new Zc),r.forEach(function(c){var T=sf.bind(null,e,c);a.has(c)||(a.add(c),c.then(T,T))})}}function Oo(e,r){var a=r.deletions;if(a!==null)for(var c=0;cT&&(T=W),c&=~M}if(c=T,c=Qe()-c,c=(120>c?120:480>c?480:1080>c?1080:1920>c?1920:3e3>c?3e3:4320>c?4320:1960*_c(c/1960))-c,10e?16:e,la===null)var c=!1;else{if(e=la,la=null,Xs=0,hr&6)throw Error(u(331));var T=hr;for(hr|=4,Me=e.current;Me!==null;){var M=Me,W=M.child;if(Me.flags&16){var q=M.deletions;if(q!==null){for(var gt=0;gtQe()-tl?Va(e,0):_u|=a),$n(e,r)}function wc(e,r){r===0&&(e.mode&1?(r=Pr,Pr<<=1,!(Pr&130023424)&&(Pr=4194304)):r=1);var a=Pn();e=oe(e,r),e!==null&&(Hr(e,r,a),$n(e,a))}function af(e){var r=e.memoizedState,a=0;r!==null&&(a=r.retryLane),wc(e,a)}function sf(e,r){var a=0;switch(e.tag){case 13:var c=e.stateNode,T=e.memoizedState;T!==null&&(a=T.retryLane);break;case 19:c=e.stateNode;break;default:throw Error(u(314))}c!==null&&c.delete(r),wc(e,a)}var Mc;Mc=function(r,a,c){if(r!==null)if(r.memoizedProps!==a.pendingProps||mn.current)zn=!0;else{if(!(r.lanes&c)&&!(a.flags&128))return zn=!1,Yc(r,a,c);zn=!!(r.flags&131072)}else zn=!1,jr&&a.flags&1048576&&ii(a,Ba,a.index);switch(a.lanes=0,a.tag){case 2:var T=a.type;$s(r,a),r=a.pendingProps;var M=Vo(a,on.current);Ee(a,c),M=li(null,a,T,r,M,c);var W=ci();return a.flags|=1,typeof M=="object"&&M!==null&&typeof M.render=="function"&&M.$$typeof===void 0?(a.tag=1,a.memoizedState=null,a.updateQueue=null,On(T)?(W=!0,Ji(a)):W=!1,a.memoizedState=M.state!==null&&M.state!==void 0?M.state:null,He(a),M.updater=zs,a.stateNode=M,M._reactInternals=a,Uu(a,T,r,c),a=Ku(null,a,T,!0,W,c)):(a.tag=0,jr&&W&&bs(a),An(null,a,M,c),a=a.child),a;case 16:T=a.elementType;t:{switch($s(r,a),r=a.pendingProps,M=T._init,T=M(T._payload),a.type=T,M=a.tag=lf(T),r=So(T,r),M){case 0:a=$u(null,a,T,r,c);break t;case 1:a=rc(null,a,T,r,c);break t;case 11:a=Jl(null,a,T,r,c);break t;case 14:a=ql(null,a,T,So(T.type,r),c);break t}throw Error(u(306,T,""))}return a;case 0:return T=a.type,M=a.pendingProps,M=a.elementType===T?M:So(T,M),$u(r,a,T,M,c);case 1:return T=a.type,M=a.pendingProps,M=a.elementType===T?M:So(T,M),rc(r,a,T,M,c);case 3:t:{if(nc(a),r===null)throw Error(u(387));T=a.pendingProps,W=a.memoizedState,M=W.element,cr(r,a),Fn(a,T,null,c);var q=a.memoizedState;if(T=q.element,W.isDehydrated)if(W={element:T,isDehydrated:!1,cache:q.cache,pendingSuspenseBoundaries:q.pendingSuspenseBoundaries,transitions:q.transitions},a.updateQueue.baseState=W,a.memoizedState=W,a.flags&256){M=fi(Error(u(423)),a),a=oc(r,a,T,c,M);break t}else if(T!==M){M=fi(Error(u(424)),a),a=oc(r,a,T,c,M);break t}else for(Bn=Hn(a.stateNode.containerInfo.firstChild),Dn=a,jr=!0,Tn=null,c=Mt(a,null,T,c),a.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{if(U(),T===M){a=Go(r,a,c);break t}An(r,a,T,c)}a=a.child}return a;case 5:return Fa(a),r===null&&y(a),T=a.type,M=a.pendingProps,W=r!==null?r.memoizedProps:null,q=M.children,wa(T,M)?q=null:W!==null&&wa(T,W)&&(a.flags|=32),ec(r,a),An(r,a,q,c),a.child;case 6:return r===null&&y(a),null;case 13:return ac(r,a,c);case 4:return ro(a,a.stateNode.containerInfo),T=a.pendingProps,r===null?a.child=zt(a,null,T,c):An(r,a,T,c),a.child;case 11:return T=a.type,M=a.pendingProps,M=a.elementType===T?M:So(T,M),Jl(r,a,T,M,c);case 7:return An(r,a,a.pendingProps,c),a.child;case 8:return An(r,a,a.pendingProps.children,c),a.child;case 12:return An(r,a,a.pendingProps.children,c),a.child;case 10:t:{if(T=a.type._context,M=a.pendingProps,W=a.memoizedProps,q=M.value,xr(Xt,T._currentValue),T._currentValue=q,W!==null)if(bn(W.value,q)){if(W.children===M.children&&!mn.current){a=Go(r,a,c);break t}}else for(W=a.child,W!==null&&(W.return=a);W!==null;){var gt=W.dependencies;if(gt!==null){q=W.child;for(var Lt=gt.firstContext;Lt!==null;){if(Lt.context===T){if(W.tag===1){Lt=yr(-1,c&-c),Lt.tag=2;var Wt=W.updateQueue;if(Wt!==null){Wt=Wt.shared;var re=Wt.pending;re===null?Lt.next=Lt:(Lt.next=re.next,re.next=Lt),Wt.pending=Lt}}W.lanes|=c,Lt=W.alternate,Lt!==null&&(Lt.lanes|=c),Qt(W.return,c,a),gt.lanes|=c;break}Lt=Lt.next}}else if(W.tag===10)q=W.type===a.type?null:W.child;else if(W.tag===18){if(q=W.return,q===null)throw Error(u(341));q.lanes|=c,gt=q.alternate,gt!==null&&(gt.lanes|=c),Qt(q,c,a),q=W.sibling}else q=W.child;if(q!==null)q.return=W;else for(q=W;q!==null;){if(q===a){q=null;break}if(W=q.sibling,W!==null){W.return=q.return,q=W;break}q=q.return}W=q}An(r,a,M.children,c),a=a.child}return a;case 9:return M=a.type,T=a.pendingProps.children,Ee(a,c),M=Ae(M),T=T(M),a.flags|=1,An(r,a,T,c),a.child;case 14:return T=a.type,M=So(T,a.pendingProps),M=So(T.type,M),ql(r,a,T,M,c);case 15:return _l(r,a,a.type,a.pendingProps,c);case 17:return T=a.type,M=a.pendingProps,M=a.elementType===T?M:So(T,M),$s(r,a),a.tag=1,On(T)?(r=!0,Ji(a)):r=!1,Ee(a,c),Hl(a,T,M),Uu(a,T,M,c),Ku(null,a,T,!0,r,c);case 19:return sc(r,a,c);case 22:return tc(r,a,c)}throw Error(u(156,a.tag))};function jc(e,r){return ye(e,r)}function uf(e,r,a,c){this.tag=e,this.key=a,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=r,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=c,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function ao(e,r,a,c){return new uf(e,r,a,c)}function ul(e){return e=e.prototype,!(!e||!e.isReactComponent)}function lf(e){if(typeof e=="function")return ul(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Y)return 11;if(e===_)return 14}return 2}function da(e,r){var a=e.alternate;return a===null?(a=ao(e.tag,r,e.key,e.mode),a.elementType=e.elementType,a.type=e.type,a.stateNode=e.stateNode,a.alternate=e,e.alternate=a):(a.pendingProps=r,a.type=e.type,a.flags=0,a.subtreeFlags=0,a.deletions=null),a.flags=e.flags&14680064,a.childLanes=e.childLanes,a.lanes=e.lanes,a.child=e.child,a.memoizedProps=e.memoizedProps,a.memoizedState=e.memoizedState,a.updateQueue=e.updateQueue,r=e.dependencies,a.dependencies=r===null?null:{lanes:r.lanes,firstContext:r.firstContext},a.sibling=e.sibling,a.index=e.index,a.ref=e.ref,a}function qs(e,r,a,c,T,M){var W=2;if(c=e,typeof e=="function")ul(e)&&(W=1);else if(typeof e=="string")W=5;else t:switch(e){case K:return Ga(a.children,T,M,r);case k:W=8,T|=8;break;case J:return e=ao(12,a,r,T|2),e.elementType=J,e.lanes=M,e;case it:return e=ao(13,a,r,T),e.elementType=it,e.lanes=M,e;case at:return e=ao(19,a,r,T),e.elementType=at,e.lanes=M,e;case V:return _s(a,T,M,r);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case H:W=10;break t;case X:W=9;break t;case Y:W=11;break t;case _:W=14;break t;case $:W=16,c=null;break t}throw Error(u(130,e==null?e:typeof e=="undefined"?"undefined":o(e),""))}return r=ao(W,a,r,T),r.elementType=e,r.type=c,r.lanes=M,r}function Ga(e,r,a,c){return e=ao(7,e,c,r),e.lanes=a,e}function _s(e,r,a,c){return e=ao(22,e,c,r),e.elementType=V,e.lanes=a,e.stateNode={isHidden:!1},e}function ll(e,r,a){return e=ao(6,e,null,r),e.lanes=a,e}function cl(e,r,a){return r=ao(4,e.children!==null?e.children:[],e.key,r),r.lanes=a,r.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},r}function cf(e,r,a,c,T){this.tag=r,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Zn(0),this.expirationTimes=Zn(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Zn(0),this.identifierPrefix=c,this.onRecoverableError=T,this.mutableSourceEagerHydrationData=null}function fl(e,r,a,c,T,M,W,q,gt){return e=new cf(e,r,a,q,gt),r===1?(r=1,M===!0&&(r|=8)):r=0,M=ao(3,null,null,r),e.current=M,M.stateNode=e,M.memoizedState={element:c,isDehydrated:a,cache:null,transitions:null,pendingSuspenseBoundaries:null},He(M),e}function ff(e,r,a){var c=3At.length)&&(Tt=At.length);for(var $t=0,Jt=new Array(Tt);$t1?$t-1:0),Pe=1;Pe<$t;Pe++)Jt[Pe-1]=arguments[Pe];return B(At,Tt,Jt)}}function at(At){return function(){for(var Tt=arguments.length,$t=new Array(Tt),Jt=0;Jt/gm),ee=w(/\${[\w\W]*}/gm),Rt=w(/^data-[\-\w.\u00B7-\uFFFF]/),Ft=w(/^aria-[\-\w]+$/),Yt=w(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),kt=w(/^(?:\w+script|data):/i),de=w(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),ve=w(/^html$/i),ie=w(/^[a-z][.\w]*(-[.\w]+)+$/i),Ut=function(){return typeof window=="undefined"?null:window},Ht=function(Tt,$t){if(t(Tt)!=="object"||typeof Tt.createPolicy!="function")return null;var Jt=null,Pe="data-tt-policy-suffix";$t.currentScript&&$t.currentScript.hasAttribute(Pe)&&(Jt=$t.currentScript.getAttribute(Pe));var Re="dompurify"+(Jt?"#"+Jt:"");try{return Tt.createPolicy(Re,{createHTML:function(pe){return pe},createScriptURL:function(pe){return pe}})}catch(Oe){return console.warn("TrustedTypes policy "+Re+" could not be created."),null}};function Ct(){var At=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Ut(),Tt=function(vt){return Ct(vt)};if(Tt.version="2.5.6",Tt.removed=[],!At||!At.document||At.document.nodeType!==9)return Tt.isSupported=!1,Tt;var $t=At.document,Jt=At.document,Pe=At.DocumentFragment,Re=At.HTMLTemplateElement,Oe=At.Node,pe=At.Element,Ot=At.NodeFilter,wt=At.NamedNodeMap,ae=wt===void 0?At.NamedNodeMap||At.MozNamedAttrMap:wt,Te=At.HTMLFormElement,Ke=At.DOMParser,Le=At.trustedTypes,or=pe.prototype,sr=V(or,"cloneNode"),vr=V(or,"nextSibling"),nt=V(or,"childNodes"),Et=V(or,"parentNode");if(typeof Re=="function"){var lt=Jt.createElement("template");lt.content&<.content.ownerDocument&&(Jt=lt.content.ownerDocument)}var mt=Ht(Le,$t),Nt=mt?mt.createHTML(""):"",Kt=Jt,fe=Kt.implementation,ce=Kt.createNodeIterator,we=Kt.createDocumentFragment,ne=Kt.getElementsByTagName,Ve=$t.importNode,ze={};try{ze=$(Jt).documentMode?Jt.documentMode:{}}catch(je){}var Ue={};Tt.isSupported=typeof Et=="function"&&fe&&fe.createHTMLDocument!==void 0&&ze!==9;var Ge=Se,Xe=xe,tr=ee,We=Rt,ur=Ft,lr=kt,wr=de,rn=ie,ft=Yt,Vt=null,bt=_({},[].concat(s(tt),s(G),s(Q),s(rt),s(dt))),yt=null,Gt=_({},[].concat(s(jt),s(xt),s(pt),s(Bt))),me=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ye=null,er=null,dr=!0,ar=!0,Qe=!1,Zt=!0,Je=!1,Ir=!0,Mr=!1,Kr=!1,Br=!1,fr=!1,br=!1,Cn=!1,Fr=!0,Vr=!1,Rn="user-content-",wn=!0,Yr=!1,Pr={},hn=null,un=_({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Yo=null,io=_({},["audio","video","img","source","image","track"]),ln=null,Lo=_({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Zn="http://www.w3.org/1998/Math/MathML",Hr="http://www.w3.org/2000/svg",Sn="http://www.w3.org/1999/xhtml",cn=Sn,ir=!1,Io=null,so=_({},[Zn,Hr,Sn],z),Mn,ka=["application/xhtml+xml","text/html"],Ya="text/html",Lr,Kn=null,Ao=Jt.createElement("form"),pn=function(vt){return m(vt,RegExp)||m(vt,Function)},jn=function(vt){Kn&&Kn===vt||((!vt||t(vt)!=="object")&&(vt={}),vt=$(vt),Mn=ka.indexOf(vt.PARSER_MEDIA_TYPE)===-1?Mn=Ya:Mn=vt.PARSER_MEDIA_TYPE,Lr=Mn==="application/xhtml+xml"?z:L,Vt="ALLOWED_TAGS"in vt?_({},vt.ALLOWED_TAGS,Lr):bt,yt="ALLOWED_ATTR"in vt?_({},vt.ALLOWED_ATTR,Lr):Gt,Io="ALLOWED_NAMESPACES"in vt?_({},vt.ALLOWED_NAMESPACES,z):so,ln="ADD_URI_SAFE_ATTR"in vt?_($(Lo),vt.ADD_URI_SAFE_ATTR,Lr):Lo,Yo="ADD_DATA_URI_TAGS"in vt?_($(io),vt.ADD_DATA_URI_TAGS,Lr):io,hn="FORBID_CONTENTS"in vt?_({},vt.FORBID_CONTENTS,Lr):un,ye="FORBID_TAGS"in vt?_({},vt.FORBID_TAGS,Lr):{},er="FORBID_ATTR"in vt?_({},vt.FORBID_ATTR,Lr):{},Pr="USE_PROFILES"in vt?vt.USE_PROFILES:!1,dr=vt.ALLOW_ARIA_ATTR!==!1,ar=vt.ALLOW_DATA_ATTR!==!1,Qe=vt.ALLOW_UNKNOWN_PROTOCOLS||!1,Zt=vt.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Je=vt.SAFE_FOR_TEMPLATES||!1,Ir=vt.SAFE_FOR_XML!==!1,Mr=vt.WHOLE_DOCUMENT||!1,fr=vt.RETURN_DOM||!1,br=vt.RETURN_DOM_FRAGMENT||!1,Cn=vt.RETURN_TRUSTED_TYPE||!1,Br=vt.FORCE_BODY||!1,Fr=vt.SANITIZE_DOM!==!1,Vr=vt.SANITIZE_NAMED_PROPS||!1,wn=vt.KEEP_CONTENT!==!1,Yr=vt.IN_PLACE||!1,ft=vt.ALLOWED_URI_REGEXP||ft,cn=vt.NAMESPACE||Sn,me=vt.CUSTOM_ELEMENT_HANDLING||{},vt.CUSTOM_ELEMENT_HANDLING&&pn(vt.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(me.tagNameCheck=vt.CUSTOM_ELEMENT_HANDLING.tagNameCheck),vt.CUSTOM_ELEMENT_HANDLING&&pn(vt.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(me.attributeNameCheck=vt.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),vt.CUSTOM_ELEMENT_HANDLING&&typeof vt.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(me.allowCustomizedBuiltInElements=vt.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Je&&(ar=!1),br&&(fr=!0),Pr&&(Vt=_({},s(dt)),yt=[],Pr.html===!0&&(_(Vt,tt),_(yt,jt)),Pr.svg===!0&&(_(Vt,G),_(yt,xt),_(yt,Bt)),Pr.svgFilters===!0&&(_(Vt,Q),_(yt,xt),_(yt,Bt)),Pr.mathMl===!0&&(_(Vt,rt),_(yt,pt),_(yt,Bt))),vt.ADD_TAGS&&(Vt===bt&&(Vt=$(Vt)),_(Vt,vt.ADD_TAGS,Lr)),vt.ADD_ATTR&&(yt===Gt&&(yt=$(yt)),_(yt,vt.ADD_ATTR,Lr)),vt.ADD_URI_SAFE_ATTR&&_(ln,vt.ADD_URI_SAFE_ATTR,Lr),vt.FORBID_CONTENTS&&(hn===un&&(hn=$(hn)),_(hn,vt.FORBID_CONTENTS,Lr)),wn&&(Vt["#text"]=!0),Mr&&_(Vt,["html","head","body"]),Vt.table&&(_(Vt,["tbody"]),delete ye.tbody),I&&I(vt),Kn=vt)},En=_({},["mi","mo","mn","ms","mtext"]),uo=_({},["foreignobject","annotation-xml"]),Do=_({},["title","style","font","a","script"]),Gr=_({},G);_(Gr,Q),_(Gr,ct);var Xo=_({},rt);_(Xo,ht);var ha=function(vt){var te=Et(vt);(!te||!te.tagName)&&(te={namespaceURI:cn,tagName:"template"});var ge=L(vt.tagName),nr=L(te.tagName);return Io[vt.namespaceURI]?vt.namespaceURI===Hr?te.namespaceURI===Sn?ge==="svg":te.namespaceURI===Zn?ge==="svg"&&(nr==="annotation-xml"||En[nr]):!!Gr[ge]:vt.namespaceURI===Zn?te.namespaceURI===Sn?ge==="math":te.namespaceURI===Hr?ge==="math"&&uo[nr]:!!Xo[ge]:vt.namespaceURI===Sn?te.namespaceURI===Hr&&!uo[nr]||te.namespaceURI===Zn&&!En[nr]?!1:!Xo[ge]&&(Do[ge]||!Gr[ge]):!!(Mn==="application/xhtml+xml"&&Io[vt.namespaceURI]):!1},Cr=function(vt){D(Tt.removed,{element:vt});try{vt.parentNode.removeChild(vt)}catch(te){try{vt.outerHTML=Nt}catch(ge){vt.remove()}}},Jn=function(vt,te){try{D(Tt.removed,{attribute:te.getAttributeNode(vt),from:te})}catch(ge){D(Tt.removed,{attribute:null,from:te})}if(te.removeAttribute(vt),vt==="is"&&!yt[vt])if(fr||br)try{Cr(te)}catch(ge){}else try{te.setAttribute(vt,"")}catch(ge){}},Qo=function(vt){var te,ge;if(Br)vt=""+vt;else{var nr=K(vt,/^[\r\n\t ]+/);ge=nr&&nr[0]}Mn==="application/xhtml+xml"&&cn===Sn&&(vt=''+vt+"");var Xr=mt?mt.createHTML(vt):vt;if(cn===Sn)try{te=new Ke().parseFromString(Xr,Mn)}catch(Er){}if(!te||!te.documentElement){te=fe.createDocument(cn,"template",null);try{te.documentElement.innerHTML=ir?Nt:Xr}catch(Er){}}var Dr=te.body||te.documentElement;return vt&&ge&&Dr.insertBefore(Jt.createTextNode(ge),Dr.childNodes[0]||null),cn===Sn?ne.call(te,Mr?"html":"body")[0]:Mr?te.documentElement:Dr},Ur=function(vt){return ce.call(vt.ownerDocument||vt,vt,Ot.SHOW_ELEMENT|Ot.SHOW_COMMENT|Ot.SHOW_TEXT|Ot.SHOW_PROCESSING_INSTRUCTION|Ot.SHOW_CDATA_SECTION,null,!1)},pa=function(vt){return m(vt,Te)&&(typeof vt.nodeName!="string"||typeof vt.textContent!="string"||typeof vt.removeChild!="function"||!m(vt.attributes,ae)||typeof vt.removeAttribute!="function"||typeof vt.setAttribute!="function"||typeof vt.namespaceURI!="string"||typeof vt.insertBefore!="function"||typeof vt.hasChildNodes!="function")},Bo=function(vt){return t(Oe)==="object"?m(vt,Oe):vt&&t(vt)==="object"&&typeof vt.nodeType=="number"&&typeof vt.nodeName=="string"},fn=function(vt,te,ge){Ue[vt]&&P(Ue[vt],function(nr){nr.call(Tt,te,ge,Kn)})},Po=function(vt){var te;if(fn("beforeSanitizeElements",vt,null),pa(vt)||X(/[\u0080-\uFFFF]/,vt.nodeName))return Cr(vt),!0;var ge=Lr(vt.nodeName);if(fn("uponSanitizeElement",vt,{tagName:ge,allowedTags:Vt}),vt.hasChildNodes()&&!Bo(vt.firstElementChild)&&(!Bo(vt.content)||!Bo(vt.content.firstElementChild))&&X(/<[/\w]/g,vt.innerHTML)&&X(/<[/\w]/g,vt.textContent)||ge==="select"&&X(/