diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index 0111c8484dc..e47b5fcff02 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -11703,7 +11703,7 @@ }) "auD" = ( /obj/machinery/light_construct/small, -/obj/item/toolbox_tiles_sensor, +/obj/item/toolbox_tiles/sensor, /turf/simulated/floor/plating, /area/maintenance/fpmaint2{ name = "Port Maintenance" diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index e3dcc7bcf12..d4b3cdc8c55 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -9787,6 +9787,7 @@ pixel_y = 2 }, /obj/item/stamp/law, +/obj/item/pen/multi, /turf/simulated/floor/plasteel{ tag = "icon-cult"; icon_state = "cult"; diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index b138d19b513..8171efa7825 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -28,6 +28,46 @@ Thus, the two variables affect pump operation are set in New(): var/id = null var/datum/radio_frequency/radio_connection +/obj/machinery/atmospherics/binary/pump/CtrlClick(mob/living/user) + if(!istype(user) || user.incapacitated()) + to_chat(user, "You can't do that right now!") + return + if(!in_range(src, user) && !issilicon(usr)) + return + if(!ishuman(usr) && !issilicon(usr)) + return + toggle() + return ..() + +/obj/machinery/atmospherics/binary/pump/AICtrlClick() + toggle() + return ..() + +/obj/machinery/atmospherics/binary/pump/AltClick(mob/living/user) + if(!istype(user) || user.incapacitated()) + to_chat(user, "You can't do that right now!") + return + if(!in_range(src, user) && !issilicon(usr)) + return + if(!ishuman(usr) && !issilicon(usr)) + return + set_max() + return + +/obj/machinery/atmospherics/binary/pump/AIAltClick() + set_max() + return ..() + +/obj/machinery/atmospherics/binary/pump/proc/toggle() + if(powered()) + on = !on + update_icon() + +/obj/machinery/atmospherics/binary/pump/proc/set_max() + if(powered()) + target_pressure = MAX_OUTPUT_PRESSURE + update_icon() + /obj/machinery/atmospherics/binary/pump/Destroy() if(SSradio) SSradio.remove_object(src, frequency) @@ -203,7 +243,15 @@ Thus, the two variables affect pump operation are set in New(): update_icon() /obj/machinery/atmospherics/binary/pump/attackby(obj/item/W, mob/user, params) - if(!istype(W, /obj/item/wrench)) + if(istype(W, /obj/item/pen)) + var/t = copytext(stripped_input(user, "Enter the name for the pump.", "Rename", name), 1, MAX_NAME_LEN) + if(!t) + return + if(!in_range(src, usr) && loc != usr) + return + name = t + return + else if(!istype(W, /obj/item/wrench)) return ..() if(!(stat & NOPOWER) && on) to_chat(user, "You cannot unwrench this [src], turn it off first.") diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm index 11874172340..6633c1ac10d 100644 --- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm @@ -28,6 +28,46 @@ Thus, the two variables affect pump operation are set in New(): var/id = null var/datum/radio_frequency/radio_connection +/obj/machinery/atmospherics/binary/volume_pump/CtrlClick(mob/living/user) + if(!istype(user) || user.incapacitated()) + to_chat(user, "You can't do that right now!") + return + if(!in_range(src, user) && !issilicon(usr)) + return + if(!ishuman(usr) && !issilicon(usr)) + return + toggle() + return ..() + +/obj/machinery/atmospherics/binary/volume_pump/AICtrlClick() + toggle() + return ..() + +/obj/machinery/atmospherics/binary/volume_pump/AltClick(mob/living/user) + if(!istype(user) || user.incapacitated()) + to_chat(user, "You can't do that right now!") + return + if(!in_range(src, user) && !issilicon(usr)) + return + if(!ishuman(usr) && !issilicon(usr)) + return + set_max() + return + +/obj/machinery/atmospherics/binary/volume_pump/AIAltClick() + set_max() + return ..() + +/obj/machinery/atmospherics/binary/volume_pump/proc/toggle() + if(powered()) + on = !on + update_icon() + +/obj/machinery/atmospherics/binary/volume_pump/proc/set_max() + if(powered()) + transfer_rate = MAX_TRANSFER_RATE + update_icon() + /obj/machinery/atmospherics/binary/volume_pump/Destroy() if(SSradio) SSradio.remove_object(src, frequency) @@ -199,7 +239,15 @@ Thus, the two variables affect pump operation are set in New(): update_icon() /obj/machinery/atmospherics/binary/volume_pump/attackby(obj/item/W, mob/user, params) - if(!istype(W, /obj/item/wrench)) + if(istype(W, /obj/item/pen)) + var/t = copytext(stripped_input(user, "Enter the name for the volume pump.", "Rename", name), 1, MAX_NAME_LEN) + if(!t) + return + if(!in_range(src, usr) && loc != usr) + return + name = t + return + else if(!istype(W, /obj/item/wrench)) return ..() if(!(stat & NOPOWER) && on) to_chat(user, "You cannot unwrench this [src], turn it off first.") diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index c6720e45f6e..a778b01ea86 100755 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -22,6 +22,45 @@ Filter types: var/frequency = 0 var/datum/radio_frequency/radio_connection +/obj/machinery/atmospherics/trinary/filter/CtrlClick(mob/living/user) + if(!istype(user) || user.incapacitated()) + to_chat(user, "You can't do that right now!") + return + if(!in_range(src, user) && !issilicon(usr)) + return + if(!ishuman(usr) && !issilicon(usr)) + return + toggle() + return ..() + +/obj/machinery/atmospherics/trinary/filter/AICtrlClick() + toggle() + return ..() + +/obj/machinery/atmospherics/trinary/filter/AltClick(mob/living/user) + if(!istype(user) || user.incapacitated()) + to_chat(user, "You can't do that right now!") + return + if(!in_range(src, user) && !issilicon(usr)) + return + if(!ishuman(usr) && !issilicon(usr)) + return + set_max() + return + +/obj/machinery/atmospherics/trinary/filter/AIAltClick() + set_max() + return ..() + +/obj/machinery/atmospherics/trinary/filter/proc/toggle() + if(powered()) + on = !on + update_icon() + +/obj/machinery/atmospherics/trinary/filter/proc/set_max() + if(powered()) + target_pressure = MAX_OUTPUT_PRESSURE + update_icon() /obj/machinery/atmospherics/trinary/filter/Destroy() if(SSradio) @@ -211,4 +250,16 @@ Filter types: . = TRUE update_icon() - SSnanoui.update_uis(src) \ No newline at end of file + SSnanoui.update_uis(src) + +/obj/machinery/atmospherics/trinary/filter/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/pen)) + var/t = copytext(stripped_input(user, "Enter the name for the filter.", "Rename", name), 1, MAX_NAME_LEN) + if(!t) + return + if(!in_range(src, usr) && loc != usr) + return + name = t + return + else + return ..() \ No newline at end of file diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm index 0c64804b6da..e7c91172e3b 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm @@ -12,10 +12,50 @@ //node 3 is the outlet, nodes 1 & 2 are intakes +/obj/machinery/atmospherics/trinary/mixer/CtrlClick(mob/living/user) + if(!istype(user) || user.incapacitated()) + to_chat(user, "You can't do that right now!") + return + if(!in_range(src, user) && !issilicon(usr)) + return + if(!ishuman(usr) && !issilicon(usr)) + return + toggle() + return ..() + +/obj/machinery/atmospherics/trinary/mixer/AICtrlClick() + toggle() + return ..() + +/obj/machinery/atmospherics/trinary/mixer/AltClick(mob/living/user) + if(!istype(user) || user.incapacitated()) + to_chat(user, "You can't do that right now!") + return + if(!in_range(src, user) && !issilicon(usr)) + return + if(!ishuman(usr) && !issilicon(usr)) + return + set_max() + return + +/obj/machinery/atmospherics/trinary/mixer/AIAltClick() + set_max() + return ..() + /obj/machinery/atmospherics/trinary/mixer/flipped icon_state = "mmap" flipped = 1 +/obj/machinery/atmospherics/trinary/mixer/proc/toggle() + if(powered()) + on = !on + update_icon() + +/obj/machinery/atmospherics/trinary/mixer/proc/set_max() + if(powered()) + target_pressure = MAX_OUTPUT_PRESSURE + update_icon() + /obj/machinery/atmospherics/trinary/mixer/update_icon(safety = 0) if(flipped) icon_state = "m" @@ -176,4 +216,16 @@ . = TRUE update_icon() - SSnanoui.update_uis(src) \ No newline at end of file + SSnanoui.update_uis(src) + +/obj/machinery/atmospherics/trinary/mixer/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/pen)) + var/t = copytext(stripped_input(user, "Enter the name for the mixer.", "Rename", name), 1, MAX_NAME_LEN) + if(!t) + return + if(!in_range(src, usr) && loc != usr) + return + name = t + return + else + return ..() \ No newline at end of file diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index fd5fd510e40..c567ba7adb2 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -491,7 +491,7 @@ GLOBAL_LIST_INIT(do_after_once_tracker, list()) to_chat(user, "Name = [M.name]; Real_name = [M.real_name]; Mind_name = [M.mind?"[M.mind.name]":""]; Key = [M.key];") to_chat(user, "Location = [location_description];") to_chat(user, "[special_role_description]") - to_chat(user, "(PM) ([ADMIN_PP(M,"PP")]) ([ADMIN_VV(M,"VV")]) ([ADMIN_SM(M,"SM")]) ([ADMIN_FLW(M,"FLW")]) (CA)") + to_chat(user, "(PM) ([ADMIN_PP(M,"PP")]) ([ADMIN_VV(M,"VV")]) ([ADMIN_SM(M,"SM")]) ([ADMIN_FLW(M,"FLW")]) (CA)") // Gets the first mob contained in an atom, and warns the user if there's not exactly one /proc/get_mob_in_atom_with_warning(atom/A, mob/user = usr) diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 5b639cc80f8..b90f7502e65 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -113,9 +113,14 @@ /proc/typing_input(mob/user, message = "", title = "", default = "") if(user.client.checkTyping()) // Prevent double windows return null - user.client.typing = TRUE + var/client/C = user.client // Save it in a var in case the client disconnects from the mob + C.typing = TRUE var/msg = input(user, message, title, default) as text|null - user.client.typing = FALSE + if(!C) + return null + C.typing = FALSE + if(!user || C != user.client) // User got out of the mob for some reason or the mob is gone + return null return msg //Filters out undesirable characters from names diff --git a/code/_globalvars/configuration.dm b/code/_globalvars/configuration.dm index f5234135749..3d7259eef55 100644 --- a/code/_globalvars/configuration.dm +++ b/code/_globalvars/configuration.dm @@ -3,7 +3,7 @@ var/datum/configuration/config = null var/host = null var/join_motd = null GLOBAL_VAR(join_tos) -var/game_version = "Custom ParaCode" +var/game_version = "ParaCode" var/changelog_hash = md5('html/changelog.html') //used to check if the CL changed var/game_year = (text2num(time2text(world.realtime, "YYYY")) + 544) diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 18943100051..5ff132a7ee6 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -19,7 +19,6 @@ GLOBAL_LIST_INIT(navigation_computers, list()) GLOBAL_LIST_INIT(all_areas, list()) GLOBAL_LIST_INIT(machines, list()) -GLOBAL_LIST_INIT(processing_power_items, list()) //items that ask to be called every cycle GLOBAL_LIST_INIT(rcd_list, list()) //list of Rapid Construction Devices. GLOBAL_LIST_INIT(apcs, list()) diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm index 0b8c8d58a95..77443fb4ab2 100644 --- a/code/_globalvars/misc.dm +++ b/code/_globalvars/misc.dm @@ -1,6 +1,9 @@ var/global/obj/effect/overlay/plmaster = null var/global/obj/effect/overlay/slmaster = null +GLOBAL_VAR_INIT(CELLRATE, 0.002) // conversion ratio between a watt-tick and kilojoule +GLOBAL_VAR_INIT(CHARGELEVEL, 0.001) // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second) + // Announcer intercom, because too much stuff creates an intercom for one message then hard del()s it. var/global/obj/item/radio/intercom/global_announcer = create_global_announcer() var/global/obj/item/radio/intercom/command/command_announcer = create_command_announcer() diff --git a/code/_globalvars/station.dm b/code/_globalvars/station.dm index 2d635996b30..e997a672e1f 100644 --- a/code/_globalvars/station.dm +++ b/code/_globalvars/station.dm @@ -1,6 +1,3 @@ var/global/datum/datacore/data_core = null -var/CELLRATE = 0.002 // multiplier for watts per tick <> cell storage (eg: .002 means if there is a load of 1000 watts, 20 units will be taken from a cell per second) -var/CHARGELEVEL = 0.001 // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second) - var/map_name = "Unknown" //The name of the map that is loaded. Assigned in world/New() \ No newline at end of file diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index c84a64722c5..22921f5228d 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -49,7 +49,7 @@ if(!can_see(A)) if(isturf(A)) //On unmodified clients clicking the static overlay clicks the turf underneath return // So there's no point messaging admins - message_admins("[key_name_admin(src)] might be running a modified client! (failed can_see on AI click of [A]([ADMIN_COORDJMP(pixel_turf)]))") + add_attack_logs(src, src, "[key_name_admin(src)] might be running a modified client! (failed can_see on AI click of [A]([ADMIN_COORDJMP(pixel_turf)]))", ATKLOG_ALL) var/message = "[key_name(src)] might be running a modified client! (failed can_see on AI click of [A]([COORD(pixel_turf)]))" log_admin(message) send2irc_adminless_only("NOCHEAT", "[key_name(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)]))") @@ -64,7 +64,7 @@ else if(pixel_turf.obscured) log_admin("[key_name_admin(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)])") - message_admins("[key_name_admin(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([ADMIN_COORDJMP(pixel_turf)]))") + add_attack_logs(src, src, "[key_name_admin(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([ADMIN_COORDJMP(pixel_turf)]))", ATKLOG_ALL) send2irc_adminless_only("NOCHEAT", "[key_name(src)] might be running a modified client! (failed checkTurfVis on AI click of [A]([COORD(pixel_turf)]))") return diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 24e58b502ad..286f8ce7095 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -122,6 +122,10 @@ throw_item(A) return + if(isLivingSSD(A)) + if(client && client.send_ssd_warning(A)) + return + var/obj/item/W = get_active_hand() if(W == A) diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index 32a9d7cf46d..5780e86a298 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -17,6 +17,7 @@ //Hide/Show Action Buttons ... Button /obj/screen/movable/action_button/hide_toggle name = "Hide Buttons" + desc = "Shift-click any button to reset its position. Alt-click to reset all buttons to their default positions." icon = 'icons/mob/actions/actions.dmi' icon_state = "bg_default" var/hidden = 0 @@ -24,8 +25,18 @@ /obj/screen/movable/action_button/hide_toggle/Click(location,control,params) var/list/modifiers = params2list(params) if(modifiers["shift"]) - moved = 0 - return 1 + moved = FALSE + usr.update_action_buttons(TRUE) + return TRUE + if(modifiers["alt"]) + for(var/V in usr.actions) + var/datum/action/A = V + var/obj/screen/movable/action_button/B = A.button + B.moved = FALSE + moved = FALSE + usr.update_action_buttons(TRUE) + to_chat(usr, "Action button positions have been reset.") + return TRUE usr.hud_used.action_buttons_hidden = !usr.hud_used.action_buttons_hidden hidden = usr.hud_used.action_buttons_hidden @@ -36,6 +47,15 @@ UpdateIcon() usr.update_action_buttons() +/obj/screen/movable/action_button/hide_toggle/AltClick(mob/user) + for(var/V in user.actions) + var/datum/action/A = V + var/obj/screen/movable/action_button/B = A.button + B.moved = FALSE + if(moved) + moved = FALSE + user.update_action_buttons(TRUE) + to_chat(user, "Action button positions have been reset.") /obj/screen/movable/action_button/hide_toggle/proc/InitialiseIcon(mob/living/user) if(isalien(user)) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index d8f0a39588c..149e98b3bf2 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -1,5 +1,7 @@ /datum/configuration var/server_name = null // server name (for world name / status) + var/server_tag_line = null // server tagline (for showing on hub entry) + var/server_extra_features = null // server-specific extra features (for hub entry) var/server_suffix = 0 // generate numeric suffix based on server port var/minimum_client_build = 1421 // Build 1421 due to the middle mouse button exploit @@ -53,7 +55,6 @@ var/humans_need_surnames = 0 var/allow_random_events = 0 // enables random events mid-round when set to 1 var/allow_ai = 1 // allow ai job - var/hostedby = null var/respawn = 0 var/guest_jobban = 1 var/usewhitelist = 0 @@ -71,6 +72,9 @@ var/assistantlimit = 0 //enables assistant limiting var/assistantratio = 2 //how many assistants to security members + var/auto_cryo_ssd_mins = 0 + var/ssd_warning = 0 + var/prob_free_golems = 75 //chance for free golems spawners to appear roundstart var/unrestricted_free_golems = FALSE //if true, free golems can appear on all roundtypes @@ -215,7 +219,7 @@ // Automatic localhost admin disable var/disable_localhost_admin = 0 - + //Start now warning var/start_now_confirmation = 0 @@ -298,6 +302,12 @@ if("shadowling_max_age") config.shadowling_max_age = text2num(value) + if("auto_cryo_ssd_mins") + config.auto_cryo_ssd_mins = text2num(value) + + if("ssd_warning") + config.ssd_warning = 1 + if("log_ooc") config.log_ooc = 1 @@ -363,10 +373,10 @@ if("no_dead_vote") config.vote_no_dead = 1 - + if("vote_autotransfer_initial") config.vote_autotransfer_initial = text2num(value) - + if("vote_autotransfer_interval") config.vote_autotransfer_interval = text2num(value) @@ -391,6 +401,12 @@ if("servername") config.server_name = value + if("server_tag_line") + config.server_tag_line = value + + if("server_extra_features") + config.server_extra_features = value + if("serversuffix") config.server_suffix = 1 @@ -400,9 +416,6 @@ if("nudge_script_path") config.nudge_script_path = value - if("hostedby") - config.hostedby = value - if("server") config.server = value @@ -650,7 +663,7 @@ if("disable_karma") config.disable_karma = 1 - + if("start_now_confirmation") config.start_now_confirmation = 1 diff --git a/code/controllers/subsystem/jobs.dm b/code/controllers/subsystem/jobs.dm index ccd83640aa6..02f2681b22d 100644 --- a/code/controllers/subsystem/jobs.dm +++ b/code/controllers/subsystem/jobs.dm @@ -8,6 +8,8 @@ SUBSYSTEM_DEF(jobs) var/list/name_occupations = list() //Dict of all jobs, keys are titles var/list/type_occupations = list() //Dict of all jobs, keys are types var/list/prioritized_jobs = list() // List of jobs set to priority by HoP/Captain + var/list/id_change_records = list() // List of all job transfer records + var/list/id_change_counter = 1 //Players who need jobs var/list/unassigned = list() //Debug info @@ -601,3 +603,84 @@ SUBSYSTEM_DEF(jobs) spawn(0) to_chat(H, "Your account number is: [M.account_number], your account pin is: [M.remote_access_pin]") + +/datum/controller/subsystem/jobs/proc/format_jobs_for_id_computer(obj/item/card/id/tgtcard) + var/list/jobs_to_formats = list() + if(tgtcard) + var/mob/M = tgtcard.getPlayer() + for(var/datum/job/job in occupations) + if(tgtcard.assignment && tgtcard.assignment == job.title) + jobs_to_formats[job.title] = "disabled" // the job they already have is pre-selected + else if(!job.would_accept_job_transfer_from_player(M)) + jobs_to_formats[job.title] = "linkDiscourage" // karma jobs they don't have available are discouraged + else if(job.total_positions && !job.current_positions && job.title != "Civilian") + jobs_to_formats[job.title] = "linkEncourage" // jobs with nobody doing them at all are encouraged + else if(job.total_positions >= 0 && job.current_positions >= job.total_positions) + jobs_to_formats[job.title] = "linkDiscourage" // jobs that are full (no free positions) are discouraged + return jobs_to_formats + + +/datum/controller/subsystem/jobs/proc/log_job_transfer(transferee, oldvalue, newvalue, whodidit) + id_change_records["[id_change_counter]"] = list("transferee" = transferee, "oldvalue" = oldvalue, "newvalue" = newvalue, "whodidit" = whodidit, "timestamp" = station_time_timestamp()) + id_change_counter++ + +/datum/controller/subsystem/jobs/proc/slot_job_transfer(oldtitle, newtitle) + var/datum/job/oldjobdatum = SSjobs.GetJob(oldtitle) + var/datum/job/newjobdatum = SSjobs.GetJob(newtitle) + if(istype(oldjobdatum) && oldjobdatum.current_positions > 0 && istype(newjobdatum)) + if(!(oldjobdatum.title in command_positions) && !(newjobdatum.title in command_positions)) + oldjobdatum.current_positions-- + newjobdatum.current_positions++ + + +/datum/controller/subsystem/jobs/proc/fetch_transfer_record_html(var/centcom) + var/record_html = "" + + var/table_headers = list("Crewman", "Old Rank", "New Rank", "Authorized By", "Time") + var/hidden_fields = list("deletedby") + if(centcom) + table_headers += "Deleted By" + record_html += "" + for(var/thisheader in table_headers) + record_html += "" + record_html += "" + + var/visible_record_count = 0 + for(var/thisid in id_change_records) + var/thisrecord = id_change_records[thisid] + + if(thisrecord["deletedby"] && !centcom) + continue + + record_html += "" + for(var/lkey in thisrecord) + if(lkey in hidden_fields) + if(centcom) + record_html += "" + else + continue + else + record_html += "" + record_html += "" + visible_record_count++ + + record_html += "
[thisheader]
[thisrecord[lkey]][thisrecord[lkey]]
" + + if(!visible_record_count) + return "No records on file yet." + return record_html + +/datum/controller/subsystem/jobs/proc/delete_log_records(sourceuser, delete_all) + . = 0 + if(!sourceuser) + return + var/list/new_id_change_records = list() + for(var/thisid in id_change_records) + var/thisrecord = id_change_records[thisid] + if(!thisrecord["deletedby"]) + if(delete_all || thisrecord["whodidit"] == sourceuser) + thisrecord["deletedby"] = sourceuser + .++ + new_id_change_records["[id_change_counter]"] = thisrecord + id_change_counter++ + id_change_records = new_id_change_records \ No newline at end of file diff --git a/code/controllers/subsystem/machinery.dm b/code/controllers/subsystem/machinery.dm index 7038ad4db4f..9a73c1dbabb 100644 --- a/code/controllers/subsystem/machinery.dm +++ b/code/controllers/subsystem/machinery.dm @@ -64,23 +64,6 @@ SUBSYSTEM_DEF(machines) if(MC_TICK_CHECK) return -/datum/controller/subsystem/machines/proc/process_premachines(resumed = 0) - /* Literally exists as snowflake for fucking powersinks goddamnit */ - if(!resumed) - src.currentrun = GLOB.processing_power_items.Copy() - //cache for sanid speed (lists are references anyways) - var/list/currentrun = src.currentrun - while(currentrun.len) - var/obj/item/I = currentrun[currentrun.len] - currentrun.len-- - if(!QDELETED(I)) - if(!I.pwr_drain()) - GLOB.processing_power_items.Remove(I) - else - GLOB.processing_power_items.Remove(I) - if(MC_TICK_CHECK) - return - /datum/controller/subsystem/machines/proc/process_machines(resumed = 0) var/seconds = wait * 0.1 if(!resumed) @@ -113,13 +96,6 @@ SUBSYSTEM_DEF(machines) if(state != SS_RUNNING) return resumed = 0 - currentpart = SSMACHINES_PREMACHINERY - - if(currentpart == SSMACHINES_PREMACHINERY || !resumed) - process_premachines(resumed) - if(state != SS_RUNNING) - return - resumed = 0 currentpart = SSMACHINES_MACHINERY if(currentpart == SSMACHINES_MACHINERY || !resumed) diff --git a/code/datums/diseases/critical.dm b/code/datums/diseases/critical.dm index 710a1ff64c1..37d77687d8c 100644 --- a/code/datums/diseases/critical.dm +++ b/code/datums/diseases/critical.dm @@ -19,7 +19,7 @@ spread_text = "The patient is in shock" max_stages = 3 spread_flags = SPECIAL - cure_text = "Saline Solution" + cure_text = "Saline-Glucose Solution" cures = list("salglu_solution") cure_chance = 10 viable_mobtypes = list(/mob/living/carbon/human) @@ -80,7 +80,7 @@ spread_text = "The patient is having a cardiac emergency" max_stages = 3 spread_flags = SPECIAL - cure_text = "Cardiac Stimulants" + cure_text = "Atropine or Epinephrine" cures = list("atropine", "epinephrine") cure_chance = 10 needs_all_cures = FALSE diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 6f589101f2f..65b3940cde2 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -29,6 +29,7 @@ var/memory var/assigned_role //assigned role is what job you're assigned to when you join the station. + var/playtime_role //if set, overrides your assigned_role for the purpose of playtime awards. Set by IDcomputer when your ID is changed. var/special_role //special roles are typically reserved for antags or roles like ERT. If you want to avoid a character being automatically announced by the AI, on arrival (becuase they're an off station character or something); ensure that special_role and assigned_role are equal. var/offstation_role = FALSE //set to true for ERT, deathsquad, abductors, etc, that can go from and to z2 at will and shouldn't be antag targets var/list/restricted_roles = list() diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 067223c0285..dcf5223e29c 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -63,6 +63,8 @@ NOTE: there are two lists of areas in the end of this file: centcom and station var/xenobiology_compatible = FALSE //Can the Xenobio management console transverse this area by default? var/nad_allowed = FALSE //is the station NAD allowed on this area? + var/fast_despawn = FALSE + /*Adding a wizard area teleport list because motherfucking lag -- Urist*/ /*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/ var/list/teleportlocs = list() @@ -855,10 +857,12 @@ var/list/ghostteleportlocs = list() /area/prison/solitary name = "\improper Solitary Confinement" icon_state = "brig" + fast_despawn = TRUE /area/prison/cell_block name = "\improper Prison Cell Block" icon_state = "brig" + fast_despawn = TRUE /area/prison/cell_block/A name = "\improper Prison Cell Block A" @@ -1676,6 +1680,7 @@ var/list/ghostteleportlocs = list() /area/security/permabrig name = "\improper Prison Wing" icon_state = "sec_prison_perma" + fast_despawn = TRUE /area/security/prison name = "\improper Prison Wing" diff --git a/code/game/gamemodes/blob/blobs/factory.dm b/code/game/gamemodes/blob/blobs/factory.dm index fde2c9bf8a3..fd6aa8c9f4a 100644 --- a/code/game/gamemodes/blob/blobs/factory.dm +++ b/code/game/gamemodes/blob/blobs/factory.dm @@ -23,13 +23,12 @@ /obj/structure/blob/factory/run_action() if(spores.len >= max_spores) - return 0 + return if(spore_delay > world.time) - return 0 + return + flick("blob_factory_glow", src) spore_delay = world.time + 100 // 10 seconds var/mob/living/simple_animal/hostile/blob/blobspore/BS = new/mob/living/simple_animal/hostile/blob/blobspore(src.loc, src) BS.color = overmind.blob_reagent_datum.complementary_color BS.overmind = overmind overmind.blob_mobs.Add(BS) - return 0 - diff --git a/code/game/gamemodes/blob/blobs/resource.dm b/code/game/gamemodes/blob/blobs/resource.dm index 7198d3ef081..14c240f681b 100644 --- a/code/game/gamemodes/blob/blobs/resource.dm +++ b/code/game/gamemodes/blob/blobs/resource.dm @@ -13,13 +13,9 @@ qdel(src) /obj/structure/blob/resource/run_action() - if(resource_delay > world.time) - return 0 - + return + flick("blob_resource_glow", src) resource_delay = world.time + 40 // 4 seconds - if(overmind) overmind.add_points(1) - return 0 - diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm index 748823829b5..61196c9862f 100644 --- a/code/game/gamemodes/blob/powers.dm +++ b/code/game/gamemodes/blob/powers.dm @@ -331,17 +331,13 @@ /mob/camera/blob/verb/rally_spores_power() set category = "Blob" - set name = "Rally Spores (5)" + set name = "Rally Spores" set desc = "Rally the spores to move to your location." var/turf/T = get_turf(src) rally_spores(T) /mob/camera/blob/proc/rally_spores(var/turf/T) - - if(!can_buy(5)) - return - to_chat(src, "You rally your spores.") var/list/surrounding_turfs = block(locate(T.x - 1, T.y - 1, T.z), locate(T.x + 1, T.y + 1, T.z)) @@ -373,12 +369,12 @@ if(!N) to_chat(src, "A node is required to birth your offspring...") return - + if(!can_buy(100)) return split_used = TRUE - + new /obj/structure/blob/core/ (get_turf(N), 200, null, blob_core.point_rate, "offspring") qdel(N) @@ -399,7 +395,8 @@ else to_chat(usr, "You broadcast with your minions, [speak_text]") for(var/mob/living/simple_animal/hostile/blob_minion in blob_mobs) - blob_minion.say(speak_text) + if(blob_minion.stat == CONSCIOUS) + blob_minion.say(speak_text) return /mob/camera/blob/verb/create_storage() @@ -478,4 +475,4 @@ to_chat(src, "Node Blobs are blobs which grow, like the core. Like the core it can activate resource and factory blobs.") to_chat(src, "In addition to the buttons on your HUD, there are a few click shortcuts to speed up expansion and defense.") to_chat(src, "Shortcuts: Click = Expand Blob | CTRL Click = Create Shield Blob | Middle Mouse Click = Rally Spores | Alt Click = Remove Blob") - to_chat(src, "Attempting to talk will send a message to all other overminds, allowing you to coordinate with them.") \ No newline at end of file + to_chat(src, "Attempting to talk will send a message to all other overminds, allowing you to coordinate with them.") diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index 6ae995a1e77..972075ceece 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -508,6 +508,12 @@ var/round_start_time = 0 //Ask the event manager to print round end information SSevents.RoundEnd() + // Add AntagHUD to everyone, see who was really evil the whole time! + for(var/datum/atom_hud/antag/H in huds) + for(var/m in GLOB.player_list) + var/mob/M = m + H.add_hud_to(M) + return 1 /datum/controller/gameticker/proc/HasRoundStarted() diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index bde3f7ee8e9..54b01ff38ce 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -2,7 +2,9 @@ //"Ghosts" that are invisible and move like ghosts, cannot take damage while invsible //Don't hear deadchat and are NOT normal ghosts //Admin-spawn or random event + #define INVISIBILITY_REVENANT 50 +#define REVENANT_NAME_FILE "revenant_names.json" /mob/living/simple_animal/revenant name = "revenant" @@ -124,9 +126,17 @@ ghost_darkness_images |= ghostimage updateallghostimages() remove_from_all_data_huds() + random_revenant_name() addtimer(CALLBACK(src, .proc/firstSetupAttempt), 15 SECONDS) // Give admin 15 seconds to put in a ghost (Or wait 15 seconds before giving it objectives) +/mob/living/simple_animal/revenant/proc/random_revenant_name() + var/built_name = "" + built_name += pick(strings(REVENANT_NAME_FILE, "spirit_type")) + built_name += " of " + built_name += pick(strings(REVENANT_NAME_FILE, "adjective")) + built_name += pick(strings(REVENANT_NAME_FILE, "theme")) + name = built_name /mob/living/simple_animal/revenant/proc/firstSetupAttempt() if(mind) diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 9e06d662053..eebe4f2e9e4 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -256,6 +256,8 @@ if(H.mind && H.mind.initial_account) C.associated_account_number = H.mind.initial_account.account_number + C.owner_uid = H.UID() + C.owner_ckey = H.ckey /datum/outfit/job/proc/imprint_pda(mob/living/carbon/human/H) var/obj/item/pda/PDA = H.wear_pda @@ -265,3 +267,10 @@ PDA.ownjob = C.assignment PDA.ownrank = C.rank PDA.name = "PDA-[H.real_name] ([PDA.ownjob])" + +/datum/job/proc/would_accept_job_transfer_from_player(mob/player) + if(!guest_jobbans(title)) // actually checks if job is a whitelisted position + return TRUE + if(!istype(player)) + return FALSE + return is_job_whitelisted(player, title) diff --git a/code/game/jobs/job_exp.dm b/code/game/jobs/job_exp.dm index 6f5be69280a..7c228ba554f 100644 --- a/code/game/jobs/job_exp.dm +++ b/code/game/jobs/job_exp.dm @@ -257,13 +257,14 @@ var/global/list/role_playtime_requirements = list( play_records[rtype] = text2num(read_records[rtype]) else play_records[rtype] = 0 - if(mob.stat == CONSCIOUS && mob.mind.assigned_role) + var/myrole = mob.mind.playtime_role ? mob.mind.playtime_role : mob.mind.assigned_role + if(mob.stat == CONSCIOUS && myrole) play_records[EXP_TYPE_LIVING] += minutes if(announce_changes) to_chat(mob,"You got: [minutes] Living EXP!") for(var/category in exp_jobsmap) if(exp_jobsmap[category]["titles"]) - if(mob.mind.assigned_role in exp_jobsmap[category]["titles"]) + if(myrole in exp_jobsmap[category]["titles"]) play_records[category] += minutes if(announce_changes) to_chat(mob,"You got: [minutes] [category] EXP!") diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 95e609ee524..e392b468557 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -371,7 +371,15 @@ update_flag SSnanoui.update_uis(src) // Update all NanoUIs attached to src - +/obj/machinery/portable_atmospherics/canister/replace_tank(mob/living/user, close_valve) + . = ..() + if(.) + if(close_valve) + valve_open = FALSE + update_icon() + investigate_log("Valve was closed by [key_name(user)].
", "atmos") + else if(valve_open && holding) + investigate_log("[key_name(user)] started a transfer into [holding].
", "atmos") /obj/machinery/portable_atmospherics/canister/attack_ai(var/mob/user as mob) src.add_hiddenprint(user) diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index dfecc3a4409..71e1310f96b 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -82,16 +82,49 @@ /obj/machinery/portable_atmospherics/portableConnectorReturnAir() return air_contents -/obj/machinery/portable_atmospherics/attackby(var/obj/item/W as obj, var/mob/user as mob, params) - if((istype(W, /obj/item/tank) && !( src.destroyed ))) - if(src.holding) - return - var/obj/item/tank/T = W - user.drop_item() - T.loc = src - src.holding = T - update_icon() +/obj/machinery/portable_atmospherics/AltClick(mob/living/user) + if(!istype(user) || user.incapacitated()) + to_chat(user, "You can't do that right now!") return + if(!in_range(src, user)) + return + if(!ishuman(usr) && !issilicon(usr)) + return + if(holding) + to_chat(user, "You remove [holding] from [src].") + replace_tank(user, TRUE) + +/obj/machinery/portable_atmospherics/examine(mob/user) + ..() + if(holding) + to_chat(user, "\The [src] contains [holding]. Alt-click [src] to remove it.") + +/obj/machinery/portable_atmospherics/proc/replace_tank(mob/living/user, close_valve, obj/item/tank/new_tank) + if(holding) + holding.forceMove(drop_location()) + if(Adjacent(user) && !issilicon(user)) + user.put_in_hands(holding) + if(new_tank) + holding = new_tank + else + holding = null + update_icon() + return TRUE + +/obj/machinery/portable_atmospherics/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/tank)) + if(!(stat & BROKEN)) + if(!user.drop_item()) + return + var/obj/item/tank/T = W + user.drop_item() + if(src.holding) + to_chat(user, "[holding ? "In one smooth motion you pop [holding] out of [src]'s connector and replace it with [T]" : "You insert [T] into [src]"].") + replace_tank(user, FALSE) + T.loc = src + src.holding = T + update_icon() + return else if(istype(W, /obj/item/wrench)) if(connected_port) diff --git a/code/game/machinery/atmoalter/pump.dm b/code/game/machinery/atmoalter/pump.dm index a7680e815ff..5bd441f6748 100644 --- a/code/game/machinery/atmoalter/pump.dm +++ b/code/game/machinery/atmoalter/pump.dm @@ -95,6 +95,16 @@ /obj/machinery/portable_atmospherics/pump/return_air() return air_contents +/obj/machinery/portable_atmospherics/pump/replace_tank(mob/living/user, close_valve) + . = ..() + if(.) + if(close_valve) + if(on) + on = FALSE + update_icon() + else if(on && holding && direction_out) + investigate_log("[key_name(user)] started a transfer into [holding].
", "atmos") + /obj/machinery/portable_atmospherics/pump/attack_ai(var/mob/user as mob) src.add_hiddenprint(user) return src.attack_hand(user) @@ -139,10 +149,14 @@ if(href_list["power"]) on = !on + if(on && direction_out) + investigate_log("[key_name(usr)] started a transfer into [holding].
", "atmos") update_icon() if(href_list["direction"]) direction_out = !direction_out + if(on && holding) + investigate_log("[key_name(usr)] started a transfer into [holding].
", "atmos") if(href_list["remove_tank"]) if(holding) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 591cf1878d0..d404db8ae0a 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -56,6 +56,17 @@ /obj/item/circuitboard/machine board_type = "machine" +/obj/item/circuitboard/examine(mob/user) + ..() + if(LAZYLEN(req_components)) + var/list/nice_list = list() + for(var/B in req_components) + var/atom/A = B + if(!ispath(A)) + continue + nice_list += list("[req_components[A]] [initial(A.name)]") + to_chat(user,"Required components: [english_list(nice_list)].") + /obj/item/circuitboard/message_monitor name = "Circuit board (Message Monitor)" build_path = /obj/machinery/computer/message_monitor diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 5cb19358358..f4d21cbd125 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -66,14 +66,15 @@ var/time_last_changed_position = 0 /obj/machinery/computer/card/proc/get_target_rank() return modify && modify.assignment ? modify.assignment : "Unassigned" -/obj/machinery/computer/card/proc/format_jobs(list/jobs) +/obj/machinery/computer/card/proc/format_jobs(list/jobs, targetrank, list/jobformats) var/list/formatted = list() for(var/job in jobs) if(job_in_department(SSjobs.GetJob(job))) formatted.Add(list(list( "display_name" = replacetext(job, " ", " "), - "target_rank" = get_target_rank(), - "job" = job))) + "target_rank" = targetrank, + "job" = job, + "jlinkformat" = jobformats[job] ? jobformats[job] : null))) return formatted @@ -117,12 +118,14 @@ var/time_last_changed_position = 0 if(!usr.get_active_hand() && Adjacent(usr)) usr.put_in_hands(scan) scan = null + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) else if(modify) to_chat(usr, "You remove \the [modify] from \the [src].") modify.forceMove(get_turf(src)) if(!usr.get_active_hand() && Adjacent(usr)) usr.put_in_hands(modify) modify = null + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) else to_chat(usr, "There is nothing to remove from the console.") @@ -134,10 +137,12 @@ var/time_last_changed_position = 0 user.drop_item() id_card.loc = src scan = id_card + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) else if(!modify) user.drop_item() id_card.loc = src modify = id_card + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) SSnanoui.update_uis(src) attack_hand(user) @@ -242,6 +247,7 @@ var/time_last_changed_position = 0 data["target_owner"] = modify && modify.registered_name ? modify.registered_name : "-----" data["target_rank"] = get_target_rank() data["scan_name"] = scan ? scan.name : "-----" + data["scan_owner"] = scan && scan.registered_name ? scan.registered_name : null data["authenticated"] = is_authenticated(user) data["has_modify"] = !!modify data["account_number"] = modify ? modify.associated_account_number : null @@ -249,15 +255,19 @@ var/time_last_changed_position = 0 data["all_centcom_access"] = null data["regions"] = null data["target_dept"] = target_dept + data["card_is_owned"] = modify && modify.owner_ckey - data["engineering_jobs"] = format_jobs(engineering_positions) - data["medical_jobs"] = format_jobs(medical_positions) - data["science_jobs"] = format_jobs(science_positions) - data["security_jobs"] = format_jobs(security_positions) - data["support_jobs"] = format_jobs(support_positions) - data["civilian_jobs"] = format_jobs(civilian_positions) - data["special_jobs"] = format_jobs(whitelisted_positions) - data["centcom_jobs"] = format_jobs(get_all_centcom_jobs()) + var/list/job_formats = SSjobs.format_jobs_for_id_computer(modify) + + data["top_jobs"] = format_jobs(list("Captain", "Custom"), data["target_rank"], job_formats) + data["engineering_jobs"] = format_jobs(engineering_positions, data["target_rank"], job_formats) + data["medical_jobs"] = format_jobs(medical_positions, data["target_rank"], job_formats) + data["science_jobs"] = format_jobs(science_positions, data["target_rank"], job_formats) + data["security_jobs"] = format_jobs(security_positions, data["target_rank"], job_formats) + data["support_jobs"] = format_jobs(support_positions, data["target_rank"], job_formats) + data["civilian_jobs"] = format_jobs(civilian_positions, data["target_rank"], job_formats) + data["special_jobs"] = format_jobs(whitelisted_positions, data["target_rank"], job_formats) + data["centcom_jobs"] = format_jobs(get_all_centcom_jobs(), data["target_rank"], job_formats) data["card_skins"] = format_card_skins(get_station_card_skins()) data["job_slots"] = format_job_slots() @@ -268,6 +278,9 @@ var/time_last_changed_position = 0 data["cooldown_mins"] = mins data["cooldown_secs"] = (seconds < 10) ? "0[seconds]" : seconds + if(mode == 3 && is_authenticated(user)) + data["id_change_html"] = SSjobs.fetch_transfer_record_html(is_centcom()) + if(modify) data["current_skin"] = modify.icon_state @@ -315,15 +328,18 @@ var/time_last_changed_position = 0 if(!usr.get_active_hand() && Adjacent(usr)) usr.put_in_hands(modify) modify = null + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) else modify.forceMove(get_turf(src)) modify = null + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) else if(Adjacent(usr)) var/obj/item/I = usr.get_active_hand() if(istype(I, /obj/item/card/id)) usr.drop_item() I.forceMove(src) modify = I + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) if("scan") if(scan) @@ -332,15 +348,18 @@ var/time_last_changed_position = 0 if(!usr.get_active_hand() && Adjacent(usr)) usr.put_in_hands(scan) scan = null + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) else scan.forceMove(get_turf(src)) scan = null + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) else if(Adjacent(usr)) var/obj/item/I = usr.get_active_hand() if(istype(I, /obj/item/card/id)) usr.drop_item() I.forceMove(src) scan = I + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) if("access") if(href_list["allowed"] && !target_dept) @@ -361,7 +380,7 @@ var/time_last_changed_position = 0 if("assign") if(is_authenticated(usr) && modify) var/t1 = href_list["assign_target"] - if(target_dept && modify.assignment == "Unassigned") + if(target_dept && modify.assignment == "Demoted") visible_message("[src]: Demoted individuals must see the HoP for a new job.") return 0 if(!job_in_department(SSjobs.GetJob(modify.rank), FALSE)) @@ -373,11 +392,12 @@ var/time_last_changed_position = 0 var/temp_t = sanitize(copytext(input("Enter a custom job assignment.","Assignment"),1,MAX_MESSAGE_LEN)) //let custom jobs function as an impromptu alt title, mainly for sechuds if(temp_t && modify) + SSjobs.log_job_transfer(modify.registered_name, modify.getRankAndAssignment(), temp_t, scan.registered_name) modify.assignment = temp_t log_game("[key_name(usr)] has given \"[modify.registered_name]\" the custom job title \"[temp_t]\".") else var/list/access = list() - if(is_centcom()) + if(is_centcom() && islist(get_centcom_access(t1))) access = get_centcom_access(t1) else var/datum/job/jobdatum @@ -397,6 +417,16 @@ var/time_last_changed_position = 0 if(t1 == "Civilian") message_admins("[key_name_admin(usr)] has reassigned \"[modify.registered_name]\" from \"[jobnamedata]\" to \"[t1]\".") + SSjobs.log_job_transfer(modify.registered_name, jobnamedata, t1, scan.registered_name) + SSjobs.slot_job_transfer(modify.rank, t1) + + var/mob/living/carbon/human/H = modify.getPlayer() + if(istype(H)) + if(jobban_isbanned(H, t1)) + message_admins("[ADMIN_FULLMONTY(H)] has been assigned the job [t1], in possible violation of their job ban.") + if(H.mind) + H.mind.playtime_role = t1 + modify.access = access modify.rank = t1 modify.assignment = t1 @@ -426,6 +456,20 @@ var/time_last_changed_position = 0 if("mode") mode = text2num(href_list["mode_target"]) + if("wipe_my_logs") + if(is_authenticated(usr) && is_centcom()) + var/delcount = SSjobs.delete_log_records(scan.registered_name, FALSE) + if(delcount) + playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) + SSnanoui.update_uis(src) + + if("wipe_all_logs") + if(is_authenticated(usr) && !target_dept) + var/delcount = SSjobs.delete_log_records(scan.registered_name, TRUE) + if(delcount) + playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) + SSnanoui.update_uis(src) + if("print") if(!printing && !target_dept) printing = 1 @@ -464,14 +508,15 @@ var/time_last_changed_position = 0 var/jobnamedata = modify.getRankAndAssignment() log_game("[key_name(usr)] has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\".") message_admins("[key_name_admin(usr)] has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\".") + SSjobs.log_job_transfer(modify.registered_name, jobnamedata, "Terminated", scan.registered_name) modify.assignment = "Terminated" modify.access = list() callHook("terminate_employee", list(modify)) if("demote") if(is_authenticated(usr)) - if(modify.assignment == "Unassigned") - visible_message("[src]: Unassigned crew cannot be demoted any further. If further action is warranted, ask the Captain about Termination.") + if(modify.assignment == "Demoted") + visible_message("[src]: Demoted crew cannot be demoted any further. If further action is warranted, ask the Captain about Termination.") return 0 if(!job_in_department(SSjobs.GetJob(modify.rank), FALSE)) visible_message("[src]: Heads may only demote members of their own department.") @@ -482,12 +527,13 @@ var/time_last_changed_position = 0 access = jobdatum.get_access() var/jobnamedata = modify.getRankAndAssignment() - log_game("[key_name(usr)] has demoted \"[modify.registered_name]\" the \"[jobnamedata]\" to \"Civilian (Unassigned)\".") - message_admins("[key_name_admin(usr)] has demoted \"[modify.registered_name]\" the \"[jobnamedata]\" to \"Civilian (Unassigned)\".") + log_game("[key_name(usr)] has demoted \"[modify.registered_name]\" the \"[jobnamedata]\" to \"Civilian (Demoted)\".") + message_admins("[key_name_admin(usr)] has demoted \"[modify.registered_name]\" the \"[jobnamedata]\" to \"Civilian (Demoted)\".") + SSjobs.log_job_transfer(modify.registered_name, jobnamedata, "Demoted", scan.registered_name) modify.access = access modify.rank = "Civilian" - modify.assignment = "Unassigned" + modify.assignment = "Demoted" modify.icon_state = "id" if("make_job_available") diff --git a/code/game/machinery/computer/power.dm b/code/game/machinery/computer/power.dm index 256b2212c11..416c73d2570 100644 --- a/code/game/machinery/computer/power.dm +++ b/code/game/machinery/computer/power.dm @@ -45,7 +45,7 @@ if(isturf(T)) attached = locate() in T if(attached) - return attached.get_powernet() + return attached.powernet /obj/machinery/computer/monitor/attack_ai(mob/user) attack_hand(user) diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index 1b3dfe19001..bb5847fc6fb 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -2,8 +2,8 @@ name = "Pipe Dispenser" icon = 'icons/obj/stationobjs.dmi' icon_state = "pipe_d" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE var/unwrenched = 0 var/wait = 0 @@ -75,29 +75,25 @@ /obj/machinery/pipedispenser/Topic(href, href_list) if(..() || unwrenched) - return 1 + return usr.set_machine(src) add_fingerprint(usr) + if(world.time < wait + 4) + return + wait = world.time if(href_list["make"]) - if(!wait) - var/p_type = text2num(href_list["make"]) - var/p_dir = text2num(href_list["dir"]) - var/obj/item/pipe/P = new (loc, pipe_type=p_type, dir=p_dir) - P.update() - P.add_fingerprint(usr) - wait = world.time + 10 + var/p_type = text2num(href_list["make"]) + var/p_dir = text2num(href_list["dir"]) + var/obj/item/pipe/P = new (loc, pipe_type=p_type, dir=p_dir) + P.update() + P.add_fingerprint(usr) if(href_list["makemeter"]) - if(wait < world.time) - new /obj/item/pipe_meter(loc) - wait = world.time + 15 + new /obj/item/pipe_meter(loc) if(href_list["makegsensor"]) - if(!wait) - new /obj/item/pipe_gsensor(loc) - wait = 1 - spawn(15) - wait = 0 + new /obj/item/pipe_gsensor(loc) + return TRUE /obj/machinery/pipedispenser/attackby(var/obj/item/W as obj, var/mob/user as mob, params) add_fingerprint(usr) @@ -140,8 +136,6 @@ name = "Disposal Pipe Dispenser" icon = 'icons/obj/stationobjs.dmi' icon_state = "pipe_d" - density = 1 - anchored = 1.0 //Allow you to drag-drop disposal pipes into it /obj/machinery/pipedispenser/disposal/MouseDrop_T(var/obj/structure/disposalconstruct/pipe, mob/usr) @@ -182,16 +176,10 @@ popup.open() /obj/machinery/pipedispenser/disposal/Topic(href, href_list) - if(..() || unwrenched) - return 1 - - usr.set_machine(src) - add_fingerprint(usr) - - if(wait < world.time) + if(!..()) + return + if(href_list["dmake"]) var/p_type = text2num(href_list["dmake"]) var/obj/structure/disposalconstruct/C = new(loc, p_type) if(p_type in list(PIPE_DISPOSALS_BIN, PIPE_DISPOSALS_OUTLET, PIPE_DISPOSALS_CHUTE)) C.density = TRUE - C.add_fingerprint(usr) - wait = world.time + 15 diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index 304dc7dc639..6422e94dc74 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -188,11 +188,11 @@ /obj/machinery/power/singularity_beacon/process() if(!active) return PROCESS_KILL + + if(surplus() >= 1500) + add_load(1500) else - if(surplus() > 1500) - draw_power(1500) - else - Deactivate() + Deactivate() /obj/machinery/power/singularity_beacon/syndicate icontype = "beaconsynd" diff --git a/code/game/machinery/telecomms/ntsl2.dm b/code/game/machinery/telecomms/ntsl2.dm index f01f173ebb3..604fcdfbe7e 100644 --- a/code/game/machinery/telecomms/ntsl2.dm +++ b/code/game/machinery/telecomms/ntsl2.dm @@ -10,109 +10,109 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) */ /datum/nttc_configuration // ALL OF THE JOB CRAP - // Dict of all jobs and their colors + // Dict of all jobs and their department color classes var/all_jobs = list( // AI - "AI" = "#FF00FF", - "Android" = "#FF00FF", - "Cyborg" = "#FF00FF", - "Personal AI" = "#FF00FF", - "Robot" = "#FF00FF", + "AI" = "airadio", + "Android" = "airadio", + "Cyborg" = "airadio", + "Personal AI" = "airadio", + "Robot" = "airadio", // Civilian + Varients - "Assistant" = "#408010", - "Businessman" = "#408010", - "Civilian" = "#408010", - "Tourist" = "#408010", - "Trader" = "#408010", + "Assistant" = "radio", + "Businessman" = "radio", + "Civilian" = "radio", + "Tourist" = "radio", + "Trader" = "radio", // Command (Solo command, not department heads) - "Blueshield" = "#204090", - "Captain" = "#204090", - "Head of Personnel" = "#204090", - "Nanotrasen Representative" = "#204090", + "Blueshield" = "comradio", + "Captain" = "comradio", + "Head of Personnel" = "comradio", + "Nanotrasen Representative" = "comradio", // Engineeering - "Atmospheric Technician" = "#A66300", - "Chief Engineer" = "#A66300", - "Electrician" = "#A66300", - "Engine Technician" = "#A66300", - "Life Support Specialist" = "#A66300", - "Maintenance Technician" = "#A66300", - "Mechanic" = "#A66300", - "Station Engineer" = "#A66300", + "Atmospheric Technician" = "engradio", + "Chief Engineer" = "engradio", + "Electrician" = "engradio", + "Engine Technician" = "engradio", + "Life Support Specialist" = "engradio", + "Maintenance Technician" = "engradio", + "Mechanic" = "engradio", + "Station Engineer" = "engradio", // ERT - "Emergency Response Team Engineer" = "#5C5C7C", - "Emergency Response Team Leader" = "#5C5C7C", - "Emergency Response Team Medic" = "#5C5C7C", - "Emergency Response Team Member" = "#5C5C7C", - "Emergency Response Team Officer" = "#5C5C7C", + "Emergency Response Team Engineer" = "dsquadradio", // I know this says deathsquad but the class for responseteam is neon green. No. + "Emergency Response Team Leader" = "dsquadradio", + "Emergency Response Team Medic" = "dsquadradio", + "Emergency Response Team Member" = "dsquadradio", + "Emergency Response Team Officer" = "dsquadradio", // Medical - "Chemist" = "#009190", - "Chief Medical Officer" = "#009190", - "Coroner" = "#009190", - "Medical Doctor" = "#009190", - "Microbiologist" = "#009190", - "Nurse" = "#009190", - "Paramedic" = "#009190", - "Pharmacologist" = "#009190", - "Pharmacist" = "#009190", - "Psychiatrist" = "#009190", - "Psychologist" = "#009190", - "Surgeon" = "#009190", - "Therapist" = "#009190", - "Virologist" = "#009190", + "Chemist" = "medradio", + "Chief Medical Officer" = "medradio", + "Coroner" = "medradio", + "Medical Doctor" = "medradio", + "Microbiologist" = "medradio", + "Nurse" = "medradio", + "Paramedic" = "medradio", + "Pharmacologist" = "medradio", + "Pharmacist" = "medradio", + "Psychiatrist" = "medradio", + "Psychologist" = "medradio", + "Surgeon" = "medradio", + "Therapist" = "medradio", + "Virologist" = "medradio", // Science - "Anomalist" = "#993399", - "Biomechanical Engineer" = "#993399", - "Chemical Researcher" = "#993399", - "Geneticist" = "#993399", - "Mechatronic Engineer" = "#993399", - "Plasma Researcher" = "#993399", - "Research Director" = "#993399", - "Roboticist" = "#993399", - "Scientist" = "#993399", - "Xenoarcheologist" = "#993399", - "Xenobiologist" = "#993399", + "Anomalist" = "sciradio", + "Biomechanical Engineer" = "sciradio", + "Chemical Researcher" = "sciradio", + "Geneticist" = "sciradio", + "Mechatronic Engineer" = "sciradio", + "Plasma Researcher" = "sciradio", + "Research Director" = "sciradio", + "Roboticist" = "sciradio", + "Scientist" = "sciradio", + "Xenoarcheologist" = "sciradio", + "Xenobiologist" = "sciradio", // Security - "Brig Physician" = "#A30000", - "Detective" = "#A30000", - "Forensic Technician" = "#A30000", - "Head of Security" = "#A30000", - "Human Resources Agent" = "#A30000", - "Internal Affairs Agent" = "#A30000", - "Magistrate" = "#A30000", - "Security Officer" = "#A30000", - "Security Pod Pilot" = "#A30000", - "Warden" = "#A30000", + "Brig Physician" = "secradio", + "Detective" = "secradio", + "Forensic Technician" = "secradio", + "Head of Security" = "secradio", + "Human Resources Agent" = "secradio", + "Internal Affairs Agent" = "secradio", + "Magistrate" = "secradio", + "Security Officer" = "secradio", + "Security Pod Pilot" = "secradio", + "Warden" = "secradio", // Supply - "Quartermaster" = "#7F6539", - "Cargo Technician" = "#7F6539", - "Shaft Miner" = "#7F6539", - "Spelunker" = "#7F6539", + "Quartermaster" = "supradio", + "Cargo Technician" = "supradio", + "Shaft Miner" = "supradio", + "Spelunker" = "supradio", // Service - "Barber" = "#80A000", - "Bartender" = "#80A000", - "Beautician" = "#80A000", - "Botanical Researcher" = "#80A000", - "Botanist" = "#80A000", - "Butcher" = "#80A000", - "Chaplain" = "#80A000", - "Chef" = "#80A000", - "Clown" = "#80A000", - "Cook" = "#80A000", - "Culinary Artist" = "#80A000", - "Custodial Technician" = "#80A000", - "Hair Stylist" = "#80A000", - "Hydroponicist" = "#80A000", - "Janitor" = "#80A000", - "Journalist" = "#80A000", - "Librarian" = "#80A000", - "Mime" = "#80A000", + "Barber" = "srvradio", + "Bartender" = "srvradio", + "Beautician" = "srvradio", + "Botanical Researcher" = "srvradio", + "Botanist" = "srvradio", + "Butcher" = "srvradio", + "Chaplain" = "srvradio", + "Chef" = "srvradio", + "Clown" = "srvradio", + "Cook" = "srvradio", + "Culinary Artist" = "srvradio", + "Custodial Technician" = "srvradio", + "Hair Stylist" = "srvradio", + "Hydroponicist" = "srvradio", + "Janitor" = "srvradio", + "Journalist" = "srvradio", + "Librarian" = "srvradio", + "Mime" = "srvradio", ) // Just command members var/heads = list("Captain", "Head of Personnel", "Nanotrasen Representative", "Blueshield", "Chief Engineer", "Chief Medical Officer", "Research Director", "Head of Security") // Just ERT var/ert_jobs = list("Emergency Response Team Officer", "Emergency Response Team Engineer", "Emergency Response Team Medic", "Emergency Response Team Leader", "Emergency Response Team Member") // Defined so code compiles and incase someone has a non-standard job - var/job_color = "#000000" + var/job_class = "radio" // NOW FOR ACTUAL TOGGLES /* Simple Toggles */ var/toggle_activated = TRUE @@ -274,10 +274,10 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) // All job and coloring shit if(toggle_job_color || toggle_name_color) var/job = signal.data["job"] - job_color = all_jobs[job] + job_class = all_jobs[job] if(toggle_name_color) - var/new_name = "" + signal.data["name"] + "" + var/new_name = "" + signal.data["name"] + "" signal.data["name"] = new_name signal.data["realname"] = new_name // this is required because the broadcaster uses this directly if the speaker doesn't have a voice changer on @@ -289,13 +289,13 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) if(toggle_job_color) switch(job_indicator_type) if(JOB_STYLE_1) - new_name = signal.data["name"] + " ([job]) " + new_name = signal.data["name"] + " ([job]) " if(JOB_STYLE_2) - new_name = signal.data["name"] + " - [job] " + new_name = signal.data["name"] + " - [job] " if(JOB_STYLE_3) - new_name = "\[[job]\] " + signal.data["name"] + " " + new_name = "\[[job]\] " + signal.data["name"] + " " if(JOB_STYLE_4) - new_name = "([job]) " + signal.data["name"] + " " + new_name = "([job]) " + signal.data["name"] + " " else switch(job_indicator_type) if(JOB_STYLE_1) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 54e2d5bcdc5..97d79c25b6c 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -100,6 +100,10 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d var/trip_walksafe = TRUE var/trip_tiles = 0 + //Tooltip vars + var/in_inventory = FALSE //is this item equipped into an inventory slot or hand of a mob? + var/tip_timer = 0 + /obj/item/New() ..() for(var/path in actions_types) @@ -340,11 +344,13 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d A.Remove(user) if(flags & DROPDEL) qdel(src) + in_inventory = FALSE SEND_SIGNAL(src, COMSIG_ITEM_DROPPED,user) // called just as an item is picked up (loc is not yet changed) /obj/item/proc/pickup(mob/user) SEND_SIGNAL(src, COMSIG_ITEM_PICKUP, user) + in_inventory = TRUE return TRUE // called when this item is removed from a storage item, which is passed on as S. The loc variable is already set to the new destination before this is called. @@ -374,6 +380,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d var/datum/action/A = X if(item_action_slot_check(slot, user)) //some items only give their actions buttons when in a specific slot. A.Grant(user) + in_inventory = TRUE /obj/item/proc/item_action_slot_check(slot, mob/user) return 1 @@ -532,6 +539,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d if(callback) //call the original callback . = callback.Invoke() throw_speed = initial(throw_speed) //explosions change this. + in_inventory = FALSE /obj/item/proc/pwr_drain() return 0 // Process Kill @@ -585,3 +593,16 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d return var/mob/owner = loc owner.regenerate_icons() + +/obj/item/proc/openTip(location, control, params, user) + openToolTip(user, src, params, title = name, content = "[desc]", theme = "") + +/obj/item/MouseEntered(location, control, params) + if(in_inventory) + var/timedelay = 5 + var/user = usr + tip_timer = addtimer(CALLBACK(src, .proc/openTip, location, control, params, user), timedelay, TIMER_STOPPABLE) + +/obj/item/MouseExited() + deltimer(tip_timer) //delete any in-progress timer if the mouse is moved off the item before it finishes + closeToolTip(usr) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 866ded7aa99..e8bfe429e20 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -307,6 +307,9 @@ brightness_on = 7 icon_state = "torch" item_state = "torch" + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' + light_color = LIGHT_COLOR_ORANGE on_damage = 10 /obj/item/flashlight/slime diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 463223f4268..562800c2ce0 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -1,3 +1,7 @@ +#define DISCONNECTED 0 +#define CLAMPED_OFF 1 +#define OPERATING 2 + // Powersink - used to drain station power /obj/item/powersink @@ -13,28 +17,55 @@ throw_range = 2 materials = list(MAT_METAL=750) origin_tech = "powerstorage=5;syndicate=5" - var/drain_rate = 1600000 // amount of power to drain per tick - var/apc_drain_rate = 50 // Max. amount drained from single APC. In Watts. - var/dissipation_rate = 20000 // Passive dissipation of drained power. In Watts. - var/power_drained = 0 // Amount of power drained. - var/max_power = 1e10 // Detonation point. - var/mode = 0 // 0 = off, 1=clamped (off), 2=operating - var/drained_this_tick = 0 // This is unfortunately necessary to ensure we process powersinks BEFORE other machinery such as APCs. - var/admins_warned = 0 // stop spam, only warn the admins once that we are about to go boom + var/drain_rate = 2000000 // amount of power to drain per tick + var/power_drained = 0 // has drained this much power + var/max_power = 6e8 // maximum power that can be drained before exploding + var/mode = 0 // 0 = off, 1=clamped (off), 2=operating + var/admins_warned = FALSE // stop spam, only warn the admins once that we are about to boom - var/datum/powernet/PN // Our powernet var/obj/structure/cable/attached // the attached cable /obj/item/powersink/Destroy() STOP_PROCESSING(SSobj, src) - GLOB.processing_power_items.Remove(src) - PN = null attached = null return ..() -/obj/item/powersink/attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/screwdriver)) - if(mode == 0) +/obj/item/powersink/update_icon() + icon_state = "powersink[mode == OPERATING]" + +/obj/item/powersink/proc/set_mode(value) + if(value == mode) + return + switch(value) + if(DISCONNECTED) + attached = null + if(mode == OPERATING) + STOP_PROCESSING(SSobj, src) + anchored = FALSE + density = FALSE + + if(CLAMPED_OFF) + if(!attached) + return + if(mode == OPERATING) + STOP_PROCESSING(SSobj, src) + anchored = TRUE + density = TRUE + + if(OPERATING) + if(!attached) + return + START_PROCESSING(SSobj, src) + anchored = TRUE + density = TRUE + + mode = value + update_icon() + set_light(0) + +/obj/item/powersink/attackby(obj/item/I, mob/user) + if(isscrewdriver(I)) + if(mode == DISCONNECTED) var/turf/T = loc if(isturf(T) && !T.intact) attached = locate() in T @@ -42,98 +73,81 @@ to_chat(user, "No exposed cable here to attach to.") return else - anchored = 1 - mode = 1 - src.visible_message("[user] attaches [src] to the cable!") + set_mode(CLAMPED_OFF) + visible_message("[user] attaches [src] to the cable!") message_admins("Power sink activated by [key_name_admin(user)] at ([x],[y],[z] - JMP)") log_game("Power sink activated by [key_name(user)] at ([x],[y],[z])") - return else to_chat(user, "Device must be placed over an exposed cable to attach to it.") - return else - if(mode == 2) - STOP_PROCESSING(SSobj, src) // Now the power sink actually stops draining the station's power if you unhook it. --NeoFite - GLOB.processing_power_items.Remove(src) - anchored = 0 - mode = 0 + set_mode(DISCONNECTED) src.visible_message("[user] detaches [src] from the cable!") - set_light(0) - icon_state = "powersink0" - - return else - ..() + return ..() /obj/item/powersink/attack_ai() return /obj/item/powersink/attack_hand(var/mob/user) switch(mode) - if(0) + if(DISCONNECTED) ..() - if(1) - src.visible_message("[user] activates [src]!") - mode = 2 - icon_state = "powersink1" - START_PROCESSING(SSobj, src) - GLOB.processing_power_items.Add(src) - if(2) //This switch option wasn't originally included. It exists now. --NeoFite - src.visible_message("[user] deactivates [src]!") - mode = 1 - set_light(0) - icon_state = "powersink0" - STOP_PROCESSING(SSobj, src) - GLOB.processing_power_items.Remove(src) - -/obj/item/powersink/pwr_drain() - if(!attached) - return 0 - - if(drained_this_tick) - return 1 - drained_this_tick = 1 - - var/drained = 0 - - if(!PN) - return 1 - - set_light(12) - PN.trigger_warning() - // found a powernet, so drain up to max power from it - drained = PN.draw_power(drain_rate) - // if tried to drain more than available on powernet - // now look for APCs and drain their cells - if(drained < drain_rate) - for(var/obj/machinery/power/terminal/T in PN.nodes) - // Enough power drained this tick, no need to torture more APCs - if(drained >= drain_rate) - break - if(istype(T.master, /obj/machinery/power/apc)) - var/obj/machinery/power/apc/A = T.master - if(A.operating && A.cell) - A.cell.charge = max(0, A.cell.charge - apc_drain_rate) - drained += apc_drain_rate - if(A.charging == 2) // If the cell was full - A.charging = 1 // It's no longer full - power_drained += drained - return 1 + if(CLAMPED_OFF) + user.visible_message( \ + "[user] activates \the [src]!", \ + "You activate \the [src].", + "You hear a click.") + message_admins("Power sink activated by [ADMIN_LOOKUPFLW(user)] at [ADMIN_VERBOSEJMP(src)]") + log_game("Power sink activated by [key_name(user)] at [AREACOORD(src)]") + set_mode(OPERATING) + if(OPERATING) + user.visible_message( \ + "[user] deactivates \the [src]!", \ + "You deactivate \the [src].", + "You hear a click.") + set_mode(CLAMPED_OFF) /obj/item/powersink/process() - drained_this_tick = 0 - power_drained -= min(dissipation_rate, power_drained) + if(!attached) + set_mode(DISCONNECTED) + return + + var/datum/powernet/PN = attached.powernet + if(PN) + set_light(5) + + // found a powernet, so drain up to max power from it + + var/drained = min (drain_rate, attached.newavail()) + attached.add_delayedload(drained) + power_drained += drained + + // if tried to drain more than available on powernet + // now look for APCs and drain their cells + if(drained < drain_rate) + for(var/obj/machinery/power/terminal/T in PN.nodes) + if(istype(T.master, /obj/machinery/power/apc)) + var/obj/machinery/power/apc/A = T.master + if(A.operating && A.cell) + A.cell.charge = max(0, A.cell.charge - 50) + power_drained += 50 + if(A.charging == 2) // If the cell was full + A.charging = 1 // It's no longer full + if(drained >= drain_rate) + break + if(power_drained > max_power * 0.98) - if(!admins_warned) - admins_warned = 1 + if (!admins_warned) + admins_warned = TRUE message_admins("Power sink at ([x],[y],[z] - JMP) is 95% full. Explosion imminent.") playsound(src, 'sound/effects/screech.ogg', 100, 1, 1) + if(power_drained >= max_power) + STOP_PROCESSING(SSobj, src) explosion(src.loc, 4,8,16,32) qdel(src) - return - if(attached && attached.powernet) - PN = attached.powernet - else - PN = null + +#undef DISCONNECTED +#undef CLAMPED_OFF +#undef OPERATING \ No newline at end of file diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 5cab26e062b..b0a1286d3b2 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -54,7 +54,7 @@ to_chat(user, "There are [amount] [singular_name]\s in the stack.") else to_chat(user, "There are [amount] [name]\s in the stack.") - to_chat(user,"Ctrl-Shift-click to take a custom amount.") + to_chat(user,"Alt-click to take a custom amount.") /obj/item/stack/proc/add(newamount) amount += newamount @@ -263,7 +263,7 @@ else ..() -/obj/item/stack/CtrlShiftClick(mob/living/user) +/obj/item/stack/AltClick(mob/living/user) if(!istype(user) || user.incapacitated()) to_chat(user, "You can't do that right now!") return @@ -276,7 +276,7 @@ //get amount from user var/min = 0 var/max = get_amount() - var/stackmaterial = round(input(user, "How many sheets do you wish to take out of this stack? (Maximum: [max])") as num) + var/stackmaterial = round(input(user, "How many sheets do you wish to take out of this stack? (Maximum: [max])") as null|num) if(stackmaterial == null || stackmaterial <= min || stackmaterial > get_amount()) return change_stack(user,stackmaterial) diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 7ac7e3799fa..917bf7f032c 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -98,6 +98,8 @@ //alt titles are handled a bit weirdly in order to unobtrusively integrate into existing ID system var/assignment = null //can be alt title or the actual job var/rank = null //actual job + var/owner_uid + var/owner_ckey var/dorm = 0 // determines if this ID has claimed a dorm already var/sex @@ -195,6 +197,19 @@ jobnamedata += " (" + assignment + ")" return jobnamedata +/obj/item/card/id/proc/getPlayer() + if(owner_uid) + var/mob/living/carbon/human/H = locateUID(owner_uid) + if(istype(H) && H.ckey == owner_ckey) + return H + owner_uid = null + if(owner_ckey) + for(var/mob/M in GLOB.player_list) + if(M.ckey && M.ckey == owner_ckey) + owner_uid = M.UID() + return M + owner_ckey = null + /obj/item/card/id/proc/is_untrackable() return untrackable diff --git a/code/game/objects/items/weapons/dice.dm b/code/game/objects/items/weapons/dice.dm index 666c14801d8..40fc1bf7d56 100644 --- a/code/game/objects/items/weapons/dice.dm +++ b/code/game/objects/items/weapons/dice.dm @@ -112,10 +112,9 @@ /obj/item/dice/attack_self(mob/user as mob) diceroll(user) -/obj/item/dice/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback) - if(!..()) - return - diceroll(thrower) +/obj/item/dice/throw_impact(atom/target) + diceroll(thrownby) + . = ..() /obj/item/dice/proc/diceroll(mob/user) result = rand(1, sides) diff --git a/code/game/objects/items/weapons/legcuffs.dm b/code/game/objects/items/weapons/legcuffs.dm index 297966525f0..66e0ba6b110 100644 --- a/code/game/objects/items/weapons/legcuffs.dm +++ b/code/game/objects/items/weapons/legcuffs.dm @@ -152,8 +152,14 @@ breakouttime = 35//easy to apply, easy to break out of gender = NEUTER origin_tech = "engineering=3;combat=1" + hitsound = 'sound/effects/snap.ogg' var/weaken = 0 +/obj/item/restraints/legcuffs/bola/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback) + playsound(loc,'sound/weapons/bolathrow.ogg', 50, TRUE) + if(!..()) + return + /obj/item/restraints/legcuffs/bola/throw_impact(atom/hit_atom) if(..() || !iscarbon(hit_atom))//if it gets caught or the target can't be cuffed, return//abort @@ -166,6 +172,7 @@ feedback_add_details("handcuffs","B") to_chat(C, "[src] ensnares you!") C.Weaken(weaken) + playsound(loc, hitsound, 50, TRUE) /obj/item/restraints/legcuffs/bola/tactical //traitor variant name = "reinforced bola" diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 568fb0ededc..303862ff66f 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -28,6 +28,22 @@ else has_extinguisher = new/obj/item/extinguisher +/obj/structure/extinguisher_cabinet/examine(mob/user) + ..() + to_chat(user, "Alt-click to [opened ? "close":"open"] it.") + +/obj/structure/extinguisher_cabinet/AltClick(mob/living/user) + if(!istype(user) || user.incapacitated()) + to_chat(user, "You can't do that right now!") + return + if(!in_range(src, user)) + return + if(!iscarbon(usr)) + return + playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3) + opened = !opened + update_icon() + /obj/structure/extinguisher_cabinet/Destroy() QDEL_NULL(has_extinguisher) return ..() @@ -37,11 +53,16 @@ return if(istype(O, /obj/item/extinguisher)) if(!has_extinguisher && opened) + if(!user.drop_item()) + return user.drop_item(O) contents += O has_extinguisher = O + update_icon() to_chat(user, "You place [O] in [src].") + return TRUE else + playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3) opened = !opened else if(istype(O, /obj/item/weldingtool)) if(has_extinguisher) @@ -65,6 +86,7 @@ new material_drop(T) qdel(src) else + playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3) opened = !opened update_icon() @@ -81,21 +103,27 @@ to_chat(user, "You try to move your [temp.name], but cannot!") return if(has_extinguisher) + if(icon_state == "extinguisher_closed") + playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3) user.put_in_hands(has_extinguisher) to_chat(user, "You take [has_extinguisher] from [src].") has_extinguisher = null opened = 1 else + playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3) opened = !opened update_icon() /obj/structure/extinguisher_cabinet/attack_tk(mob/user) if(has_extinguisher) + if(icon_state == "extinguisher_closed") + playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3) has_extinguisher.loc = loc to_chat(user, "You telekinetically remove [has_extinguisher] from [src].") has_extinguisher = null opened = 1 else + playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3) opened = !opened update_icon() diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 154d4438530..1e3cb331cd1 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -273,8 +273,8 @@ var/obj/structure/cable/C = T.get_cable_node() if(C) playsound(loc, 'sound/magic/lightningshock.ogg', 100, 1, extrarange = 5) - tesla_zap(src, 3, C.powernet.avail * 0.01) //Zap for 1/100 of the amount of power. At a million watts in the grid, it will be as powerful as a tesla revolver shot. - C.powernet.load += C.powernet.avail * 0.0375 // you can gain up to 3.5 via the 4x upgrades power is halved by the pole so thats 2x then 1X then .5X for 3.5x the 3 bounces shock. + tesla_zap(src, 3, C.newavail() * 0.01) //Zap for 1/100 of the amount of power. At a million watts in the grid, it will be as powerful as a tesla revolver shot. + C.add_delayedload(C.newavail() * 0.0375) // you can gain up to 3.5 via the 4x upgrades power is halved by the pole so thats 2x then 1X then .5X for 3.5x the 3 bounces shock. return ..() /obj/structure/grille/broken // Pre-broken grilles for map placement diff --git a/code/game/world.dm b/code/game/world.dm index 4681f46498a..86ca6d883bd 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -374,26 +374,28 @@ var/world_topic_spam_protect_time = world.timeofday // apply some settings from config.. /world/proc/update_status() + status = get_status_text() + +/proc/get_world_status_text() + return world.get_status_text() + +/world/proc/get_status_text() var/s = "" if(config && config.server_name) s += "[config.server_name] — " + s += "[station_name()] " + if(config && config.githuburl) + s+= "([game_version])" - s += "[station_name()]"; - s += " (" - s += "" //Change this to wherever you want the hub to link to. - s += "[game_version]" - s += "" - s += ")" - s += "
The Perfect Mix of RP & Action
" - - - + if(config && config.server_tag_line) + s += "
[config.server_tag_line]" + s += "
" var/list/features = list() if(ticker) - if(master_mode) + if(master_mode && master_mode != "secret") features += master_mode else features += "STARTING" @@ -401,39 +403,22 @@ var/world_topic_spam_protect_time = world.timeofday if(!enter_allowed) features += "closed" - features += abandon_allowed ? "respawn" : "no respawn" + if(config && config.server_extra_features) + features += config.server_extra_features if(config && config.allow_vote_mode) features += "vote" - if(config && config.allow_ai) - features += "AI allowed" + if(config && config.wikiurl) + features += "Wiki" - var/n = 0 - for(var/mob/M in GLOB.player_list) - if(M.client) - n++ - - if(n > 1) - features += "~[n] players" - else if(n > 0) - features += "~[n] player" - - /* - is there a reason for this? the byond site shows 'hosted by X' when there is a proper host already. - if(host) - features += "hosted by [host]" - */ - -// if(!host && config && config.hostedby) -// features += "hosted by [config.hostedby]" + if(abandon_allowed) + features += "respawn" if(features) - s += ": [jointext(features, ", ")]" + s += "[jointext(features, ", ")]" - /* does this help? I do not know */ - if(src.status != s) - src.status = s + return s #define FAILED_DB_CONNECTION_CUTOFF 5 var/failed_db_connections = 0 diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index c15600f7bb6..4fcf95dbfd2 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -78,7 +78,7 @@ var/global/nologevent = 0 body += "VV - " body += "[ADMIN_TP(M,"TP")] - " if(M.client) - body += "PM - " + body += "PM - " body += "[ADMIN_SM(M,"SM")] - " if(ishuman(M) && M.mind) body += "HM -" @@ -950,9 +950,6 @@ var/gamma_ship_location = 1 // 0 = station , 1 = space for(var/obj/machinery/mech_bay_recharge_port/P in toArea) P.update_recharge_turf() - for(var/obj/machinery/power/apc/A in toArea) - A.init() - if(gamma_ship_location) gamma_ship_location = 0 else @@ -1096,7 +1093,7 @@ var/gamma_ship_location = 1 // 0 = station , 1 = space dat += "" + id + "" dat += "" + ckey + "" dat += "Unlink" - + dat += "" usr << browse(dat, "window=duplicates;size=500x480") \ No newline at end of file diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index f50bae146c3..36c0e5cf90d 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -61,7 +61,7 @@ } - function expand(id,job,name,real_name,image,key,ip,antagonist,UID,eyeUID){ + function expand(id,job,name,real_name,image,key,ip,antagonist,mobUID,clientUID,eyeUID){ clearAll(); @@ -75,13 +75,13 @@ body += ""; - body += "PP - " + body += "PP - " body += "N - " - body += "VV - " - body += "TP - " - body += "PM - " - body += "SM - " - body += "FLW" + body += "VV - " + body += "TP - " + body += "PM - " + body += "SM - " + body += "FLW" if(eyeUID) body += "|EYE" body += "
" @@ -293,6 +293,7 @@ var/mob/living/silicon/ai/A = M if(A.client && A.eyeobj) // No point following clientless AI eyes M_eyeUID = "[A.eyeobj.UID()]" + var/clientUID = M.client ? M.client.UID() : null //output for each mob dat += {" @@ -300,7 +301,7 @@ [M_name] - [M_rname] - [M_key] ([M_job]) @@ -371,7 +372,7 @@ dat += {"[(M.client ? "[M.client]" : "No client")] X - PM + PM "} switch(is_special_character(M)) if(0) @@ -398,7 +399,7 @@ dname = M return {"[dname][caption][logout_status][M.stat == 2 ? " (DEAD)" : ""] - PM[close ? "" : ""]"} + PM[close ? "" : ""]"} /datum/admins/proc/check_antagonists() if(!check_rights(R_ADMIN)) return @@ -473,7 +474,7 @@ var/mob/M = blob.current if(M) dat += "[ADMIN_PP(M,"[M.real_name]")][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" - dat += "PM" + dat += "PM" else dat += "Blob not found!" dat += "" diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 00900fe5fd1..1d26a013986 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -46,7 +46,7 @@ var/received_irc_pm = -99999 var/irc_admin //IRC admin that spoke with them last. var/mute_irc = 0 - + var/ssd_warning_acknowledged = FALSE //////////////////////////////////// //things that require the database// diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index a6216c87b1a..4ecb8fea741 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -9,6 +9,7 @@ #define MIN_CLIENT_VERSION 0 //Just an ambiguously low version for now, I don't want to suddenly stop people playing. //I would just like the code ready should it ever need to be used. #define SUGGESTED_CLIENT_VERSION 511 // only integers (e.g: 510, 511) useful here. Does not properly handle minor versions (e.g: 510.58, 511.848) +#define SSD_WARNING_TIMER 30 // cycles, not seconds, so 30=60s /* When somebody clicks a link in game, this Topic is called first. @@ -73,9 +74,7 @@ //Admin PM if(href_list["priv_msg"]) var/client/C = locate(href_list["priv_msg"]) - if(ismob(C)) //Old stuff can feed-in mobs instead of clients - var/mob/M = C - C = M.client + if(!C) // Might be a stealthmin ID, so pass it in straight C = href_list["priv_msg"] else if(C.UID() != href_list["priv_msg"]) @@ -227,6 +226,9 @@ vote_on_poll(pollid, optionid, 1) src << browse(null, "window=playerpoll") handle_player_polling() + if(href_list["ssdwarning"]) + ssd_warning_acknowledged = TRUE + to_chat(src, "SSD warning acknowledged.") switch(href_list["action"]) if("openLink") @@ -772,3 +774,16 @@ winset(src, "rpane.changelog", "background-color=#40628a;text-color=#FFFFFF") else winset(src, "rpane.changelog", "background-color=none;text-color=#000000") + + +/client/proc/send_ssd_warning(mob/M) + if(!config.ssd_warning) + return FALSE + if(ssd_warning_acknowledged) + return FALSE + if(M && M.player_logged < SSD_WARNING_TIMER) + return FALSE + to_chat(src, "Interacting with SSD players is against server rules unless you've ahelped first for permission. If you have, confirm that and proceed.") + return TRUE + +#undef SSD_WARNING_TIMER \ No newline at end of file diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index bd97d9184dc..3716adc5b9e 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -629,38 +629,6 @@ BLIND // can't see anything ..() -/obj/item/clothing/under/attack_hand(mob/user as mob) - //only forward to the attached accessory if the clothing is equipped (not in a storage) - if(accessories.len && src.loc == user) - for(var/obj/item/clothing/accessory/A in accessories) - A.attack_hand(user) - return - - if(ishuman(usr) && src.loc == user) //make it harder to accidentally undress yourself - return - - ..() - -/obj/item/clothing/under/MouseDrop(obj/over_object as obj) - if(ishuman(usr)) - //makes sure that the clothing is equipped so that we can't drag it into our hand from miles away. - if(!(src.loc == usr)) - return - if(!( usr.restrained() ) && !( usr.stat ) && ( over_object )) - if(!usr.canUnEquip(src)) - to_chat(usr, "[src] appears stuck on you!") - return - switch(over_object.name) - if("r_hand") - usr.unEquip(src) - usr.put_in_r_hand(src) - if("l_hand") - usr.unEquip(src) - usr.put_in_l_hand(src) - src.add_fingerprint(usr) - return - return - /obj/item/clothing/under/examine(mob/user) ..(user) switch(src.sensor_mode) diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index c3878aebfb8..f4f952d4db5 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -117,8 +117,8 @@ /datum/crafting_recipe/floorbot name = "Floorbot" result = /mob/living/simple_animal/bot/floorbot - reqs = list(/obj/item/storage/toolbox/mechanical = 1, - /obj/item/stack/tile/plasteel = 1, + reqs = list(/obj/item/storage/toolbox = 1, + /obj/item/stack/tile/plasteel = 10, /obj/item/assembly/prox_sensor = 1, /obj/item/robot_parts/r_arm = 1) time = 40 diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index fc27234648d..d2b32f720cf 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -1773,4 +1773,16 @@ /obj/item/clothing/gloves/ring/fluff/benjaminfallout //Benjaminfallout: Pretzel Brassheart name = "Pretzel's Ring" desc = "A small platinum ring with a large light blue diamond. Engraved inside the band are the words: 'To my lovely Pristine Princess. Forever yours, Savinien.'" - icon_state = "benjaminfallout_ring" \ No newline at end of file + icon_state = "benjaminfallout_ring" + +/obj/item/clothing/under/fluff/voxbodysuit //Gangelwaefre: Kikeri + name = "Vox Bodysuit" + desc = "A shimmering bodysuit custom-fit to a vox. Has shorts sewn in." + lefthand_file = 'icons/mob/inhands/fluff_lefthand.dmi' + righthand_file = 'icons/mob/inhands/fluff_righthand.dmi' + icon = 'icons/mob/inhands/fluff_righthand.dmi' + icon_state = "voxbodysuit" + item_state = "voxbodysuit" + item_color = "voxbodysuit" + body_parts_covered = HEAD|UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + species_fit = list("Vox") \ No newline at end of file diff --git a/code/modules/events/blob.dm b/code/modules/events/blob.dm index 6f23bbc5fcd..2c2fdfbab84 100644 --- a/code/modules/events/blob.dm +++ b/code/modules/events/blob.dm @@ -6,6 +6,7 @@ event_announcement.Announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak5.ogg') /datum/event/blob/start() + processing = FALSE //so it won't fire again in next tick var/turf/T = pick(blobstart) if(!T) return kill() @@ -23,4 +24,5 @@ B.key = M.key to_chat(B, "You are now a mouse, infected with blob spores. Find somewhere isolated... before you burst and become the blob! Use ventcrawl (alt-click on vents) to move around.") var/image/alert_overlay = image('icons/mob/blob.dmi', "blank_blob") - notify_ghosts("Infected Mouse has appeared in [get_area(B)].", source = B, alert_overlay = alert_overlay) \ No newline at end of file + notify_ghosts("Infected Mouse has appeared in [get_area(B)].", source = B, alert_overlay = alert_overlay) + processing = TRUE // Let it naturally end, if it runs successfully \ No newline at end of file diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 67979b61dd7..cc6c6115097 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -15,8 +15,8 @@ var/productivity = 0 var/max_items = 40 var/datum/research/files - var/list/show_categories = list("Food", "Botany Chemicals", "Leather and Cloth") - var/list/timesFiveCategories = list("Food", "Botany Chemicals") + var/list/show_categories = list("Food", "Botany Chemicals", "Organic Materials", "Leather and Cloth") + var/list/timesFiveCategories = list("Food", "Botany Chemicals", "Organic Materials") /obj/machinery/biogenerator/New() ..() diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index a4a6048a956..58158db56c7 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -397,13 +397,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(usr, "Not when you're not dead!") return - usr.verbs -= /mob/dead/observer/proc/dead_tele - spawn(30) - usr.verbs += /mob/dead/observer/proc/dead_tele - var/area/A = input("Area to jump to", "BOOYEA") as null|anything in ghostteleportlocs var/area/thearea = ghostteleportlocs[A] - if(!thearea) return + + if(!thearea) + return var/list/L = list() for(var/turf/T in get_area_turfs(thearea.type)) @@ -411,6 +409,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!L || !L.len) to_chat(usr, "No area available.") + return usr.forceMove(pick(L)) following = null diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 903c8ef80d3..d6c667b1b74 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -38,6 +38,7 @@ regenerate_icons() // Make sure the inventory updates handle_ghosted() + handle_ssd() /mob/living/carbon/human/proc/handle_ghosted() if(player_ghosted > 0 && stat == CONSCIOUS && job && !restrained()) @@ -48,6 +49,22 @@ if(player_ghosted % 150 == 0) force_cryo_human(src) +/mob/living/carbon/human/proc/handle_ssd() + if(player_logged > 0 && stat != DEAD && job) + player_logged++ + if(istype(loc, /obj/machinery/cryopod)) + return + if(config.auto_cryo_ssd_mins && (player_logged >= (config.auto_cryo_ssd_mins * 30)) && player_logged % 30 == 0) + var/turf/T = get_turf(src) + if(!is_station_level(T.z)) + return + var/area/A = get_area(src) + if(cryo_ssd(src)) + var/obj/effect/portal/P = new /obj/effect/portal(T, null, null, 40) + P.name = "NT SSD Teleportation Portal" + if(A.fast_despawn) + force_cryo_human(src) + /mob/living/carbon/human/calculate_affecting_pressure(var/pressure) ..() var/pressure_difference = abs( pressure - ONE_ATMOSPHERE ) diff --git a/code/modules/mob/living/silicon/death.dm b/code/modules/mob/living/silicon/death.dm index 2f662169551..63b206debba 100644 --- a/code/modules/mob/living/silicon/death.dm +++ b/code/modules/mob/living/silicon/death.dm @@ -42,3 +42,9 @@ animation.icon = 'icons/mob/mob.dmi' animation.master = src QDEL_IN(animation, 15) + +/mob/living/silicon/death(gibbed) + . = ..() + if(!gibbed) + if(death_sound) + playsound(get_turf(src), death_sound, 200, 1) diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm index 989dcba3783..ff859853ea5 100644 --- a/code/modules/mob/living/silicon/pai/recruit.dm +++ b/code/modules/mob/living/silicon/pai/recruit.dm @@ -28,7 +28,7 @@ var/datum/paiController/paiController // Global handler for pAI candidates if(candidate) if(!istype(candidate)) - message_admins("Warning: possible href exploit by [key_name(usr)] (paiController/Topic, candidate is not a pAI)") + message_admins("Warning: possible href exploit by [key_name_admin(usr)] (paiController/Topic, candidate is not a pAI)") log_debug("Warning: possible href exploit by [key_name(usr)] (paiController/Topic, candidate is not a pAI)") return @@ -55,7 +55,7 @@ var/datum/paiController/paiController // Global handler for pAI candidates pai_candidates -= candidate usr << browse(null, "window=findPai") - + return if("signup" in href_list) var/mob/dead/observer/O = locate(href_list["signup"]) @@ -71,8 +71,8 @@ var/datum/paiController/paiController // Global handler for pAI candidates if(candidate) if(candidate.key && usr.key && candidate.key != usr.key) - message_admins("Warning: possible href exploit by [key_name(usr)] (paiController/Topic, candidate and usr are different mobs)") - log_debug("Warning: possible href exploit by [key_name(usr)] (paiController/Topic, candidate and usr are different mobs)") + message_admins("Warning: possible href exploit by [key_name_admin(usr)] (paiController/Topic, candidate and usr have different keys)") + log_debug("Warning: possible href exploit by [key_name(usr)] (paiController/Topic, candidate and usr have different keys)") return if(href_list["new"]) diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index 80014c44f8b..e94f9e072b4 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -248,9 +248,9 @@ death() /mob/living/silicon/robot/drone/proc/full_law_reset() - clear_supplied_laws() - clear_inherent_laws() - clear_ion_laws() + clear_supplied_laws(TRUE) + clear_inherent_laws(TRUE) + clear_ion_laws(TRUE) laws = new /datum/ai_laws/drone //Reboot procs. diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 5c19dcb0d7a..1c82e9e8779 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -19,6 +19,7 @@ var/speak_exclamation = "declares" var/speak_query = "queries" var/pose //Yes, now AIs can pose too. + var/death_sound = 'sound/voice/borg_deathsound.ogg' //var/sensor_mode = 0 //Determines the current HUD. diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index 2737781bd08..77eb74e5696 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -210,23 +210,29 @@ var/robot_arm = /obj/item/robot_parts/l_arm throw_range = 5 w_class = WEIGHT_CLASS_NORMAL var/created_name = "Floorbot" + var/toolbox = /obj/item/storage/toolbox/mechanical + var/toolbox_color = "" //Blank for blue, r for red, y for yellow, etc. -/obj/item/toolbox_tiles_sensor +/obj/item/toolbox_tiles/sensor desc = "It's a toolbox with tiles sticking out the top and a sensor attached" name = "tiles, toolbox and sensor arrangement" - icon = 'icons/obj/aibots.dmi' icon_state = "toolbox_tiles_sensor" - force = 3 - throwforce = 10 - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_NORMAL - var/created_name = "Floorbot" -/obj/item/storage/toolbox/mechanical/attackby(obj/item/stack/tile/plasteel/T, mob/user, params) +/obj/item/storage/toolbox/attackby(obj/item/stack/tile/plasteel/T, mob/user, params) + var/list/allowed_toolbox = list(/obj/item/storage/toolbox/emergency, //which toolboxes can be made into floorbots + /obj/item/storage/toolbox/electrical, + /obj/item/storage/toolbox/mechanical, + /obj/item/storage/toolbox/green, + /obj/item/storage/toolbox/syndicate, + /obj/item/storage/toolbox/fakesyndi) + if(!istype(T, /obj/item/stack/tile/plasteel)) ..() return + if(!is_type_in_list(src, allowed_toolbox)) + return + if(type == /obj/item/storage/toolbox/green/memetic) + return if(contents.len >= 1) to_chat(user, "They won't fit in, as there is already stuff inside.") return @@ -234,6 +240,23 @@ var/robot_arm = /obj/item/robot_parts/l_arm if(user.s_active) user.s_active.close(user) var/obj/item/toolbox_tiles/B = new /obj/item/toolbox_tiles + B.toolbox = type + switch(B.toolbox) + if(/obj/item/storage/toolbox/mechanical/old) + B.toolbox_color = "ob" + if(/obj/item/storage/toolbox/emergency) + B.toolbox_color = "r" + if(/obj/item/storage/toolbox/emergency/old) + B.toolbox_color = "or" + if(/obj/item/storage/toolbox/electrical) + B.toolbox_color = "y" + if(/obj/item/storage/toolbox/green) + B.toolbox_color = "g" + if(/obj/item/storage/toolbox/syndicate) + B.toolbox_color = "s" + if(/obj/item/storage/toolbox/fakesyndi) + B.toolbox_color = "s" + B.icon_state = "[B.toolbox_color]toolbox_tiles" user.put_in_hands(B) to_chat(user, "You add the tiles into the empty toolbox. They protrude from the top.") user.unEquip(src, 1) @@ -246,8 +269,10 @@ var/robot_arm = /obj/item/robot_parts/l_arm ..() if(isprox(W)) qdel(W) - var/obj/item/toolbox_tiles_sensor/B = new /obj/item/toolbox_tiles_sensor() + var/obj/item/toolbox_tiles/sensor/B = new /obj/item/toolbox_tiles/sensor() B.created_name = created_name + B.toolbox_color = src.toolbox_color + B.icon_state = "[B.toolbox_color]toolbox_tiles_sensor" user.put_in_hands(B) to_chat(user, "You add the sensor to the toolbox and tiles.") user.unEquip(src, 1) @@ -263,12 +288,11 @@ var/robot_arm = /obj/item/robot_parts/l_arm created_name = t log_game("[key_name(user)] has renamed a robot to [t]") -/obj/item/toolbox_tiles_sensor/attackby(obj/item/W, mob/user, params) +/obj/item/toolbox_tiles/sensor/attackby(obj/item/W, mob/user, params) ..() if(istype(W, /obj/item/robot_parts/l_arm) || istype(W, /obj/item/robot_parts/r_arm)) qdel(W) - var/turf/T = get_turf(user.loc) - var/mob/living/simple_animal/bot/floorbot/A = new /mob/living/simple_animal/bot/floorbot(T) + var/mob/living/simple_animal/bot/floorbot/A = new(drop_location(), toolbox_color) A.name = created_name A.robot_arm = W.type to_chat(user, "You add the robot arm to the odd looking toolbox assembly. Boop beep!") @@ -287,10 +311,9 @@ var/robot_arm = /obj/item/robot_parts/l_arm //Medbot Assembly /obj/item/storage/firstaid/attackby(obj/item/I, mob/user, params) if(!istype(I, /obj/item/robot_parts/l_arm) && !istype(I, /obj/item/robot_parts/r_arm)) - return ..() + return ..() else robot_arm = I.type - //Making a medibot! if(contents.len) @@ -298,7 +321,7 @@ var/robot_arm = /obj/item/robot_parts/l_arm return var/obj/item/firstaid_arm_assembly/A = new /obj/item/firstaid_arm_assembly(loc, med_bot_skin) - + A.req_one_access = req_one_access A.syndicate_aligned = syndicate_aligned A.treatment_oxy = treatment_oxy @@ -492,7 +515,7 @@ var/robot_arm = /obj/item/robot_parts/l_arm //General Griefsky - else if((istype(I, /obj/item/wrench)) && (build_step == 3)) + else if((istype(I, /obj/item/wrench)) && (build_step == 3)) var/obj/item/griefsky_assembly/A = new /obj/item/griefsky_assembly user.put_in_hands(A) to_chat(user, "You adjust the arm slots for extra weapons!.") @@ -516,12 +539,12 @@ var/robot_arm = /obj/item/robot_parts/l_arm build_step++ to_chat(user, "You add an energy sword to [src]!.") qdel(I) - + else if((istype(I, /obj/item/melee/energy/sword)) && (build_step == 3)) if(!user.unEquip(I)) return to_chat(user, "You complete General Griefsky!.") - var/mob/living/simple_animal/bot/secbot/griefsky/S = new /mob/living/simple_animal/bot/secbot/griefsky + var/mob/living/simple_animal/bot/secbot/griefsky/S = new /mob/living/simple_animal/bot/secbot/griefsky S.forceMove(get_turf(src)) qdel(I) qdel(src) @@ -537,7 +560,7 @@ var/robot_arm = /obj/item/robot_parts/l_arm if(!user.unEquip(I)) return to_chat(user, "You complete Genewul Giftskee!.") - var/mob/living/simple_animal/bot/secbot/griefsky/toy/S = new /mob/living/simple_animal/bot/secbot/griefsky/toy + var/mob/living/simple_animal/bot/secbot/griefsky/toy/S = new /mob/living/simple_animal/bot/secbot/griefsky/toy S.forceMove(get_turf(src)) qdel(I) qdel(src) diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index c22d37eed19..21967bd202b 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -5,7 +5,7 @@ icon = 'icons/obj/aibots.dmi' icon_state = "floorbot0" density = 0 - anchored = 0 + anchored = FALSE health = 25 maxHealth = 25 @@ -32,6 +32,7 @@ var/max_targets = 50 var/turf/target var/oldloc = null + var/toolbox_color = "" #define HULL_BREACH 1 #define BRIDGE_MODE 2 @@ -40,12 +41,16 @@ #define REPLACE_TILE 5 #define TILE_EMAG 6 -/mob/living/simple_animal/bot/floorbot/New() +/mob/living/simple_animal/bot/floorbot/New(mapload, new_toolbox_color) ..() + toolbox_color = new_toolbox_color update_icon() var/datum/job/engineer/J = new/datum/job/engineer access_card.access += J.get_access() prev_access = access_card.access + if(toolbox_color == "s") + health = 50 + maxHealth = 50 /mob/living/simple_animal/bot/floorbot/bot_reset() ..() @@ -53,7 +58,7 @@ oldloc = null ignore_list = list() nagged = 0 - anchored = 0 + anchored = FALSE update_icon() /mob/living/simple_animal/bot/floorbot/set_custom_texts() @@ -235,7 +240,7 @@ repair(target) else if(emagged == 2 && istype(target,/turf/simulated/floor)) var/turf/simulated/floor/F = target - anchored = 1 + anchored = TRUE mode = BOT_REPAIRING if(prob(90)) F.break_tile_to_plating() @@ -244,7 +249,7 @@ audible_message("[src] makes an excited booping sound.") spawn(50) amount ++ - anchored = 0 + anchored = FALSE mode = BOT_IDLE target = null path = list() @@ -272,11 +277,11 @@ if(HULL_BREACH) //The most common job, patching breaches in the station's hull. if(is_hull_breach(scan_target)) //Ensure that the targeted space turf is actually part of the station, and not random space. result = scan_target - anchored = 1 //Prevent the floorbot being blown off-course while trying to reach a hull breach. + anchored = TRUE //Prevent the floorbot being blown off-course while trying to reach a hull breach. if(BRIDGE_MODE) //Only space turfs in our chosen direction are considered. if(get_dir(src, scan_target) == targetdirection) result = scan_target - anchored = 1 + anchored = TRUE if(REPLACE_TILE) F = scan_target if(istype(F, /turf/simulated/floor/plating)) //The floor must not already have a tile. @@ -306,9 +311,10 @@ mode = BOT_IDLE target = null return - anchored = 1 - icon_state = "floorbot-c" + anchored = TRUE + icon_state = "[toolbox_color]floorbot-c" if(istype(target_turf, /turf/space/)) //If we are fixing an area not part of pure space, it is + icon_state = "[toolbox_color]floorbot-c" visible_message("[targetdirection ? "[src] begins installing a bridge plating." : "[src] begins to repair the hole."] ") mode = BOT_REPAIRING spawn(50) @@ -320,11 +326,12 @@ mode = BOT_IDLE amount -= 1 update_icon() - anchored = 0 + anchored = FALSE target = null else var/turf/simulated/floor/F = target_turf mode = BOT_REPAIRING + icon_state = "[toolbox_color]floorbot-c" visible_message("[src] begins repairing the floor.") spawn(50) if(mode == BOT_REPAIRING) @@ -334,7 +341,7 @@ mode = BOT_IDLE amount -= 1 update_icon() - anchored = 0 + anchored = FALSE target = null /mob/living/simple_animal/bot/floorbot/proc/eattile(obj/item/stack/tile/plasteel/T) @@ -380,9 +387,9 @@ /mob/living/simple_animal/bot/floorbot/update_icon() if(amount > 0) - icon_state = "floorbot[on]" + icon_state = "[toolbox_color]floorbot[on]" else - icon_state = "floorbot[on]e" + icon_state = "[toolbox_color]floorbot[on]e" /mob/living/simple_animal/bot/floorbot/explode() on = 0 diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index fc265722f4a..0a1346fd0ed 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -19,10 +19,10 @@ spawn() alert("You have logged in already with another key this round, please log out of this one NOW or risk being banned!") if(matches) if(M.client) - message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(M)].", 1) + message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(M)].", 1) log_adminwarn("Notice: [key_name(src)] has the same [matches] as [key_name(M)].") else - message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(M)] (no longer logged in). ", 1) + message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(M)] (no longer logged in). ", 1) log_adminwarn("Notice: [key_name(src)] has the same [matches] as [key_name(M)] (no longer logged in).") /mob/Login() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 4ed70731079..e87612a9a7b 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -901,13 +901,18 @@ var/list/slot_equipment_priority = list( \ /mob/MouseDrop(mob/M as mob) ..() if(M != usr) return - if(isliving(M)) // Ewww + if(isliving(M)) var/mob/living/L = M if(L.mob_size <= MOB_SIZE_SMALL) return // Stops pAI drones and small mobs (borers, parrots, crabs) from stripping people. --DZD - if(!M.can_strip) return - if(usr == src) return - if(!Adjacent(usr)) return + if(!M.can_strip) + return + if(usr == src) + return + if(!Adjacent(usr)) + return + if(isLivingSSD(src) && M.client && M.client.send_ssd_warning(src)) + return show_inv(usr) /mob/proc/can_use_hands() diff --git a/code/modules/modular_computers/computers/item/computer_power.dm b/code/modules/modular_computers/computers/item/computer_power.dm index d43a5f6d00c..0a7955cfe52 100644 --- a/code/modules/modular_computers/computers/item/computer_power.dm +++ b/code/modules/modular_computers/computers/item/computer_power.dm @@ -13,10 +13,10 @@ if(battery_module && battery_module.battery && battery_module.battery.charge) var/obj/item/stock_parts/cell/cell = battery_module.battery - if(cell.use(amount * CELLRATE)) + if(cell.use(amount * GLOB.CELLRATE)) return TRUE else // Discharge the cell anyway. - cell.use(min(amount*CELLRATE, cell.charge)) + cell.use(min(amount*GLOB.CELLRATE, cell.charge)) return FALSE return FALSE diff --git a/code/modules/modular_computers/file_system/programs/command/card.dm b/code/modules/modular_computers/file_system/programs/command/card.dm index 38a42222c63..81d5fb03823 100644 --- a/code/modules/modular_computers/file_system/programs/command/card.dm +++ b/code/modules/modular_computers/file_system/programs/command/card.dm @@ -137,18 +137,17 @@ return 1 return -1 -/datum/computer_file/program/card_mod/proc/format_jobs(list/jobs) +/datum/computer_file/program/card_mod/proc/format_jobs(list/jobs, targetrank, list/jobformats) var/obj/item/computer_hardware/card_slot/card_slot = computer.all_components[MC_CARD] if(!card_slot || !card_slot.stored_card) return null - var/obj/item/card/id/id_card = card_slot.stored_card var/list/formatted = list() for(var/job in jobs) formatted.Add(list(list( "display_name" = replacetext(job, " ", " "), - "target_rank" = id_card && id_card.assignment ? id_card.assignment : "Unassigned", - "job" = job))) - + "target_rank" = targetrank, + "job" = job, + "jlinkformat" = jobformats[job] ? jobformats[job] : null))) return formatted @@ -225,11 +224,12 @@ var/temp_t = sanitize(copytext(input("Enter a custom job assignment.","Assignment"),1,MAX_MESSAGE_LEN)) //let custom jobs function as an impromptu alt title, mainly for sechuds if(temp_t && modify) + SSjobs.log_job_transfer(modify.registered_name, modify.getRankAndAssignment(), temp_t, scan.registered_name) modify.assignment = temp_t log_game("[key_name(usr)] has given \"[modify.registered_name]\" the custom job title \"[temp_t]\".") else var/list/access = list() - if(is_centcom) + if(is_centcom && islist(get_centcom_access(t1))) access = get_centcom_access(t1) else var/datum/job/jobdatum @@ -249,6 +249,16 @@ if(t1 == "Civilian") message_admins("[key_name_admin(usr)] has reassigned \"[modify.registered_name]\" from \"[jobnamedata]\" to \"[t1]\".") + SSjobs.log_job_transfer(modify.registered_name, jobnamedata, t1, scan.registered_name) + SSjobs.slot_job_transfer(modify.rank, t1) + + var/mob/living/carbon/human/H = modify.getPlayer() + if(istype(H)) + if(jobban_isbanned(H, t1)) + message_admins("[ADMIN_FULLMONTY(H)] has been assigned the job [t1], in possible violation of their job ban.") + if(H.mind) + H.mind.playtime_role = t1 + modify.access = access modify.assignment = t1 modify.rank = t1 @@ -271,6 +281,18 @@ if("PRG_mode") mode = text2num(href_list["mode_target"]) + if("PRG_wipe_my_logs") + if(is_authenticated(usr) && is_centcom) + var/delcount = SSjobs.delete_log_records(scan.registered_name, FALSE) + if(delcount) + playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) + + if("PRG_wipe_all_logs") + if(is_authenticated(usr)) + var/delcount = SSjobs.delete_log_records(scan.registered_name, TRUE) + if(delcount) + playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) + if("PRG_print") if(!printing && computer) printing = 1 @@ -312,6 +334,7 @@ var/jobnamedata = modify.getRankAndAssignment() log_game("[key_name(usr)] has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\".") message_admins("[key_name_admin(usr)] has terminated the employment of \"[modify.registered_name]\" the \"[jobnamedata]\".") + SSjobs.log_job_transfer(modify.registered_name, jobnamedata, "Terminated", scan.registered_name) modify.assignment = "Terminated" modify.access = list() callHook("terminate_employee", list(modify)) @@ -398,6 +421,7 @@ data["target_owner"] = modify && modify.registered_name ? modify.registered_name : "-----" data["target_rank"] = get_target_rank() data["scan_name"] = scan ? scan.name : "-----" + data["scan_owner"] = scan && scan.registered_name ? scan.registered_name : null data["authenticated"] = is_authenticated(user) data["has_modify"] = !!modify data["account_number"] = modify ? modify.associated_account_number : null @@ -405,14 +429,17 @@ data["all_centcom_access"] = null data["regions"] = null - data["engineering_jobs"] = format_jobs(engineering_positions) - data["medical_jobs"] = format_jobs(medical_positions) - data["science_jobs"] = format_jobs(science_positions) - data["security_jobs"] = format_jobs(security_positions) - data["support_jobs"] = format_jobs(support_positions) - data["civilian_jobs"] = format_jobs(civilian_positions) - data["special_jobs"] = format_jobs(whitelisted_positions) - data["centcom_jobs"] = format_jobs(get_all_centcom_jobs()) + var/list/job_formats = SSjobs.format_jobs_for_id_computer(modify) + + data["top_jobs"] = format_jobs(list("Captain", "Custom"), data["target_rank"], job_formats) + data["engineering_jobs"] = format_jobs(engineering_positions, data["target_rank"], job_formats) + data["medical_jobs"] = format_jobs(medical_positions, data["target_rank"], job_formats) + data["science_jobs"] = format_jobs(science_positions, data["target_rank"], job_formats) + data["security_jobs"] = format_jobs(security_positions, data["target_rank"], job_formats) + data["support_jobs"] = format_jobs(support_positions, data["target_rank"], job_formats) + data["civilian_jobs"] = format_jobs(civilian_positions, data["target_rank"], job_formats) + data["special_jobs"] = format_jobs(whitelisted_positions, data["target_rank"], job_formats) + data["centcom_jobs"] = format_jobs(get_all_centcom_jobs(), data["target_rank"], job_formats) data["card_skins"] = format_card_skins(get_station_card_skins()) data["job_slots"] = format_job_slots() @@ -423,6 +450,9 @@ data["cooldown_mins"] = mins data["cooldown_secs"] = (seconds < 10) ? "0[seconds]" : seconds + if(mode == 3 && is_authenticated(user)) + data["id_change_html"] = SSjobs.fetch_transfer_record_html(is_centcom) + if(modify) data["current_skin"] = modify.icon_state diff --git a/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm b/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm index 2efe872a7f5..783ae9fa947 100644 --- a/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm @@ -39,7 +39,7 @@ data["powermonitor"] = attached ? TRUE : FALSE if(attached) - var/datum/powernet/powernet = attached.get_powernet() + var/datum/powernet/powernet = attached.powernet data["poweravail"] = powernet.avail data["powerload"] = powernet.viewload data["powerdemand"] = powernet.load diff --git a/code/modules/modular_computers/hardware/recharger.dm b/code/modules/modular_computers/hardware/recharger.dm index 688d689cf67..418a9736528 100644 --- a/code/modules/modular_computers/hardware/recharger.dm +++ b/code/modules/modular_computers/hardware/recharger.dm @@ -20,7 +20,7 @@ return if(use_power(charge_rate, charging=1)) - holder.give_power(charge_rate * CELLRATE) + holder.give_power(charge_rate * GLOB.CELLRATE) /obj/item/computer_hardware/recharger/APC diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index e1ae7da26f5..dc16101eac7 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -131,13 +131,13 @@ obj/item/clipboard/proc/penPlacement(mob/user, obj/item/pen/P, placing) else penPlacement(usr, containedpen, FALSE) else if(href_list["remove"]) - var/obj/item/P = locate(href_list["remove"]) + var/obj/item/P = locate(href_list["remove"]) in src if(isPaperwork(P)) usr.put_in_hands(P) to_chat(usr, "You remove [P] from [src].") checkTopPaper() //So we don't accidentally make the top sheet not be on the clipboard else if(href_list["viewOrWrite"]) - var/obj/item/P = locate(href_list["viewOrWrite"]) + var/obj/item/P = locate(href_list["viewOrWrite"]) in src if(!isPaperwork(P)) return if(is_pen(I) && isPaperwork(P) != PHOTO) //Because you can't write on photos that aren't in your hand @@ -148,7 +148,7 @@ obj/item/clipboard/proc/penPlacement(mob/user, obj/item/pen/P, placing) var/obj/item/photo/Ph = P Ph.show(usr) else if(href_list["topPaper"]) - var/obj/item/P = locate(href_list["topPaper"]) + var/obj/item/P = locate(href_list["topPaper"]) in src if(P == toppaper) return to_chat(usr, "You flick the pages so that [P] is on top.") diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index f02e6977677..ce05a190bb3 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -46,7 +46,6 @@ name = "area power controller" desc = "A control terminal for the area electrical systems." icon_state = "apc0" - anchored = 1 use_power = NO_POWER_USE req_access = list(access_engine_equip) siemens_strength = 1 @@ -55,7 +54,7 @@ var/areastring = null var/obj/item/stock_parts/cell/cell var/start_charge = 90 // initial cell charge % - var/cell_type = 2500 + var/cell_type = 2500 //Base cell has 2500 capacity. Enter the path of a different cell you want to use. cell determines charge rates, max capacity, ect. These can also be changed with other APC vars, but isn't recommended to minimize the risk of accidental usage of dirty editted APCs var/opened = 0 //0=closed, 1=opened, 2=cover removed var/shorted = 0 var/lighting = 3 @@ -140,40 +139,35 @@ /obj/machinery/power/apc/connect_to_network() //Override because the APC does not directly connect to the network; it goes through a terminal. //The terminal is what the power computer looks for anyway. - if(!terminal) - make_terminal() if(terminal) terminal.connect_to_network() -/obj/machinery/power/apc/New(turf/loc, var/ndir, var/building=0) +/obj/machinery/power/apc/New(turf/loc, ndir, building = 0) if(!armor) armor = list(melee = 20, bullet = 20, laser = 10, energy = 100, bomb = 30, bio = 100, rad = 100) ..() GLOB.apcs += src GLOB.apcs = sortAtom(GLOB.apcs) - wires = new(src) + wires = new(src) // offset 24 pixels in direction of dir // this allows the APC to be embedded in a wall, yet still inside an area if(building) - dir = ndir - src.tdir = dir // to fix Vars bug - dir = SOUTH + setDir(ndir) + tdir = dir // to fix Vars bug + setDir(SOUTH) pixel_x = (src.tdir & 3)? 0 : (src.tdir == 4 ? 24 : -24) pixel_y = (src.tdir & 3)? (src.tdir ==1 ? 24 : -24) : 0 - if(building==0) - init() - else + if(building) area = get_area(src) area.apc |= src opened = 1 operating = 0 name = "[area.name] APC" stat |= MAINT - src.update_icon() - spawn(5) - src.update() + update_icon() + addtimer(CALLBACK(src, .proc/update), 5) /obj/machinery/power/apc/Destroy() GLOB.apcs -= src @@ -196,14 +190,17 @@ // create a terminal object at the same position as original turf loc // wires will attach to this terminal = new/obj/machinery/power/terminal(src.loc) - terminal.dir = tdir + terminal.setDir(tdir) terminal.master = src -/obj/machinery/power/apc/proc/init() +/obj/machinery/power/apc/Initialize(mapload) + . = ..() + if(!mapload) + return has_electronics = 2 //installed and secured // is starting with a power cell installed, create it and set its charge level if(cell_type) - src.cell = new/obj/item/stock_parts/cell(src) + cell = new/obj/item/stock_parts/cell(src) cell.maxcharge = cell_type // cell_type is maximum charge (old default was 1000 or 2500 (values one and two respectively) cell.charge = start_charge * cell.maxcharge / 100 // (convert percentage to actual value) @@ -222,12 +219,12 @@ area = get_area_name(areastring) name = "\improper [area.name] APC" area.apc |= src + update_icon() make_terminal() - spawn(5) - src.update() + addtimer(CALLBACK(src, .proc/update), 5) /obj/machinery/power/apc/examine(mob/user) if(..(user, 1)) @@ -1087,14 +1084,9 @@ else return 0 -//Returns 1 if the APC should attempt to charge -/obj/machinery/power/apc/proc/attempt_charging() - return (chargemode && charging == 1 && operating) - -/obj/machinery/power/apc/draw_power(var/amount) +/obj/machinery/power/apc/add_load(amount) if(terminal && terminal.powernet) - return terminal.powernet.draw_power(amount) - return 0 + terminal.add_load(amount) /obj/machinery/power/apc/avail() if(terminal) @@ -1103,7 +1095,6 @@ return 0 /obj/machinery/power/apc/process() - if(stat & (BROKEN|MAINT)) return if(!area.requires_power) @@ -1139,18 +1130,21 @@ if(cell && !shorted) // draw power from cell as before to power the area - var/cellused = min(cell.charge, CELLRATE * lastused_total) // clamp deduction to a max, amount left in cell + var/cellused = min(cell.charge, GLOB.CELLRATE * lastused_total) // clamp deduction to a max, amount left in cell cell.use(cellused) if(excess > lastused_total) // if power excess recharge the cell // by the same amount just used - var/draw = draw_power(cellused/CELLRATE) // draw the power needed to charge this cell - cell.give(draw * CELLRATE) + cell.give(cellused) + add_load(cellused/GLOB.CELLRATE) // add the load used to recharge the cell + + else // no excess, and not enough per-apc - if( (cell.charge/CELLRATE + excess) >= lastused_total) // can we draw enough from cell+grid to cover last usage? - var/draw = draw_power(excess) - cell.charge = min(cell.maxcharge, cell.charge + CELLRATE * draw) //recharge with what we can + if((cell.charge/GLOB.CELLRATE + excess) >= lastused_total) // can we draw enough from cell+grid to cover last usage? + cell.charge = min(cell.maxcharge, cell.charge + GLOB.CELLRATE * excess) //recharge with what we can + add_load(excess) // so draw what we can from the grid charging = 0 + else // not enough power available to run the last tick! charging = 0 chargecount = 0 @@ -1203,14 +1197,12 @@ autoflag = 0 // now trickle-charge the cell - - if(src.attempt_charging()) + if(chargemode && charging == 1 && operating) if(excess > 0) // check to make sure we have enough to charge // Max charge is capped to % per second constant - var/ch = min(excess*CELLRATE, cell.maxcharge*CHARGELEVEL) - - ch = draw_power(ch/CELLRATE) // Removes the power we're taking from the grid - cell.give(ch*CELLRATE) // actually recharge the cell + var/ch = min(excess*GLOB.CELLRATE, cell.maxcharge*GLOB.CHARGELEVEL) + add_load(ch/GLOB.CELLRATE) // Removes the power we're taking from the grid + cell.give(ch) // actually recharge the cell else charging = 0 // stop charging @@ -1223,12 +1215,12 @@ if(chargemode) if(!charging) - if(excess > cell.maxcharge*CHARGELEVEL) + if(excess > cell.maxcharge*GLOB.CHARGELEVEL) chargecount++ else chargecount = 0 - if(chargecount >= 10) + if(chargecount == 10) chargecount = 0 charging = 1 @@ -1295,9 +1287,13 @@ lighting = 0 equipment = 0 environ = 0 + update_icon() + update() spawn(600) equipment = 3 environ = 3 + update_icon() + update() ..() /obj/machinery/power/apc/ex_act(severity) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 8ec54fbf2ee..bccf49feabb 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -59,17 +59,16 @@ By design, d1 is the smallest direction and d2 is the highest /obj/structure/cable/white color = COLOR_WHITE -/obj/structure/cable/New() - ..() +/obj/structure/cable/Initialize(mapload) + . = ..() // ensure d1 & d2 reflect the icon_state for entering and exiting cable var/dash = findtext(icon_state, "-") - d1 = text2num(copytext(icon_state, 1, dash)) - d2 = text2num(copytext(icon_state, dash+1 )) + d1 = text2num(copytext( icon_state, 1, dash )) + d2 = text2num(copytext( icon_state, dash+1 )) - var/turf/T = loc // hide if turf is not intact - - if(level == 1) + var/turf/T = get_turf(src) // hide if turf is not intact + if(level == 1) hide(T.intact) LAZYADD(GLOB.cable_list, src) //add it to the global cable list @@ -79,14 +78,22 @@ By design, d1 is the smallest direction and d2 is the highest LAZYREMOVE(GLOB.cable_list, src) //remove it from global cable list return ..() // then go ahead and delete the cable +/obj/structure/cable/deconstruct(disassembled = TRUE) + var/turf/T = get_turf(src) + if(d1) // 0-X cables are 1 unit, X-X cables are 2 units long + new/obj/item/stack/cable_coil(T, 2, paramcolor = color) + else + new/obj/item/stack/cable_coil(T, 1, paramcolor = color) + qdel(src) + /////////////////////////////////// // General procedures /////////////////////////////////// //If underfloor, hide the cable -/obj/structure/cable/hide(var/i) +/obj/structure/cable/hide(i) - if(level == 1 && istype(loc, /turf)) + if(level == 1 && isturf(loc)) invisibility = i ? 101 : 0 updateicon() @@ -97,9 +104,49 @@ By design, d1 is the smallest direction and d2 is the highest icon_state = "[d1]-[d2]" -// returns the powernet this cable belongs to -/obj/structure/cable/proc/get_powernet() //TODO: remove this as it is obsolete - return powernet +//////////////////////////////////////////// +// Power related +/////////////////////////////////////////// + +// All power generation handled in add_avail() +// Machines should use add_load(), surplus(), avail() +// Non-machines should use add_delayedload(), delayed_surplus(), newavail() + +/obj/structure/cable/proc/add_avail(amount) + if(powernet) + powernet.newavail += amount + +/obj/structure/cable/proc/add_load(amount) + if(powernet) + powernet.load += amount + +/obj/structure/cable/proc/surplus() + if(powernet) + return Clamp(powernet.avail-powernet.load, 0, powernet.avail) + else + return 0 + +/obj/structure/cable/proc/avail() + if(powernet) + return powernet.avail + else + return 0 + +/obj/structure/cable/proc/add_delayedload(amount) + if(powernet) + powernet.delayedload += amount + +/obj/structure/cable/proc/delayed_surplus() + if(powernet) + return Clamp(powernet.newavail - powernet.delayedload, 0, powernet.newavail) + else + return 0 + +/obj/structure/cable/proc/newavail() + if(powernet) + return powernet.newavail + else + return 0 //Telekinesis has no effect on a cable /obj/structure/cable/attack_tk(mob/user) @@ -116,47 +163,19 @@ By design, d1 is the smallest direction and d2 is the highest if(T.intact) return - if(istype(W, /obj/item/wirecutters)) -///// Z-Level Stuff - /* if(src.d1 == 12 || src.d2 == 12) - to_chat(user, "You must cut this cable from above.") - return */ -///// Z-Level Stuff - /* if(breaker_box) - to_chat(user, "This cable is connected to nearby breaker box. Use breaker box to interact with it.") - return */ - + if(iswirecutter(W)) if(shock(user, 50)) return - - if(src.d1) // 0-X cables are 1 unit, X-X cables are 2 units long - new/obj/item/stack/cable_coil(T, 2, paramcolor = color) - else - new/obj/item/stack/cable_coil(T, 1, paramcolor = color) - - for(var/mob/O in viewers(src, null)) - O.show_message("[user] cuts the cable.", 1) - -///// Z-Level Stuff - /*if(src.d1 == 11 || src.d2 == 11) - var/turf/controllerlocation = locate(1, 1, z) - for(var/obj/effect/landmark/zcontroller/controller in controllerlocation) - if(controller.down) - var/turf/below = locate(src.x, src.y, controller.down_target) - for(var/obj/structure/cable/c in below) - if(c.d1 == 12 || c.d2 == 12) - c.qdel()*/ -///// Z-Level Stuff + user.visible_message("[user] cuts the cable.", "You cut the cable.") investigate_log("was cut by [key_name(usr, 1)] in [get_area(user)]([T.x], [T.y], [T.z] - [ADMIN_JMP(T)])","wires") - - qdel(src) // qdel + deconstruct() return else if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/coil = W if(coil.get_amount() < 1) - to_chat(user, "Not enough cable") + to_chat(user, "Not enough cable!") return coil.cable_join(src, user) @@ -169,11 +188,9 @@ By design, d1 is the smallest direction and d2 is the highest else if(istype(W, /obj/item/multitool)) if(powernet && (powernet.avail > 0)) // is it powered? - to_chat(user, "[powernet.avail]W in power network.") - + to_chat(user, "Total power: [DisplayPower(powernet.avail)]\nLoad: [DisplayPower(powernet.load)]\nExcess power: [DisplayPower(surplus())]") else - to_chat(user, "The cable is not powered.") - + to_chat(user, "The cable is not powered.") shock(user, 5, 0.2) else if(istype(W, /obj/item/toy/crayon)) @@ -184,7 +201,7 @@ By design, d1 is the smallest direction and d2 is the highest if(W.flags & CONDUCT) shock(user, 50, 0.7) - src.add_fingerprint(user) + add_fingerprint(user) // shock the user with probability prb /obj/structure/cable/proc/shock(mob/user, prb, siemens_coeff = 1) @@ -196,21 +213,22 @@ By design, d1 is the smallest direction and d2 is the highest else return FALSE +/obj/structure/cable/singularity_pull(S, current_size) + ..() + if(current_size >= STAGE_FIVE) + deconstruct() + //explosion handling /obj/structure/cable/ex_act(severity) switch(severity) - if(1.0) + if(1) qdel(src) // qdel - if(2.0) + if(2) if(prob(50)) - new/obj/item/stack/cable_coil(get_turf(src), src.d1 ? 2 : 1, paramcolor = color) - qdel(src) // qdel - - if(3.0) + deconstruct() + if(3) if(prob(25)) - new/obj/item/stack/cable_coil(get_turf(src), src.d1 ? 2 : 1, paramcolor = color) - qdel(src) // qdel - return + deconstruct() obj/structure/cable/proc/cable_color(var/colorC) if(colorC) @@ -231,7 +249,7 @@ obj/structure/cable/proc/cable_color(var/colorC) //handles merging diagonally matching cables //for info : direction^3 is flipping horizontally, direction^12 is flipping vertically -/obj/structure/cable/proc/mergeDiagonalsNetworks(var/direction) +/obj/structure/cable/proc/mergeDiagonalsNetworks(direction) //search for and merge diagonally matching cables from the first direction component (north/south) var/turf/T = get_step(src, direction&3)//go north/south @@ -275,7 +293,7 @@ obj/structure/cable/proc/cable_color(var/colorC) C.powernet.add_cable(src) //else, we simply connect to the matching cable powernet // merge with the powernets of power objects in the given direction -/obj/structure/cable/proc/mergeConnectedNetworks(var/direction) +/obj/structure/cable/proc/mergeConnectedNetworks(direction) var/fdir = (!direction)? 0 : turn(direction, 180) //flip the direction, to match with the source position on its turf @@ -313,25 +331,27 @@ obj/structure/cable/proc/cable_color(var/colorC) //first let's add turf cables to our powernet //then we'll connect machines on turf with a node cable is present for(var/AM in loc) - if(istype(AM,/obj/structure/cable)) + if(istype(AM, /obj/structure/cable)) var/obj/structure/cable/C = AM if(C.d1 == d1 || C.d2 == d1 || C.d1 == d2 || C.d2 == d2) //only connected if they have a common direction - if(C.powernet == powernet) continue + if(C.powernet == powernet) + continue if(C.powernet) merge_powernets(powernet, C.powernet) else powernet.add_cable(C) //the cable was powernetless, let's just add it to our powernet - else if(istype(AM,/obj/machinery/power/apc)) + else if(istype(AM, /obj/machinery/power/apc)) var/obj/machinery/power/apc/N = AM - if(!N.terminal) continue // APC are connected through their terminal + if(!N.terminal) + continue // APC are connected through their terminal if(N.terminal.powernet == powernet) continue to_connect += N.terminal //we'll connect the machines after all cables are merged - else if(istype(AM,/obj/machinery/power)) //other power machines + else if(istype(AM, /obj/machinery/power)) //other power machines var/obj/machinery/power/M = AM if(M.powernet == powernet) @@ -349,23 +369,10 @@ obj/structure/cable/proc/cable_color(var/colorC) ////////////////////////////////////////////// //if powernetless_only = 1, will only get connections without powernet -/obj/structure/cable/proc/get_connections(var/powernetless_only = 0) +/obj/structure/cable/proc/get_connections(powernetless_only = 0) . = list() // this will be a list of all connected power objects var/turf/T -///// Z-Level Stuff - /* if(d1 == 11 || d1 == 12) - var/turf/controllerlocation = locate(1, 1, z) - for(var/obj/effect/landmark/zcontroller/controller in controllerlocation) - if(controller.up && d1 == 12) - T = locate(src.x, src.y, controller.up_target) - if(T) - . += power_list(T, src, 11, 1) - if(controller.down && d1 == 11) - T = locate(src.x, src.y, controller.down_target) - if(T) - . += power_list(T, src, 12, 1) */ -///// Z-Level Stuff //get matching cables from the first direction if(d1) //if not a node cable T = get_step(src, d1) @@ -382,20 +389,6 @@ obj/structure/cable/proc/cable_color(var/colorC) . += power_list(loc, src, d1, powernetless_only) //get on turf matching cables -///// Z-Level Stuff - /*if(d2 == 11 || d2 == 12) - var/turf/controllerlocation = locate(1, 1, z) - for(var/obj/effect/landmark/zcontroller/controller in controllerlocation) - if(controller.up && d2 == 12) - T = locate(src.x, src.y, controller.up_target) - if(T) - . += power_list(T, src, 11, 1) - if(controller.down && d2 == 11) - T = locate(src.x, src.y, controller.down_target) - if(T) - . += power_list(T, src, 12, 1) -///// Z-Level Stuff - else */ //do the same on the second direction (which can't be 0) T = get_step(src, d2) if(T) @@ -416,7 +409,8 @@ obj/structure/cable/proc/cable_color(var/colorC) //needed as this can, unlike other placements, disconnect cables /obj/structure/cable/proc/denode() var/turf/T1 = loc - if(!T1) return + if(!T1) + return var/list/powerlist = power_list(T1,src,0,0) //find the other cables that ended in the centre of the turf, with or without a powernet if(powerlist.len>0) @@ -424,13 +418,19 @@ obj/structure/cable/proc/cable_color(var/colorC) propagate_network(powerlist[1],PN) //propagates the new powernet beginning at the source cable if(PN.is_empty()) //can happen with machines made nodeless when smoothing cables - qdel(PN) // qdel + qdel(PN) + +/obj/structure/cable/proc/auto_propogate_cut_cable(obj/O) + if(O && !QDELETED(O)) + var/datum/powernet/newPN = new()// creates a new powernet... + propagate_network(O, newPN)//... and propagates it to the other side of the cable // cut the cable's powernet at this cable and updates the powergrid -/obj/structure/cable/proc/cut_cable_from_powernet() +/obj/structure/cable/proc/cut_cable_from_powernet(remove=TRUE) var/turf/T1 = loc var/list/P_list - if(!T1) return + if(!T1) + return if(d1) T1 = get_step(T1, d1) P_list = power_list(T1, src, turn(d1,180),0,cable_only = 1) // what adjacently joins on to cut cable... @@ -448,11 +448,13 @@ obj/structure/cable/proc/cable_color(var/colorC) var/obj/O = P_list[1] // remove the cut cable from its turf and powernet, so that it doesn't get count in propagate_network worklist - loc = null + if(remove) + loc = null powernet.remove_cable(src) //remove the cut cable from its powernet // queue it to rebuild SSmachines.deferred_powernet_rebuilds += O +// addtimer(CALLBACK(O, .proc/auto_propogate_cut_cable, O), 0) //so we don't rebuild the network X times when singulo/explosion destroys a line of X cables // Disconnect machines connected to nodes if(d1 == 0) // if we cut a node (O-X) cable @@ -460,6 +462,7 @@ obj/structure/cable/proc/cable_color(var/colorC) if(!P.connect_to_network()) //can't find a node cable on a the turf to connect to P.disconnect_from_network() //remove from current network + /////////////////////////////////////////////// // The cable coil object, used for laying cable /////////////////////////////////////////////// @@ -468,9 +471,7 @@ obj/structure/cable/proc/cable_color(var/colorC) // Definitions //////////////////////////////// -var/global/list/datum/stack_recipe/cable_coil_recipes = list( - new /datum/stack_recipe/cable_restraints("cable restraints", /obj/item/restraints/handcuffs/cable, 15), -) +GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restraints", /obj/item/restraints/handcuffs/cable, 15))) /obj/item/stack/cable_coil name = "cable coil" @@ -510,7 +511,7 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list( pixel_x = rand(-2,2) pixel_y = rand(-2,2) update_icon() - recipes = cable_coil_recipes + recipes = GLOB.cable_coil_recipes update_wclass() /////////////////////////////////// @@ -653,7 +654,7 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list( to_chat(user, "You can't lay cable at a place that far away!") return - var/dirn = null + var/dirn if(!dirnew) //If we weren't given a direction, come up with one! (Called as null from catwalk.dm and floor.dm) if(user.loc == T) dirn = user.dir //If laying on the tile we're on, lay in the direction we're facing @@ -690,7 +691,7 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list( if(C.shock(user, 50)) if(prob(50)) //fail new /obj/item/stack/cable_coil(get_turf(C), 1, paramcolor = C.color) - qdel(C) // qdel + C.deconstruct() return C @@ -707,7 +708,7 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list( return if(get_dist(C, user) > 1) // make sure it's close enough - to_chat(user, "You can't lay cable at a place that far away.") + to_chat(user, "You can't lay cable at a place that far away!") return @@ -720,13 +721,41 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list( // one end of the clicked cable is pointing towards us if(C.d1 == dirn || C.d2 == dirn) if(U.intact) // can't place a cable if the floor is complete - to_chat(user, "You can't lay cable there unless the floor tiles are removed.") + to_chat(user, "You can't lay cable there unless the floor tiles are removed!") return else // cable is pointing at us, we're standing on an open tile // so create a stub pointing at the clicked cable on our tile - place_turf(U, user, turn(dirn, 180)) + var/fdirn = turn(dirn, 180) // the opposite direction + + for(var/obj/structure/cable/LC in U) // check to make sure there's not a cable there already + if(LC.d1 == fdirn || LC.d2 == fdirn) + to_chat(user, "There's already a cable at that position!") + return + + var/obj/structure/cable/NC = get_new_cable (U) + + NC.d1 = 0 + NC.d2 = fdirn + NC.add_fingerprint(user) + NC.update_icon() + + //create a new powernet with the cable, if needed it will be merged later + var/datum/powernet/newPN = new() + newPN.add_cable(NC) + + NC.mergeConnectedNetworks(NC.d2) //merge the powernet with adjacents powernets + NC.mergeConnectedNetworksOnTurf() //merge the powernet with on turf powernets + + if(NC.d2 & (NC.d2 - 1))// if the cable is layed diagonally, check the others 2 possible directions + NC.mergeDiagonalsNetworks(NC.d2) + + use(1) + + if(NC.shock(user, 50)) + if(prob(50)) //fail + NC.deconstruct() return // exisiting cable doesn't point at our position, so see if it's a stub @@ -745,7 +774,7 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list( if(LC == C) // skip the cable we're interacting with continue if((LC.d1 == nd1 && LC.d2 == nd2) || (LC.d1 == nd2 && LC.d2 == nd1) ) // make sure no cable matches either direction - to_chat(user, "There's already a cable at that position.") + to_chat(user, "There's already a cable at that position!") return @@ -772,8 +801,7 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list( if(C.shock(user, 50)) if(prob(50)) //fail - new/obj/item/stack/cable_coil(get_turf(C), 2, paramcolor = C.color) - qdel(C) // qdel + C.deconstruct() return C.denode()// this call may have disconnected some cables that terminated on the centre of the turf, if so split the powernets. @@ -786,8 +814,8 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list( /obj/item/stack/cable_coil/cut item_state = "coil2" -/obj/item/stack/cable_coil/cut/New(loc) - ..() +/obj/item/stack/cable_coil/cut/Initialize(mapload) + . = ..() src.amount = rand(1,2) pixel_x = rand(-2,2) pixel_y = rand(-2,2) diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 3a453ffe10c..8b5f64e94fb 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -85,8 +85,8 @@ var/const/GRAV_NEEDS_WRENCH = 3 // Generator which spawns with the station. // -/obj/machinery/gravity_generator/main/station/Initialize() - ..() +/obj/machinery/gravity_generator/main/station/Initialize(mapload) + . = ..() setup_parts() middle.overlays += "activated" update_list() diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 3e5d614896e..33741d1475b 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -9,7 +9,7 @@ /obj/machinery/power name = null icon = 'icons/obj/power.dmi' - anchored = 1.0 + anchored = TRUE on_blueprints = TRUE var/datum/powernet/powernet = null use_power = NO_POWER_USE @@ -25,18 +25,24 @@ ////////////////////////////// // common helper procs for all power machines -/obj/machinery/power/proc/add_avail(var/amount) +// All power generation handled in add_avail() +// Machines should use add_load(), surplus(), avail() +// Non-machines should use add_delayedload(), delayed_surplus(), newavail() + +/obj/machinery/power/proc/add_avail(amount) if(powernet) powernet.newavail += amount + return TRUE + else + return FALSE -/obj/machinery/power/proc/draw_power(var/amount) +/obj/machinery/power/proc/add_load(amount) if(powernet) - return powernet.draw_power(amount) - return 0 + powernet.load += amount /obj/machinery/power/proc/surplus() if(powernet) - return powernet.avail-powernet.load + return Clamp(powernet.avail-powernet.load, 0, powernet.avail) else return 0 @@ -46,9 +52,19 @@ else return 0 -/obj/machinery/power/proc/load() +/obj/machinery/power/proc/add_delayedload(amount) if(powernet) - return powernet.load + powernet.delayedload += amount + +/obj/machinery/power/proc/delayed_surplus() + if(powernet) + return Clamp(powernet.newavail - powernet.delayedload, 0, powernet.newavail) + else + return 0 + +/obj/machinery/power/proc/newavail() + if(powernet) + return powernet.newavail else return 0 @@ -58,21 +74,20 @@ // returns true if the area has power on given channel (or doesn't require power). // defaults to power_channel /obj/machinery/proc/powered(var/chan = -1) // defaults to power_channel - if(!loc) - return 0 + return FALSE if(!use_power) - return 1 + return TRUE var/area/A = get_area(src) // make sure it's in an area if(!A) - return 0 // if not, then not powered + return FALSE // if not, then not powered if(chan == -1) chan = power_channel return A.powered(chan) // return power status of the area // increment the power usage stats for an area -/obj/machinery/proc/use_power(var/amount, var/chan = -1) // defaults to power_channel +/obj/machinery/proc/use_power(amount, chan = -1) // defaults to power_channel var/area/A = get_area(src) // make sure it's in an area if(!A) return @@ -103,43 +118,36 @@ /obj/machinery/power/proc/connect_to_network() var/turf/T = src.loc if(!T || !istype(T)) - return 0 + return FALSE var/obj/structure/cable/C = T.get_cable_node() //check if we have a node cable on the machine turf, the first found is picked if(!C || !C.powernet) - return 0 + return FALSE C.powernet.add_machine(src) - return 1 + return TRUE // remove and disconnect the machine from its current powernet /obj/machinery/power/proc/disconnect_from_network() if(!powernet) - return 0 + return FALSE powernet.remove_machine(src) - return 1 + return TRUE // attach a wire to a power machine - leads from the turf you are standing on //almost never called, overwritten by all power machines but terminal and generator -/obj/machinery/power/attackby(obj/item/W, mob/user) - - if(istype(W, /obj/item/stack/cable_coil)) - - var/obj/item/stack/cable_coil/coil = W - +/obj/machinery/power/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/coil = I var/turf/T = user.loc - - if(T.intact || !istype(T, /turf/simulated/floor)) + if(T.intact || !isfloorturf(T)) return - if(get_dist(src, user) > 1) return - coil.place_turf(T, user) - return else - ..() - return + return ..() + /////////////////////////////////////////// // Powernet handling helpers @@ -159,7 +167,8 @@ cdir = get_dir(T,loc) for(var/obj/structure/cable/C in T) - if(C.powernet) continue + if(C.powernet) + continue if(C.d1 == cdir || C.d2 == cdir) . += C return . @@ -186,7 +195,8 @@ /obj/machinery/power/proc/get_indirect_connections() . = list() for(var/obj/structure/cable/C in loc) - if(C.powernet) continue + if(C.powernet) + continue if(C.d1 == 0) // the cable is a node cable . += C return . @@ -199,44 +209,32 @@ // returns a list of all power-related objects (nodes, cable, junctions) in turf, // excluding source, that match the direction d // if unmarked==1, only return those with no powernet -/proc/power_list(var/turf/T, var/source, var/d, var/unmarked=0, var/cable_only = 0) +/proc/power_list(turf/T, source, d, unmarked=0, cable_only = 0) . = list() - var/fdir = (!d)? 0 : turn(d, 180) // the opposite direction to d (or 0 if d==0) -///// Z-Level Stuff - var/Zdir - if(d==11) - Zdir = 11 - else if(d==12) - Zdir = 12 - else - Zdir = 999 -///// Z-Level Stuff - for(var/AM in T) - if(AM == source) continue //we don't want to return source - if(!cable_only && istype(AM,/obj/machinery/power)) + for(var/AM in T) + if(AM == source) + continue //we don't want to return source + + if(!cable_only && istype(AM, /obj/machinery/power)) var/obj/machinery/power/P = AM - if(P.powernet == 0) continue // exclude APCs which have powernet=0 + if(P.powernet == 0) + continue // exclude APCs which have powernet=0 if(!unmarked || !P.powernet) //if unmarked=1 we only return things with no powernet if(d == 0) . += P - else if(istype(AM,/obj/structure/cable)) + else if(istype(AM, /obj/structure/cable)) var/obj/structure/cable/C = AM if(!unmarked || !C.powernet) -///// Z-Level Stuff - if(C.d1 == fdir || C.d2 == fdir || C.d1 == Zdir || C.d2 == Zdir) -///// Z-Level Stuff - . += C - else if(C.d1 == d || C.d2 == d) + if(C.d1 == d || C.d2 == d) . += C return . //remove the old powernet and replace it with a new one throughout the network. -/proc/propagate_network(var/obj/O, var/datum/powernet/PN) - //log_world("propagating new network") +/proc/propagate_network(obj/O, datum/powernet/PN) var/list/worklist = list() var/list/found_machines = list() var/index = 1 @@ -248,13 +246,13 @@ P = worklist[index] //get the next power object found index++ - if( istype(P,/obj/structure/cable)) + if(istype(P, /obj/structure/cable)) var/obj/structure/cable/C = P if(C.powernet != PN) //add it to the powernet, if it isn't already there PN.add_cable(C) worklist |= C.get_connections() //get adjacents power objects, with or without a powernet - else if(P.anchored && istype(P,/obj/machinery/power)) + else if(P.anchored && istype(P, /obj/machinery/power)) var/obj/machinery/power/M = P found_machines |= M //we wait until the powernet is fully propagates to connect the machines @@ -268,7 +266,7 @@ //Merge two powernets, the bigger (in cable length term) absorbing the other -/proc/merge_powernets(var/datum/powernet/net1, var/datum/powernet/net2) +/proc/merge_powernets(datum/powernet/net1, datum/powernet/net2) if(!net1 || !net2) //if one of the powernet doesn't exist, return return @@ -285,8 +283,6 @@ for(var/obj/structure/cable/Cable in net2.cables) //merge cables net1.add_cable(Cable) - if(!net2) return net1 - for(var/obj/machinery/power/Node in net2.nodes) //merge power machines if(!Node.connect_to_network()) Node.disconnect_from_network() //if somehow we can't connect the machine to the new powernet, disconnect it from the old nonetheless @@ -299,14 +295,12 @@ //source is an object caused electrocuting (airlock, grille, etc) //No animations will be performed by this proc. /proc/electrocute_mob(mob/living/M, power_source, obj/source, siemens_coeff = 1, dist_check = FALSE) - if(!istype(M)) - return FALSE - if(istype(M.loc,/obj/mecha)) + if(!M || ismecha(M.loc)) return FALSE //feckin mechs are dumb if(dist_check) if(!in_range(source, M)) return FALSE - if(istype(M,/mob/living/carbon/human)) + if(ishuman(M)) var/mob/living/carbon/human/H = M if(H.gloves) var/obj/item/clothing/gloves/G = H.gloves @@ -326,7 +320,7 @@ if(istype(power_source, /datum/powernet)) PN = power_source - else if(istype(power_source,/obj/item/stock_parts/cell)) + else if(istype(power_source, /obj/item/stock_parts/cell)) cell = power_source else if(istype(power_source, /obj/machinery/power/apc)) var/obj/machinery/power/apc/apc = power_source @@ -357,10 +351,30 @@ var/drained_energy = drained_hp*20 if(source_area) - source_area.use_power(drained_energy/CELLRATE) - else if(istype(power_source,/datum/powernet)) - var/drained_power = drained_energy/CELLRATE //convert from "joules" to "watts" - drained_power = PN.draw_power(drained_power) - else if(istype(power_source, /obj/item/stock_parts/cell)) + source_area.use_power(drained_energy/GLOB.CELLRATE) + else if(istype(power_source, /datum/powernet)) + var/drained_power = drained_energy/GLOB.CELLRATE //convert from "joules" to "watts" + PN.delayedload += (min(drained_power, max(PN.newavail - PN.delayedload, 0))) + else if (istype(power_source, /obj/item/stock_parts/cell)) cell.use(drained_energy) return drained_energy + +//////////////////////////////////////////////// +// Misc. +/////////////////////////////////////////////// + + +// return a knot cable (O-X) if one is present in the turf +// null if there's none +/turf/proc/get_cable_node() + if(!can_have_cabling()) + return null + for(var/obj/structure/cable/C in src) + if(C.d1 == 0) + return C + return null + +/area/proc/get_apc() + for(var/obj/machinery/power/apc/APC in GLOB.apcs) + if(APC.area == src) + return APC \ No newline at end of file diff --git a/code/modules/power/powernet.dm b/code/modules/power/powernet.dm index 228b4232968..b64481b1104 100644 --- a/code/modules/power/powernet.dm +++ b/code/modules/power/powernet.dm @@ -1,19 +1,19 @@ +//////////////////////////////////////////// +// POWERNET DATUM +// each contiguous network of cables & nodes +///////////////////////////////////// /datum/powernet + var/number // unique id var/list/cables = list() // all cables & junctions var/list/nodes = list() // all connected machines var/load = 0 // the current load on the powernet, increased by each machine at processing var/newavail = 0 // what available power was gathered last tick, then becomes... var/avail = 0 //...the current available power in the powernet + var/viewavail = 0 // the available power as it appears on the power console (gradually updated) var/viewload = 0 // the load as it appears on the power console (gradually updated) - var/number = 0 // Unused //TODEL - - var/perapc = 0 // per-apc avilability - var/perapc_excess = 0 - var/netexcess = 0 // excess power on the powernet (typically avail-load) - - var/problem = 0 // If either of these is set to 1 there is some sort of issue at the powernet. - + var/netexcess = 0 // excess power on the powernet (typically avail-load)/////// + var/delayedload = 0 // load applied to powernet between power ticks. /datum/powernet/New() SSmachines.powernets += src @@ -31,31 +31,21 @@ SSmachines.powernets -= src return ..() -//Returns the amount of excess power (before refunding to SMESs) from last tick. -//This is for machines that might adjust their power consumption using this data. -/datum/powernet/proc/last_surplus() - return max(avail - load, 0) - -/datum/powernet/proc/draw_power(var/amount) - var/draw = between(0, amount, avail - load) - load += draw - return draw - /datum/powernet/proc/is_empty() return !cables.len && !nodes.len //remove a cable from the current powernet //if the powernet is then empty, delete it //Warning : this proc DON'T check if the cable exists -/datum/powernet/proc/remove_cable(var/obj/structure/cable/C) +/datum/powernet/proc/remove_cable(obj/structure/cable/C) cables -= C C.powernet = null if(is_empty())//the powernet is now empty... - qdel(src)///... delete it - qdel + qdel(src)///... delete it //add a cable to the current powernet //Warning : this proc DON'T check if the cable exists -/datum/powernet/proc/add_cable(var/obj/structure/cable/C) +/datum/powernet/proc/add_cable(obj/structure/cable/C) if(C.powernet)// if C already has a powernet... if(C.powernet == src) return @@ -67,16 +57,16 @@ //remove a power machine from the current powernet //if the powernet is then empty, delete it //Warning : this proc DON'T check if the machine exists -/datum/powernet/proc/remove_machine(var/obj/machinery/power/M) +/datum/powernet/proc/remove_machine(obj/machinery/power/M) nodes -=M M.powernet = null if(is_empty())//the powernet is now empty... - qdel(src)///... delete it - qdel + qdel(src)///... delete it //add a power machine to the current powernet //Warning : this proc DON'T check if the machine exists -/datum/powernet/proc/add_machine(var/obj/machinery/power/M) +/datum/powernet/proc/add_machine(obj/machinery/power/M) if(M.powernet)// if M already has a powernet... if(M.powernet == src) return @@ -85,45 +75,23 @@ M.powernet = src nodes[M] = M -// Triggers warning for certain amount of ticks -/datum/powernet/proc/trigger_warning(var/duration_ticks = 20) - problem = max(duration_ticks, problem) - //handles the power changes in the powernet //called every ticks by the powernet controller /datum/powernet/proc/reset() - var/numapc = 0 - - if(problem > 0) - problem = max(problem - 1, 0) - - if(nodes && nodes.len) // Added to fix a bad list bug -- TLE - for(var/obj/machinery/power/terminal/term in nodes) - if( istype( term.master, /obj/machinery/power/apc ) ) - numapc++ - + //see if there's a surplus of power remaining in the powernet and stores unused power in the SMES netexcess = avail - load - if(numapc) - //very simple load balancing. If there was a net excess this tick then it must have been that some APCs used less than perapc, since perapc*numapc = avail - //Therefore we can raise the amount of power rationed out to APCs on the assumption that those APCs that used less than perapc will continue to do so. - //If that assumption fails, then some APCs will miss out on power next tick, however it will be rebalanced for the tick after. - if(netexcess >= 0) - perapc_excess += min(netexcess/numapc, (avail - perapc) - perapc_excess) - else - perapc_excess = 0 - - perapc = avail/numapc + perapc_excess - if(netexcess > 100 && nodes && nodes.len) // if there was excess power last cycle for(var/obj/machinery/power/smes/S in nodes) // find the SMESes in the network S.restore() // and restore some of the power that was used - //updates the viewed load (as seen on power computers) - viewload = round(load) + // update power consoles + viewavail = round(0.8 * viewavail + 0.2 * avail) + viewload = round(0.8 * viewload + 0.2 * load) - //reset the powernet - load = 0 + // reset the powernet + load = delayedload + delayedload = 0 avail = newavail newavail = 0 @@ -131,27 +99,4 @@ if(avail >= 1000) return Clamp(20 + round(avail / 25000), 20, 195) + rand(-5, 5) else - return 0 - -//////////////////////////////////////////////// -// Misc. -/////////////////////////////////////////////// - - -// return a knot cable (O-X) if one is present in the turf -// null if there's none -/turf/proc/get_cable_node() - if(!istype(src, /turf/simulated/floor)) - return null - for(var/obj/structure/cable/C in src) - if(C.d1 == 0) - return C - return null - -/area/proc/get_apc() - // This was a simple locate() in src, but an unresolved BYOND bug causes trying to locate() in an - // area to take an inconceivably long time, especially for large areas. - // See: http://www.byond.com/forum/?post=1860571 - var/obj/machinery/power/apc/FINDME - for(FINDME in src) - return FINDME \ No newline at end of file + return 0 \ No newline at end of file diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index a85d9e880bd..3e910a613b0 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -15,8 +15,8 @@ var/global/list/rad_collectors = list() var/locked = 0 var/drainratio = 1 -/obj/machinery/power/rad_collector/New() - ..() +/obj/machinery/power/rad_collector/Initialize(mapload) + . = ..() rad_collectors += src /obj/machinery/power/rad_collector/Destroy() diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 7e031755e22..9ba302ab19b 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -23,18 +23,25 @@ var/frequency = 0 var/id_tag = null + var/projectile_type = /obj/item/projectile/beam/emitter + var/projectile_sound = 'sound/weapons/emitter.ogg' var/datum/radio_frequency/radio_connection var/datum/effect_system/spark_spread/sparks -/obj/machinery/power/emitter/New() - ..() +/obj/machinery/power/emitter/Initialize(mapload) + . = ..() component_parts = list() component_parts += new /obj/item/circuitboard/emitter(null) component_parts += new /obj/item/stock_parts/micro_laser(null) component_parts += new /obj/item/stock_parts/manipulator(null) RefreshParts() + if(state == 2 && anchored) + connect_to_network() sparks = new + sparks.attach(src) sparks.set_up(5, 1, src) + if(frequency) + set_frequency(frequency) /obj/machinery/power/emitter/RefreshParts() var/max_firedelay = 120 @@ -79,13 +86,6 @@ return rotate() -/obj/machinery/power/emitter/Initialize() - ..() - if(state == 2 && anchored) - connect_to_network() - if(frequency) - set_frequency(frequency) - /obj/machinery/power/emitter/multitool_menu(var/mob/user,var/obj/item/multitool/P) return {"
    @@ -182,10 +182,9 @@ src.active = 0 update_icon() return - if(((src.last_shot + src.fire_delay) <= world.time) && (src.active == 1)) - - var/actual_load = draw_power(active_power_usage) - if(actual_load >= active_power_usage) //does the laser have enough power to shoot? + if(active == TRUE) + if(!active_power_usage || surplus() >= active_power_usage) + add_load(active_power_usage) if(!powered) powered = 1 update_icon() @@ -197,36 +196,57 @@ investigate_log("lost power and turned off","singulo") return - src.last_shot = world.time - if(src.shot_number < 3) - src.fire_delay = 2 - src.shot_number++ - else - src.fire_delay = rand(minimum_fire_delay,maximum_fire_delay) - src.shot_number = 0 + if(!check_delay()) + return FALSE + fire_beam() - var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter(src.loc) +/obj/machinery/power/emitter/proc/check_delay() + if((last_shot + fire_delay) <= world.time) + return TRUE + return FALSE - A.dir = src.dir - playsound(get_turf(src), 'sound/weapons/emitter.ogg', 25, 1) - if(prob(35)) - sparks.start() - - switch(dir) - if(NORTH) - A.yo = 20 - A.xo = 0 - if(EAST) - A.yo = 0 - A.xo = 20 - if(WEST) - A.yo = 0 - A.xo = -20 - else // Any other - A.yo = -20 - A.xo = 0 - A.fire() //TODO: Carn: check this out +/obj/machinery/power/emitter/proc/fire_beam() + var/obj/item/projectile/P = new projectile_type(get_turf(src)) + playsound(get_turf(src), projectile_sound, 50, TRUE) + if(prob(35)) + sparks.start() + switch(dir) + if(NORTH) + P.yo = 20 + P.xo = 0 + if(NORTHEAST) + P.yo = 20 + P.xo = 20 + if(EAST) + P.yo = 0 + P.xo = 20 + if(SOUTHEAST) + P.yo = -20 + P.xo = 20 + if(WEST) + P.yo = 0 + P.xo = -20 + if(SOUTHWEST) + P.yo = -20 + P.xo = -20 + if(NORTHWEST) + P.yo = 20 + P.xo = -20 + else // Any other + P.yo = -20 + P.xo = 0 + last_shot = world.time + if(shot_number < 3) + fire_delay = 20 + shot_number ++ + else + fire_delay = rand(minimum_fire_delay, maximum_fire_delay) + shot_number = 0 + P.setDir(dir) + P.starting = loc + P.fire() + return P /obj/machinery/power/emitter/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/multitool)) diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 40947d79368..420a112c352 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -48,8 +48,8 @@ field_generator power level display overlays += "+p[power_level]" -/obj/machinery/field/generator/New() - ..() +/obj/machinery/field/generator/Initialize(mapload) + . = ..() fields = list() connected_gens = list() diff --git a/code/modules/power/singularity/particle_accelerator/particle.dm b/code/modules/power/singularity/particle_accelerator/particle.dm index 85ef45eef20..2b6695b9e85 100644 --- a/code/modules/power/singularity/particle_accelerator/particle.dm +++ b/code/modules/power/singularity/particle_accelerator/particle.dm @@ -2,11 +2,12 @@ name = "Accelerated Particles" desc = "Small things moving very fast." icon = 'icons/obj/machines/particle_accelerator.dmi' - icon_state = "particle"//Need a new icon for this - anchored = 1 - density = 1 + icon_state = "particle" + anchored = TRUE + density = FALSE var/movement_range = 10 var/energy = 10 + var/speed = 1 /obj/effect/accelerated_particle/weak movement_range = 8 @@ -21,50 +22,45 @@ energy = 50 -/obj/effect/accelerated_particle/New(loc, dir = 2) - src.loc = loc - src.dir = dir +/obj/effect/accelerated_particle/New(loc) + ..() - if(movement_range > 20) - movement_range = 20 - spawn(0) - move(1) - return + addtimer(CALLBACK(src, .proc/move), 1) /obj/effect/accelerated_particle/Bump(atom/A) if(A) - if(ismob(A)) + if(isliving(A)) toxmob(A) - if((istype(A,/obj/machinery/the_singularitygen))||(istype(A,/obj/singularity/))) - A:energy += energy - return + else if(istype(A, /obj/machinery/the_singularitygen)) + var/obj/machinery/the_singularitygen/S = A + S.energy += energy + else if(istype(A, /obj/singularity)) + var/obj/singularity/S = A + S.energy += energy - -/obj/effect/accelerated_particle/Bumped(atom/A) - if(ismob(A)) - Bump(A) - return +/obj/effect/accelerated_particle/Crossed(atom/A) + if(isliving(A)) + toxmob(A) /obj/effect/accelerated_particle/ex_act(severity) qdel(src) + +/obj/effect/accelerated_particle/singularity_pull() return -/obj/effect/accelerated_particle/proc/toxmob(var/mob/living/M) - M.apply_effect((energy*6),IRRADIATE,0) - M.updatehealth() - return +/obj/effect/accelerated_particle/proc/toxmob(mob/living/M) + M.apply_effect((energy * 6), IRRADIATE, 0) - -/obj/effect/accelerated_particle/proc/move(var/lag) +/obj/effect/accelerated_particle/proc/move() if(!step(src,dir)) - src.loc = get_step(src,dir) + forceMove(get_step(src, dir)) movement_range-- - if(movement_range <= 0) + if(movement_range == 0) qdel(src) else - sleep(lag) - move(lag) + sleep(speed) + move() \ No newline at end of file diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index bf20ef45140..80de53fe22d 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -19,11 +19,11 @@ var/parts = null var/datum/wires/particle_acc/control_box/wires = null -/obj/machinery/particle_accelerator/control_box/New() +/obj/machinery/particle_accelerator/control_box/Initialize(mapload) + . = ..() wires = new(src) connected_parts = list() update_icon() - ..() /obj/machinery/particle_accelerator/control_box/Destroy() if(active) diff --git a/code/modules/power/singularity/particle_accelerator/particle_emitter.dm b/code/modules/power/singularity/particle_accelerator/particle_emitter.dm index 97bf4fa4277..c2a1ccfa8da 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_emitter.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_emitter.dm @@ -29,21 +29,20 @@ return 0 -/obj/structure/particle_accelerator/particle_emitter/proc/emit_particle(var/strength = 0) +/obj/structure/particle_accelerator/particle_emitter/proc/emit_particle(strength = 0) if((last_shot + fire_delay) <= world.time) last_shot = world.time - var/obj/effect/accelerated_particle/A = null - var/turf/T = get_step(src, dir) + var/turf/T = get_turf(src) + var/obj/effect/accelerated_particle/P switch(strength) if(0) - A = new/obj/effect/accelerated_particle/weak(T, dir) + P = new/obj/effect/accelerated_particle/weak(T) if(1) - A = new/obj/effect/accelerated_particle(T, dir) + P = new/obj/effect/accelerated_particle(T) if(2) - A = new/obj/effect/accelerated_particle/strong(T, dir) + P = new/obj/effect/accelerated_particle/strong(T) if(3) - A = new/obj/effect/accelerated_particle/powerful(T, dir) - if(A) - A.dir = dir - return 1 - return 0 + P = new/obj/effect/accelerated_particle/powerful(T) + P.setDir(dir) + return TRUE + return FALSE \ No newline at end of file diff --git a/code/modules/power/singularity/particle_accelerator/particle_power.dm b/code/modules/power/singularity/particle_accelerator/particle_power.dm index dafd19917da..75ae7eb3263 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_power.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_power.dm @@ -3,8 +3,4 @@ desc_holder = "This part uses electromagnetic waves to focus the Alpha particles." icon = 'icons/obj/machines/particle_accelerator.dmi' icon_state = "power_box" - reference = "power_box" - -/obj/structure/particle_accelerator/power_box/update_icon() - ..() - return + reference = "power_box" \ No newline at end of file diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index f95f5ce2864..6c9ecb55afc 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -11,20 +11,20 @@ name = "power storage unit" desc = "A high-capacity superconducting magnetic energy storage (SMES) unit." icon_state = "smes" - density = 1 - anchored = 1 + density = TRUE + use_power = NO_POWER_USE var/capacity = 5e6 // maximum charge var/charge = 0 // actual charge - var/input_attempt = 0 // 1 = attempting to charge, 0 = not attempting to charge - var/inputting = 0 // 1 = actually inputting, 0 = not inputting + var/input_attempt = TRUE // 1 = attempting to charge, 0 = not attempting to charge + var/inputting = TRUE // 1 = actually inputting, 0 = not inputting var/input_level = 50000 // amount of power the SMES attempts to charge by var/input_level_max = 200000 // cap on input_level var/input_available = 0 // amount of charge available from input last tick - var/output_attempt = 1 // 1 = attempting to output, 0 = not attempting to output - var/outputting = 1 // 1 = actually outputting, 0 = not outputting + var/output_attempt = TRUE // 1 = attempting to output, 0 = not attempting to output + var/outputting = TRUE // 1 = actually outputting, 0 = not outputting var/output_level = 50000 // amount of power the SMES attempts to output var/output_level_max = 200000 // cap on output_level var/output_used = 0 // amount of power actually outputted. may be less than output_level if the powernet returns excess power @@ -34,13 +34,11 @@ var/last_input_attempt = 0 var/last_charge = 0 - var/open_hatch = 0 var/name_tag = null - var/building_terminal = 0 //Suggestions about how to avoid clickspam building several terminals accepted! var/obj/machinery/power/terminal/terminal = null -/obj/machinery/power/smes/New() - ..() +/obj/machinery/power/smes/Initialize(mapload) + . = ..() component_parts = list() component_parts += new /obj/item/circuitboard/smes(null) component_parts += new /obj/item/stock_parts/cell/high(null) @@ -52,28 +50,22 @@ component_parts += new /obj/item/stack/cable_coil(null, 5) RefreshParts() - spawn(5) - if(!powernet) - connect_to_network() + dir_loop: + for(var/d in cardinal) + var/turf/T = get_step(src, d) + for(var/obj/machinery/power/terminal/term in T) + if(term && term.dir == turn(d, 180)) + terminal = term + break dir_loop - dir_loop: - for(var/d in cardinal) - var/turf/T = get_step(src, d) - for(var/obj/machinery/power/terminal/term in T) - if(term && term.dir == turn(d, 180)) - terminal = term - break dir_loop - if(!terminal) - stat |= BROKEN - return - terminal.master = src - if(!terminal.powernet) - terminal.connect_to_network() - update_icon() - return + if(!terminal) + stat |= BROKEN + return + terminal.master = src + update_icon() -/obj/machinery/power/smes/upgraded/New() - ..() +/obj/machinery/power/smes/upgraded/Initialize(mapload) + . = ..() component_parts = list() component_parts += new /obj/item/circuitboard/smes(null) component_parts += new /obj/item/stock_parts/cell/hyper(null) @@ -222,8 +214,8 @@ return round(5.5*charge/(capacity ? capacity : 5e6)) /obj/machinery/power/smes/process() - - if(stat & BROKEN) return + if(stat & BROKEN) + return //store machine state to see if we need to update the icon overlays var/last_disp = chargedisplay() @@ -231,33 +223,46 @@ var/last_onln = outputting //inputting - if(input_attempt) - var/target_load = min((capacity-charge)/SMESRATE, input_level) // charge at set rate, limited to spare capacity - var/actual_load = draw_power(target_load) // add the load to the terminal side network - charge += actual_load * SMESRATE // increase the charge + if(terminal && input_attempt) + input_available = terminal.surplus() - if(actual_load >= target_load) // Did we charge at full rate? - inputting = 2 - else if(actual_load) // If not, did we charge at least partially? - inputting = 1 - else // Or not at all? - inputting = 0 + if(inputting) + if(input_available > 0) // if there's power available, try to charge + + var/load = min(min((capacity-charge)/SMESRATE, input_level), input_available) // charge at set rate, limited to spare capacity + + charge += load * SMESRATE // increase the charge + + terminal.add_load(load) // add the load to the terminal side network + + else // if not enough capcity + inputting = FALSE // stop inputting + + else + if(input_attempt && input_available > 0) + inputting = TRUE + else + inputting = FALSE //outputting - if(outputting) - output_used = min( charge/SMESRATE, output_level) //limit output to that stored + if(output_attempt) + if(outputting) + output_used = min( charge/SMESRATE, output_level) //limit output to that stored - charge -= output_used*SMESRATE // reduce the storage (may be recovered in /restore() if excessive) + if (add_avail(output_used)) // add output to powernet if it exists (smes side) + charge -= output_used*SMESRATE // reduce the storage (may be recovered in /restore() if excessive) + else + outputting = FALSE - add_avail(output_used) // add output to powernet (smes side) - - if(output_used < 0.0001) // either from no charge or set to 0 - outputting = 0 - investigate_log("lost power and turned off","singulo") - else if(output_attempt && charge > output_level && output_level > 0) - outputting = 1 + if(output_used < 0.0001) // either from no charge or set to 0 + outputting = FALSE + investigate_log("lost power and turned off", "singulo") + else if(output_attempt && charge > output_level && output_level > 0) + outputting = TRUE + else + output_used = 0 else - output_used = 0 + outputting = FALSE // only update icon if state changed if(last_disp != chargedisplay() || last_chrg != inputting || last_onln != outputting) @@ -333,11 +338,6 @@ return 0 return 1 -/obj/machinery/power/smes/draw_power(var/amount) - if(terminal && terminal.powernet) - return terminal.powernet.draw_power(amount) - return 0 - /obj/machinery/power/smes/attack_ai(mob/user) add_hiddenprint(user) ui_interact(user) @@ -483,7 +483,8 @@ output_level = 250000 /obj/machinery/power/smes/magical/process() - charge = 5000000 + capacity = INFINITY + charge = INFINITY ..() #undef SMESRATE diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 7342c1f26c1..1384c8d21e6 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -6,8 +6,7 @@ desc = "A solar panel. Generates electricity when in contact with sunlight." icon = 'icons/obj/power.dmi' icon_state = "sp_base" - anchored = 1 - density = 1 + density = TRUE use_power = NO_POWER_USE idle_power_usage = 0 active_power_usage = 0 @@ -20,8 +19,8 @@ var/turn_angle = 0 var/obj/machinery/power/solar_control/control = null -/obj/machinery/power/solar/New(var/turf/loc, var/obj/item/solar_assembly/S) - ..(loc) +/obj/machinery/power/solar/Initialize(mapload, obj/item/solar_assembly/S) + . = ..() Make(S) connect_to_network() @@ -118,7 +117,7 @@ return sunfrac = cos(p_angle) ** 2 - //isn't the power recieved from the incoming light proportionnal to cos(p_angle) (Lambert's cosine law) rather than cos(p_angle)^2 ? + //isn't the power received from the incoming light proportionnal to cos(p_angle) (Lambert's cosine law) rather than cos(p_angle)^2 ? /obj/machinery/power/solar/process()//TODO: remove/add this from machines to save on processing as needed ~Carn PRIORITY if(stat & BROKEN) diff --git a/code/modules/power/switch.dm b/code/modules/power/switch.dm deleted file mode 100644 index 34e867005e1..00000000000 --- a/code/modules/power/switch.dm +++ /dev/null @@ -1,84 +0,0 @@ -//This is a power switch. When turned on it looks at the cables around the tile that it's on and notes which cables are trying to connect to it. -//After it knows this it creates the number of cables from the center to each of the cables attempting to conenct. These cables cannot be removed -//with wirecutters. When the switch is turned off it removes all the cables on the tile it's on. -//The switch uses a 5s delay to prevent powernet change spamming. -/* -/obj/structure/powerswitch - name = "power switch" - desc = "A switch that controls power." - icon = 'icons/obj/power.dmi' - icon_state = "switch-dbl-up" - var/icon_state_on = "switch-dbl-down" - var/icon_state_off = "switch-dbl-up" - density = 0 - anchored = 1 - var/on = 0 //up is off, down is on - var/busy = 0 //set to 1 when you start pulling - -/obj/structure/powerswitch/simple - icon_state = "switch-up" - icon_state_on = "switch-down" - icon_state_off = "switch-up" - - -/obj/structure/powerswitch/examine(mob/user) - ..(user) - if(on) - to_chat(user, "The switch is in the on position") - else - to_chat(user, "The switch is in the off position") - -/obj/structure/powerswitch/attack_ai(mob/user) - to_chat(user, "You're an AI. This is a manual switch. It's not going to work.") - return - -/obj/structure/powerswitch/attack_hand(mob/user) - - if(busy) - to_chat(user, "This switch is already being toggled.") - return - - ..() - - busy = 1 - for(var/mob/O in viewers(user)) - O.show_message(text("[user] starts pulling the [src]."), 1) - - if(do_after(user, 50, target = src)) - set_state(!on) - for(var/mob/O in viewers(user)) - O.show_message(text("[user] flips the [src] into the [on ? "on": "off"] position."), 1) - busy = 0 - -/obj/structure/powerswitch/proc/set_state(var/state) - on = state - if(on) - icon_state = icon_state_on - var/list/connection_dirs = list() - for(var/direction in list(1,2,4,8,5,6,9,10)) - for(var/obj/structure/cable/C in get_step(src,direction)) - if(C.d1 == turn(direction, 180) || C.d2 == turn(direction, 180)) - connection_dirs += direction - break - - for(var/direction in connection_dirs) - var/obj/structure/cable/C = new/obj/structure/cable(src.loc) - C.d1 = 0 - C.d2 = direction - C.icon_state = "[C.d1]-[C.d2]" - C.power_switch = src - - var/datum/powernet/PN = new() - PN.number = powernets.len + 1 - powernets += PN - C.netnum = PN.number - PN.cables += C - - C.mergeConnectedNetworks(C.d2) - C.mergeConnectedNetworksOnTurf() - - else - icon_state = icon_state_off - for(var/obj/structure/cable/C in src.loc) - qdel(C) -*/ \ No newline at end of file diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm index 194e96f6dba..80c38e0a9fe 100644 --- a/code/modules/power/terminal.dm +++ b/code/modules/power/terminal.dm @@ -8,25 +8,24 @@ icon_state = "term" desc = "It's an underfloor wiring terminal for power equipment." level = 1 - layer = TURF_LAYER + layer = WIRE_TERMINAL_LAYER //a bit above wires var/obj/machinery/power/master = null - anchored = 1 - layer = 2.6 // a bit above wires -/obj/machinery/power/terminal/New() - ..() - var/turf/T = src.loc - if(level==1) hide(T.intact) - return - +/obj/machinery/power/terminal/Initialize(mapload) + . = ..() + var/turf/T = get_turf(src) + if(level == 1) + hide(T.intact) + /obj/machinery/power/terminal/Destroy() if(master) master.disconnect_terminal() + master = null return ..() -/obj/machinery/power/terminal/hide(var/i) +/obj/machinery/power/terminal/hide(i) if(i) invisibility = 101 icon_state = "term-f" diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index efafd8909ea..cc564c98d4c 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -12,8 +12,8 @@ var/last_zap = 0 var/datum/wires/tesla_coil/wires = null -/obj/machinery/power/tesla_coil/New() - ..() +/obj/machinery/power/tesla_coil/Initialize(mapload) + . = ..() component_parts = list() component_parts += new /obj/item/circuitboard/tesla_coil(null) component_parts += new /obj/item/stock_parts/capacitor(null) @@ -77,7 +77,7 @@ var/coeff = (20 - ((input_power_multiplier - 1) * 3)) coeff = max(coeff, 10) var/power = (powernet.avail/2) - draw_power(power) + add_load(power) playsound(src.loc, 'sound/magic/lightningshock.ogg', 100, 1, extrarange = 5) tesla_zap(src, 10, power/(coeff/2)) @@ -89,8 +89,8 @@ anchored = 0 density = 1 -/obj/machinery/power/grounding_rod/New() - ..() +/obj/machinery/power/grounding_rod/Initialize(mapload) + . = ..() component_parts = list() component_parts += new /obj/item/circuitboard/grounding_rod(null) component_parts += new /obj/item/stock_parts/capacitor(null) diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index e4e3275ef26..0b7f417b52e 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -8,16 +8,15 @@ desc = "A solar directional tracker." icon = 'icons/obj/power.dmi' icon_state = "tracker" - anchored = 1 - density = 1 + density = TRUE use_power = NO_POWER_USE var/id = 0 var/sun_angle = 0 // sun angle as set by sun datum var/obj/machinery/power/solar_control/control = null -/obj/machinery/power/tracker/New(var/turf/loc, var/obj/item/solar_assembly/S) - ..(loc) +/obj/machinery/power/tracker/Initialize(mapload, obj/item/solar_assembly/S) + . = ..() Make(S) connect_to_network() @@ -26,7 +25,7 @@ return ..() //set the control of the tracker to a given computer if closer than SOLAR_MAX_DIST -/obj/machinery/power/tracker/proc/set_control(var/obj/machinery/power/solar_control/SC) +/obj/machinery/power/tracker/proc/set_control(obj/machinery/power/solar_control/SC) if(SC && (get_dist(src, SC) > SOLAR_MAX_DIST)) return 0 control = SC @@ -39,21 +38,21 @@ control.connected_tracker = null control = null -/obj/machinery/power/tracker/proc/Make(var/obj/item/solar_assembly/S) +/obj/machinery/power/tracker/proc/Make(obj/item/solar_assembly/S) if(!S) S = new /obj/item/solar_assembly(src) S.glass_type = /obj/item/stack/sheet/glass S.tracker = 1 - S.anchored = 1 - S.loc = src + S.anchored = TRUE + S.forceMove(src) update_icon() //updates the tracker icon and the facing angle for the control computer -/obj/machinery/power/tracker/proc/set_angle(var/angle) +/obj/machinery/power/tracker/proc/set_angle(angle) sun_angle = angle //set icon dir to show sun illumination - dir = turn(NORTH, -angle - 22.5) // 22.5 deg bias ensures, e.g. 67.5-112.5 is EAST + setDir(turn(NORTH, -angle - 22.5)) // 22.5 deg bias ensures, e.g. 67.5-112.5 is EAST if(powernet && (powernet == control.powernet)) //update if we're still in the same powernet control.cdir = angle diff --git a/code/modules/power/treadmill.dm b/code/modules/power/treadmill.dm index c611585a8cc..1548738f3f5 100644 --- a/code/modules/power/treadmill.dm +++ b/code/modules/power/treadmill.dm @@ -7,7 +7,6 @@ name = "treadmill" desc = "A power-generating treadmill." layer = 2.2 - anchored = 1 use_power = NO_POWER_USE var/speed = 0 @@ -18,8 +17,8 @@ var/list/mobs_running[0] var/id = null // for linking to monitor -/obj/machinery/power/treadmill/Initialize() - ..() +/obj/machinery/power/treadmill/Initialize(mapload) + . = ..() if(anchored) connect_to_network() @@ -138,8 +137,8 @@ var/frame = 0 // on 0, show labels, on 1 show numbers var/redeem_immediately = 0 // redeem immediately for holding cell -/obj/machinery/treadmill_monitor/Initialize() - ..() +/obj/machinery/treadmill_monitor/Initialize(mapload) + . = ..() if(id) for(var/obj/machinery/power/treadmill/T in GLOB.machines) if(T.id == id) diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index 641682490d4..7b1764c354d 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -64,8 +64,8 @@ // the inlet stage of the gas turbine electricity generator -/obj/machinery/power/compressor/New() - ..() +/obj/machinery/power/compressor/Initialize(mapload) + . = ..() component_parts = list() component_parts += new /obj/item/circuitboard/power_compressor(null) component_parts += new /obj/item/stock_parts/manipulator(null) @@ -80,10 +80,6 @@ gas_contained = new inturf = get_step(src, dir) - - -/obj/machinery/power/compressor/Initialize() - ..() locate_machinery() if(!turbine) stat |= BROKEN @@ -185,8 +181,8 @@ #define TURBGENQ 100000 #define TURBGENG 0.5 -/obj/machinery/power/turbine/New() - ..() +/obj/machinery/power/turbine/Initialize(mapload) + . = ..() component_parts = list() component_parts += new /obj/item/circuitboard/power_turbine(src) component_parts += new /obj/item/stock_parts/capacitor(src) @@ -200,10 +196,6 @@ // The outlet is pointed at the direction of the turbine component outturf = get_step(src, dir) - - -/obj/machinery/power/turbine/Initialize() - ..() locate_machinery() if(!compressor) stat |= BROKEN diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index ca6958b020c..20ecaff13d4 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -229,6 +229,8 @@ if(href_list["ejectBeaker"]) if(beaker) beaker.forceMove(loc) + if(Adjacent(usr) && !issilicon(usr)) + usr.put_in_hands(beaker) beaker = null overlays.Cut() diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index 848c1ca4ecd..5f5bd8de2d4 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -38,9 +38,11 @@ if(state_change) SSnanoui.update_uis(src) -/obj/machinery/chem_heater/proc/eject_beaker() +/obj/machinery/chem_heater/proc/eject_beaker(mob/user) if(beaker) beaker.forceMove(get_turf(src)) + if(Adjacent(user) && !issilicon(user)) + user.put_in_hands(beaker) beaker = null icon_state = "mixer0b" on = FALSE @@ -118,7 +120,7 @@ . = 1 if(href_list["eject_beaker"]) - eject_beaker() + eject_beaker(usr) . = 0 //updated in eject_beaker() already /obj/machinery/chem_heater/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null) diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index ffd3ae57bd5..e10cd5c9203 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -229,6 +229,8 @@ else if(href_list["eject"]) if(beaker) beaker.forceMove(get_turf(src)) + if(Adjacent(usr) && !issilicon(usr)) + usr.put_in_hands(beaker) beaker = null reagents.clear_reagents() update_icon() diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 069efe5807c..8ddb4e0fd7c 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -447,6 +447,14 @@ build_path = /obj/item/healthanalyzer category = list("initial", "Medical") +/datum/design/pillbottle + name = "Pill Bottle" + id = "pillbottle" + build_type = AUTOLATHE + materials = list(MAT_METAL = 80, MAT_GLASS = 20) + build_path = /obj/item/storage/pill_bottle + category = list("initial", "Medical") + /datum/design/beanbag_slug name = "Beanbag Slug" id = "beanbag_slug" diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm index bc264cb8f62..0c535fa61a1 100644 --- a/code/modules/research/designs/biogenerator_designs.dm +++ b/code/modules/research/designs/biogenerator_designs.dm @@ -113,7 +113,15 @@ build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 50) build_path = /obj/item/stack/sheet/cloth - category = list("initial","Leather and Cloth") + category = list("initial", "Organic Materials") + +/datum/design/cardboard + name = "Sheet of cardboard" + id = "cardboard" + build_type = BIOGENERATOR + materials = list(MAT_BIOMASS = 25) + build_path = /obj/item/stack/sheet/cardboard + category = list("initial", "Organic Materials") /datum/design/wallet name = "Wallet" diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 2c42f421774..6dbc6f4febe 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -41,6 +41,8 @@ for(var/X in actions) var/datum/action/A = X A.Grant(M) + if(vital) + M.update_stat("Vital organ inserted") // Removes the given organ from its owner. // Returns the removed object, which is usually just itself diff --git a/config/example/config.txt b/config/example/config.txt index 4eb642cf796..692901c446f 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -1,6 +1,12 @@ ## Server name: This appears at the top of the screen in-game. In this case it will read "spacestation13: station_name" where station_name is the randomly generated name of the station for the round. Remove the # infront of SERVERNAME and replace 'spacestation13' with the name of your choice # SERVERNAME spacestation13 +## Server tagline: This appears on the hub entry. +#SERVER_TAG_LINE The Perfect Mix of RP & Action + +## Server extra features: This appears in the feature list on the hub entry. +#SERVER_EXTRA_FEATURES medium RP, varied species/jobs/modes + ## Add a # infront of this if you want to use the SQL based admin system, the legacy system uses admins.txt. You need to set up your database to use the SQL based system. ADMIN_LEGACY_SYSTEM @@ -253,6 +259,12 @@ ASSISTANT_LIMIT ## If you enabled assistant limiting set the ratio of assistants to security members default is 2 assistants to 1 officer ASSISTANT_RATIO 2 +# Mins before SSD crew are cryoed. +AUTO_CRYO_SSD_MINS 15 + +# If enabled, prevents people interacting with SSD players unless they acknowledge they have read the server rules. +SSD_WARNING + ## Remove the # to make rounds which end instantly (Rev, Wizard, Malf) to continue until the shuttle is called or the station is nuked. ## Malf and Rev will let the shuttle be called when the antags/protags are dead. #CONTINUOUS_ROUNDS @@ -405,4 +417,4 @@ DISABLE_HIGH_POP_MC_MODE_AMOUNT 60 #DISABLE_LOCALHOST_ADMIN ## Uncomment to give a confirmation before hitting start now -#START_NOW_CONFIRMATION \ No newline at end of file +#START_NOW_CONFIRMATION diff --git a/html/changelogs/AutoChangeLog-pr-11129.yml b/html/changelogs/AutoChangeLog-pr-11129.yml new file mode 100644 index 00000000000..de26a8b8f1b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11129.yml @@ -0,0 +1,4 @@ +author: "iantine" +delete-after: True +changes: + - rscadd: "Adds Lumi's vox suit fluff" diff --git a/html/changelogs/AutoChangeLog-pr-11299.yml b/html/changelogs/AutoChangeLog-pr-11299.yml new file mode 100644 index 00000000000..4994b017d39 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11299.yml @@ -0,0 +1,5 @@ +author: "Kyep" +delete-after: True +changes: + - rscadd: "Added a config file option which allows SSD crew members to be moved to cryo after a defined amount of minutes." + - rscadd: "Added a config file option which causes most people trying to attack/loot/interact with a SSD character to need to confirm they've read the rules before being able to do so." diff --git a/html/changelogs/AutoChangeLog-pr-11312.yml b/html/changelogs/AutoChangeLog-pr-11312.yml new file mode 100644 index 00000000000..c7b31729672 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11312.yml @@ -0,0 +1,4 @@ +author: "farie82" +delete-after: True +changes: + - tweak: "Cure text for Shock and Cardiac failure are more clear now" diff --git a/html/changelogs/AutoChangeLog-pr-11319.yml b/html/changelogs/AutoChangeLog-pr-11319.yml new file mode 100644 index 00000000000..c9c992c83d1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11319.yml @@ -0,0 +1,6 @@ +author: "Arkatos" +delete-after: True +changes: + - rscadd: "Added Floorbot color variants. Different toolboxes will result in a differently colored Floorbots. One even might be a little stronger than others.." + - imageadd: "Added sprites of Floorbot color variants" + - bugfix: "Fixed incorrect amount of required floortiles for the Floorbot in the crafting tab" diff --git a/html/changelogs/AutoChangeLog-pr-11323.yml b/html/changelogs/AutoChangeLog-pr-11323.yml new file mode 100644 index 00000000000..20da5d256b3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11323.yml @@ -0,0 +1,4 @@ +author: "AffectedArc07" +delete-after: True +changes: + - tweak: "Darkmode chat department colors match NTTC theming now" diff --git a/html/changelogs/AutoChangeLog-pr-11334.yml b/html/changelogs/AutoChangeLog-pr-11334.yml new file mode 100644 index 00000000000..7e119901704 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11334.yml @@ -0,0 +1,4 @@ +author: "Arkatos" +delete-after: True +changes: + - soundadd: "Added deathsound for Silicons" diff --git a/html/changelogs/AutoChangeLog-pr-11335.yml b/html/changelogs/AutoChangeLog-pr-11335.yml new file mode 100644 index 00000000000..084f93320cb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11335.yml @@ -0,0 +1,4 @@ +author: "Arkatos" +delete-after: True +changes: + - tweak: "Dice will now roll when thrown" diff --git a/html/changelogs/AutoChangeLog-pr-11338.yml b/html/changelogs/AutoChangeLog-pr-11338.yml new file mode 100644 index 00000000000..6505d695841 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11338.yml @@ -0,0 +1,4 @@ +author: "Arkatos" +delete-after: True +changes: + - soundadd: "Added sound when adding or removing IDs from ID modification computers" diff --git a/html/changelogs/AutoChangeLog-pr-11340.yml b/html/changelogs/AutoChangeLog-pr-11340.yml new file mode 100644 index 00000000000..3b9d667166a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11340.yml @@ -0,0 +1,4 @@ +author: "Markolie" +delete-after: True +changes: + - tweak: "Jumpsuits are now removed by clicking instead of clicking and dragging." diff --git a/html/changelogs/AutoChangeLog-pr-11347.yml b/html/changelogs/AutoChangeLog-pr-11347.yml new file mode 100644 index 00000000000..57248e4f861 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11347.yml @@ -0,0 +1,5 @@ +author: "Arkatos" +delete-after: True +changes: + - rscadd: "Added cancel button to transfer amount from stack menu" + - tweak: "Alt-click is a new shortcut to take a custom amount from stack" diff --git a/html/changelogs/AutoChangeLog-pr-11348.yml b/html/changelogs/AutoChangeLog-pr-11348.yml new file mode 100644 index 00000000000..55335793f97 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11348.yml @@ -0,0 +1,5 @@ +author: "Arkatos" +delete-after: True +changes: + - rscadd: "Added shortcuts for handling pumps, volume pumps, filters, and mixers. Ctrl-click these devices to turn them on/off and Alt-click them to set their output to maximum." + - rscadd: "Added ability to rename pumps, volume pumps, filters and mixers with a pen." diff --git a/html/changelogs/AutoChangeLog-pr-11349.yml b/html/changelogs/AutoChangeLog-pr-11349.yml new file mode 100644 index 00000000000..329fec2e5cc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11349.yml @@ -0,0 +1,5 @@ +author: "Arkatos" +delete-after: True +changes: + - soundadd: "Added sound for throwing bolas" + - soundadd: "Added hitsound for all types of bolas" diff --git a/html/changelogs/AutoChangeLog-pr-11351.yml b/html/changelogs/AutoChangeLog-pr-11351.yml new file mode 100644 index 00000000000..8fbca5fe9c0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11351.yml @@ -0,0 +1,5 @@ +author: "Citinited" +delete-after: True +changes: + - bugfix: "Pipe dispensers (the big ones) now work again." + - tweak: "Cooldown on pipe dispensers reduced to 0.4 seconds, down from 1.5 seconds" diff --git a/html/changelogs/AutoChangeLog-pr-11353.yml b/html/changelogs/AutoChangeLog-pr-11353.yml new file mode 100644 index 00000000000..9807b7a0681 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11353.yml @@ -0,0 +1,4 @@ +author: "Arkatos" +delete-after: True +changes: + - rscadd: "Added AntagHUD to everyone at the round end" diff --git a/html/changelogs/AutoChangeLog-pr-11356.yml b/html/changelogs/AutoChangeLog-pr-11356.yml new file mode 100644 index 00000000000..d441bd658e1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11356.yml @@ -0,0 +1,4 @@ +author: "McDonald072" +delete-after: True +changes: + - bugfix: "You can no longer examine or teleport things using clipboards" diff --git a/html/changelogs/AutoChangeLog-pr-11365.yml b/html/changelogs/AutoChangeLog-pr-11365.yml new file mode 100644 index 00000000000..fd5fe573104 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11365.yml @@ -0,0 +1,7 @@ +author: "Kyep" +delete-after: True +changes: + - rscadd: "The ID computer now color-codes potential job transfer options, highlighting good choices for a job transfer in green, and bad ones in gray." + - bugfix: "Taking a job transfer now gives you playtime based on your new job, instead of incorrectly still giving you playtime based on your old job." + - tweak: "Job transfers to karma jobs are now possible - if you have the job unlocked." + - rscadd: "Attempting to bypass a job ban via a job transfer now generates a warning to all online admins." diff --git a/html/changelogs/AutoChangeLog-pr-11369.yml b/html/changelogs/AutoChangeLog-pr-11369.yml new file mode 100644 index 00000000000..c8bc9be9e2d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11369.yml @@ -0,0 +1,4 @@ +author: "Arkatos" +delete-after: True +changes: + - rscadd: "Circuit Boards now show their required components on examine" diff --git a/html/changelogs/AutoChangeLog-pr-11370.yml b/html/changelogs/AutoChangeLog-pr-11370.yml new file mode 100644 index 00000000000..9cd7a28a5b6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11370.yml @@ -0,0 +1,4 @@ +author: "Arkatos" +delete-after: True +changes: + - rscadd: "Revenants now have randomly generated flavor names" diff --git a/html/changelogs/AutoChangeLog-pr-11371.yml b/html/changelogs/AutoChangeLog-pr-11371.yml new file mode 100644 index 00000000000..220e6962bc5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11371.yml @@ -0,0 +1,4 @@ +author: "Arkatos" +delete-after: True +changes: + - tweak: "You can shift-click any action button to reset it's position. Alt-click on Hide Buttons will reset all action buttons to their default positions." diff --git a/html/changelogs/AutoChangeLog-pr-11372.yml b/html/changelogs/AutoChangeLog-pr-11372.yml new file mode 100644 index 00000000000..963e58006f1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11372.yml @@ -0,0 +1,4 @@ +author: "Arkatos" +delete-after: True +changes: + - rscadd: "Pill Bottles are now printable in the Autolathe. You can find them in the Medical section, and each costs 80 metal and 20 glass to print." diff --git a/html/changelogs/AutoChangeLog-pr-11373.yml b/html/changelogs/AutoChangeLog-pr-11373.yml new file mode 100644 index 00000000000..9f90ffcd554 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11373.yml @@ -0,0 +1,4 @@ +author: "Quantum-M" +delete-after: True +changes: + - rscadd: "Two multicolor pens to the Internal Affairs Office" diff --git a/html/changelogs/AutoChangeLog-pr-11375.yml b/html/changelogs/AutoChangeLog-pr-11375.yml new file mode 100644 index 00000000000..34d17cb10ce --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11375.yml @@ -0,0 +1,4 @@ +author: "Arkatos" +delete-after: True +changes: + - tweak: "Puts beakers in your hand upon eject from chemistry machines" diff --git a/html/changelogs/AutoChangeLog-pr-11376.yml b/html/changelogs/AutoChangeLog-pr-11376.yml new file mode 100644 index 00000000000..c3ed1239eb5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11376.yml @@ -0,0 +1,4 @@ +author: "Arkatos" +delete-after: True +changes: + - rscadd: "Cardboard can now be made in the Biogenerator" diff --git a/html/changelogs/AutoChangeLog-pr-11377.yml b/html/changelogs/AutoChangeLog-pr-11377.yml new file mode 100644 index 00000000000..7b040fcc944 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11377.yml @@ -0,0 +1,5 @@ +author: "Arkatos" +delete-after: True +changes: + - rscadd: "You can now hotswap tanks in a canister or gas pump by clicking it with a new tank!" + - rscadd: "You can now also close a canister's valve and remove the tank inside it by alt-clicking it." diff --git a/html/changelogs/AutoChangeLog-pr-11378.yml b/html/changelogs/AutoChangeLog-pr-11378.yml new file mode 100644 index 00000000000..fefbf428e06 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11378.yml @@ -0,0 +1,4 @@ +author: "Arkatos" +delete-after: True +changes: + - rscadd: "Added examine toolptips. Hover over any equipped or hold item for a little while and it will display the item description as a tooltip." diff --git a/html/changelogs/AutoChangeLog-pr-11381.yml b/html/changelogs/AutoChangeLog-pr-11381.yml new file mode 100644 index 00000000000..604f3096553 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11381.yml @@ -0,0 +1,4 @@ +author: "Ty-Omaha" +delete-after: True +changes: + - tweak: "Moves AI admin log to the all preference" diff --git a/html/changelogs/AutoChangeLog-pr-11389.yml b/html/changelogs/AutoChangeLog-pr-11389.yml new file mode 100644 index 00000000000..90d66861196 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11389.yml @@ -0,0 +1,4 @@ +author: "Kyep" +delete-after: True +changes: + - tweak: "Refactored and improved our entry on the server hub." diff --git a/html/changelogs/AutoChangeLog-pr-11390.yml b/html/changelogs/AutoChangeLog-pr-11390.yml new file mode 100644 index 00000000000..12edd2d1fa2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11390.yml @@ -0,0 +1,4 @@ +author: "Fox McCloud" +delete-after: True +changes: + - bugfix: "Fixes multi-spawn blobs" diff --git a/html/changelogs/AutoChangeLog-pr-11391.yml b/html/changelogs/AutoChangeLog-pr-11391.yml new file mode 100644 index 00000000000..2d23260b1e4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11391.yml @@ -0,0 +1,4 @@ +author: "farie82" +delete-after: True +changes: + - bugfix: "Fixes admin PM's. Bwoinks are back on the menu!" diff --git a/html/changelogs/AutoChangeLog-pr-11393.yml b/html/changelogs/AutoChangeLog-pr-11393.yml new file mode 100644 index 00000000000..955e99dab7a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11393.yml @@ -0,0 +1,6 @@ +author: "Fox McCloud" +delete-after: True +changes: + - tweak: "Powersinks drain rate increased, but they also explode a bit sooner" + - rscadd: "Multitools display total power, load, and free power" + - bugfix: "Fix emitter sparks sparking at the location of emitters where biult as opposed to emitter current location" diff --git a/html/changelogs/AutoChangeLog-pr-11395.yml b/html/changelogs/AutoChangeLog-pr-11395.yml new file mode 100644 index 00000000000..08ad539b42d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11395.yml @@ -0,0 +1,4 @@ +author: "farie82" +delete-after: True +changes: + - bugfix: "Organs will now prompt a update_stat. Meaning that IRCs and the like now get revived when possible when you put their battery and brain in" diff --git a/html/changelogs/AutoChangeLog-pr-11396.yml b/html/changelogs/AutoChangeLog-pr-11396.yml new file mode 100644 index 00000000000..7cbd431c75b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11396.yml @@ -0,0 +1,4 @@ +author: "Arkatos" +delete-after: True +changes: + - bugfix: "Ghost teleport verb will no locker flicker when used" diff --git a/html/changelogs/AutoChangeLog-pr-11397.yml b/html/changelogs/AutoChangeLog-pr-11397.yml new file mode 100644 index 00000000000..c19f8d2bd25 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11397.yml @@ -0,0 +1,7 @@ +author: "Arkatos" +delete-after: True +changes: + - rscadd: "Alt-click now opens and closes fire extinguisher cabinet" + - bugfix: "Fire extinguisher cabinet now properly updates it's sprite correctly when putting fire extinquisher inside the cabinet" + - bugfix: "Fire extinguisher no longer sprays when put into fire extinguisher cabinet with a safety off" + - soundadd: "Added sound for opening and closing fire extinguisher cabinet" diff --git a/html/changelogs/AutoChangeLog-pr-11400.yml b/html/changelogs/AutoChangeLog-pr-11400.yml new file mode 100644 index 00000000000..199c334303b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11400.yml @@ -0,0 +1,6 @@ +author: "Arkatos" +delete-after: True +changes: + - imageadd: "Added new torch sprites" + - tweak: "Torch light color is now orange instead of red" + - bugfix: "Torch sprite now correctly shows all inhand sprites" diff --git a/html/changelogs/AutoChangeLog-pr-11404.yml b/html/changelogs/AutoChangeLog-pr-11404.yml new file mode 100644 index 00000000000..e4161ce9d6c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11404.yml @@ -0,0 +1,4 @@ +author: "farie82" +delete-after: True +changes: + - bugfix: "The typing limiter option should now work for all edge cases. Such as dying while talking and such" diff --git a/html/changelogs/AutoChangeLog-pr-11405.yml b/html/changelogs/AutoChangeLog-pr-11405.yml new file mode 100644 index 00000000000..82b5d6e22c6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11405.yml @@ -0,0 +1,4 @@ +author: "Markolie" +delete-after: True +changes: + - bugfix: "Removed a useless message that would be sent to admins whenever a drone joins the round." diff --git a/html/changelogs/AutoChangeLog-pr-11406.yml b/html/changelogs/AutoChangeLog-pr-11406.yml new file mode 100644 index 00000000000..4a3191624ea --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11406.yml @@ -0,0 +1,7 @@ +author: "Arkatos" +delete-after: True +changes: + - tweak: "Blob Rally Spores power is now free to use" + - bugfix: "Blob mobs can no longer speak while being dead via Blob Broadcast" + - bugfix: "Blob structures now properly show working animation" + - imageadd: "Added new sprites for variants of Blob resource, factory and storage structures" diff --git a/html/changelogs/AutoChangeLog-pr-11414.yml b/html/changelogs/AutoChangeLog-pr-11414.yml new file mode 100644 index 00000000000..a994f91763e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11414.yml @@ -0,0 +1,4 @@ +author: "Markolie" +delete-after: True +changes: + - bugfix: "Fixed an issue where admins would receive a message whenever someone joined up as a pAI." diff --git a/icons/mob/blob.dmi b/icons/mob/blob.dmi index 4797c79496e..809c68bd59b 100644 Binary files a/icons/mob/blob.dmi and b/icons/mob/blob.dmi differ diff --git a/icons/mob/inhands/fluff_lefthand.dmi b/icons/mob/inhands/fluff_lefthand.dmi index 5f18b1623ab..c2604c8b57c 100644 Binary files a/icons/mob/inhands/fluff_lefthand.dmi and b/icons/mob/inhands/fluff_lefthand.dmi differ diff --git a/icons/mob/inhands/fluff_righthand.dmi b/icons/mob/inhands/fluff_righthand.dmi index 5b7005ab48f..b75a67a7d8e 100644 Binary files a/icons/mob/inhands/fluff_righthand.dmi and b/icons/mob/inhands/fluff_righthand.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index 34ef8d28e9a..6855e49996e 100644 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index 9164b6f52ac..c0b918297f5 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/mob/species/vox/uniform.dmi b/icons/mob/species/vox/uniform.dmi index e22a631d6cd..b8169f9bd51 100644 Binary files a/icons/mob/species/vox/uniform.dmi and b/icons/mob/species/vox/uniform.dmi differ diff --git a/icons/obj/aibots.dmi b/icons/obj/aibots.dmi index 273fbf77133..9299c999342 100644 Binary files a/icons/obj/aibots.dmi and b/icons/obj/aibots.dmi differ diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi index e1ca3d3380e..9315f8223af 100644 Binary files a/icons/obj/custom_items.dmi and b/icons/obj/custom_items.dmi differ diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi index 137256f3499..f8943c2c39b 100644 Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ diff --git a/nano/assets/nanoui.css b/nano/assets/nanoui.css index 598da509f43..158b96ef0ff 100644 --- a/nano/assets/nanoui.css +++ b/nano/assets/nanoui.css @@ -1,2 +1,2 @@ -@charset "utf-8";@font-face{font-family:'FontAwesome';src:url(fontawesome-webfont.eot?v=4.7.0);src:url(fontawesome-webfont.eot?#iefix&v=4.7.0) format('embedded-opentype'),url(fontawesome-webfont.woff2?v=4.7.0) format('woff2'),url(fontawesome-webfont.woff?v=4.7.0) format('woff'),url(fontawesome-webfont.ttf?v=4.7.0) format('truetype'),url(fontawesome-webfont.svg?v=4.7.0#fontawesomeregular) format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:0.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul > li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:0.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:0.2em 0.25em 0.15em;border:solid 0.08em #eee;border-radius:0.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:0.3em}.fa.fa-pull-right{margin-left:0.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:0.3em}.fa.pull-right{margin-left:0.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:"\f2a3"}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-address-card:before,.fa-vcard:before{content:"\f2bb"}.fa-address-card-o:before,.fa-vcard-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.displayBar{position:relative;width:236px;height:16px;border:1px solid #666;float:left;margin:0 5px 0 0;overflow:hidden;background:#000}.displayBarText{position:absolute;top:-2px;left:5px;width:100%;height:100%;color:#fff;font-weight:normal}.displayBarFill{width:0%;height:100%;background:#40628a;overflow:hidden;float:left}.displayBarFill.alignRight{float:right}.displayBarText.good{color:#fff}.displayBarText.notgood{color:#fff}.displayBarText.average{color:#fff}.displayBarText.bad{color:#fff}.displayBarText.highlight{color:#000}.displayBarFill.good{color:#fff;background:#4f7529}.displayBarFill.notgood{color:#fff;background:#ffb400}.displayBarFill.average{color:#fff;background:#cd6500}.displayBarFill.bad{color:#fff;background:#e00}.displayBarFill.highlight{color:#fff;background:#8ba5c4}.disabled,.link,.linkOff,.linkOn,.redButton,.selected,.yellowButton{float:left;min-width:15px;height:16px;text-align:center;color:#fff;text-decoration:none;background:#40628a;border:1px solid #161616;padding:0 4px 4px 4px;margin:0 2px 2px 0;cursor:default;white-space:nowrap}.hasIcon{padding:0 4px 4px 0}.linkActive.hover,.zoomLink.hover,a.hover{background:#507aac}@keyframes pendingAnimation{to{color:#fff;background:#507aac}}.linkPending,.linkPending.hover{animation-name:pendingAnimation;animation-duration:0.25s}a.white,a.white:active,a.white:link,a.white:visited{color:#40628a;text-decoration:none;background:#fff;border:1px solid #161616;padding:1px 4px 1px 4px;margin:0 2px 0 0;cursor:default}a.white.hover{color:#fff;background:#40628a}.linkOn,.selected,a.linkOn.hover,a.linkOn:active,a.linkOn:link,a.linkOn:visited,a.selected.hover,a.selected:active,a.selected:link,a.selected:visited{color:#fff;background:#2f943c}.disabled,.linkOff,a.disabled.hover,a.disabled:active,a.disabled:link,a.disabled:visited,a.linkOff.hover,a.linkOff:active,a.linkOff:link,a.linkOff:visited{color:#fff;background:#999;border-color:#666}.disabled.icon,.linkOff.icon,.linkOn.icon,.selected.icon,a.icon{position:relative;padding:1px 4px 2px 20px}.disabled.icon img,.linkOff.icon img,.linkOn.icon img,.selected.icon img,a.icon img{position:absolute;top:0;left:0;width:18px;height:18px}.linkDanger,a.linkDanger:active,a.linkDanger:link,a.linkDanger:visited{color:#fff;background-color:red;border-color:#a00}.linkDanger.hover{background-color:#f66}.inactive,a.inactive.hover,a.inactive:active,a.inactive:link,a.inactive:visited{color:#fff;background:#999;border-color:#666}.white{color:#fff;font-weight:bold}.good{color:#4f7529;font-weight:bold}.average{color:#cd6500;font-weight:bold}.bad{color:#e00;font-weight:bold}.idle{color:#272727;font-weight:bold}.redButton{background:#ea0000}.yellowButton{background:#cacc00}.highlight{color:#8ba5c4}.dark{color:#272727}.burn{color:orange}.brute{color:red}.toxin{color:green}.toxin_light{color:#3adf00}.oxyloss{color:#00f}.oxyloss_light{color:#6698ff}.Red{color:red}.Blue{color:#00f}.Green{color:#0f0}.Marigold{color:#fda505}.Fuschia{color:#ff0080}.Black{color:#000}.Pearl{color:#c6cacb}.cold1{color:#94b8ff}.cold2{color:#69f}.cold3{color:#293d66}.hot1{color:#f96}.hot2{color:#993d00}.hot3{color:#f60}div.display{padding:4px;margin:6px 0;background-color:#000;background-color:rgba(0, 0, 0, 0.33);box-shadow:inset 0 0 5px rgba(0, 0, 0, 0.5)}div.display header{display:block;position:relative;width:98.5%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}div.display header .buttonRight{position:absolute;bottom:6px;right:4px}div.display article{display:table;width:100%;border-collapse:collapse}.itemGroup{border:1px solid #e9c183;background:#2c2c2c;padding:4px;clear:both}.item{width:100%;margin:4px 0 0 0;clear:both;overflow:auto}.itemContent,.itemContentNarrow{float:left}.itemContentNarrow{width:30%}.itemContent{width:69%}.itemLabel,.itemLabelNarrow,.itemLabelWide,.itemLabelWider,.itemLabelWidest{float:left;color:#e9c183}.itemLabelNarrow{width:20%}.itemLabel{width:30%}.itemLabelWide{width:45%}.itemLabelWider{width:69%}.itemLabelWidest{width:100%}.itemContentWide{float:left;width:79%}.itemContentSmall{float:left;width:33%}.itemContentMedium{float:left;width:55%}.block{padding:8px;margin:10px 4px 4px 4px;border:1px solid #40628a;background-color:#202020}.block h3{padding:0}.clearBoth{clear:both}.clearLeft{clear:left}.clearRight{clear:right}.line{width:100%;clear:both}.fixedLeft{width:110px;float:left}.fixedLeftWide{width:165px;float:left}.fixedLeftWider{width:220px;float:left}.fixedLeftWidest{width:250px;float:left}.floatRight{float:right}.floatLeft{float:left}.hidden{display:none}.statusDisplay{background:#000;background:rgba(0, 0, 0, 0.5);color:#fff;border:1px solid #40628a;padding:4px;margin:3px 0;overflow:hidden}.statusDisplayRecords{background:#000;background:rgba(0, 0, 0, 0.5);color:#fff;border:1px solid #40628a;padding:4px;margin:3px 0;overflow-x:hidden;overflow-y:auto}.statusLabel{width:138px;float:left;overflow:hidden;color:#98b0c3}.statusValue{float:left}.jobValues{float:left;width:30%}.fancy{display:none}i.fancy{display:none}.minimize{color:#e9c183;cursor:pointer!important;z-index:102;position:absolute;top:6px;right:46px}.minimize:hover{color:#b8c9d6}.close{color:#e9c183;cursor:pointer!important;z-index:102;position:absolute;top:4px;right:12px}.close:hover{color:#b8c9d6}#uiCornerTL{position:fixed;z-index:101;min-width:30px;min-height:30px;top:0;left:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAIAAAC0Ujn1AAAACXBIWXMAAAsTAAALEwEAmpwYAAAGTGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTExLTIwVDIyOjM4OjI1LTA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOC0xMS0yMFQyMzowMzowMS0wODowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0xMS0yMFQyMzowMzowMS0wODowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpkOWRlMzc1Yi04ZWQwLWI3NDctOTQzZS0zN2UwZGU2NDkyODQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0ZmVhZjJmZC03YWVhLWUyNGQtYTNkZS05ZmI5ZGM0ZTA0YzIiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZTU4OTk5My1mZDU2LTEzNDktYWMyMC03NGZkZmY5NjNjYTgiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmNlNTg5OTkzLWZkNTYtMTM0OS1hYzIwLTc0ZmRmZjk2M2NhOCIgc3RFdnQ6d2hlbj0iMjAxOC0xMS0yMFQyMjozODoyNS0wODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gaW1hZ2UvZ2lmIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZDlkZTM3NWItOGVkMC1iNzQ3LTk0M2UtMzdlMGRlNjQ5Mjg0IiBzdEV2dDp3aGVuPSIyMDE4LTExLTIwVDIzOjAzOjAxLTA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+QnRKRAAAAIhJREFUSIm1zLcRgEAMBMCDokQf9B/SBwQwmOeNzGkL2GnHhgSLrHPSC4Bfny+/vl9y/X6ZdfHS6v/LqasvoW690brzhur+66+Hr7PWvJ5a+Zpr/WurTa+htr7a2vGqat87rt3voI68vTr4Nuv4W68pb6VmvWVNfD81931q+nvVGS+ASUQyXgAHuOgYYwOkhIYAAAAASUVORK5CYII=) no-repeat}.resizeArea{position:absolute;z-index:99999}.resizeArea.top{top:0;left:10px;right:10px;height:5px;cursor:n-resize}.resizeArea.tr{top:0;right:0;height:10px;width:10px;cursor:ne-resize}.resizeArea.right{top:10px;right:0;bottom:10px;width:5px;cursor:e-resize}.resizeArea.br{bottom:0;right:0;height:10px;width:10px;cursor:se-resize}.resizeArea.bottom{bottom:0;left:10px;right:10px;height:5px;cursor:s-resize}.resizeArea.bl{bottom:0;left:0;height:10px;width:10px;cursor:sw-resize}.resizeArea.left{top:10px;left:0;bottom:10px;width:5px;cursor:w-resize}.resizeArea.tl{top:0;left:0;height:10px;width:10px;cursor:nw-resize}.uiLinkPendingIcon{display:none;float:left;width:16px;height:16px;margin:2px 2px 0 2px;background-image:url(uiLinkPendingIcon.gif)}.linkPending .fa{display:none}.linkPending .uiLinkPendingIcon{display:block}.mapIcon16{position:absolute;width:16px;height:16px;background-image:url(uiIcons16Green.png);background-position:-144px -96px;background-repeat:no-repeat;zoom:0.125;margin-left:-1px}.mapIcon16.dead{background-image:url(uiIcons16Red.png)}.mapIcon16.bad{background-image:url(uiIcons16Red.png)}.mapIcon16.average{background-image:url(uiIcons16Orange.png)}.mapIcon16.good{background-image:url(uiIcons16Green.png)}.mapIcon16.icon-airalarm{background-position:0 -144px}.mapIcon16.rank-captain{background-position:-224px -112px}.mapIcon16.rank-headofpersonnel{background-position:-112px -96px}.mapIcon16.rank-headofsecurity{background-position:-112px -128px}.mapIcon16.rank-chiefengineer{background-position:-176px -112px}.mapIcon16.rank-researchdirector{background-position:-128px -128px}.mapIcon16.rank-chiefmedicalofficer{background-position:-32px -128px}.mapIcon16.rank-stationengineer{background-position:-176px -112px}.mapIcon16.rank-atmospherictechnician{background-position:-176px -112px}.mapIcon16.rank-medicaldoctor{background-position:-32px -128px}.mapIcon16.rank-geneticist{background-position:-32px -128px}.mapIcon16.rank-psychiatrist{background-position:-32px -128px}.mapIcon16.rank-chemist{background-position:-32px -128px}.mapIcon16.rank-scientist{background-position:-128px -128px}.mapIcon16.rank-geneticist{background-position:-128px -128px}.mapIcon16.rank-roboticist{background-position:-128px -128px}.mapIcon16.rank-xenobiologist{background-position:-128px -128px}.mapIcon16.rank-warden{background-position:-112px -128px}.mapIcon16.rank-detective{background-position:-112px -128px}.mapIcon16.rank-securityofficer{background-position:-112px -128px}ul{padding:4px 0 0 10px;margin:0;list-style-type:none}li{padding:0 0 2px 0}table.fixed{table-layout:fixed}table.fixed td{overflow:hidden}table.pmon{border:2px solid #4169e1}table.pmon td,table.pmon th{border-bottom:1px dotted #000;padding:0 5px 0 5px}th.command{background:#33f;font-weight:bold;color:#fff}th.sec{background:#8e0000;font-weight:bold;color:#fff}th.med{background:#060;font-weight:bold;color:#fff}th.eng{background:#b27300;font-weight:bold;color:#fff}th.sci{background:#a65ba6;font-weight:bold;color:#fff}th.ser{background:#7100aa;font-weight:bold;color:#fff}th.sup{background:#666621;font-weight:bold;color:#fff}th.civ{background:#a32800;font-weight:bold;color:#fff}th.misc{background:#666;font-weight:bold;color:#fff}span.qm-job{color:#b77a41;font-weight:bold}.striped tr:nth-child(even){background-color:#404040}.striped:not(table) > :nth-child(even){background-color:#404040}#uiNoScript{position:fixed;top:50%;left:50%;margin:-60px 0 0 -150px;width:280px;height:120px;background:#fff;border:2px solid red;color:#000;font-size:10px;font-weight:bold;z-index:9999;padding:0 10px;text-align:center}.notice{position:relative;background:url(uiNoticeBackground.jpg) 50% 50%;color:#000;font-size:12px;font-style:italic;font-weight:bold;padding:3px 4px 3px 4px;margin:4px 0 4px 0}.noticePlaceholder{position:relative;font-size:12px;font-style:italic;font-weight:bold;padding:3px 4px 3px 4px;margin:4px 0 4px 0}.notice.icon{padding:2px 4px 0 20px}.notice img{position:absolute;top:0;left:0;width:16px;height:16px}div.notice{clear:both}.wholeScreen{position:absolute;color:#517087;font-size:16px;font-weight:bold;text-align:center}.pdalink{float:left;white-space:nowrap;cursor:default!important}.pdalink.disabled{background:none;border:none;color:#999;text-align:left}.pdanote{color:#cd6500;font-weight:bold}.item.mainmenu{padding-bottom:0.5em}div.clock{color:#fff;font-weight:bold;float:right;padding-right:2em}#pdaFooter{position:fixed;left:0;bottom:0;width:100%;background:#272727}.pdaFooterButton{width:33%;padding:0.5em 0;font-size:200%;border:none;background:none;color:#fff}.pdaFooterButton.hover{background:#507aac}.pdaFooterButton.disabled{background:none!important;color:#555!important}.pdaFooterButton .uiLinkPendingIcon{position:absolute;width:33%;background-repeat:no-repeat;background-position:center}.dnaBlock{float:left;width:90px;padding:0 0 5px 0}.dnaBlockNumber{font-family:Fixed,monospace;float:left;color:#fff;background:#363636;min-width:20px;height:20px;padding:0;text-align:center}.dnaSubBlock{font-family:Fixed,monospace;float:left;padding:0;min-width:16px;height:20px;text-align:center}.mask{position:fixed;left:0;top:0;width:100%;height:100%;background:url(uiMaskBackground.png)}.maskContent{width:100%;height:200px;margin:200px 0;text-align:center}body{color:#fff;font-family:Verdana,Geneva,sans-serif;font-size:12px;line-height:170%;margin:0;padding:0}hr{background-color:#40628a;height:1px;border:none}a img,img{border-style:none}h1,h2,h3,h4,h5,h6{margin:0;padding:12px 0 6px 0;color:#fff;clear:both}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}*[data-tooltip]{position:relative}*[data-tooltip]::after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";opacity:0;white-space:normal;text-align:left;content:attr(data-tooltip);transition:all 0.5s;border:1px solid #999;background-color:#363636}*[data-tooltip]:hover::after{visibility:visible;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";opacity:1}*[data-tooltip].tooltipTop::after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}*[data-tooltip].tooltipTop:hover::after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}*[data-tooltip].tooltipBottom::after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}*[data-tooltip].tooltipBottom:hover::after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}*[data-tooltip].tooltipLeft::after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}*[data-tooltip].tooltipLeft:hover::after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}*[data-tooltip].tooltipRight::after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}*[data-tooltip].tooltipRight:hover::after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}.mainBG{position:fixed;z-index:-1;top:30px;left:0;right:0;bottom:0;background:url(data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%0D%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.0%22%20viewBox%3D%220%200%20425%20200%22%20opacity%3D%22.25%22%3E%0D%0A%20%20%3Cpath%20d%3D%22m%20178.00399%2C0.03869%20-71.20393%2C0%20a%206.7613422%2C6.0255495%200%200%200%20-6.76134%2C6.02555%20l%200%2C187.87147%20a%206.7613422%2C6.0255495%200%200%200%206.76134%2C6.02554%20l%2053.1072%2C0%20a%206.7613422%2C6.0255495%200%200%200%206.76135%2C-6.02554%20l%200%2C-101.544018%2072.21628%2C104.699398%20a%206.7613422%2C6.0255495%200%200%200%205.76015%2C2.87016%20l%2073.55487%2C0%20a%206.7613422%2C6.0255495%200%200%200%206.76135%2C-6.02554%20l%200%2C-187.87147%20a%206.7613422%2C6.0255495%200%200%200%20-6.76135%2C-6.02555%20l%20-54.71644%2C0%20a%206.7613422%2C6.0255495%200%200%200%20-6.76133%2C6.02555%20l%200%2C102.61935%20L%20183.76413%2C2.90886%20a%206.7613422%2C6.0255495%200%200%200%20-5.76014%2C-2.87017%20z%22%20%2F%3E%0D%0A%20%20%3Cpath%20d%3D%22M%204.8446333%2C22.10875%20A%2013.412039%2C12.501842%200%200%201%2013.477588%2C0.03924%20l%2066.118315%2C0%20a%205.3648158%2C5.000737%200%200%201%205.364823%2C5.00073%20l%200%2C79.87931%20z%22%20%2F%3E%0D%0A%20%20%3Cpath%20d%3D%22m%20420.15535%2C177.89119%20a%2013.412038%2C12.501842%200%200%201%20-8.63295%2C22.06951%20l%20-66.11832%2C0%20a%205.3648152%2C5.000737%200%200%201%20-5.36482%2C-5.00074%20l%200%2C-79.87931%20z%22%20%2F%3E%0D%0A%3C%2Fsvg%3E%0D%0A) no-repeat fixed center/70% 70%,linear-gradient(to bottom, #2a2a2a 0, #202020 100%) no-repeat fixed center/100% 100%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a', endColorstr='#ff202020', GradientType=0)}body,html{scrollbar-face-color:#666;scrollbar-arrow-color:#e9c183;scrollbar-track-color:#363636;scrollbar-shadow-color:#555}#uiWrapper{width:100%;height:100%;-ms-user-select:none;user-select:none}#uiTitleWrapper{position:fixed;min-height:30px;min-width:100%;background-color:#363636;left:0;top:0;right:0;overflow:hidden;z-index:100}#uiTitleWrapper > div{cursor:default}#uiTitleWrapper > i{cursor:default}#uiTitleText{position:absolute;top:6px;left:44px;width:66%;overflow:hidden;color:#e9c183;font-size:16px}#uiTitle.icon{padding:6px 8px 6px 42px;background-position:2px 50%;background-repeat:no-repeat}#uiTitleFluff{position:absolute;top:4px;right:12px;width:42px;height:24px;background:url(data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%0D%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.0%22%20viewBox%3D%220%200%20425%20200%22%20opacity%3D%22.25%22%3E%0D%0A%20%20%3Cpath%20d%3D%22m%20178.00399%2C0.03869%20-71.20393%2C0%20a%206.7613422%2C6.0255495%200%200%200%20-6.76134%2C6.02555%20l%200%2C187.87147%20a%206.7613422%2C6.0255495%200%200%200%206.76134%2C6.02554%20l%2053.1072%2C0%20a%206.7613422%2C6.0255495%200%200%200%206.76135%2C-6.02554%20l%200%2C-101.544018%2072.21628%2C104.699398%20a%206.7613422%2C6.0255495%200%200%200%205.76015%2C2.87016%20l%2073.55487%2C0%20a%206.7613422%2C6.0255495%200%200%200%206.76135%2C-6.02554%20l%200%2C-187.87147%20a%206.7613422%2C6.0255495%200%200%200%20-6.76135%2C-6.02555%20l%20-54.71644%2C0%20a%206.7613422%2C6.0255495%200%200%200%20-6.76133%2C6.02555%20l%200%2C102.61935%20L%20183.76413%2C2.90886%20a%206.7613422%2C6.0255495%200%200%200%20-5.76014%2C-2.87017%20z%22%20%2F%3E%0D%0A%20%20%3Cpath%20d%3D%22M%204.8446333%2C22.10875%20A%2013.412039%2C12.501842%200%200%201%2013.477588%2C0.03924%20l%2066.118315%2C0%20a%205.3648158%2C5.000737%200%200%201%205.364823%2C5.00073%20l%200%2C79.87931%20z%22%20%2F%3E%0D%0A%20%20%3Cpath%20d%3D%22m%20420.15535%2C177.89119%20a%2013.412038%2C12.501842%200%200%201%20-8.63295%2C22.06951%20l%20-66.11832%2C0%20a%205.3648152%2C5.000737%200%200%201%20-5.36482%2C-5.00074%20l%200%2C-79.87931%20z%22%20%2F%3E%0D%0A%3C%2Fsvg%3E%0D%0A) 50% 50% no-repeat}.statusicon{position:absolute;top:4px;left:12px}#uiMapWrapper{clear:both;padding:8px;margin-top:30px}#uiMapHeader{position:relative;clear:both}#uiMapContainer{position:relative;width:100%;height:600px;overflow:hidden;border:1px solid #40628a;background:url(nanomapBackground.png)}#uiMap{position:absolute;top:50%;left:50%;margin:-512px 0 0 -512px;width:256px;height:256px;overflow:hidden;zoom:4}#uiMapImage{position:absolute;bottom:1px;left:1px;width:256px;height:256px}#uiMapContent{position:absolute;bottom:-13.5px;left:0;width:256px;height:256px}#uiMapFooter{position:relative;clear:both}#uiContent{clear:both;padding:8px;margin-top:30px}#uiMapTooltip{position:absolute;right:10px;top:10px;border:1px solid #40628a;background-color:#272727;padding:8px;display:none;z-index:9999}#uiLoadingNotice{position:relative;background:url(uiNoticeBackground.jpg) 50% 50%;color:#000;font-size:14px;font-style:italic;font-weight:bold;padding:3px 4px 3px 4px;margin:4px 0 4px 0}.underTitle{margin-top:30px} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhdGgubGVzcyIsInNjcmVlbi1yZWFkZXIubGVzcyIsImNvcmUubGVzcyIsImxhcmdlci5sZXNzIiwiZml4ZWQtd2lkdGgubGVzcyIsImxpc3QubGVzcyIsImJvcmRlcmVkLXB1bGxlZC5sZXNzIiwiYW5pbWF0ZWQubGVzcyIsIm1peGlucy5sZXNzIiwibmFub3VpLmNzcyIsInJvdGF0ZWQtZmxpcHBlZC5sZXNzIiwic3RhY2tlZC5sZXNzIiwiaWNvbnMubGVzcyIsIl9iYXJzLmxlc3MiLCJfbGluay5sZXNzIiwiX2NvbG9yLmxlc3MiLCJfZGlzcGxheS5sZXNzIiwiX2Zvcm1hdHRpbmcubGVzcyIsIl9mYW5jeS5sZXNzIiwiX2ljb24ubGVzcyIsIl9saXN0cy5sZXNzIiwiX21pc2MubGVzcyIsIl9uYXRpdmUubGVzcyIsIl90b29sdGlwLmxlc3MiLCI8bm8gc291cmNlPiIsIm5hbm91aS5sZXNzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJpQkFHQSxXQUNFLFlBQUEsY0FDQSxJQUFBLHFDQUNBLElBQUEsNENBQUEsMkJBQUEsQ0FBQSx1Q0FBQSxlQUFBLENBQUEsc0NBQUEsY0FBQSxDQUFBLHFDQUFBLGtCQUFBLENBQUEsd0RBQUEsY0FNQSxZQUFBLE9BQ0EsV0FBQSxPQ2JELElDSUMsUUFBQSxhQUNBLEtBQUEsT0FBQSxPQUFBLE9BQUEsSUFBQSxDQUFBLEVBQUEsWUFDQSxVQUFBLFFBQ0EsZUFBQSxLQUNBLHVCQUFBLFlBQ0Esd0JBQUEsVURURCxPRUtDLFVBQUEsYUFDQSxZQUFBLE9BQ0EsZUFBQSxLRlBELE9FU3NCLFVBQUEsSUZUdEIsT0VVc0IsVUFBQSxJRlZ0QixPRVdzQixVQUFBLElGWHRCLE9FWXNCLFVBQUEsSUZadEIsT0dHQyxNQUFBLGFBQ0EsV0FBQSxPSEpELE9JSUMsYUFBQSxFQUNBLFlBQUEsYUFDQSxnQkFBQSxLSk5ELFlJT1EsU0FBQSxTSlBSLE9JVUMsU0FBQSxTQUNBLEtBQUEsY0FDQSxNQUFBLGFBQ0EsSUFBQSxhQUNBLFdBQUEsT0pkRCxhSWdCRyxLQUFBLGNKaEJILFdLSUMsUUFBQSxNQUFBLE9BQUEsT0FDQSxPQUFBLE1BQUEsT0FBQSxLQUNBLGNBQUEsTUxORCxjS1M2QixNQUFBLEtMVDdCLGVLVThCLE1BQUEsTUxWOUIsaUJLYWdDLGFBQUEsTUxiaEMsa0JLY2lDLFlBQUEsTUFJbEMsWUFBYyxNQUFBLE1BQ2QsV0FBYSxNQUFBLEtBR1gsY0FBYyxhQUFBLE1BQ2QsZUFBZSxZQUFBLE1MdkJoQixTTUtTLFVBQUEsUUFBQSxHQUFBLFNBQUEsT05MVCxVTVVTLFVBQUEsUUFBQSxHQUFBLFNBQUEsU0FjVixtQkFDRSxHQUVVLFVBQUEsVUFFVixLQUVVLFVBQUEsZ0JOL0JYLGNPY0MsV0FBQSwyREFFSSxjQUFBLGNBQ0ksVUFBQSxjUGpCVCxlT2NDLFdBQUEsMkRBRUksY0FBQSxlQUNJLFVBQUEsZVBqQlQsZU9jQyxXQUFBLDJEQUVJLGNBQUEsZUFDSSxVQUFBLGVQakJULG9CT3FCQyxXQUFBLHFFQUVJLGNBQUEsYUFDSSxVQUFBLGFQeEJULGtCT3FCQyxXQUFBLHFFQUVJLGNBQUEsYUFDSSxVQUFBLGFDNkdWLDBCQUNBLHdCQUhBLHFCQUNBLHFCUnBJQyxvQlNrQkMsT0FBQSxLVGxCRCxVVUlDLFNBQUEsU0FDQSxRQUFBLGFBQ0EsTUFBQSxJQUNBLE9BQUEsSUFDQSxZQUFBLElBQ0EsZUFBQSxPVlRELGFRa0pELGFFdElFLFNBQUEsU0FDQSxLQUFBLEVBQ0EsTUFBQSxLQUNBLFdBQUEsT1ZmRCxhVWlCNEIsWUFBQSxRVmpCNUIsYVVrQjRCLFVBQUEsSVZsQjVCLFlVbUIyQixNQUFBLEtWbkIzQixpQldHZ0MsUUFBQSxRWEhoQyxpQldJZ0MsUUFBQSxRWEpoQyxrQldLaUMsUUFBQSxRWExqQyxzQldNcUMsUUFBQSxRWE5yQyxpQldPZ0MsUUFBQSxRWFBoQyxnQldRK0IsUUFBQSxRWFIvQixrQldTaUMsUUFBQSxRWFRqQyxnQldVK0IsUUFBQSxRWFYvQixnQldXK0IsUUFBQSxRWFgvQixvQldZbUMsUUFBQSxRWFpuQyxjV2E2QixRQUFBLFFYYjdCLG1CV2NrQyxRQUFBLFFYZGxDLGlCV2VnQyxRQUFBLFFINExqQyxpQlIzTUMsa0JRNE1ELGlCRzFMaUMsUUFBQSxRWGxCaEMsdUJXbUJzQyxRQUFBLFFYbkJ0Qyx3QldvQnVDLFFBQUEsUVhwQnZDLHFCV3FCb0MsUUFBQSxRWHJCcEMsa0JXc0JpQyxRQUFBLFFIc01sQyxlUjVOQyxnQld3QjhCLFFBQUEsUVh4QjlCLG1CV3lCa0MsUUFBQSxRWHpCbEMsZ0JXMEIrQixRQUFBLFFYMUIvQixrQlcyQmlDLFFBQUEsUVgzQmpDLG1CVzRCa0MsUUFBQSxRWDVCbEMsZ0JXNkIrQixRQUFBLFFYN0IvQixvQlc4Qm1DLFFBQUEsUVg5Qm5DLCtCVytCOEMsUUFBQSxRWC9COUMsNkJXZ0M0QyxRQUFBLFFYaEM1QyxpQldpQ2dDLFFBQUEsUVhqQ2hDLHlCV2tDd0MsUUFBQSxRSDROekMsa0JSOVBDLHdCV29DaUMsUUFBQSxRWHBDakMsbUJXcUNrQyxRQUFBLFFYckNsQyxvQldzQ21DLFFBQUEsUVh0Q25DLGdCV3VDK0IsUUFBQSxRWHZDL0IsZ0JXd0MrQixRQUFBLFFYeEMvQixzQld5Q3FDLFFBQUEsUVh6Q3JDLHNCVzBDcUMsUUFBQSxRWDFDckMsdUJXMkNzQyxRQUFBLFFYM0N0QyxxQlc0Q29DLFFBQUEsUVg1Q3BDLGtCVzZDaUMsUUFBQSxRWDdDakMsbUJXOENrQyxRQUFBLFFYOUNsQyxlVytDOEIsUUFBQSxRWC9DOUIsZ0JXZ0QrQixRQUFBLFFYaEQvQixnQldpRCtCLFFBQUEsUVhqRC9CLG9CV2tEbUMsUUFBQSxRWGxEbkMsaUJXbURnQyxRQUFBLFFYbkRoQyxrQldvRGlDLFFBQUEsUVhwRGpDLGdCV3FEK0IsUUFBQSxRWHJEL0IsZ0JXc0QrQixRQUFBLFFYdEQvQixrQld1RGlDLFFBQUEsUVh2RGpDLHVCV3dEc0MsUUFBQSxRWHhEdEMsc0JXeURxQyxRQUFBLFFYekRyQyxzQlcwRHFDLFFBQUEsUVgxRHJDLHdCVzJEdUMsUUFBQSxRWDNEdkMsdUJXNERzQyxRQUFBLFFYNUR0Qyx5Qlc2RHdDLFFBQUEsUVg3RHhDLGdCVzhEK0IsUUFBQSxRWDlEL0Isa0JRZ1ZELG1CR2hSbUMsUUFBQSxRWGhFbEMsa0JXaUVpQyxRQUFBLFFYakVqQyx3QldrRXVDLFFBQUEsUUh3UnhDLGlCUjFWQyxpQlEyVkQscUJHdFJxQyxRQUFBLFFYckVwQyxrQldzRWlDLFFBQUEsUVh0RWpDLHNCV3VFcUMsUUFBQSxRWHZFckMsa0JXd0VpQyxRQUFBLFFYeEVqQyxnQld5RStCLFFBQUEsUVh6RS9CLGdCUTJXRCwyQkdoUzJDLFFBQUEsUVgzRTFDLDBCVzRFeUMsUUFBQSxRWDVFekMsMEJXNkV5QyxRQUFBLFFYN0V6QyxrQlc4RWlDLFFBQUEsUVg5RWpDLHlCVytFd0MsUUFBQSxRWC9FeEMseUJXZ0Z3QyxRQUFBLFFYaEZ4QyxvQldpRm1DLFFBQUEsUVhqRm5DLGdCV2tGK0IsUUFBQSxRWGxGL0IsaUJXbUZnQyxRQUFBLFFYbkZoQyxnQldvRitCLFFBQUEsUVhwRi9CLG1CV3FGa0MsUUFBQSxRWHJGbEMsd0JXc0Z1QyxRQUFBLFFYdEZ2Qyx3Qld1RnVDLFFBQUEsUVh2RnZDLGlCV3dGZ0MsUUFBQSxRWHhGaEMsd0JXeUZ1QyxRQUFBLFFYekZ2Qyx5QlcwRndDLFFBQUEsUVgxRnhDLHVCVzJGc0MsUUFBQSxRWDNGdEMsd0JXNEZ1QyxRQUFBLFFYNUZ2Qyx3Qlc2RnVDLFFBQUEsUVg3RnZDLHdCVzhGdUMsUUFBQSxRWDlGdkMsMkJXK0YwQyxRQUFBLFFYL0YxQyx1QldnR3NDLFFBQUEsUVhoR3RDLHNCV2lHcUMsUUFBQSxRWGpHckMsMEJXa0d5QyxRQUFBLFFYbEd6QywwQldtR3lDLFFBQUEsUVhuR3pDLGVXb0c4QixRQUFBLFFYcEc5QixzQldxR3FDLFFBQUEsUVhyR3JDLHVCV3NHc0MsUUFBQSxRWHRHdEMsb0JXdUdtQyxRQUFBLFFYdkduQyxzQld3R3FDLFFBQUEsUVh4R3JDLHdCUXNjRCxpQkc1VmlDLFFBQUEsUVgxR2hDLGtCVzJHaUMsUUFBQSxRWDNHakMsb0JXNEdtQyxRQUFBLFFYNUduQyxnQlc2RytCLFFBQUEsUVg3Ry9CLGlCVzhHZ0MsUUFBQSxRWDlHaEMsb0JXK0dtQyxRQUFBLFFYL0duQyw4QldnSDZDLFFBQUEsUVhoSDdDLGdCV2lIK0IsUUFBQSxRWGpIL0IsZ0JXa0grQixRQUFBLFFYbEgvQixnQldtSCtCLFFBQUEsUVhuSC9CLGVXb0g4QixRQUFBLFFYcEg5QixxQldxSG9DLFFBQUEsUUhzWHJDLGdDUjNlQyxtQld1SCtDLFFBQUEsUVh2SC9DLGlCV3dIZ0MsUUFBQSxRWHhIaEMsb0JXeUhtQyxRQUFBLFFYekhuQyxrQlcwSGlDLFFBQUEsUVgxSGpDLG1CVzJIa0MsUUFBQSxRWDNIbEMsa0JXNEhpQyxRQUFBLFFYNUhqQyxzQlc2SHFDLFFBQUEsUVg3SHJDLHdCVzhIdUMsUUFBQSxRWDlIdkMsbUJXK0hrQyxRQUFBLFFYL0hsQyx5QldnSXdDLFFBQUEsUVhoSXhDLGtCV2lJaUMsUUFBQSxRWGpJakMsdUJXa0lzQyxRQUFBLFFYbEl0QyxvQldtSW1DLFFBQUEsUVhuSW5DLG9CV29JbUMsUUFBQSxRWHBJbkMsdUJRc2hCRCxxQkdoWnFDLFFBQUEsUVh0SXBDLDBCV3VJeUMsUUFBQSxRWHZJekMsMkJXd0kwQyxRQUFBLFFYeEkxQyx3Qld5SXVDLFFBQUEsUVh6SXZDLGVXMEk4QixRQUFBLFFINFovQixnQlJ0aUJDLGlCVzRJK0IsUUFBQSxRWDVJL0Isb0JXNkltQyxRQUFBLFFYN0luQyx1Qlc4SXNDLFFBQUEsUVg5SXRDLHlCVytJd0MsUUFBQSxRWC9JeEMscUJXZ0pvQyxRQUFBLFFYaEpwQyxtQldpSmtDLFFBQUEsUVhqSmxDLG9CV2tKbUMsUUFBQSxRWGxKbkMsMkJXbUowQyxRQUFBLFFYbkoxQyxzQldvSnFDLFFBQUEsUVhwSnJDLHlCV3FKd0MsUUFBQSxRWHJKeEMsbUJXc0prQyxRQUFBLFFYdEpsQyxrQld1SmlDLFFBQUEsUVh2SmpDLHlCV3dKd0MsUUFBQSxRWHhKeEMsa0JXeUppQyxRQUFBLFFYekpqQyxtQlcwSmtDLFFBQUEsUVgxSmxDLGlCVzJKZ0MsUUFBQSxRWDNKaEMsb0JXNEptQyxRQUFBLFFYNUpuQyxzQlc2SnFDLFFBQUEsUVg3SnJDLHdCVzhKdUMsUUFBQSxRWDlKdkMsbUJXK0prQyxRQUFBLFFYL0psQyxzQlFtbUJELG9CR2xjb0MsUUFBQSxRWGpLbkMsa0JXa0tpQyxRQUFBLFFYbEtqQyxrQldtS2lDLFFBQUEsUVhuS2pDLHVCV29Lc0MsUUFBQSxRWHBLdEMsZ0JRZ25CRCxlRzFjK0IsUUFBQSxRWHRLOUIsaUJXdUtnQyxRQUFBLFFYdktoQyxvQld3S21DLFFBQUEsUVh4S25DLGdCV3lLK0IsUUFBQSxRWHpLL0IsdUJXMEtzQyxRQUFBLFFYMUt0Qyx3QlcyS3VDLFFBQUEsUVgzS3ZDLHVCVzRLc0MsUUFBQSxRWDVLdEMscUJXNktvQyxRQUFBLFFYN0twQyx1Qlc4S3NDLFFBQUEsUVg5S3RDLDZCVytLNEMsUUFBQSxRWC9LNUMsOEJXZ0w2QyxRQUFBLFFYaEw3QywyQldpTDBDLFFBQUEsUVhqTDFDLDZCV2tMNEMsUUFBQSxRWGxMNUMsaUJXbUxnQyxRQUFBLFFYbkxoQyxrQldvTGlDLFFBQUEsUVhwTGpDLGlCV3FMZ0MsUUFBQSxRWHJMaEMsa0JXc0xpQyxRQUFBLFFYdExqQyxxQld1TG9DLFFBQUEsUVh2THBDLHNCV3dMcUMsUUFBQSxRWHhMckMsaUJRMHFCRCxpQkdoZmlDLFFBQUEsUVgxTGhDLGlCUThxQkQsZ0JHbGZnQyxRQUFBLFFYNUwvQixpQlc2TGdDLFFBQUEsUVg3TGhDLGlCVzhMZ0MsUUFBQSxRWDlMaEMsZVF3ckJELG9CR3hmb0MsUUFBQSxRWGhNbkMsZ0JRNHJCRCxtQkcxZm1DLFFBQUEsUVhsTWxDLHFCV21Nb0MsUUFBQSxRSGdnQnJDLG9CUm5zQkMsZ0JXcU1tQyxRQUFBLFFYck1uQyxrQldzTWlDLFFBQUEsUUhxZ0JsQyxnQlIzc0JDLG1CUTBzQkQsbUJHamdCZ0MsUUFBQSxRWHpNL0IsbUJXME1rQyxRQUFBLFFYMU1sQyxtQlcyTWtDLFFBQUEsUVgzTWxDLHlCVzRNd0MsUUFBQSxRWDVNeEMscUJXNk1vQyxRQUFBLFFYN01wQyxpQlc4TWdDLFFBQUEsUVg5TWhDLGlCVytNZ0MsUUFBQSxRWC9NaEMsaUJXZ05nQyxRQUFBLFFYaE5oQyxxQldpTm9DLFFBQUEsUVhqTnBDLDRCV2tOMkMsUUFBQSxRWGxOM0MsOEJXbU42QyxRQUFBLFFYbk43Qyx1QldvTnNDLFFBQUEsUVhwTnRDLGlCV3FOZ0MsUUFBQSxRWHJOaEMsc0JXc05xQyxRQUFBLFFYdE5yQyxvQld1Tm1DLFFBQUEsUVh2Tm5DLHNCV3dOcUMsUUFBQSxRWHhOckMsdUJXeU5zQyxRQUFBLFFYek50QyxtQlcwTmtDLFFBQUEsUUh3aUJuQyxnQlJsd0JDLG9CVzROK0IsUUFBQSxRSDBpQmhDLHFCUnR3QkMscUJXOE5vQyxRQUFBLFFINGlCckMsb0JSMXdCQyxtQldnT21DLFFBQUEsUVhoT25DLG9CV2lPbUMsUUFBQSxRWGpPbkMsb0JXa09tQyxRQUFBLFFYbE9uQyx1QlFveEJELGdCR2hqQmdDLFFBQUEsUUhvakJoQyxpQlJ4eEJDLGlCV3NPZ0MsUUFBQSxRWHRPaEMscUJRNHhCRCxzQkdwakJzQyxRQUFBLFFYeE9yQyxxQld5T29DLFFBQUEsUVh6T3BDLHNCVzBPcUMsUUFBQSxRSDRqQnRDLGdCUnR5QkMsaUJXNE8rQixRQUFBLFFYNU8vQixtQlc2T2tDLFFBQUEsUVg3T2xDLG9CVzhPbUMsUUFBQSxRSGtrQnBDLHFCUmh6QkMsaUJXZ1BvQyxRQUFBLFFYaFBwQyx1QldpUHNDLFFBQUEsUVhqUHRDLG9CV2tQbUMsUUFBQSxRWGxQbkMsMEJXbVB5QyxRQUFBLFFYblB6Qyx3QldvUHVDLFFBQUEsUVhwUHZDLG1CV3FQa0MsUUFBQSxRWHJQbEMsdUJXc1BzQyxRQUFBLFFYdFB0QyxvQld1UG1DLFFBQUEsUVh2UG5DLGtCV3dQaUMsUUFBQSxRWHhQakMsa0JXeVBpQyxRQUFBLFFYelBqQyxtQlcwUGtDLFFBQUEsUVgxUGxDLHVCVzJQc0MsUUFBQSxRWDNQdEMsc0JXNFBxQyxRQUFBLFFYNVByQyxzQlc2UHFDLFFBQUEsUVg3UHJDLHFCVzhQb0MsUUFBQSxRWDlQcEMsa0JXK1BpQyxRQUFBLFFYL1BqQyx1QldnUXNDLFFBQUEsUVhoUXRDLGdCV2lRK0IsUUFBQSxRWGpRL0Isb0JXa1FtQyxRQUFBLFFYbFFuQyx1QldtUXNDLFFBQUEsUVhuUXRDLDZCV29RNEMsUUFBQSxRWHBRNUMsOEJXcVE2QyxRQUFBLFFYclE3QywyQldzUTBDLFFBQUEsUVh0UTFDLDZCV3VRNEMsUUFBQSxRWHZRNUMsc0JXd1FxQyxRQUFBLFFYeFFyQyx1Qld5UXNDLFFBQUEsUVh6UXRDLG9CVzBRbUMsUUFBQSxRWDFRbkMsc0JXMlFxQyxRQUFBLFFYM1FyQyxtQlc0UWtDLFFBQUEsUVg1UWxDLGtCVzZRaUMsUUFBQSxRWDdRakMsa0JXOFFpQyxRQUFBLFFYOVFqQyx3QlE4NEJELGtCRzluQmtDLFFBQUEsUVhoUmpDLG9CV2lSbUMsUUFBQSxRWGpSbkMsc0JXa1JxQyxRQUFBLFFYbFJyQyx1QldtUnNDLFFBQUEsUVhuUnRDLG1CV29Sa0MsUUFBQSxRWHBSbEMsa0JXcVJpQyxRQUFBLFFYclJqQyxzQlFpNkJELGlCRzFvQmlDLFFBQUEsUVh2UmhDLHNCV3dScUMsUUFBQSxRWHhSckMsb0JXeVJtQyxRQUFBLFFYelJuQyx5QlcwUndDLFFBQUEsUVgxUnhDLG1CVzJSa0MsUUFBQSxRWDNSbEMsbUJXNFJrQyxRQUFBLFFYNVJsQyxpQlc2UmdDLFFBQUEsUVg3UmhDLG1CVzhSa0MsUUFBQSxRWDlSbEMsc0JXK1JxQyxRQUFBLFFYL1JyQyxrQldnU2lDLFFBQUEsUVhoU2pDLDBCV2lTeUMsUUFBQSxRWGpTekMsb0JXa1NtQyxRQUFBLFFYbFNuQyxnQldtUytCLFFBQUEsUVhuUy9CLDBCUXk4QkQscUJHcHFCcUMsUUFBQSxRWHJTcEMsMkJRNjhCRCwwQkFDQSx1Qkd0cUJ1QyxRQUFBLFFYeFN0QywwQld5U3lDLFFBQUEsUVh6U3pDLGdCVzBTK0IsUUFBQSxRWDFTL0IscUJXMlNvQyxRQUFBLFFIZ3JCckMsd0JSMzlCQyxrQlc2U3VDLFFBQUEsUVg3U3ZDLG9CVzhTbUMsUUFBQSxRWDlTbkMsZ0JXK1MrQixRQUFBLFFYL1MvQix1QldnVHNDLFFBQUEsUVhoVHRDLHVCV2lUc0MsUUFBQSxRWGpUdEMscUJXa1RvQyxRQUFBLFFYbFRwQyxrQldtVGlDLFFBQUEsUVhuVGpDLHdCV29UdUMsUUFBQSxRWHBUdkMsc0JXcVRxQyxRQUFBLFFYclRyQyw0QldzVDJDLFFBQUEsUVh0VDNDLGtCV3VUaUMsUUFBQSxRWHZUakMsc0JXd1RxQyxRQUFBLFFYeFRyQyw2Qld5VDRDLFFBQUEsUVh6VDVDLGtCVzBUaUMsUUFBQSxRWDFUakMsa0JXMlRpQyxRQUFBLFFYM1RqQywrQlc0VDhDLFFBQUEsUVg1VDlDLGdDVzZUK0MsUUFBQSxRWDdUL0MsNkJXOFQ0QyxRQUFBLFFYOVQ1QywrQlcrVDhDLFFBQUEsUVgvVDlDLGlCV2dVZ0MsUUFBQSxRWGhVaEMsZ0JXaVUrQixRQUFBLFFYalUvQixrQldrVWlDLFFBQUEsUVhsVWpDLHNCV21VcUMsUUFBQSxRWG5VckMsb0JXb1VtQyxRQUFBLFFYcFVuQyxzQldxVXFDLFFBQUEsUVhyVXJDLHNCV3NVcUMsUUFBQSxRWHRVckMsc0JXdVVxQyxRQUFBLFFYdlVyQyx1Qld3VXNDLFFBQUEsUVh4VXRDLGtCV3lVaUMsUUFBQSxRWHpVakMsd0JXMFV1QyxRQUFBLFFYMVV2QywwQlcyVXlDLFFBQUEsUVgzVXpDLG9CVzRVbUMsUUFBQSxRWDVVbkMsc0JXNlVxQyxRQUFBLFFYN1VyQyx3Qlc4VXVDLFFBQUEsUVg5VXZDLHlCVytVd0MsUUFBQSxRWC9VeEMsZ0NXZ1YrQyxRQUFBLFFYaFYvQyx3QldpVnVDLFFBQUEsUVhqVnZDLG1CV2tWa0MsUUFBQSxRSDR2Qm5DLCtCUjlrQ0MsdUJXb1Y4QyxRQUFBLFFIOHZCL0MsNkJSbGxDQyxxQldzVjRDLFFBQUEsUUhnd0I3QyxnQ1J0bENDLHdCV3dWK0MsUUFBQSxRSGt3QmhELGVSMWxDQyxnQlcwVjhCLFFBQUEsUVgxVjlCLGVXMlY4QixRQUFBLFFYM1Y5QixrQlFpbUNELGVHcHdCK0IsUUFBQSxRSHd3Qi9CLGVScm1DQyxpQlcrVjhCLFFBQUEsUVgvVjlCLGVRMm1DRCxlQUZBLGVBQ0EsZUd2d0IrQixRQUFBLFFINHdCL0Isa0JBQ0EsZVJobkNDLGlCV3NXOEIsUUFBQSxRSDh3Qi9CLGVScG5DQyxlV3dXOEIsUUFBQSxRWHhXOUIsbUJRd25DRCxlRzl3QitCLFFBQUEsUVgxVzlCLGdCVzJXK0IsUUFBQSxRWDNXL0IscUJXNFdvQyxRQUFBLFFYNVdwQywwQlc2V3lDLFFBQUEsUVg3V3pDLDJCVzhXMEMsUUFBQSxRWDlXMUMsMkJXK1cwQyxRQUFBLFFYL1cxQyw0QldnWDJDLFFBQUEsUVhoWDNDLDRCV2lYMkMsUUFBQSxRWGpYM0MsNkJXa1g0QyxRQUFBLFFYbFg1QyxxQldtWG9DLFFBQUEsUVhuWHBDLHVCV29Yc0MsUUFBQSxRWHBYdEMsMEJXcVh5QyxRQUFBLFFYclh6QyxtQldzWGtDLFFBQUEsUVh0WGxDLGdCV3VYK0IsUUFBQSxRWHZYL0IsdUJXd1hzQyxRQUFBLFFYeFh0Qyx3Qld5WHVDLFFBQUEsUVh6WHZDLG1CVzBYa0MsUUFBQSxRWDFYbEMsMEJXMlh5QyxRQUFBLFFYM1h6QyxxQlc0WG9DLFFBQUEsUVg1WHBDLGtCVzZYaUMsUUFBQSxRWDdYakMsZVc4WDhCLFFBQUEsUVg5WDlCLHFCVytYb0MsUUFBQSxRWC9YcEMsNEJXZ1kyQyxRQUFBLFFYaFkzQyxrQldpWWlDLFFBQUEsUVhqWWpDLHlCV2tZd0MsUUFBQSxRWGxZeEMsMkJXbVkwQyxRQUFBLFFYblkxQyx5QldvWXdDLFFBQUEsUVhwWXhDLDJCV3FZMEMsUUFBQSxRWHJZMUMsNEJXc1kyQyxRQUFBLFFYdFkzQyxpQld1WWdDLFFBQUEsUVh2WWhDLG1CV3dZa0MsUUFBQSxRWHhZbEMsbUJXeVlrQyxRQUFBLFFYellsQyxpQlcwWWdDLFFBQUEsUVgxWWhDLG9CVzJZbUMsUUFBQSxRWDNZbkMsaUJXNFlnQyxRQUFBLFFYNVloQyxzQlc2WXFDLFFBQUEsUVg3WXJDLGtCVzhZaUMsUUFBQSxRWDlZakMsa0JXK1lpQyxRQUFBLFFYL1lqQyxnQldnWitCLFFBQUEsUVhoWi9CLGtCUTh1Q0Qsb0JHNTFCb0MsUUFBQSxRWGxabkMsaUJXbVpnQyxRQUFBLFFYblpoQyxrQldvWmlDLFFBQUEsUVhwWmpDLG1CV3Faa0MsUUFBQSxRWHJabEMsZVdzWjhCLFFBQUEsUVh0WjlCLGNXdVo2QixRQUFBLFFYdlo3QixpQld3WmdDLFFBQUEsUVh4WmhDLGtCV3laaUMsUUFBQSxRWHpaakMscUJXMFpvQyxRQUFBLFFYMVpwQywwQlcyWnlDLFFBQUEsUVgzWnpDLGdDVzRaK0MsUUFBQSxRWDVaL0MsK0JXNlo4QyxRQUFBLFFIczNCL0MsK0JSbnhDQyx1QlcrWjhDLFFBQUEsUVgvWjlDLHdCV2dhdUMsUUFBQSxRWGhhdkMsc0JXaWFxQyxRQUFBLFFYamFyQyx3QldrYXVDLFFBQUEsUUg4M0J4QyxlUmh5Q0Msd0JXb2E4QixRQUFBLFFYcGE5Qix5QldxYXdDLFFBQUEsUVhyYXhDLHlCV3Nhd0MsUUFBQSxRWHRheEMsaUJXdWFnQyxRQUFBLFFYdmFoQywyQld3YTBDLFFBQUEsUVh4YTFDLHFCV3lhb0MsUUFBQSxRWHphcEMsa0JXMGFpQyxRQUFBLFFINDRCbEMsZ0JSdHpDQyx1QlF1ekNELHNCRzE0QnNDLFFBQUEsUUg4NEJ0QywwQlIzekNDLHdCVytheUMsUUFBQSxRWC9hekMsaUJXZ2JnQyxRQUFBLFFYaGJoQyxrQldpYmlDLFFBQUEsUVhqYmpDLGtCV2tiaUMsUUFBQSxRWGxiakMseUJXbWJ3QyxRQUFBLFFYbmJ4Qyw4QldvYjZDLFFBQUEsUVhwYjdDLHVCV3Fic0MsUUFBQSxRWHJidEMscUJXc2JvQyxRQUFBLFFYdGJwQyxnQld1YitCLFFBQUEsUVh2Yi9CLHlCV3did0MsUUFBQSxRWHhieEMsMEJXeWJ5QyxRQUFBLFFYemJ6QyxrQlcwYmlDLFFBQUEsUVgxYmpDLGtCVzJiaUMsUUFBQSxRWDNiakMsb0JXNGJtQyxRQUFBLFFYNWJuQyxlVzZiOEIsUUFBQSxRWDdiOUIsb0JXOGJtQyxRQUFBLFFYOWJuQyxpQlcrYmdDLFFBQUEsUVgvYmhDLGVXZ2M4QixRQUFBLFFYaGM5QixpQldpY2dDLFFBQUEsUVhqY2hDLGdCV2tjK0IsUUFBQSxRWGxjL0IsaUJXbWNnQyxRQUFBLFFYbmNoQyxtQldvY2tDLFFBQUEsUVhwY2xDLDBCV3FjeUMsUUFBQSxRWHJjekMsaUJXc2NnQyxRQUFBLFFYdGNoQyx3Qld1Y3VDLFFBQUEsUVh2Y3ZDLG1CV3dja0MsUUFBQSxRWHhjbEMsc0JRMDRDRCxlR2g4QitCLFFBQUEsUVgxYzlCLGVRODRDRCxnQkdsOEJnQyxRQUFBLFFYNWMvQixnQlc2YytCLFFBQUEsUVg3Yy9CLG1CVzhja0MsUUFBQSxRWDljbEMsc0JXK2NxQyxRQUFBLFFYL2NyQyxzQldnZHFDLFFBQUEsUVhoZHJDLG9CV2lkbUMsUUFBQSxRWGpkbkMsc0JXa2RxQyxRQUFBLFFYbGRyQyx1QldtZHNDLFFBQUEsUVhuZHRDLHdCV29kdUMsUUFBQSxRWHBkdkMsNkJXcWQ0QyxRQUFBLFFIeTlCN0Msd0JSOTZDQyx3QlE2NkNELDBCR3I5QndDLFFBQUEsUUgwOUJ4QywwQlJsN0NDLHNCVzBkeUMsUUFBQSxRSDQ5QjFDLHdCUnQ3Q0Msd0JXNGR1QyxRQUFBLFFYNWR2Qyx3QlEwN0NELHdCRzU5QndDLFFBQUEsUVg5ZHZDLHVCVytkc0MsUUFBQSxRWC9kdEMsZ0JXZ2UrQixRQUFBLFFYaGUvQixtQldpZWtDLFFBQUEsUVhqZWxDLG9CV2tlbUMsUUFBQSxRWGxlbkMscUJRMDhDRCxxQkFHQSxxQkFGQSxzQkFDQSxtQkdyK0JxQyxRQUFBLFFYdmVwQywwQld3ZXlDLFFBQUEsUVh4ZXpDLGNRcTlDRCxpQkFEQSxzQkd6K0JpQyxRQUFBLFFIOCtCakMsa0JSejlDQyxjVzZlaUMsUUFBQSxRWDdlakMsc0JXOGVxQyxRQUFBLFFYOWVyQyxlVytlOEIsUUFBQSxRSHEvQi9CLHVCUnArQ0MsK0JRbStDRCxxQkdqL0J1QyxRQUFBLFFYbGZ0Qyx5QldtZndDLFFBQUEsUVhuZnhDLGNXb2Y2QixRQUFBLFFYcGY3QixrQlE4K0NELGtCR3gvQmtDLFFBQUEsUUg0L0JsQyx1QlJsL0NDLGdCV3dmc0MsUUFBQSxRSDgvQnZDLHlCUnQvQ0Msa0JXMGZ3QyxRQUFBLFFYMWZ4QyxtQlcyZmtDLFFBQUEsUVgzZmxDLHVCVzRmc0MsUUFBQSxRWDVmdEMsa0JXNmZpQyxRQUFBLFFYN2ZqQyxxQlc4Zm9DLFFBQUEsUVg5ZnBDLG1CVytma0MsUUFBQSxRWC9mbEMscUJXZ2dCb0MsUUFBQSxRWGhnQnBDLDRCV2lnQjJDLFFBQUEsUVhqZ0IzQyxnQldrZ0IrQixRQUFBLFFIZ2hDaEMsb0JSbGhEQyx5QldvZ0JtQyxRQUFBLFFYcGdCbkMsZVdxZ0I4QixRQUFBLFFYcmdCOUIsc0JXc2dCcUMsUUFBQSxRWHRnQnJDLGdCV3VnQitCLFFBQUEsUVh2Z0IvQixzQld3Z0JxQyxRQUFBLFFYeGdCckMsa0JXeWdCaUMsUUFBQSxRWHpnQmpDLGdCVzBnQitCLFFBQUEsUVgxZ0IvQix1QlcyZ0JzQyxRQUFBLFFYM2dCdEMsZ0JXNGdCK0IsUUFBQSxRWDVnQi9CLHNCVzZnQnFDLFFBQUEsUVg3Z0JyQyxrQlc4Z0JpQyxRQUFBLFFYOWdCakMseUJXK2dCd0MsUUFBQSxRWC9nQnhDLG1CV2doQmtDLFFBQUEsUVhoaEJsQyx5QldpaEJ3QyxRQUFBLFFYamhCeEMsdUJXa2hCc0MsUUFBQSxRWGxoQnRDLG1CV21oQmtDLFFBQUEsUVhuaEJsQyxxQldvaEJvQyxRQUFBLFFYcGhCcEMscUJXcWhCb0MsUUFBQSxRWHJoQnBDLHNCV3NoQnFDLFFBQUEsUVh0aEJyQyx3Qld1aEJ1QyxRQUFBLFFYdmhCdkMsaUJXd2hCZ0MsUUFBQSxRWHhoQmhDLHFCV3loQm9DLFFBQUEsUVh6aEJwQyxjVzBoQjZCLFFBQUEsUVgxaEI3QixzQlcyaEJxQyxRQUFBLFFYM2hCckMsdUJXNGhCc0MsUUFBQSxRWDVoQnRDLHlCVzZoQndDLFFBQUEsUVg3aEJ4QyxzQlc4aEJxQyxRQUFBLFFYOWhCckMscUJXK2hCb0MsUUFBQSxRWC9oQnBDLHNCV2dpQnFDLFFBQUEsUVhoaUJyQyxrQldpaUJpQyxRQUFBLFFYamlCakMseUJXa2lCd0MsUUFBQSxRWGxpQnhDLHNCV21pQnFDLFFBQUEsUVhuaUJyQyxxQldvaUJvQyxRQUFBLFFYcGlCcEMsbUJXcWlCa0MsUUFBQSxRWHJpQmxDLGVXc2lCOEIsUUFBQSxRWHRpQjlCLG1CV3VpQmtDLFFBQUEsUVh2aUJsQyxxQld3aUJvQyxRQUFBLFFYeGlCcEMsY1d5aUI2QixRQUFBLFFINmxDOUIsZVJ0b0RDLGtCUXFvREQsa0JHemxDK0IsUUFBQSxRWDVpQjlCLG9CVzZpQm1DLFFBQUEsUVg3aUJuQyxzQlc4aUJxQyxRQUFBLFFYOWlCckMsMEJXK2lCeUMsUUFBQSxRWC9pQnpDLG9CV2dqQm1DLFFBQUEsUVhoakJuQyxvQldpakJtQyxRQUFBLFFYampCbkMsbUJXa2pCa0MsUUFBQSxRWGxqQmxDLGtCV21qQmlDLFFBQUEsUVhuakJqQyx3QldvakJ1QyxRQUFBLFFYcGpCdkMsdUJXcWpCc0MsUUFBQSxRWHJqQnRDLG9CV3NqQm1DLFFBQUEsUVh0akJuQyxxQld1akJvQyxRQUFBLFFYdmpCcEMsMkJXd2pCMEMsUUFBQSxRWHhqQjFDLG1CV3lqQmtDLFFBQUEsUVh6akJsQyxnQlcwakIrQixRQUFBLFFYMWpCL0IsdUJXMmpCc0MsUUFBQSxRWDNqQnRDLHNCVzRqQnFDLFFBQUEsUVg1akJyQyx1Qlc2akJzQyxRQUFBLFFYN2pCdEMscUJXOGpCb0MsUUFBQSxRWDlqQnBDLGlCVytqQmdDLFFBQUEsUVgvakJoQyxnQldna0IrQixRQUFBLFFYaGtCL0IsbUJXaWtCa0MsUUFBQSxRWGprQmxDLG9CUXlzREQsdUJHdG9DdUMsUUFBQSxRWG5rQnRDLDJCV29rQjBDLFFBQUEsUVhwa0IxQyx3Qldxa0J1QyxRQUFBLFFYcmtCdkMsdUJXc2tCc0MsUUFBQSxRWHRrQnRDLHNCV3VrQnFDLFFBQUEsUVh2a0JyQyx1Qld3a0JzQyxRQUFBLFFYeGtCdEMseUJXeWtCd0MsUUFBQSxRWHprQnhDLHlCVzBrQndDLFFBQUEsUVgxa0J4QyxrQlcya0JpQyxRQUFBLFFYM2tCakMsc0JXNGtCcUMsUUFBQSxRWDVrQnJDLDZCVzZrQjRDLFFBQUEsUVg3a0I1Qyx1Qlc4a0JzQyxRQUFBLFFYOWtCdEMsb0JXK2tCbUMsUUFBQSxRWC9rQm5DLGtCV2dsQmlDLFFBQUEsUVhobEJqQyxxQldpbEJvQyxRQUFBLFFYamxCcEMsc0JXa2xCcUMsUUFBQSxRSHdxQ3RDLGVSMXZEQyxpQldvbEI4QixRQUFBLFFYcGxCOUIsbUJXcWxCa0MsUUFBQSxRWHJsQmxDLGlCV3NsQmdDLFFBQUEsUVh0bEJoQyxrQld1bEJpQyxRQUFBLFFYdmxCakMsa0JXd2xCaUMsUUFBQSxRSGtyQ2xDLHdCUjF3REMsY1cwbEJ1QyxRQUFBLFFYMWxCdkMseUJXMmxCd0MsUUFBQSxRWDNsQnhDLG9CVzRsQm1DLFFBQUEsUVg1bEJuQyx3Qlc2bEJ1QyxRQUFBLFFYN2xCdkMscUJRd3hERCx3QkFEQSxtQkd2ckN3QyxRQUFBLFFYaG1CdkMscUJRNHhERCxrQ0cxckNrRCxRQUFBLFFYbG1CakQscUJRZ3lERCx3Qkc1ckN3QyxRQUFBLFFYcG1CdkMscUJRb3lERCwyQkc5ckMyQyxRQUFBLFFYdG1CMUMscUJRd3lERCx5Qkdoc0N5QyxRQUFBLFFYeG1CeEMseUJXeW1Cd0MsUUFBQSxRWHptQnhDLG9CVzBtQm1DLFFBQUEsUVgxbUJuQyx3QlcybUJ1QyxRQUFBLFFYM21CdkMsMEJXNG1CeUMsUUFBQSxRWDVtQnpDLHVCVzZtQnNDLFFBQUEsUVg3bUJ0Qyx5Qlc4bUJ3QyxRQUFBLFFYOW1CeEMsa0JXK21CaUMsUUFBQSxRWC9tQmpDLDBCV2duQnlDLFFBQUEsUVhobkJ6QyxpQldpbkJnQyxRQUFBLFFYam5CaEMseUJXa25Cd0MsUUFBQSxRWGxuQnhDLHVCV21uQnNDLFFBQUEsUVhubkJ0Qyx1QlE2MERELDJCR3h0QzJDLFFBQUEsUVhybkIxQyx1QlFpMURELDBCRzF0QzBDLFFBQUEsUVh2bkJ6Qyx1QlFxMURELHlCRzV0Q3lDLFFBQUEsUVh6bkJ4QyxxQlcwbkJvQyxRQUFBLFFYMW5CcEMsdUJRNDFERCx1QkdodUN1QyxRQUFBLFFIb3VDdkMsd0JSaDJEQyx1Qlc4bkJ1QyxRQUFBLFFYOW5CdkMsMkJXK25CMEMsUUFBQSxRWC9uQjFDLHlCV2dvQndDLFFBQUEsUVhob0J4Qyx3Qldpb0J1QyxRQUFBLFFYam9CdkMsMEJXa29CeUMsUUFBQSxRWGxvQnpDLHdCV21vQnVDLFFBQUEsUVhub0J2QyxxQldvb0JvQyxRQUFBLFFYcG9CcEMsc0JXcW9CcUMsUUFBQSxRWHJvQnJDLDRCV3NvQjJDLFFBQUEsUVh0b0IzQyxjV3VvQjZCLFFBQUEsUVh2b0I3QixxQld3b0JvQyxRQUFBLFFYeG9CcEMsdUJXeW9Cc0MsUUFBQSxRWHpvQnRDLHlCVzBvQndDLFFBQUEsUVgxb0J4QyxnQ1cyb0IrQyxRQUFBLFFYM29CL0Msc0JXNG9CcUMsUUFBQSxRWDVvQnJDLHVCVzZvQnNDLFFBQUEsUVg3b0J0QyxrQlc4b0JpQyxRQUFBLFFYOW9CakMsa0JXK29CaUMsUUFBQSxRWC9vQmpDLG1CV2dwQmtDLFFBQUEsUVhocEJsQyxpQldpcEJnQyxRQUFBLFFYanBCaEMsNkJXa3BCNEMsUUFBQSxRSDh3QzdDLHNCUmg2REMsY1dvcEJxQyxRQUFBLFFYcHBCckMsa0JXcXBCaUMsUUFBQSxRWHJwQmpDLGlCV3NwQmdDLFFBQUEsUVh0cEJoQyxrQld1cEJpQyxRQUFBLFFYdnBCakMsMkJXd3BCMEMsUUFBQSxRWHhwQjFDLDRCV3lwQjJDLFFBQUEsUVh6cEIzQyw0QlcwcEIyQyxRQUFBLFFYMXBCM0MsNEJXMnBCMkMsUUFBQSxRWDNwQjNDLG9CVzRwQm1DLFFBQUEsUVg1cEJuQyxtQlc2cEJrQyxRQUFBLFFYN3BCbEMscUJXOHBCb0MsUUFBQSxRWDlwQnBDLGlCVytwQmdDLFFBQUEsUVgvcEJoQyxlV2dxQjhCLFFBQUEsUVhocUI5QixzQldpcUJxQyxRQUFBLFFYanFCckMsd0JXa3FCdUMsUUFBQSxRWGxxQnZDLGlCV21xQmdDLFFBQUEsUVhucUJoQyxpQldvcUJnQyxRQUFBLFFYcHFCaEMscUJXcXFCb0MsUUFBQSxRWHJxQnBDLHFCV3NxQm9DLFFBQUEsUVh0cUJwQyx3Qld1cUJ1QyxRQUFBLFFYdnFCdkMsZ0JXd3FCK0IsUUFBQSxRWHhxQi9CLDJCV3lxQjBDLFFBQUEsUVh6cUIxQyxvQlcwcUJtQyxRQUFBLFFYMXFCbkMsZ0JXMnFCK0IsUUFBQSxRWDNxQi9CLHdCVzRxQnVDLFFBQUEsUVg1cUJ2QyxlVzZxQjhCLFFBQUEsUVg3cUI5Qix3Qlc4cUJ1QyxRQUFBLFFYOXFCdkMsb0JXK3FCbUMsUUFBQSxRWC9xQm5DLGtCV2dyQmlDLFFBQUEsUVhockJqQyx3QldpckJ1QyxRQUFBLFFYanJCdkMsMEJXa3JCeUMsUUFBQSxRWGxyQnpDLHVCV21yQnNDLFFBQUEsUVhuckJ0Qyx5QldvckJ3QyxRQUFBLFFYcHJCeEMsd0JXcXJCdUMsUUFBQSxRWHJyQnZDLDJCV3NyQjBDLFFBQUEsUVh0ckIxQyxtQld1ckJrQyxRQUFBLFFYdnJCbEMscUJXd3JCb0MsUUFBQSxRWHhyQnBDLHVCV3lyQnNDLFFBQUEsUVh6ckJ0QyxtQlcwckJrQyxRQUFBLFFYMXJCbEMsa0JXMnJCaUMsUUFBQSxRWDNyQmpDLHNCVzRyQnFDLFFBQUEsUVg1ckJyQyxtQlc2ckJrQyxRQUFBLFFYN3JCbEMsa0JXOHJCaUMsUUFBQSxRWDlyQmpDLDRCVytyQjJDLFFBQUEsUVgvckIzQywwQldnc0J5QyxRQUFBLFFYaHNCekMsNkJXaXNCNEMsUUFBQSxRWGpzQjVDLGlCV2tzQmdDLFFBQUEsUVhsc0JoQyw2Qldtc0I0QyxRQUFBLFFYbnNCNUMsZ0NXb3NCK0MsUUFBQSxRWHBzQi9DLG1CV3FzQmtDLFFBQUEsUVhyc0JsQyx1Q1dzc0JzRCxRQUFBLFFIbzNDdkQsK0NSMWpFQyw0Qld3c0I4RCxRQUFBLFFIdTNDL0QsZ0JSL2pFQyxvQlE4akVELDJCR24zQ2dDLFFBQUEsUVgzc0IvQixpQlc0c0JnQyxRQUFBLFFYNXNCaEMsbUJXNnNCa0MsUUFBQSxRSDQzQ25DLHlCUnprRUMsbUJXK3NCd0MsUUFBQSxRWC9zQnhDLHNCV2d0QnFDLFFBQUEsUVhodEJyQyxrQldpdEJpQyxRQUFBLFFYanRCakMseUJXa3RCd0MsUUFBQSxRWGx0QnhDLG9CV210Qm1DLFFBQUEsUVhudEJuQywwQldvdEJ5QyxRQUFBLFFYcHRCekMsMkJXcXRCMEMsUUFBQSxRWHJ0QjFDLHNCV3N0QnFDLFFBQUEsUVh0dEJyQyx1Qld1dEJzQyxRQUFBLFFYdnRCdEMsaUJXd3RCZ0MsUUFBQSxRWHh0QmhDLHFCV3l0Qm9DLFFBQUEsUVh6dEJwQyw4QlEybUVELGdDR2g1Q2dELFFBQUEsUVgzdEIvQyxjUSttRUQsd0JHbDVDd0MsUUFBQSxRWDd0QnZDLHVCVzh0QnNDLFFBQUEsUVg5dEJ0Qyx5QlcrdEJ3QyxRQUFBLFFYL3RCeEMsMkJXZ3VCMEMsUUFBQSxRWGh1QjFDLGtCV2l1QmlDLFFBQUEsUVhqdUJqQyx3QldrdUJ1QyxRQUFBLFFYbHVCdkMsMEJXbXVCeUMsUUFBQSxRSGs2QzFDLHdCUnJvRUMsaUJXcXVCdUMsUUFBQSxRSG82Q3hDLDBCUnpvRUMsbUJXdXVCeUMsUUFBQSxRWHZ1QnpDLHVCV3d1QnNDLFFBQUEsUVh4dUJ0Qyx5Qld5dUJ3QyxRQUFBLFFYenVCeEMsa0JXMHVCaUMsUUFBQSxRWDF1QmpDLG9CVzJ1Qm1DLFFBQUEsUVgzdUJuQywyQlF5cEVELG1CRzU2Q21DLFFBQUEsUVg3dUJsQyw2QlE2cEVELHFCRzk2Q3FDLFFBQUEsUVgvdUJwQyxpQldndkJnQyxRQUFBLFFYaHZCaEMsMEJXaXZCeUMsUUFBQSxRWGp2QnpDLG9CV2t2Qm1DLFFBQUEsUVhsdkJuQyx5QlEycUVELDRCQURBLHVCR3I3QzRDLFFBQUEsUVhydkIzQyx5QlErcUVELHNDR3g3Q3NELFFBQUEsUVh2dkJyRCx5QlFtckVELDRCRzE3QzRDLFFBQUEsUVh6dkIzQyx5QlF1ckVELCtCRzU3QytDLFFBQUEsUVgzdkI5Qyx5QlEyckVELDZCRzk3QzZDLFFBQUEsUVg3dkI1QyxrQlc4dkJpQyxRQUFBLFFIcThDbEMsZ0JSbnNFQyxtQlFrc0VELGVHajhDZ0MsUUFBQSxRWGp3Qi9CLG1CV2t3QmtDLFFBQUEsUVhsd0JsQywyQldtd0IwQyxRQUFBLFFYbndCMUMsMkJXb3dCMEMsUUFBQSxRWHB3QjFDLDBCV3F3QnlDLFFBQUEsUVhyd0J6QywyQlFtdEVELHdCRzU4Q3dDLFFBQUEsUVh2d0J2Qyw2QlF1dEVELDBCRzk4QzBDLFFBQUEsUVh6d0J6QyxvQlcwd0JtQyxRQUFB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VUFBQSxLQUNBLGlCQUFBLFFBQ0EsS0FBQSxFQUNBLElBQUEsRUFDQSxNQUFBLEVBQ0EsU0FBQSxPQUNBLFFBQUEsSUFDQSxzQkFDSSxPQUFBLFFBRUosb0JBQ0ksT0FBQSxRQUlSLGFBQ0ksU0FBQSxTQUNBLElBQUEsSUFDQSxLQUFBLEtBQ0EsTUFBQSxJQUNBLFNBQUEsT0FDQSxNQUFBLFFBQ0EsVUFBQSxLQUdKLGNBQ0ksUUFBQSxJQUFBLElBQUEsSUFBQSxLQUNBLG9CQUFBLElBQUEsSUFDQSxrQkFBQSxVQUdKLGNBQ0ksU0FBQSxTQUNBLElBQUEsSUFDQSxNQUFBLEtBQ0EsTUFBQSxLQUNBLE9BQUEsS0FDQSxXQUFBLG8rQ0FBQSxJQUFBLElBQUEsVUFHSixZQUNJLFNBQUEsU0FDQSxJQUFBLElBQ0EsS0FBQSxLQUdKLGNBQ0ksTUFBQSxLQUNBLFFBQUEsSUFDQSxXQUFBLEtBR0osYUFDSSxTQUFBLFNBQ0EsTUFBQSxLQUdKLGdCQUNJLFNBQUEsU0FDQSxNQUFBLEtBQ0EsT0FBQSxNQUNBLFNBQUEsT0FDQSxPQUFBLElBQUEsTUFBQSxRQUNBLFdBQUEsMkJBR0osT0FDSSxTQUFBLFNBQ0EsSUFBQSxJQUNBLEtBQUEsSUFDQSxPQUFBLE9BQUEsRUFBQSxFQUFBLE9BQ0EsTUFBQSxNQUNBLE9BQUEsTUFDQSxTQUFBLE9BQ0EsS0FBQSxFQUdKLFlBQ0ksU0FBQSxTQUNBLE9BQUEsSUFDQSxLQUFBLElBQ0EsTUFBQSxNQUNBLE9BQUEsTUFHSixjQUNJLFNBQUEsU0FDQSxPQUFBLFFBQ0EsS0FBQSxFQUNBLE1BQUEsTUFDQSxPQUFBLE1BR0osYUFDSSxTQUFBLFNBQ0EsTUFBQSxLQUdKLFdBQ0ksTUFBQSxLQUNBLFFBQUEsSUFDQSxXQUFBLEtBR0osY0FDSSxTQUFBLFNBQ0EsTUFBQSxLQUNBLElBQUEsS0FDQSxPQUFBLElBQUEsTUFBQSxRQUNBLGlCQUFBLFFBQ0EsUUFBQSxJQUNBLFFBQUEsS0FDQSxRQUFBLEtBR0osaUJBQ0ksU0FBQSxTQUNBLFdBQUEsNEJBQUEsSUFBQSxJQUNBLE1BQUEsS0FDQSxVQUFBLEtBQ0EsV0FBQSxPQUNBLFlBQUEsS0FDQSxRQUFBLElBQUEsSUFBQSxJQUFBLElBQ0EsT0FBQSxJQUFBLEVBQUEsSUFBQSxFQUdKLFlBQ0ksV0FBQSIsImZpbGUiOiJuYW5vdWkuY3NzIiwic291cmNlc0NvbnRlbnQiOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLCIuZGlzcGxheUJhciB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB3aWR0aDogMjM2cHg7XHJcbiAgICBoZWlnaHQ6IDE2cHg7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2O1xyXG4gICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICBtYXJnaW46IDAgNXB4IDAgMDtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwO1xyXG59XHJcblxyXG4uZGlzcGxheUJhclRleHQge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAtMnB4O1xyXG4gICAgbGVmdDogNXB4O1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICBjb2xvcjogI2ZmZmZmZjtcclxuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcbn1cclxuXHJcbi5kaXNwbGF5QmFyRmlsbCB7XHJcbiAgICB3aWR0aDogMCU7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICBiYWNrZ3JvdW5kOiAjNDA2MjhhO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG59XHJcblxyXG4uZGlzcGxheUJhckZpbGwuYWxpZ25SaWdodCB7XHJcbiAgICBmbG9hdDogcmlnaHQ7XHJcbn1cclxuXHJcbi5kaXNwbGF5QmFyVGV4dC5nb29kIHtcclxuXHRjb2xvcjogd2hpdGU7XHJcbn1cclxuXHJcbi5kaXNwbGF5QmFyVGV4dC5ub3Rnb29kIHtcclxuXHRjb2xvcjogd2hpdGU7XHJcbn1cclxuXHJcbi5kaXNwbGF5QmFyVGV4dC5hdmVyYWdlIHtcclxuXHRjb2xvcjogd2hpdGU7XHJcbn1cclxuXHJcbi5kaXNwbGF5QmFyVGV4dC5iYWQge1xyXG5cdGNvbG9yOiB3aGl0ZTtcclxufVxyXG5cclxuLmRpc3BsYXlCYXJUZXh0LmhpZ2hsaWdodCB7XHJcblx0Y29sb3I6IGJsYWNrO1xyXG59XHJcblxyXG4uZGlzcGxheUJhckZpbGwuZ29vZCB7XHJcbiAgICBjb2xvcjogI2ZmZmZmZjtcclxuICAgIGJhY2tncm91bmQ6IEBnb29kLWNvbG9yO1xyXG59XHJcblxyXG4uZGlzcGxheUJhckZpbGwubm90Z29vZCB7XHJcbiAgICBjb2xvcjogI2ZmZmZmZjtcclxuICAgIGJhY2tncm91bmQ6ICNmZmI0MDA7XHJcbn1cclxuXHJcbi5kaXNwbGF5QmFyRmlsbC5hdmVyYWdlIHtcclxuICAgIGNvbG9yOiAjZmZmZmZmO1xyXG4gICAgYmFja2dyb3VuZDogQGF2ZXJhZ2UtY29sb3I7XHJcbn1cclxuXHJcbi5kaXNwbGF5QmFyRmlsbC5iYWQge1xyXG4gICAgY29sb3I6ICNmZmZmZmY7XHJcbiAgICBiYWNrZ3JvdW5kOiBAYmFkLWNvbG9yO1xyXG59XHJcblxyXG4uZGlzcGxheUJhckZpbGwuaGlnaGxpZ2h0IHtcclxuICAgIGNvbG9yOiAjZmZmZmZmO1xyXG4gICAgYmFja2dyb3VuZDogQGhpZ2hsaWdodC1jb2xvcjtcclxufVxyXG4iLCIubGluaywgLmxpbmtPbiwgLmxpbmtPZmYsIC5zZWxlY3RlZCwgLmRpc2FibGVkLCAueWVsbG93QnV0dG9uLCAucmVkQnV0dG9uIHtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgbWluLXdpZHRoOiAxNXB4O1xyXG4gICAgaGVpZ2h0OiAxNnB4O1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgY29sb3I6ICNmZmZmZmY7XHJcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICBiYWNrZ3JvdW5kOiAjNDA2MjhhO1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgIzE2MTYxNjtcclxuICAgIHBhZGRpbmc6IDBweCA0cHggNHB4IDRweDtcclxuICAgIG1hcmdpbjogMCAycHggMnB4IDA7XHJcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XHJcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG59XHJcblxyXG4uaGFzSWNvbiB7XHJcbiAgICBwYWRkaW5nOiAwcHggNHB4IDRweCAwcHg7XHJcbn1cclxuXHJcbmEuaG92ZXIsIC56b29tTGluay5ob3ZlciwgLmxpbmtBY3RpdmUuaG92ZXIge1xyXG4gICAgYmFja2dyb3VuZDogIzUwN2FhYztcclxufVxyXG5cclxuQGtleWZyYW1lcyBwZW5kaW5nQW5pbWF0aW9uIHtcclxuICAgIHRvIHtcclxuICAgICAgICBjb2xvcjogI2ZmZmZmZjtcclxuICAgICAgICBiYWNrZ3JvdW5kOiAjNTA3YWFjO1xyXG4gICAgfVxyXG59XHJcblxyXG4ubGlua1BlbmRpbmcsIC5saW5rUGVuZGluZy5ob3ZlciB7XHJcbiAgICBhbmltYXRpb24tbmFtZTogcGVuZGluZ0FuaW1hdGlvbjtcclxuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMC4yNXM7XHJcbn1cclxuXHJcbmEud2hpdGUsIGEud2hpdGU6bGluaywgYS53aGl0ZTp2aXNpdGVkLCBhLndoaXRlOmFjdGl2ZSB7XHJcbiAgICBjb2xvcjogIzQwNjI4YTtcclxuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjMTYxNjE2O1xyXG4gICAgcGFkZGluZzogMXB4IDRweCAxcHggNHB4O1xyXG4gICAgbWFyZ2luOiAwIDJweCAwIDA7XHJcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XHJcbn1cclxuXHJcbmEud2hpdGUuaG92ZXIge1xyXG4gICAgY29sb3I6ICNmZmZmZmY7XHJcbiAgICBiYWNrZ3JvdW5kOiAjNDA2MjhhO1xyXG59XHJcblxyXG4ubGlua09uLCBhLmxpbmtPbjpsaW5rLCBhLmxpbmtPbjp2aXNpdGVkLCBhLmxpbmtPbjphY3RpdmUsIGEubGlua09uLmhvdmVyLCAuc2VsZWN0ZWQsIGEuc2VsZWN0ZWQ6bGluaywgYS5zZWxlY3RlZDp2aXNpdGVkLCBhLnNlbGVjdGVkOmFjdGl2ZSwgYS5zZWxlY3RlZC5ob3ZlciB7XHJcbiAgICBjb2xvcjogI2ZmZmZmZjtcclxuICAgIGJhY2tncm91bmQ6ICMyZjk0M2M7XHJcbn1cclxuXHJcbi5saW5rT2ZmLCBhLmxpbmtPZmY6bGluaywgYS5saW5rT2ZmOnZpc2l0ZWQsIGEubGlua09mZjphY3RpdmUsIGEubGlua09mZi5ob3ZlciwgLmRpc2FibGVkLCBhLmRpc2FibGVkOmxpbmssIGEuZGlzYWJsZWQ6dmlzaXRlZCwgYS5kaXNhYmxlZDphY3RpdmUsIGEuZGlzYWJsZWQuaG92ZXIge1xyXG4gICAgY29sb3I6ICNmZmZmZmY7XHJcbiAgICBiYWNrZ3JvdW5kOiAjOTk5OTk5O1xyXG4gICAgYm9yZGVyLWNvbG9yOiAjNjY2NjY2O1xyXG59XHJcblxyXG5hLmljb24sIC5saW5rT24uaWNvbiwgLmxpbmtPZmYuaWNvbiwgLnNlbGVjdGVkLmljb24sIC5kaXNhYmxlZC5pY29uIHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIHBhZGRpbmc6IDFweCA0cHggMnB4IDIwcHg7XHJcbn1cclxuXHJcbmEuaWNvbiBpbWcsIC5saW5rT24uaWNvbiBpbWcsIC5saW5rT2ZmLmljb24gaW1nLCAuc2VsZWN0ZWQuaWNvbiBpbWcsIC5kaXNhYmxlZC5pY29uIGltZyB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgd2lkdGg6IDE4cHg7XHJcbiAgICBoZWlnaHQ6IDE4cHg7XHJcbn1cclxuXHJcbi5saW5rRGFuZ2VyLCBhLmxpbmtEYW5nZXI6bGluaywgYS5saW5rRGFuZ2VyOnZpc2l0ZWQsIGEubGlua0RhbmdlcjphY3RpdmUge1xyXG4gICAgY29sb3I6ICNmZmZmZmY7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmYwMDAwO1xyXG4gICAgYm9yZGVyLWNvbG9yOiAjYWEwMDAwO1xyXG59XHJcblxyXG4ubGlua0Rhbmdlci5ob3ZlciB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY2NjY2O1xyXG59XHJcblxyXG4uaW5hY3RpdmUsIGEuaW5hY3RpdmU6bGluaywgYS5pbmFjdGl2ZTp2aXNpdGVkLCBhLmluYWN0aXZlOmFjdGl2ZSwgYS5pbmFjdGl2ZS5ob3ZlciB7XHJcbiAgICBjb2xvcjogI2ZmZmZmZjtcclxuICAgIGJhY2tncm91bmQ6ICM5OTk5OTk7XHJcbiAgICBib3JkZXItY29sb3I6ICM2NjY2NjY7XHJcbn0iLCJAaW1wb3J0IFwiX2NvbmZpZ1wiO1xyXG5cclxuLndoaXRlIHtcclxuICAgIGNvbG9yOiB3aGl0ZTtcclxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG59XHJcblxyXG4uZ29vZCB7XHJcbiAgICBjb2xvcjogQGdvb2QtY29sb3I7XHJcbiAgICBmb250LXdlaWdodDogYm9sZDtcclxufVxyXG5cclxuLmF2ZXJhZ2Uge1xyXG4gICAgY29sb3I6IEBhdmVyYWdlLWNvbG9yO1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbn1cclxuXHJcbi5iYWQge1xyXG4gICAgY29sb3I6IEBiYWQtY29sb3I7XHJcbiAgICBmb250LXdlaWdodDogYm9sZDtcclxufVxyXG5cclxuLmlkbGUge1xyXG4gICAgY29sb3I6IEBkYXJrLWNvbG9yO1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbn1cclxuXHJcbi5yZWRCdXR0b24ge1xyXG4gICAgYmFja2dyb3VuZDogI2VhMDAwMDtcclxufVxyXG5cclxuLnllbGxvd0J1dHRvbiB7XHJcbiAgICBiYWNrZ3JvdW5kOiAjY2FjYzAwO1xyXG59XHJcblxyXG4uaGlnaGxpZ2h0IHtcclxuICAgIGNvbG9yOiBAaGlnaGxpZ2h0LWNvbG9yO1xyXG59XHJcblxyXG4uZGFyayB7XHJcbiAgICBjb2xvcjogQGRhcmstY29sb3I7XHJcbn1cclxuXHJcbi8qIERhbWFnZSBjb2xvcnMgZm9yIGNyZXcgbW9uaXRvcmluZyBjb21wdXRlciAqL1xyXG4uYnVybiB7XHJcbiAgICBjb2xvcjogb3JhbmdlO1xyXG59XHJcblxyXG4uYnJ1dGUge1xyXG4gICAgY29sb3I6IHJlZDtcclxufVxyXG5cclxuLnRveGluIHtcclxuICAgIGNvbG9yOiBncmVlbjtcclxufVxyXG5cclxuLnRveGluX2xpZ2h0IHtcclxuICAgIGNvbG9yOiAjM0FERjAwO1xyXG59XHJcblxyXG4ub3h5bG9zcyB7XHJcbiAgICBjb2xvcjogYmx1ZTtcclxufVxyXG5cclxuLm94eWxvc3NfbGlnaHQge1xyXG4gICAgY29sb3I6ICM2Njk4RkY7XHJcbn1cclxuXHJcbi8qIFdpcmUgY29sb3JzIGZvciBudWNsZWFyIGJvbWIgZGVmdXNpb24gKi9cclxuLlJlZCB7XHJcbiAgICBjb2xvcjogI0ZGMDAwMDtcclxufVxyXG5cclxuLkJsdWUge1xyXG4gICAgY29sb3I6ICMwMDAwRkY7XHJcbn1cclxuXHJcbi5HcmVlbiB7XHJcbiAgICBjb2xvcjogIzAwRkYwMDtcclxufVxyXG5cclxuLk1hcmlnb2xkIHtcclxuICAgIGNvbG9yOiAjRkRBNTA1O1xyXG59XHJcblxyXG4uRnVzY2hpYSB7XHJcbiAgICBjb2xvcjogI0ZGMDA4MDtcclxufVxyXG5cclxuLkJsYWNrIHtcclxuICAgIGNvbG9yOiAjMDAwMDAwO1xyXG59XHJcblxyXG4uUGVhcmwge1xyXG4gICAgY29sb3I6ICNDNkNBQ0I7XHJcbn1cclxuXHJcbi8qIFN0YXR1cyBiYXIgY29sb3JzIGZvciBzbGVlcGVyIHRlbXBlcmF0dXJlcyAqL1xyXG4uY29sZDEge1xyXG4gICAgY29sb3I6ICM5NEI4RkY7XHJcbn1cclxuXHJcbi5jb2xkMiB7XHJcbiAgICBjb2xvcjogIzY2OTlGRjtcclxufVxyXG5cclxuLmNvbGQzIHtcclxuICAgIGNvbG9yOiAjMjkzRDY2O1xyXG59XHJcblxyXG4uaG90MSB7XHJcbiAgICBjb2xvcjogI0ZGOTk2NjtcclxufVxyXG5cclxuLmhvdDIge1xyXG4gICAgY29sb3I6ICM5OTNEMDA7XHJcbn1cclxuXHJcbi5ob3QzIHtcclxuICAgIGNvbG9yOiAjRkY2NjAwO1xyXG59IiwiZGl2LmRpc3BsYXkge1xyXG5cdHBhZGRpbmc6IDRweDtcclxuXHRtYXJnaW46IDZweCAwO1xyXG5cclxuXHRiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMzMpO1xyXG5cdGJveC1zaGFkb3c6IGluc2V0IDAgMCA1cHggcmdiYSgwLCAwLCAwLCAwLjUpO1xyXG59XHJcblxyXG5kaXYuZGlzcGxheSBoZWFkZXIge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0d2lkdGg6IDk4LjUlO1xyXG4gICAgcGFkZGluZzogMCA0cHg7XHJcbiAgICBtYXJnaW4tYm90dG9tOiA2cHg7XHJcbiAgICBjb2xvcjogI0ZGRkZGRjtcclxuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjNDA2MjhhO1xyXG59XHJcblxyXG5kaXYuZGlzcGxheSBoZWFkZXIgLmJ1dHRvblJpZ2h0IHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGJvdHRvbTogNnB4O1xyXG4gICAgcmlnaHQ6IDRweDtcclxufVxyXG5cclxuZGl2LmRpc3BsYXkgYXJ0aWNsZSB7XHJcbiAgICBkaXNwbGF5OiB0YWJsZTtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcclxufSIsIi5pdGVtR3JvdXAge1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI2U5YzE4MztcclxuICAgIGJhY2tncm91bmQ6ICMyYzJjMmM7XHJcbiAgICBwYWRkaW5nOiA0cHg7XHJcbiAgICBjbGVhcjogYm90aDtcclxufVxyXG5cclxuXHJcbi5pdGVtIHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgbWFyZ2luOiA0cHggMCAwIDA7XHJcbiAgICBjbGVhcjogYm90aDtcclxuICAgIG92ZXJmbG93OiBhdXRvO1xyXG59XHJcblxyXG4uaXRlbUNvbnRlbnROYXJyb3csIC5pdGVtQ29udGVudCB7XHJcbiAgICBmbG9hdDogbGVmdDtcclxufVxyXG5cclxuLml0ZW1Db250ZW50TmFycm93IHtcclxuICAgIHdpZHRoOiAzMCU7XHJcbn1cclxuXHJcbi5pdGVtQ29udGVudCB7XHJcbiAgICB3aWR0aDogNjklO1xyXG59XHJcblxyXG4uaXRlbUxhYmVsTmFycm93LCAuaXRlbUxhYmVsLCAuaXRlbUxhYmVsV2lkZSwgLml0ZW1MYWJlbFdpZGVyLCAuaXRlbUxhYmVsV2lkZXN0IHtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgY29sb3I6ICNlOWMxODM7XHJcbn1cclxuXHJcbi5pdGVtTGFiZWxOYXJyb3cge1xyXG4gICAgd2lkdGg6IDIwJTtcclxufVxyXG5cclxuLml0ZW1MYWJlbCB7XHJcbiAgICB3aWR0aDogMzAlO1xyXG59XHJcblxyXG4uaXRlbUxhYmVsV2lkZSB7XHJcbiAgICB3aWR0aDogNDUlO1xyXG59XHJcblxyXG4uaXRlbUxhYmVsV2lkZXIge1xyXG4gICAgd2lkdGg6IDY5JTtcclxufVxyXG5cclxuLml0ZW1MYWJlbFdpZGVzdCB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxufVxyXG5cclxuLml0ZW1Db250ZW50V2lkZSB7XHJcbiAgICBmbG9hdDogbGVmdDtcclxuICAgIHdpZHRoOiA3OSU7XHJcbn1cclxuXHJcbi5pdGVtQ29udGVudFNtYWxsIHtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgd2lkdGg6IDMzJTtcclxufVxyXG5cclxuLml0ZW1Db250ZW50TWVkaXVtIHtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgd2lkdGg6IDU1JTtcclxufVxyXG5cclxuLmJsb2NrIHtcclxuICAgIHBhZGRpbmc6IDhweDtcclxuICAgIG1hcmdpbjogMTBweCA0cHggNHB4IDRweDtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICM0MDYyOGE7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjAyMDIwO1xyXG59XHJcblxyXG4uYmxvY2sgaDMge1xyXG4gICAgcGFkZGluZzogMDtcclxufVxyXG5cclxuLmNsZWFyQm90aCB7XHJcbiAgICBjbGVhcjogYm90aDtcclxufVxyXG5cclxuLmNsZWFyTGVmdCB7XHJcbiAgICBjbGVhcjogbGVmdDtcclxufVxyXG5cclxuLmNsZWFyUmlnaHQge1xyXG4gICAgY2xlYXI6IHJpZ2h0O1xyXG59XHJcblxyXG4ubGluZSB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGNsZWFyOiBib3RoO1xyXG59XHJcblxyXG4uZml4ZWRMZWZ0IHtcclxuICAgIHdpZHRoOiAxMTBweDtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG59XHJcblxyXG4uZml4ZWRMZWZ0V2lkZSB7XHJcbiAgICB3aWR0aDogMTY1cHg7XHJcbiAgICBmbG9hdDogbGVmdDtcclxufVxyXG5cclxuLmZpeGVkTGVmdFdpZGVyIHtcclxuICAgIHdpZHRoOiAyMjBweDtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG59XHJcblxyXG4uZml4ZWRMZWZ0V2lkZXN0IHtcclxuICAgIHdpZHRoOiAyNTBweDtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG59XHJcblxyXG4uZmxvYXRSaWdodCB7XHJcbiAgICBmbG9hdDogcmlnaHQ7XHJcbn1cclxuXHJcbi5mbG9hdExlZnQge1xyXG4gICAgZmxvYXQ6IGxlZnQ7XHJcbn1cclxuXHJcbi5oaWRkZW4ge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuXHJcbi5zdGF0dXNEaXNwbGF5IHtcclxuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41KTtcclxuICAgIGNvbG9yOiAjZmZmZmZmO1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgIzQwNjI4YTtcclxuICAgIHBhZGRpbmc6IDRweDtcclxuICAgIG1hcmdpbjogM3B4IDA7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG59XHJcblxyXG4uc3RhdHVzRGlzcGxheVJlY29yZHMge1xyXG4gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjUpO1xyXG4gICAgY29sb3I6ICNmZmZmZmY7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjNDA2MjhhO1xyXG4gICAgcGFkZGluZzogNHB4O1xyXG4gICAgbWFyZ2luOiAzcHggMDtcclxuICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcclxuICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbn1cclxuXHJcbi5zdGF0dXNMYWJlbCB7XHJcbiAgICB3aWR0aDogMTM4cHg7XHJcbiAgICBmbG9hdDogbGVmdDtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICBjb2xvcjogIzk4QjBDMztcclxufVxyXG5cclxuLnN0YXR1c1ZhbHVlIHtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG59XHJcblxyXG4uam9iVmFsdWVzIHtcclxuXHRmbG9hdDogbGVmdDtcclxuXHR3aWR0aDogMzAlO1xyXG59XHJcblxyXG4vLyBDSFJPTUVMRVNTIFNUVUZGXHJcblxyXG4uZmFuY3kge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuaS5mYW5jeSB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG59XHJcblxyXG4udGl0bGVidXR0b24oKSB7XHJcbiAgICBjb2xvcjogI0U5QzE4MztcclxuICAgIC8vIFNpbmNlIHdlJ3JlIG9uIHNvbWUgaGlsYXJpb3VzbHkgb3V0ZGF0ZWQgbGlicmFyaWVzLCB0aGUgYmVsb3cgaXMgYW4gaXNzdWVcclxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Gb3J0QXdlc29tZS9Gb250LUF3ZXNvbWUvaXNzdWVzLzEyNzRcclxuICAgIC8vIFVzaW5nIHRoZSAhaW1wb3J0YW50IGRpcmVjdGl2ZSBpcyBuZWNlc3NhcnkgdG8gb3ZlcnJpZGUgdGhlIEZBIHN0eWxlc1xyXG4gICAgY3Vyc29yOiBwb2ludGVyICFpbXBvcnRhbnQ7IFxyXG4gICAgei1pbmRleDogMTAyOyAvLyBUaGlzIGlzIGZvciB0aGUgY29ybmVycyAtIG1ha2VzIHN1cmUgdGhlIGJ1dHRvbnMgcmVuZGVyIG9uIHRvcFxyXG5cclxuICAgICY6aG92ZXIge1xyXG4gICAgICAgIGNvbG9yOiBsaWdodGVuKCM5OGIwYzMsIDEwJSk7XHJcbiAgICB9XHJcbn1cclxuLm1pbmltaXplIHtcclxuICAgIC50aXRsZWJ1dHRvbjtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogNnB4O1xyXG4gICAgcmlnaHQ6IDQ2cHg7XHJcbn1cclxuLmNsb3NlIHtcclxuICAgIC50aXRsZWJ1dHRvbjtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogNHB4O1xyXG4gICAgcmlnaHQ6IDEycHg7XHJcbn0iLCIuY29ybmVyKCkge1xyXG4gICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgei1pbmRleDogMTAxO1xyXG4gICAgbWluLXdpZHRoOiAzMHB4O1xyXG4gICAgbWluLWhlaWdodDogMzBweDtcclxufVxyXG5cclxuI3VpQ29ybmVyVEwge1xyXG4gICAgLmNvcm5lcjtcclxuICAgIHRvcDogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICBiYWNrZ3JvdW5kOiBkYXRhLXVyaSgndGwucG5nJykgbm8tcmVwZWF0O1xyXG59XHJcblxyXG4vKiBSZXNpemluZyAoU3RvbGVuIGZyb20gR29vbiBDQy1CWS1OQy1TQSkgKi9cclxuQHJlc2l6ZTogNXB4O1xyXG4ucmVzaXplQXJlYSB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB6LWluZGV4OiA5OTk5OTtcclxufVxyXG4ucmVzaXplQXJlYS50b3Age1xyXG4gICAgdG9wOiAwO1xyXG4gICAgbGVmdDogMTBweDtcclxuICAgIHJpZ2h0OiAxMHB4O1xyXG4gICAgaGVpZ2h0OiBAcmVzaXplO1xyXG4gICAgY3Vyc29yOiBuLXJlc2l6ZTtcclxufVxyXG4ucmVzaXplQXJlYS50ciB7XHJcbiAgICB0b3A6IDA7XHJcbiAgICByaWdodDogMDtcclxuICAgIGhlaWdodDogMTBweDtcclxuICAgIHdpZHRoOiAxMHB4O1xyXG4gICAgY3Vyc29yOiBuZS1yZXNpemU7XHJcbn1cclxuLnJlc2l6ZUFyZWEucmlnaHQge1xyXG4gICAgdG9wOiAxMHB4O1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICBib3R0b206IDEwcHg7XHJcbiAgICB3aWR0aDogQHJlc2l6ZTtcclxuICAgIGN1cnNvcjogZS1yZXNpemU7XHJcbn1cclxuLnJlc2l6ZUFyZWEuYnIge1xyXG4gICAgYm90dG9tOiAwO1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICBoZWlnaHQ6IDEwcHg7XHJcbiAgICB3aWR0aDogMTBweDtcclxuICAgIGN1cnNvcjogc2UtcmVzaXplO1xyXG59XHJcbi5yZXNpemVBcmVhLmJvdHRvbSB7XHJcbiAgICBib3R0b206IDA7XHJcbiAgICBsZWZ0OiAxMHB4O1xyXG4gICAgcmlnaHQ6IDEwcHg7XHJcbiAgICBoZWlnaHQ6IEByZXNpemU7XHJcbiAgICBjdXJzb3I6IHMtcmVzaXplO1xyXG59XHJcbi5yZXNpemVBcmVhLmJsIHtcclxuICAgIGJvdHRvbTogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICBoZWlnaHQ6IDEwcHg7XHJcbiAgICB3aWR0aDogMTBweDtcclxuICAgIGN1cnNvcjogc3ctcmVzaXplO1xyXG59XHJcbi5yZXNpemVBcmVhLmxlZnQge1xyXG4gICAgdG9wOiAxMHB4O1xyXG4gICAgbGVmdDogMDtcclxuICAgIGJvdHRvbTogMTBweDtcclxuICAgIHdpZHRoOiBAcmVzaXplO1xyXG4gICAgY3Vyc29yOiB3LXJlc2l6ZTtcclxufVxyXG4ucmVzaXplQXJlYS50bCB7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgaGVpZ2h0OiAxMHB4O1xyXG4gICAgd2lkdGg6IDEwcHg7XHJcbiAgICBjdXJzb3I6IG53LXJlc2l6ZTtcclxufVxyXG4vKiBFbmQgUmVzaXppbmcgKi8iLCIvKiBJY29uc1xyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbi8qIHN0YXRlcyBhbmQgaW1hZ2VzICovXHJcbi51aUxpbmtQZW5kaW5nSWNvbiB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICB3aWR0aDogMTZweDtcclxuICAgIGhlaWdodDogMTZweDtcclxuICAgIG1hcmdpbjogMnB4IDJweCAwIDJweDtcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCh1aUxpbmtQZW5kaW5nSWNvbi5naWYpO1xyXG59XHJcblxyXG4ubGlua1BlbmRpbmcgLmZhIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuXHJcbi5saW5rUGVuZGluZyAudWlMaW5rUGVuZGluZ0ljb24ge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbn1cclxuXHJcbi5tYXBJY29uMTYge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgd2lkdGg6IDE2cHg7XHJcbiAgICBoZWlnaHQ6IDE2cHg7XHJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwodWlJY29uczE2R3JlZW4ucG5nKTtcclxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtOTZweDtcclxuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XHJcbiAgICB6b29tOiAwLjEyNTtcclxuICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xyXG4gICAgLyptYXJnaW4tYm90dG9tOiAtMXB4OyovXHJcbn1cclxuLm1hcEljb24xNi5kZWFkICAgICAgICAgICAgICAgICAgICAgICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybCh1aUljb25zMTZSZWQucG5nKTsgICAgfVxyXG4ubWFwSWNvbjE2LmJhZCAgICAgICAgICAgICAgICAgICAgICAgIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKHVpSWNvbnMxNlJlZC5wbmcpOyAgICB9XHJcbi5tYXBJY29uMTYuYXZlcmFnZSAgICAgICAgICAgICAgICAgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwodWlJY29uczE2T3JhbmdlLnBuZyk7IH1cclxuLm1hcEljb24xNi5nb29kICAgICAgICAgICAgICAgICAgICAgICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybCh1aUljb25zMTZHcmVlbi5wbmcpOyAgfVxyXG4vKiBBaXJBbGFybSAqL1xyXG4ubWFwSWNvbjE2Lmljb24tYWlyYWxhcm0gICAgICAgICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQ0cHg7ICAgICAgICAgICAgICB9IFxyXG4vKiBDb21tYW5kIFBvc2l0aW9ucyAqL1xyXG4ubWFwSWNvbjE2LnJhbmstY2FwdGFpbiAgICAgICAgICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xMTJweDsgICAgICAgICB9IFxyXG4ubWFwSWNvbjE2LnJhbmstaGVhZG9mcGVyc29ubmVsICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC05NnB4OyAgICAgICAgICB9XHJcbi5tYXBJY29uMTYucmFuay1oZWFkb2ZzZWN1cml0eSAgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTEyOHB4OyAgICAgICAgIH1cclxuLm1hcEljb24xNi5yYW5rLWNoaWVmZW5naW5lZXIgICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTEycHg7ICAgICAgICAgfVxyXG4ubWFwSWNvbjE2LnJhbmstcmVzZWFyY2hkaXJlY3RvciAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xMjhweDsgICAgICAgICB9XHJcbi5tYXBJY29uMTYucmFuay1jaGllZm1lZGljYWxvZmZpY2VyICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTI4cHg7ICAgICAgICAgIH1cclxuLyogRW5naW5lZXJpbmcgUG9zaXRpb25zICovXHJcbi5tYXBJY29uMTYucmFuay1zdGF0aW9uZW5naW5lZXIgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTExMnB4OyAgICAgICAgIH0gXHJcbi5tYXBJY29uMTYucmFuay1hdG1vc3BoZXJpY3RlY2huaWNpYW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTExMnB4OyAgICAgICAgIH1cclxuLyogTWVkaWNhbCBQb3NpdGlvbnMgKi9cclxuLm1hcEljb24xNi5yYW5rLW1lZGljYWxkb2N0b3IgICAgICAgICB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTEyOHB4OyAgICAgICAgICAgfSBcclxuLm1hcEljb24xNi5yYW5rLWdlbmV0aWNpc3QgICAgICAgICAgICB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTEyOHB4OyAgICAgICAgICAgfVxyXG4ubWFwSWNvbjE2LnJhbmstcHN5Y2hpYXRyaXN0ICAgICAgICAgIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTI4cHg7ICAgICAgICAgICB9XHJcbi5tYXBJY29uMTYucmFuay1jaGVtaXN0ICAgICAgICAgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTI4cHg7ICAgICAgICAgIH1cclxuLyogU2NpZW5jZSBQb3NpdGlvbnMgKi9cclxuLm1hcEljb24xNi5yYW5rLXNjaWVudGlzdCAgICAgICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTI4cHg7ICAgICAgICAgfSBcclxuLm1hcEljb24xNi5yYW5rLWdlbmV0aWNpc3QgICAgICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTI4cHg7ICAgICAgICAgfVxyXG4ubWFwSWNvbjE2LnJhbmstcm9ib3RpY2lzdCAgICAgICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xMjhweDsgICAgICAgICB9XHJcbi5tYXBJY29uMTYucmFuay14ZW5vYmlvbG9naXN0ICAgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTEyOHB4OyAgICAgICAgIH1cclxuLyogU2VjdXJpdHkgUG9zaXRpb25zICovXHJcbi5tYXBJY29uMTYucmFuay13YXJkZW4gICAgICAgICAgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTEyOHB4OyAgICAgICAgIH1cclxuLm1hcEljb24xNi5yYW5rLWRldGVjdGl2ZSAgICAgICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTI4cHg7ICAgICAgICAgfVxyXG4ubWFwSWNvbjE2LnJhbmstc2VjdXJpdHlvZmZpY2VyICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xMjhweDsgICAgICAgICB9IiwidWwge1xyXG4gICAgcGFkZGluZzogNHB4IDAgMCAxMHB4O1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xyXG59XHJcblxyXG5saSB7XHJcbiAgICBwYWRkaW5nOiAwIDAgMnB4IDA7XHJcbn1cclxuXHJcbnRhYmxlLmZpeGVkIHtcclxuICAgIHRhYmxlLWxheW91dDpmaXhlZDtcclxufVxyXG5cclxudGFibGUuZml4ZWQgdGQge1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxufVxyXG5cclxuLyogVGFibGUgc3R5bGluZyBmb3IgdGhlIHBvd2VyIG1vbml0b3IgKi9cclxudGFibGUucG1vbiB7XHJcbiAgICBib3JkZXI6IDJweCBzb2xpZCBSb3lhbEJsdWU7XHJcbn1cclxuXHJcbnRhYmxlLnBtb24gdGQsIHRhYmxlLnBtb24gdGgge1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCBibGFjaztcclxuICAgIHBhZGRpbmc6IDBweCA1cHggMHB4IDVweDtcclxufVxyXG5cclxuLyogVGFibGUgc3R5bGluZyBmb3IgdGhlIGNyZXcgbWFuaWZlc3QgKi9cclxuLm1hbmlmZXN0LWhlYWRlcihAY29sb3I6ICM2NjYpIHtcclxuXHRiYWNrZ3JvdW5kOiBAY29sb3I7XHJcbiAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIGNvbG9yOiAjZmZmZmZmO1xyXG59XHJcblxyXG50aC5jb21tYW5kIHtcclxuXHQubWFuaWZlc3QtaGVhZGVyKCMzMzMzRkYpO1xyXG59XHJcblxyXG50aC5zZWMge1xyXG5cdC5tYW5pZmVzdC1oZWFkZXIoIzhlMDAwMCk7XHJcbn1cclxuXHJcbnRoLm1lZCB7XHJcblx0Lm1hbmlmZXN0LWhlYWRlcigjMDA2NjAwKTtcclxufVxyXG5cclxudGguZW5nIHtcclxuXHQubWFuaWZlc3QtaGVhZGVyKCNiMjczMDApO1xyXG59XHJcblxyXG50aC5zY2kge1xyXG5cdC5tYW5pZmVzdC1oZWFkZXIoI2E2NWJhNik7XHJcbn1cclxuXHJcbnRoLnNlciB7XHJcblx0Lm1hbmlmZXN0LWhlYWRlcigjNzEwMEFBKTtcclxufVxyXG5cclxudGguc3VwIHtcclxuXHQubWFuaWZlc3QtaGVhZGVyKCM2NjY2MjEpO1xyXG59XHJcblxyXG50aC5jaXYge1xyXG5cdC5tYW5pZmVzdC1oZWFkZXIoI2EzMjgwMCk7XHJcbn1cclxuXHJcbnRoLm1pc2Mge1xyXG5cdC5tYW5pZmVzdC1oZWFkZXI7XHJcbn1cclxuXHJcbnNwYW4ucW0tam9iIHtcclxuXHRjb2xvcjogbWl4KEBoaWdobGlnaHQtY29sb3IsIEBhdmVyYWdlLWNvbG9yLCAzMyUpO1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbn1cclxuXHJcbi8qIFN0cmlwZWQgbGluZXMgZm9yIHRhYmxlcyBhbmQgZGl2cyAqL1xyXG4uc3RyaXBlZCB7XHJcbiAgICAuc3RyaXBlZC1iYXNlKCkge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0MDQwNDA7XHJcbiAgICB9XHJcbiAgICB0cjpudGgtY2hpbGQoZXZlbikge1xyXG4gICAgICAgIC5zdHJpcGVkLWJhc2U7XHJcbiAgICB9XHJcbiAgICAmOm5vdCh0YWJsZSkgPiA6bnRoLWNoaWxkKGV2ZW4pIHtcclxuICAgICAgICAuc3RyaXBlZC1iYXNlO1xyXG4gICAgfVxyXG59IiwiI3VpTm9TY3JpcHQge1xyXG4gICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgdG9wOiA1MCU7XHJcbiAgICBsZWZ0OiA1MCU7XHJcbiAgICBtYXJnaW46IC02MHB4IDAgMCAtMTUwcHg7XHJcbiAgICB3aWR0aDogMjgwcHg7XHJcbiAgICBoZWlnaHQ6IDEyMHB4O1xyXG4gICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcclxuICAgIGJvcmRlcjogMnB4IHNvbGlkICNmZjAwMDA7XHJcbiAgICBjb2xvcjogIzAwMDAwMDtcclxuICAgIGZvbnQtc2l6ZTogMTBweDtcclxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgei1pbmRleDogOTk5OTtcclxuICAgIHBhZGRpbmc6IDBweCAxMHB4O1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG59XHJcblxyXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgIC5ub3RpY2UgfCBDYXV0aW9uIFN0cmlwZXNcclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLm5vdGljZSB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBiYWNrZ3JvdW5kOiB1cmwodWlOb3RpY2VCYWNrZ3JvdW5kLmpwZykgNTAlIDUwJTtcclxuICAgIGNvbG9yOiAjMDAwMDAwO1xyXG4gICAgZm9udC1zaXplOiAxMnB4O1xyXG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICBwYWRkaW5nOiAzcHggNHB4IDNweCA0cHg7XHJcbiAgICBtYXJnaW46IDRweCAwIDRweCAwO1xyXG59XHJcblxyXG4ubm90aWNlUGxhY2Vob2xkZXIge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgZm9udC1zaXplOiAxMnB4O1xyXG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICBwYWRkaW5nOiAzcHggNHB4IDNweCA0cHg7XHJcbiAgICBtYXJnaW46IDRweCAwIDRweCAwO1xyXG59XHJcblxyXG4ubm90aWNlLmljb24ge1xyXG4gICAgcGFkZGluZzogMnB4IDRweCAwIDIwcHg7XHJcbn1cclxuXHJcbi5ub3RpY2UgaW1nIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICB3aWR0aDogMTZweDtcclxuICAgIGhlaWdodDogMTZweDtcclxufVxyXG5cclxuZGl2Lm5vdGljZSB7XHJcbiAgICBjbGVhcjogYm90aDtcclxufVxyXG4vKioqKioqKioqKioqKioqKioqKipcXFxyXG5cXCoqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHJcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICBQREEsIEROQSBNb2RpZmllciBzdHlsZXNcclxuICAgIERvbid0IGZpdCBhbnl3aGVyZSBlbHNlLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuLyogUERBIHN0eWxpbmcgKi9cclxuLndob2xlU2NyZWVuIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGNvbG9yOiAjNTE3MDg3O1xyXG4gICAgZm9udC1zaXplOiAxNnB4O1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbn1cclxuXHJcbi5wZGFsaW5rIHtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgIGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50O1xyXG5cclxuXHQmLmRpc2FibGVkIHtcclxuXHRcdGJhY2tncm91bmQ6IG5vbmU7XHJcblx0XHRib3JkZXI6IG5vbmU7XHJcblx0XHRjb2xvcjogIzk5OTtcclxuXHRcdHRleHQtYWxpZ246IGxlZnQ7XHJcblx0fVxyXG59XHJcblxyXG4ucGRhbm90ZSB7XHJcbiAgICBjb2xvcjogI2NkNjUwMDtcclxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG59XHJcblxyXG4uaXRlbS5tYWlubWVudSB7XHJcblx0cGFkZGluZy1ib3R0b206IDAuNWVtO1xyXG59XHJcblxyXG5kaXYuY2xvY2sge1xyXG5cdGNvbG9yOiB3aGl0ZTtcclxuXHRmb250LXdlaWdodDogYm9sZDtcclxuXHRmbG9hdDogcmlnaHQ7XHJcblx0cGFkZGluZy1yaWdodDogMmVtO1xyXG59XHJcblxyXG4jcGRhRm9vdGVyIHtcclxuXHRwb3NpdGlvbjogZml4ZWQ7XHJcblx0bGVmdDogMDtcclxuXHRib3R0b206IDA7XHJcblx0d2lkdGg6IDEwMCU7XHJcblx0YmFja2dyb3VuZDogQGRhcmstY29sb3I7XHJcbn1cclxuXHJcbi5wZGFGb290ZXJCdXR0b24ge1xyXG5cdHdpZHRoOiAzMyU7XHJcblx0cGFkZGluZzogMC41ZW0gMDtcclxuXHRmb250LXNpemU6IDIwMCU7XHJcblx0Ym9yZGVyOiBub25lO1xyXG5cdGJhY2tncm91bmQ6IG5vbmU7XHJcblx0Y29sb3I6ICNmZmY7XHJcblxyXG5cdCYuaG92ZXIge1xyXG5cdFx0YmFja2dyb3VuZDogIzUwN2FhYztcclxuXHR9XHJcblxyXG5cdCYuZGlzYWJsZWQge1xyXG5cdFx0YmFja2dyb3VuZDogbm9uZSAhaW1wb3J0YW50O1xyXG5cdFx0Y29sb3I6ICM1NTUgIWltcG9ydGFudDtcclxuXHR9XHJcblxyXG5cdC51aUxpbmtQZW5kaW5nSWNvbiB7XHJcblx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0XHR3aWR0aDogMzMlO1xyXG5cdFx0YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcclxuXHRcdGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcclxuXHR9XHJcbn1cclxuXHJcbi8qIEROQSBNb2RpZmllciBzdHlsaW5nICovXHJcbi5kbmFCbG9jayB7XHJcbiAgICBmbG9hdDogbGVmdDtcclxuICAgIHdpZHRoOiA5MHB4O1xyXG4gICAgcGFkZGluZzogMCAwIDVweCAwO1xyXG59XHJcblxyXG4uZG5hQmxvY2tOdW1iZXIge1xyXG4gICAgZm9udC1mYW1pbHk6IEZpeGVkLCBtb25vc3BhY2U7XHJcbiAgICBmbG9hdDogbGVmdDtcclxuICAgIGNvbG9yOiAjZmZmZmZmO1xyXG4gICAgYmFja2dyb3VuZDogIzM2MzYzNjtcclxuICAgIG1pbi13aWR0aDogMjBweDtcclxuICAgIGhlaWdodDogMjBweDtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbn1cclxuXHJcbi5kbmFTdWJCbG9jayB7XHJcbiAgICBmb250LWZhbWlseTogRml4ZWQsIG1vbm9zcGFjZTtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIG1pbi13aWR0aDogMTZweDtcclxuICAgIGhlaWdodDogMjBweDtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxufVxyXG5cclxuLm1hc2sge1xyXG4gICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHRvcDogMDtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgYmFja2dyb3VuZDogdXJsKHVpTWFza0JhY2tncm91bmQucG5nKTtcclxufVxyXG5cclxuLm1hc2tDb250ZW50IHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiAyMDBweDtcclxuICAgIG1hcmdpbjogMjAwcHggMDtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxufVxyXG4vKioqKioqKioqKioqKioqKioqKipcXFxyXG5cXCoqKioqKioqKioqKioqKioqKioqLyIsIkBpbXBvcnQgXCJfY29uZmlnXCI7XHJcblxyXG5ib2R5IHtcclxuICAgIGNvbG9yOiAjZmZmZmZmO1xyXG4gICAgZm9udC1mYW1pbHk6IEBmb250O1xyXG4gICAgZm9udC1zaXplOiBAZm9udHNpemU7XHJcbiAgICBsaW5lLWhlaWdodDogMTcwJTtcclxuICAgIG1hcmdpbjogMDtcclxuICAgIHBhZGRpbmc6IDA7XHJcbn1cclxuXHJcbmhyIHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICM0MDYyOGE7XHJcbiAgICBoZWlnaHQ6IDFweDtcclxuICAgIGJvcmRlcjogbm9uZTtcclxufVxyXG5cclxuaW1nLCBhIGltZyB7XHJcbiAgICBib3JkZXItc3R5bGU6IG5vbmU7XHJcbn1cclxuXHJcbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYge1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMTJweCAwIDZweCAwO1xyXG4gICAgY29sb3I6ICNGRkZGRkY7XHJcbiAgICBjbGVhcjogYm90aDtcclxufVxyXG5cclxuaDEge1xyXG4gICAgZm9udC1zaXplOiAxOHB4O1xyXG59XHJcblxyXG5oMiB7XHJcbiAgICBmb250LXNpemU6IDE2cHg7XHJcbn1cclxuXHJcbmgzIHtcclxuICAgIGZvbnQtc2l6ZTogMTRweDtcclxufVxyXG5cclxuaDQge1xyXG4gICAgZm9udC1zaXplOiAxMnB4O1xyXG59IiwiKltkYXRhLXRvb2x0aXBdIHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcblxyXG4gICY6OmFmdGVyIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgei1pbmRleDogMjtcclxuICAgIHdpZHRoOiAyNTBweDtcclxuICAgIHBhZGRpbmc6IDEwcHg7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XHJcblxyXG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xyXG4gICAgb3BhY2l0eTogMDtcclxuXHJcbiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xyXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcclxuICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS10b29sdGlwKTtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiBhbGwgLjVzO1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTk5OTtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICMzNjM2MzY7XHJcbiAgfVxyXG5cclxuICAmOmhvdmVyOjphZnRlciB7XHJcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xyXG4gICAgb3BhY2l0eTogMTtcclxuICB9XHJcblxyXG4gICYudG9vbHRpcFRvcDo6YWZ0ZXIge1xyXG4gICAgYm90dG9tOiAxMDAlO1xyXG4gICAgbGVmdDogNTAlO1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoOHB4KTtcclxuICB9XHJcbiAgJi50b29sdGlwVG9wOmhvdmVyOjphZnRlciB7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtOHB4KTtcclxuICB9XHJcblxyXG4gICYudG9vbHRpcEJvdHRvbTo6YWZ0ZXIge1xyXG4gICAgdG9wOiAxMDAlO1xyXG4gICAgbGVmdDogNTAlO1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLThweCk7XHJcbiAgfVxyXG4gICYudG9vbHRpcEJvdHRvbTpob3Zlcjo6YWZ0ZXIge1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoOHB4KTtcclxuICB9XHJcblxyXG4gICYudG9vbHRpcExlZnQ6OmFmdGVyIHtcclxuICAgIHRvcDogNTAlO1xyXG4gICAgcmlnaHQ6IDEwMCU7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoOHB4KSB0cmFuc2xhdGVZKC01MCUpO1xyXG4gIH1cclxuICAmLnRvb2x0aXBMZWZ0OmhvdmVyOjphZnRlciB7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLThweCkgdHJhbnNsYXRlWSgtNTAlKTtcclxuICB9XHJcblxyXG4gICYudG9vbHRpcFJpZ2h0OjphZnRlciB7XHJcbiAgICB0b3A6IDUwJTtcclxuICAgIGxlZnQ6IDEwMCU7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLThweCkgdHJhbnNsYXRlWSgtNTAlKTtcclxuICB9XHJcbiAgJi50b29sdGlwUmlnaHQ6aG92ZXI6OmFmdGVyIHtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg4cHgpIHRyYW5zbGF0ZVkoLTUwJSk7XHJcbiAgfVxyXG59IixudWxsLCJAY2hhcnNldCBcInV0Zi04XCI7XHJcblxyXG5AaW1wb3J0IFwiX2JhcnNcIjtcclxuQGltcG9ydCBcIl9saW5rXCI7XHJcbkBpbXBvcnQgXCJfY29sb3JcIjtcclxuQGltcG9ydCBcIl9jb25maWdcIjtcclxuQGltcG9ydCBcIl9kaXNwbGF5XCI7XHJcbkBpbXBvcnQgXCJfZm9ybWF0dGluZ1wiO1xyXG5AaW1wb3J0IFwiX2ZhbmN5XCI7XHJcbkBpbXBvcnQgXCJfaWNvblwiO1xyXG5AaW1wb3J0IFwiX2xpc3RzXCI7XHJcbkBpbXBvcnQgXCJfbWlzY1wiO1xyXG5AaW1wb3J0IFwiX25hdGl2ZVwiO1xyXG5AaW1wb3J0IFwiX3Rvb2x0aXBcIjtcclxuXHJcblxyXG4ubWFpbkJHIHtcclxuICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgIHotaW5kZXg6IC0xO1xyXG4gICAgdG9wOiAzMHB4O1xyXG4gICAgbGVmdDogMHB4O1xyXG4gICAgcmlnaHQ6IDBweDtcclxuICAgIGJvdHRvbTogMHB4O1xyXG4gICAgYmFja2dyb3VuZDogZGF0YS11cmkoJ25hbm90cmFzZW4uc3ZnJykgbm8tcmVwZWF0IGZpeGVkIGNlbnRlci83MCUgNzAlLFxyXG4gICAgICAgIGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sXHJcbiAgICAgICAgQGJhY2tncm91bmQtc3RhcnQgMCUsXHJcbiAgICAgICAgQGJhY2tncm91bmQtZW5kIDEwMCUpIG5vLXJlcGVhdCBmaXhlZCBjZW50ZXIvMTAwJSAxMDAlO1xyXG59XHJcblxyXG4vL25hbm8gc2Nyb2xsYmFyIHN0eWxpbmdcclxuaHRtbCxib2R5IHtcclxuICAgIHNjcm9sbGJhci1mYWNlLWNvbG9yOiM2NjY2NjY7XHJcbiAgICBzY3JvbGxiYXItYXJyb3ctY29sb3I6I0U5QzE4MztcclxuICAgIHNjcm9sbGJhci10cmFjay1jb2xvcjojMzYzNjM2O1xyXG4gICAgc2Nyb2xsYmFyLXNoYWRvdy1jb2xvcjojNTU1NTU1OyAgICBcclxufVxyXG5cclxuI3VpV3JhcHBlciB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcclxuICAgIHVzZXItc2VsZWN0OiBub25lO1xyXG59XHJcblxyXG4jdWlUaXRsZVdyYXBwZXIge1xyXG4gICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgbWluLWhlaWdodDogMzBweDtcclxuICAgIG1pbi13aWR0aDogMTAwJTsgXHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzYzNjM2O1xyXG4gICAgbGVmdDogMHB4O1xyXG4gICAgdG9wOiAwcHg7XHJcbiAgICByaWdodDogMHB4O1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIHotaW5kZXg6IDEwMDtcclxuICAgICYgPiBkaXYge1xyXG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcclxuICAgIH1cclxuICAgICYgPiBpIHtcclxuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbiN1aVRpdGxlVGV4dCB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDZweDtcclxuICAgIGxlZnQ6IDQ0cHg7XHJcbiAgICB3aWR0aDogNjYlO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIGNvbG9yOiAjRTlDMTgzO1xyXG4gICAgZm9udC1zaXplOiAxNnB4O1xyXG59XHJcblxyXG4jdWlUaXRsZS5pY29uIHtcclxuICAgIHBhZGRpbmc6IDZweCA4cHggNnB4IDQycHg7XHJcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAycHggNTAlO1xyXG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcclxufVxyXG5cclxuI3VpVGl0bGVGbHVmZiB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDRweDtcclxuICAgIHJpZ2h0OiAxMnB4O1xyXG4gICAgd2lkdGg6IDQycHg7XHJcbiAgICBoZWlnaHQ6IDI0cHg7XHJcbiAgICBiYWNrZ3JvdW5kOiBkYXRhLXVyaSgnbmFub3RyYXNlbi5zdmcnKSA1MCUgNTAlIG5vLXJlcGVhdDtcclxufVxyXG5cclxuLnN0YXR1c2ljb24ge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiA0cHg7XHJcbiAgICBsZWZ0OiAxMnB4O1xyXG59XHJcblxyXG4jdWlNYXBXcmFwcGVyIHtcclxuICAgIGNsZWFyOiBib3RoO1xyXG4gICAgcGFkZGluZzogOHB4O1xyXG4gICAgbWFyZ2luLXRvcDogMzBweDtcclxufVxyXG5cclxuI3VpTWFwSGVhZGVyIHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIGNsZWFyOiBib3RoO1xyXG59XHJcblxyXG4jdWlNYXBDb250YWluZXIge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IDYwMHB4O1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICM0MDYyOGE7XHJcbiAgICBiYWNrZ3JvdW5kOiB1cmwobmFub21hcEJhY2tncm91bmQucG5nKTtcclxufVxyXG5cclxuI3VpTWFwIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogNTAlO1xyXG4gICAgbGVmdDogNTAlO1xyXG4gICAgbWFyZ2luOiAtNTEycHggMCAwIC01MTJweDtcclxuICAgIHdpZHRoOiAyNTZweDtcclxuICAgIGhlaWdodDogMjU2cHg7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgem9vbTogNDtcclxufVxyXG5cclxuI3VpTWFwSW1hZ2Uge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgYm90dG9tOiAxcHg7XHJcbiAgICBsZWZ0OiAxcHg7XHJcbiAgICB3aWR0aDogMjU2cHg7XHJcbiAgICBoZWlnaHQ6IDI1NnB4O1xyXG59XHJcblxyXG4jdWlNYXBDb250ZW50IHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGJvdHRvbTogLTEzLjVweDtcclxuICAgIGxlZnQ6IDBweDtcclxuICAgIHdpZHRoOiAyNTZweDtcclxuICAgIGhlaWdodDogMjU2cHg7XHJcbn1cclxuXHJcbiN1aU1hcEZvb3RlciB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBjbGVhcjogYm90aDtcclxufVxyXG5cclxuI3VpQ29udGVudCB7XHJcbiAgICBjbGVhcjogYm90aDtcclxuICAgIHBhZGRpbmc6IDhweDtcclxuICAgIG1hcmdpbi10b3A6IDMwcHg7XHJcbn1cclxuXHJcbiN1aU1hcFRvb2x0aXAge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgcmlnaHQ6IDEwcHg7XHJcbiAgICB0b3A6IDEwcHg7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjNDA2MjhhO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzI3MjcyNztcclxuICAgIHBhZGRpbmc6IDhweDtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICB6LWluZGV4OiA5OTk5O1xyXG59XHJcblxyXG4jdWlMb2FkaW5nTm90aWNlIHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIGJhY2tncm91bmQ6IHVybCh1aU5vdGljZUJhY2tncm91bmQuanBnKSA1MCUgNTAlO1xyXG4gICAgY29sb3I6ICMwMDAwMDA7XHJcbiAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XHJcbiAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIHBhZGRpbmc6IDNweCA0cHggM3B4IDRweDtcclxuICAgIG1hcmdpbjogNHB4IDAgNHB4IDA7XHJcbn1cclxuXHJcbi51bmRlclRpdGxlIHtcclxuICAgIG1hcmdpbi10b3A6IDMwcHg7XHJcbn0iXX0= */ +@charset "utf-8";@font-face{font-family:'FontAwesome';src:url(fontawesome-webfont.eot?v=4.7.0);src:url(fontawesome-webfont.eot?#iefix&v=4.7.0) format('embedded-opentype'),url(fontawesome-webfont.woff2?v=4.7.0) format('woff2'),url(fontawesome-webfont.woff?v=4.7.0) format('woff'),url(fontawesome-webfont.ttf?v=4.7.0) format('truetype'),url(fontawesome-webfont.svg?v=4.7.0#fontawesomeregular) format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:0.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul > li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:0.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:0.2em 0.25em 0.15em;border:solid 0.08em #eee;border-radius:0.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:0.3em}.fa.fa-pull-right{margin-left:0.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:0.3em}.fa.pull-right{margin-left:0.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:"\f2a3"}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-address-card:before,.fa-vcard:before{content:"\f2bb"}.fa-address-card-o:before,.fa-vcard-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.displayBar{position:relative;width:236px;height:16px;border:1px solid #666;float:left;margin:0 5px 0 0;overflow:hidden;background:#000}.displayBarText{position:absolute;top:-2px;left:5px;width:100%;height:100%;color:#fff;font-weight:normal}.displayBarFill{width:0%;height:100%;background:#40628a;overflow:hidden;float:left}.displayBarFill.alignRight{float:right}.displayBarText.good{color:#fff}.displayBarText.notgood{color:#fff}.displayBarText.average{color:#fff}.displayBarText.bad{color:#fff}.displayBarText.highlight{color:#000}.displayBarFill.good{color:#fff;background:#4f7529}.displayBarFill.notgood{color:#fff;background:#ffb400}.displayBarFill.average{color:#fff;background:#cd6500}.displayBarFill.bad{color:#fff;background:#e00}.displayBarFill.highlight{color:#fff;background:#8ba5c4}.disabled,.link,.linkDiscourage,.linkEncourage,.linkOff,.linkOn,.redButton,.selected,.yellowButton{float:left;min-width:15px;height:16px;text-align:center;color:#fff;text-decoration:none;background:#40628a;border:1px solid #161616;padding:0 4px 4px 4px;margin:0 2px 2px 0;cursor:default;white-space:nowrap}.hasIcon{padding:0 4px 4px 0}.linkActive.hover,.zoomLink.hover,a.hover{background:#507aac}@keyframes pendingAnimation{to{color:#fff;background:#507aac}}.linkPending,.linkPending.hover{animation-name:pendingAnimation;animation-duration:0.25s}a.white,a.white:active,a.white:link,a.white:visited{color:#40628a;text-decoration:none;background:#fff;border:1px solid #161616;padding:1px 4px 1px 4px;margin:0 2px 0 0;cursor:default}a.white.hover{color:#fff;background:#40628a}.linkOn,.selected,a.linkOn.hover,a.linkOn:active,a.linkOn:link,a.linkOn:visited,a.selected.hover,a.selected:active,a.selected:link,a.selected:visited{color:#fff;background:#2f943c}.disabled,.linkOff,a.disabled.hover,a.disabled:active,a.disabled:link,a.disabled:visited,a.linkOff.hover,a.linkOff:active,a.linkOff:link,a.linkOff:visited{color:#fff;background:#999;border-color:#666}.disabled.icon,.linkOff.icon,.linkOn.icon,.selected.icon,a.icon{position:relative;padding:1px 4px 2px 20px}.disabled.icon img,.linkOff.icon img,.linkOn.icon img,.selected.icon img,a.icon img{position:absolute;top:0;left:0;width:18px;height:18px}.linkDanger,a.linkDanger:active,a.linkDanger:link,a.linkDanger:visited{color:#fff;background-color:red;border-color:#a00}.linkDanger.hover{background-color:#f66}.linkEncourage,a.linkEncourage:active,a.linkEncourage:link,a.linkEncourage:visited{color:#9f3;background-color:#40628a;border-color:#161616}.linkEncourage.hover{background-color:#507aac}.linkDiscourage,a.linkDiscourage:active,a.linkDiscourage:link,a.linkDiscourage:visited{color:#8c8c8c;background-color:#40628a;border-color:#161616}.linkDiscourage.hover{color:red;background-color:#507aac}.inactive,a.inactive.hover,a.inactive:active,a.inactive:link,a.inactive:visited{color:#fff;background:#999;border-color:#666}.white{color:#fff;font-weight:bold}.good{color:#4f7529;font-weight:bold}.average{color:#cd6500;font-weight:bold}.bad{color:#e00;font-weight:bold}.idle{color:#272727;font-weight:bold}.redButton{background:#ea0000}.yellowButton{background:#cacc00}.highlight{color:#8ba5c4}.dark{color:#272727}.burn{color:orange}.brute{color:red}.toxin{color:green}.toxin_light{color:#3adf00}.oxyloss{color:#00f}.oxyloss_light{color:#6698ff}.Red{color:red}.Blue{color:#00f}.Green{color:#0f0}.Marigold{color:#fda505}.Fuschia{color:#ff0080}.Black{color:#000}.Pearl{color:#c6cacb}.cold1{color:#94b8ff}.cold2{color:#69f}.cold3{color:#293d66}.hot1{color:#f96}.hot2{color:#993d00}.hot3{color:#f60}div.display{padding:4px;margin:6px 0;background-color:#000;background-color:rgba(0, 0, 0, 0.33);box-shadow:inset 0 0 5px rgba(0, 0, 0, 0.5)}div.display header{display:block;position:relative;width:98.5%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}div.display header .buttonRight{position:absolute;bottom:6px;right:4px}div.display article{display:table;width:100%;border-collapse:collapse}.itemGroup{border:1px solid #e9c183;background:#2c2c2c;padding:4px;clear:both}.item{width:100%;margin:4px 0 0 0;clear:both;overflow:auto}.itemContent,.itemContentNarrow{float:left}.itemContentNarrow{width:30%}.itemContent{width:69%}.itemLabel,.itemLabelNarrow,.itemLabelWide,.itemLabelWider,.itemLabelWidest{float:left;color:#e9c183}.itemLabelNarrow{width:20%}.itemLabel{width:30%}.itemLabelWide{width:45%}.itemLabelWider{width:69%}.itemLabelWidest{width:100%}.itemContentWide{float:left;width:79%}.itemContentSmall{float:left;width:33%}.itemContentMedium{float:left;width:55%}.block{padding:8px;margin:10px 4px 4px 4px;border:1px solid #40628a;background-color:#202020}.block h3{padding:0}.clearBoth{clear:both}.clearLeft{clear:left}.clearRight{clear:right}.line{width:100%;clear:both}.fixedLeft{width:110px;float:left}.fixedLeftWide{width:165px;float:left}.fixedLeftWider{width:220px;float:left}.fixedLeftWidest{width:250px;float:left}.floatRight{float:right}.floatLeft{float:left}.hidden{display:none}.statusDisplay{background:#000;background:rgba(0, 0, 0, 0.5);color:#fff;border:1px solid #40628a;padding:4px;margin:3px 0;overflow:hidden}.statusDisplayRecords{background:#000;background:rgba(0, 0, 0, 0.5);color:#fff;border:1px solid #40628a;padding:4px;margin:3px 0;overflow-x:hidden;overflow-y:auto}.statusLabel{width:138px;float:left;overflow:hidden;color:#98b0c3}.statusValue{float:left}.jobValues{float:left;width:30%}.fancy{display:none}i.fancy{display:none}.minimize{color:#e9c183;cursor:pointer!important;z-index:102;position:absolute;top:6px;right:46px}.minimize:hover{color:#b8c9d6}.close{color:#e9c183;cursor:pointer!important;z-index:102;position:absolute;top:4px;right:12px}.close:hover{color:#b8c9d6}#uiCornerTL{position:fixed;z-index:101;min-width:30px;min-height:30px;top:0;left:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAIAAAC0Ujn1AAAACXBIWXMAAAsTAAALEwEAmpwYAAAGTGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTExLTIwVDIyOjM4OjI1LTA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOC0xMS0yMFQyMzowMzowMS0wODowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0xMS0yMFQyMzowMzowMS0wODowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpkOWRlMzc1Yi04ZWQwLWI3NDctOTQzZS0zN2UwZGU2NDkyODQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0ZmVhZjJmZC03YWVhLWUyNGQtYTNkZS05ZmI5ZGM0ZTA0YzIiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZTU4OTk5My1mZDU2LTEzNDktYWMyMC03NGZkZmY5NjNjYTgiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmNlNTg5OTkzLWZkNTYtMTM0OS1hYzIwLTc0ZmRmZjk2M2NhOCIgc3RFdnQ6d2hlbj0iMjAxOC0xMS0yMFQyMjozODoyNS0wODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gaW1hZ2UvZ2lmIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZDlkZTM3NWItOGVkMC1iNzQ3LTk0M2UtMzdlMGRlNjQ5Mjg0IiBzdEV2dDp3aGVuPSIyMDE4LTExLTIwVDIzOjAzOjAxLTA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+QnRKRAAAAIhJREFUSIm1zLcRgEAMBMCDokQf9B/SBwQwmOeNzGkL2GnHhgSLrHPSC4Bfny+/vl9y/X6ZdfHS6v/LqasvoW690brzhur+66+Hr7PWvJ5a+Zpr/WurTa+htr7a2vGqat87rt3voI68vTr4Nuv4W68pb6VmvWVNfD81931q+nvVGS+ASUQyXgAHuOgYYwOkhIYAAAAASUVORK5CYII=) no-repeat}.resizeArea{position:absolute;z-index:99999}.resizeArea.top{top:0;left:10px;right:10px;height:5px;cursor:n-resize}.resizeArea.tr{top:0;right:0;height:10px;width:10px;cursor:ne-resize}.resizeArea.right{top:10px;right:0;bottom:10px;width:5px;cursor:e-resize}.resizeArea.br{bottom:0;right:0;height:10px;width:10px;cursor:se-resize}.resizeArea.bottom{bottom:0;left:10px;right:10px;height:5px;cursor:s-resize}.resizeArea.bl{bottom:0;left:0;height:10px;width:10px;cursor:sw-resize}.resizeArea.left{top:10px;left:0;bottom:10px;width:5px;cursor:w-resize}.resizeArea.tl{top:0;left:0;height:10px;width:10px;cursor:nw-resize}.uiLinkPendingIcon{display:none;float:left;width:16px;height:16px;margin:2px 2px 0 2px;background-image:url(uiLinkPendingIcon.gif)}.linkPending .fa{display:none}.linkPending .uiLinkPendingIcon{display:block}.mapIcon16{position:absolute;width:16px;height:16px;background-image:url(uiIcons16Green.png);background-position:-144px -96px;background-repeat:no-repeat;zoom:0.125;margin-left:-1px}.mapIcon16.dead{background-image:url(uiIcons16Red.png)}.mapIcon16.bad{background-image:url(uiIcons16Red.png)}.mapIcon16.average{background-image:url(uiIcons16Orange.png)}.mapIcon16.good{background-image:url(uiIcons16Green.png)}.mapIcon16.icon-airalarm{background-position:0 -144px}.mapIcon16.rank-captain{background-position:-224px -112px}.mapIcon16.rank-headofpersonnel{background-position:-112px -96px}.mapIcon16.rank-headofsecurity{background-position:-112px -128px}.mapIcon16.rank-chiefengineer{background-position:-176px -112px}.mapIcon16.rank-researchdirector{background-position:-128px -128px}.mapIcon16.rank-chiefmedicalofficer{background-position:-32px -128px}.mapIcon16.rank-stationengineer{background-position:-176px -112px}.mapIcon16.rank-atmospherictechnician{background-position:-176px -112px}.mapIcon16.rank-medicaldoctor{background-position:-32px -128px}.mapIcon16.rank-geneticist{background-position:-32px -128px}.mapIcon16.rank-psychiatrist{background-position:-32px -128px}.mapIcon16.rank-chemist{background-position:-32px -128px}.mapIcon16.rank-scientist{background-position:-128px -128px}.mapIcon16.rank-geneticist{background-position:-128px -128px}.mapIcon16.rank-roboticist{background-position:-128px -128px}.mapIcon16.rank-xenobiologist{background-position:-128px -128px}.mapIcon16.rank-warden{background-position:-112px -128px}.mapIcon16.rank-detective{background-position:-112px -128px}.mapIcon16.rank-securityofficer{background-position:-112px -128px}ul{padding:4px 0 0 10px;margin:0;list-style-type:none}li{padding:0 0 2px 0}table.fixed{table-layout:fixed}table.fixed td{overflow:hidden}table.pmon{border:2px solid #4169e1}table.pmon td,table.pmon th{border-bottom:1px dotted #000;padding:0 5px 0 5px}th.command{background:#33f;font-weight:bold;color:#fff}th.sec{background:#8e0000;font-weight:bold;color:#fff}th.med{background:#060;font-weight:bold;color:#fff}th.eng{background:#b27300;font-weight:bold;color:#fff}th.sci{background:#a65ba6;font-weight:bold;color:#fff}th.ser{background:#7100aa;font-weight:bold;color:#fff}th.sup{background:#666621;font-weight:bold;color:#fff}th.civ{background:#a32800;font-weight:bold;color:#fff}th.misc{background:#666;font-weight:bold;color:#fff}span.qm-job{color:#b77a41;font-weight:bold}.striped tr:nth-child(even){background-color:#404040}.striped:not(table) > :nth-child(even){background-color:#404040}#uiNoScript{position:fixed;top:50%;left:50%;margin:-60px 0 0 -150px;width:280px;height:120px;background:#fff;border:2px solid red;color:#000;font-size:10px;font-weight:bold;z-index:9999;padding:0 10px;text-align:center}.notice{position:relative;background:url(uiNoticeBackground.jpg) 50% 50%;color:#000;font-size:12px;font-style:italic;font-weight:bold;padding:3px 4px 3px 4px;margin:4px 0 4px 0}.noticePlaceholder{position:relative;font-size:12px;font-style:italic;font-weight:bold;padding:3px 4px 3px 4px;margin:4px 0 4px 0}.notice.icon{padding:2px 4px 0 20px}.notice img{position:absolute;top:0;left:0;width:16px;height:16px}div.notice{clear:both}.wholeScreen{position:absolute;color:#517087;font-size:16px;font-weight:bold;text-align:center}.pdalink{float:left;white-space:nowrap;cursor:default!important}.pdalink.disabled{background:none;border:none;color:#999;text-align:left}.pdanote{color:#cd6500;font-weight:bold}.item.mainmenu{padding-bottom:0.5em}div.clock{color:#fff;font-weight:bold;float:right;padding-right:2em}#pdaFooter{position:fixed;left:0;bottom:0;width:100%;background:#272727}.pdaFooterButton{width:33%;padding:0.5em 0;font-size:200%;border:none;background:none;color:#fff}.pdaFooterButton.hover{background:#507aac}.pdaFooterButton.disabled{background:none!important;color:#555!important}.pdaFooterButton .uiLinkPendingIcon{position:absolute;width:33%;background-repeat:no-repeat;background-position:center}.dnaBlock{float:left;width:90px;padding:0 0 5px 0}.dnaBlockNumber{font-family:Fixed,monospace;float:left;color:#fff;background:#363636;min-width:20px;height:20px;padding:0;text-align:center}.dnaSubBlock{font-family:Fixed,monospace;float:left;padding:0;min-width:16px;height:20px;text-align:center}.mask{position:fixed;left:0;top:0;width:100%;height:100%;background:url(uiMaskBackground.png)}.maskContent{width:100%;height:200px;margin:200px 0;text-align:center}body{color:#fff;font-family:Verdana,Geneva,sans-serif;font-size:12px;line-height:170%;margin:0;padding:0}hr{background-color:#40628a;height:1px;border:none}a img,img{border-style:none}h1,h2,h3,h4,h5,h6{margin:0;padding:12px 0 6px 0;color:#fff;clear:both}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}*[data-tooltip]{position:relative}*[data-tooltip]::after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";opacity:0;white-space:normal;text-align:left;content:attr(data-tooltip);transition:all 0.5s;border:1px solid #999;background-color:#363636}*[data-tooltip]:hover::after{visibility:visible;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";opacity:1}*[data-tooltip].tooltipTop::after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}*[data-tooltip].tooltipTop:hover::after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}*[data-tooltip].tooltipBottom::after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}*[data-tooltip].tooltipBottom:hover::after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}*[data-tooltip].tooltipLeft::after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}*[data-tooltip].tooltipLeft:hover::after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}*[data-tooltip].tooltipRight::after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}*[data-tooltip].tooltipRight:hover::after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}.mainBG{position:fixed;z-index:-1;top:30px;left:0;right:0;bottom:0;background:url(data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%0D%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.0%22%20viewBox%3D%220%200%20425%20200%22%20opacity%3D%22.25%22%3E%0D%0A%20%20%3Cpath%20d%3D%22m%20178.00399%2C0.03869%20-71.20393%2C0%20a%206.7613422%2C6.0255495%200%200%200%20-6.76134%2C6.02555%20l%200%2C187.87147%20a%206.7613422%2C6.0255495%200%200%200%206.76134%2C6.02554%20l%2053.1072%2C0%20a%206.7613422%2C6.0255495%200%200%200%206.76135%2C-6.02554%20l%200%2C-101.544018%2072.21628%2C104.699398%20a%206.7613422%2C6.0255495%200%200%200%205.76015%2C2.87016%20l%2073.55487%2C0%20a%206.7613422%2C6.0255495%200%200%200%206.76135%2C-6.02554%20l%200%2C-187.87147%20a%206.7613422%2C6.0255495%200%200%200%20-6.76135%2C-6.02555%20l%20-54.71644%2C0%20a%206.7613422%2C6.0255495%200%200%200%20-6.76133%2C6.02555%20l%200%2C102.61935%20L%20183.76413%2C2.90886%20a%206.7613422%2C6.0255495%200%200%200%20-5.76014%2C-2.87017%20z%22%20%2F%3E%0D%0A%20%20%3Cpath%20d%3D%22M%204.8446333%2C22.10875%20A%2013.412039%2C12.501842%200%200%201%2013.477588%2C0.03924%20l%2066.118315%2C0%20a%205.3648158%2C5.000737%200%200%201%205.364823%2C5.00073%20l%200%2C79.87931%20z%22%20%2F%3E%0D%0A%20%20%3Cpath%20d%3D%22m%20420.15535%2C177.89119%20a%2013.412038%2C12.501842%200%200%201%20-8.63295%2C22.06951%20l%20-66.11832%2C0%20a%205.3648152%2C5.000737%200%200%201%20-5.36482%2C-5.00074%20l%200%2C-79.87931%20z%22%20%2F%3E%0D%0A%3C%2Fsvg%3E%0D%0A) no-repeat fixed center/70% 70%,linear-gradient(to bottom, #2a2a2a 0, #202020 100%) no-repeat fixed center/100% 100%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a', endColorstr='#ff202020', GradientType=0)}body,html{scrollbar-face-color:#666;scrollbar-arrow-color:#e9c183;scrollbar-track-color:#363636;scrollbar-shadow-color:#555}#uiWrapper{width:100%;height:100%;-ms-user-select:none;user-select:none}#uiTitleWrapper{position:fixed;min-height:30px;min-width:100%;background-color:#363636;left:0;top:0;right:0;overflow:hidden;z-index:100}#uiTitleWrapper > div{cursor:default}#uiTitleWrapper > i{cursor:default}#uiTitleText{position:absolute;top:6px;left:44px;width:66%;overflow:hidden;color:#e9c183;font-size:16px}#uiTitle.icon{padding:6px 8px 6px 42px;background-position:2px 50%;background-repeat:no-repeat}#uiTitleFluff{position:absolute;top:4px;right:12px;width:42px;height:24px;background:url(data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%0D%0A%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.0%22%20viewBox%3D%220%200%20425%20200%22%20opacity%3D%22.25%22%3E%0D%0A%20%20%3Cpath%20d%3D%22m%20178.00399%2C0.03869%20-71.20393%2C0%20a%206.7613422%2C6.0255495%200%200%200%20-6.76134%2C6.02555%20l%200%2C187.87147%20a%206.7613422%2C6.0255495%200%200%200%206.76134%2C6.02554%20l%2053.1072%2C0%20a%206.7613422%2C6.0255495%200%200%200%206.76135%2C-6.02554%20l%200%2C-101.544018%2072.21628%2C104.699398%20a%206.7613422%2C6.0255495%200%200%200%205.76015%2C2.87016%20l%2073.55487%2C0%20a%206.7613422%2C6.0255495%200%200%200%206.76135%2C-6.02554%20l%200%2C-187.87147%20a%206.7613422%2C6.0255495%200%200%200%20-6.76135%2C-6.02555%20l%20-54.71644%2C0%20a%206.7613422%2C6.0255495%200%200%200%20-6.76133%2C6.02555%20l%200%2C102.61935%20L%20183.76413%2C2.90886%20a%206.7613422%2C6.0255495%200%200%200%20-5.76014%2C-2.87017%20z%22%20%2F%3E%0D%0A%20%20%3Cpath%20d%3D%22M%204.8446333%2C22.10875%20A%2013.412039%2C12.501842%200%200%201%2013.477588%2C0.03924%20l%2066.118315%2C0%20a%205.3648158%2C5.000737%200%200%201%205.364823%2C5.00073%20l%200%2C79.87931%20z%22%20%2F%3E%0D%0A%20%20%3Cpath%20d%3D%22m%20420.15535%2C177.89119%20a%2013.412038%2C12.501842%200%200%201%20-8.63295%2C22.06951%20l%20-66.11832%2C0%20a%205.3648152%2C5.000737%200%200%201%20-5.36482%2C-5.00074%20l%200%2C-79.87931%20z%22%20%2F%3E%0D%0A%3C%2Fsvg%3E%0D%0A) 50% 50% no-repeat}.statusicon{position:absolute;top:4px;left:12px}#uiMapWrapper{clear:both;padding:8px;margin-top:30px}#uiMapHeader{position:relative;clear:both}#uiMapContainer{position:relative;width:100%;height:600px;overflow:hidden;border:1px solid #40628a;background:url(nanomapBackground.png)}#uiMap{position:absolute;top:50%;left:50%;margin:-512px 0 0 -512px;width:256px;height:256px;overflow:hidden;zoom:4}#uiMapImage{position:absolute;bottom:1px;left:1px;width:256px;height:256px}#uiMapContent{position:absolute;bottom:-13.5px;left:0;width:256px;height:256px}#uiMapFooter{position:relative;clear:both}#uiContent{clear:both;padding:8px;margin-top:30px}#uiMapTooltip{position:absolute;right:10px;top:10px;border:1px solid #40628a;background-color:#272727;padding:8px;display:none;z-index:9999}#uiLoadingNotice{position:relative;background:url(uiNoticeBackground.jpg) 50% 50%;color:#000;font-size:14px;font-style:italic;font-weight:bold;padding:3px 4px 3px 4px;margin:4px 0 4px 0}.underTitle{margin-top:30px} +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhdGgubGVzcyIsImljb25zLmxlc3MiLCJjb3JlLmxlc3MiLCJsYXJnZXIubGVzcyIsImZpeGVkLXdpZHRoLmxlc3MiLCJsaXN0Lmxlc3MiLCJib3JkZXJlZC1wdWxsZWQubGVzcyIsImFuaW1hdGVkLmxlc3MiLCJtaXhpbnMubGVzcyIsIm5hbm91aS5jc3MiLCJyb3RhdGVkLWZsaXBwZWQubGVzcyIsInN0YWNrZWQubGVzcyIsInNjcmVlbi1yZWFkZXIubGVzcyIsIl9iYXJzLmxlc3MiLCJfbGluay5sZXNzIiwiX2NvbG9yLmxlc3MiLCJfZGlzcGxheS5sZXNzIiwiX2Zvcm1hdHRpbmcubGVzcyIsIl9mYW5jeS5sZXNzIiwiX2ljb24ubGVzcyIsIl9saXN0cy5sZXNzIiwiX21pc2MubGVzcyIsIl9uYXRpdmUubGVzcyIsIl90b29sdGlwLmxlc3MiLCI8bm8gc291cmNlPiIsIm5hbm91aS5sZXNzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJpQkFHQSxXQUNFLFlBQUEsY0FDQSxJQUFBLHFDQUNBLElBQUEsNENBQUEsMkJBQUEsQ0FBQSx1Q0FBQSxlQUFBLENBQUEsc0NBQUEsY0FBQSxDQUFBLHFDQUFBLGtCQUFBLENBQUEsd0RBQUEsY0FNQSxZQUFBLE9BQ0EsV0FBQSxPQ2JELElDSUMsUUFBQSxhQUNBLEtBQUEsT0FBQSxPQUFBLE9BQUEsSUFBQSxDQUFBLEVBQUEsWUFDQSxVQUFBLFFBQ0EsZUFBQSxLQUNBLHVCQUFBLFlBQ0Esd0JBQUEsVURURCxPRUtDLFVBQUEsYUFDQSxZQUFBLE9BQ0EsZUFBQSxLRlBELE9FU3NCLFVBQUEsSUZUdEIsT0VVc0IsVUFBQSxJRlZ0QixPRVdzQixVQUFBLElGWHRCLE9FWXNCLFVBQUEsSUZadEIsT0dHQyxNQUFBLGFBQ0EsV0FBQSxPSEpELE9JSUMsYUFBQSxFQUNBLFlBQUEsYUFDQSxnQkFBQSxLSk5ELFlJT1EsU0FBQSxTSlBSLE9JVUMsU0FBQSxTQUNBLEtBQUEsY0FDQSxNQUFBLGFBQ0EsSUFBQSxhQUNBLFdB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LE1BQUEsS0FDQSxRQUFBLElBQ0EsV0FBQSxLQUdKLGNBQ0ksU0FBQSxTQUNBLE1BQUEsS0FDQSxJQUFBLEtBQ0EsT0FBQSxJQUFBLE1BQUEsUUFDQSxpQkFBQSxRQUNBLFFBQUEsSUFDQSxRQUFBLEtBQ0EsUUFBQSxLQUdKLGlCQUNJLFNBQUEsU0FDQSxXQUFBLDRCQUFBLElBQUEsSUFDQSxNQUFBLEtBQ0EsVUFBQSxLQUNBLFdBQUEsT0FDQSxZQUFBLEtBQ0EsUUFBQSxJQUFBLElBQUEsSUFBQSxJQUNBLE9BQUEsSUFBQSxFQUFBLElBQUEsRUFHSixZQUNJLFdBQUEiLCJmaWxlIjoibmFub3VpLmNzcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIi8qIVxuICogIEZvbnQgQXdlc29tZSA0LjcuMCBieSBAZGF2ZWdhbmR5IC0gaHR0cDovL2ZvbnRhd2Vzb21lLmlvIC0gQGZvbnRhd2Vzb21lXG4gKiAgTGljZW5zZSAtIGh0dHA6Ly9mb250YXdlc29tZS5pby9saWNlbnNlIChGb250OiBTSUwgT0ZMIDEuMSwgQ1NTOiBNSVQgTGljZW5zZSlcbiAqL1xuLyogRk9OVCBQQVRIXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnRm9udEF3ZXNvbWUnO1xuICBzcmM6IHVybCgnZm9udGF3ZXNvbWUtd2ViZm9udC5lb3Q/dj00LjcuMCcpO1xuICBzcmM6IHVybCgnZm9udGF3ZXNvbWUtd2ViZm9udC5lb3Q/I2llZml4JnY9NC43LjAnKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksIHVybCgnZm9udGF3ZXNvbWUtd2ViZm9udC53b2ZmMj92PTQuNy4wJykgZm9ybWF0KCd3b2ZmMicpLCB1cmwoJ2ZvbnRhd2Vzb21lLXdlYmZvbnQud29mZj92PTQuNy4wJykgZm9ybWF0KCd3b2ZmJyksIHVybCgnZm9udGF3ZXNvbWUtd2ViZm9udC50dGY/dj00LjcuMCcpIGZvcm1hdCgndHJ1ZXR5cGUnKSwgdXJsKCdmb250YXdlc29tZS13ZWJmb250LnN2Zz92PTQuNy4wI2ZvbnRhd2Vzb21lcmVndWxhcicpIGZvcm1hdCgnc3ZnJyk7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbn1cbi5mYSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMTRweC8xIEZvbnRBd2Vzb21lO1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIHRleHQtcmVuZGVyaW5nOiBhdXRvO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1cbi8qIG1ha2VzIHRoZSBmb250IDMzJSBsYXJnZXIgcmVsYXRpdmUgdG8gdGhlIGljb24gY29udGFpbmVyICovXG4uZmEtbGcge1xuICBmb250LXNpemU6IDEuMzMzMzMzMzNlbTtcbiAgbGluZS1oZWlnaHQ6IDAuNzVlbTtcbiAgdmVydGljYWwtYWxpZ246IC0xNSU7XG59XG4uZmEtMngge1xuICBmb250LXNpemU6IDJlbTtcbn1cbi5mYS0zeCB7XG4gIGZvbnQtc2l6ZTogM2VtO1xufVxuLmZhLTR4IHtcbiAgZm9udC1zaXplOiA0ZW07XG59XG4uZmEtNXgge1xuICBmb250LXNpemU6IDVlbTtcbn1cbi5mYS1mdyB7XG4gIHdpZHRoOiAxLjI4NTcxNDI5ZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5mYS11bCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbWFyZ2luLWxlZnQ6IDIuMTQyODU3MTRlbTtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xufVxuLmZhLXVsID4gbGkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uZmEtbGkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IC0yLjE0Mjg1NzE0ZW07XG4gIHdpZHRoOiAyLjE0Mjg1NzE0ZW07XG4gIHRvcDogMC4xNDI4NTcxNGVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uZmEtbGkuZmEtbGcge1xuICBsZWZ0OiAtMS44NTcxNDI4NmVtO1xufVxuLmZhLWJvcmRlciB7XG4gIHBhZGRpbmc6IDAuMmVtIDAuMjVlbSAwLjE1ZW07XG4gIGJvcmRlcjogc29saWQgMC4wOGVtICNlZWU7XG4gIGJvcmRlci1yYWRpdXM6IDAuMWVtO1xufVxuLmZhLXB1bGwtbGVmdCB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLmZhLXB1bGwtcmlnaHQge1xuICBmbG9hdDogcmlnaHQ7XG59XG4uZmEuZmEtcHVsbC1sZWZ0IHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjNlbTtcbn1cbi5mYS5mYS1wdWxsLXJpZ2h0IHtcbiAgbWFyZ2luLWxlZnQ6IDAuM2VtO1xufVxuLyogRGVwcmVjYXRlZCBhcyBvZiA0LjQuMCAqL1xuLnB1bGwtcmlnaHQge1xuICBmbG9hdDogcmlnaHQ7XG59XG4ucHVsbC1sZWZ0IHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG4uZmEucHVsbC1sZWZ0IHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjNlbTtcbn1cbi5mYS5wdWxsLXJpZ2h0IHtcbiAgbWFyZ2luLWxlZnQ6IDAuM2VtO1xufVxuLmZhLXNwaW4ge1xuICBhbmltYXRpb246IGZhLXNwaW4gMnMgaW5maW5pdGUgbGluZWFyO1xufVxuLmZhLXB1bHNlIHtcbiAgYW5pbWF0aW9uOiBmYS1zcGluIDFzIGluZmluaXRlIHN0ZXBzKDgpO1xufVxuQGtleWZyYW1lcyBmYS1zcGluIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XG4gIH1cbn1cbi5mYS1yb3RhdGUtOTAge1xuICAtbXMtZmlsdGVyOiBcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5CYXNpY0ltYWdlKHJvdGF0aW9uPTEpXCI7XG4gIC1tcy10cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XG4gIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbn1cbi5mYS1yb3RhdGUtMTgwIHtcbiAgLW1zLWZpbHRlcjogXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0yKVwiO1xuICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbn1cbi5mYS1yb3RhdGUtMjcwIHtcbiAgLW1zLWZpbHRlcjogXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0zKVwiO1xuICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcbn1cbi5mYS1mbGlwLWhvcml6b250YWwge1xuICAtbXMtZmlsdGVyOiBcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5CYXNpY0ltYWdlKHJvdGF0aW9uPTAsIG1pcnJvcj0xKVwiO1xuICAtbXMtdHJhbnNmb3JtOiBzY2FsZSgtMSwgMSk7XG4gIHRyYW5zZm9ybTogc2NhbGUoLTEsIDEpO1xufVxuLmZhLWZsaXAtdmVydGljYWwge1xuICAtbXMtZmlsdGVyOiBcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5CYXNpY0ltYWdlKHJvdGF0aW9uPTIsIG1pcnJvcj0xKVwiO1xuICAtbXMtdHJhbnNmb3JtOiBzY2FsZSgxLCAtMSk7XG4gIHRyYW5zZm9ybTogc2NhbGUoMSwgLTEpO1xufVxuOnJvb3QgLmZhLXJvdGF0ZS05MCxcbjpyb290IC5mYS1yb3RhdGUtMTgwLFxuOnJvb3QgLmZhLXJvdGF0ZS0yNzAsXG46cm9vdCAuZmEtZmxpcC1ob3Jpem9udGFsLFxuOnJvb3QgLmZhLWZsaXAtdmVydGljYWwge1xuICBmaWx0ZXI6IG5vbmU7XG59XG4uZmEtc3RhY2sge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDJlbTtcbiAgaGVpZ2h0OiAyZW07XG4gIGxpbmUtaGVpZ2h0OiAyZW07XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uZmEtc3RhY2stMXgsXG4uZmEtc3RhY2stMngge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uZmEtc3RhY2stMXgge1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbn1cbi5mYS1zdGFjay0yeCB7XG4gIGZvbnQtc2l6ZTogMmVtO1xufVxuLmZhLWludmVyc2Uge1xuICBjb2xvcjogI2ZmZjtcbn1cbi8qIEZvbnQgQXdlc29tZSB1c2VzIHRoZSBVbmljb2RlIFByaXZhdGUgVXNlIEFyZWEgKFBVQSkgdG8gZW5zdXJlIHNjcmVlblxuICAgcmVhZGVycyBkbyBub3QgcmVhZCBvZmYgcmFuZG9tIGNoYXJhY3RlcnMgdGhhdCByZXByZXNlbnQgaWNvbnMgKi9cbi5mYS1nbGFzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwMFwiO1xufVxuLmZhLW11c2ljOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDAxXCI7XG59XG4uZmEtc2VhcmNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDAyXCI7XG59XG4uZmEtZW52ZWxvcGUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwM1wiO1xufVxuLmZhLWhlYXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDA0XCI7XG59XG4uZmEtc3RhcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwNVwiO1xufVxuLmZhLXN0YXItbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwNlwiO1xufVxuLmZhLXVzZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMDdcIjtcbn1cbi5mYS1maWxtOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDA4XCI7XG59XG4uZmEtdGgtbGFyZ2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMDlcIjtcbn1cbi5mYS10aDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwYVwiO1xufVxuLmZhLXRoLWxpc3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMGJcIjtcbn1cbi5mYS1jaGVjazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwY1wiO1xufVxuLmZhLXJlbW92ZTpiZWZvcmUsXG4uZmEtY2xvc2U6YmVmb3JlLFxuLmZhLXRpbWVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDBkXCI7XG59XG4uZmEtc2VhcmNoLXBsdXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMGVcIjtcbn1cbi5mYS1zZWFyY2gtbWludXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMTBcIjtcbn1cbi5mYS1wb3dlci1vZmY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMTFcIjtcbn1cbi5mYS1zaWduYWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMTJcIjtcbn1cbi5mYS1nZWFyOmJlZm9yZSxcbi5mYS1jb2c6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMTNcIjtcbn1cbi5mYS10cmFzaC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDE0XCI7XG59XG4uZmEtaG9tZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAxNVwiO1xufVxuLmZhLWZpbGUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAxNlwiO1xufVxuLmZhLWNsb2NrLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMTdcIjtcbn1cbi5mYS1yb2FkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDE4XCI7XG59XG4uZmEtZG93bmxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMTlcIjtcbn1cbi5mYS1hcnJvdy1jaXJjbGUtby1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDFhXCI7XG59XG4uZmEtYXJyb3ctY2lyY2xlLW8tdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMWJcIjtcbn1cbi5mYS1pbmJveDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAxY1wiO1xufVxuLmZhLXBsYXktY2lyY2xlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMWRcIjtcbn1cbi5mYS1yb3RhdGUtcmlnaHQ6YmVmb3JlLFxuLmZhLXJlcGVhdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAxZVwiO1xufVxuLmZhLXJlZnJlc2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMjFcIjtcbn1cbi5mYS1saXN0LWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyMlwiO1xufVxuLmZhLWxvY2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMjNcIjtcbn1cbi5mYS1mbGFnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDI0XCI7XG59XG4uZmEtaGVhZHBob25lczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyNVwiO1xufVxuLmZhLXZvbHVtZS1vZmY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMjZcIjtcbn1cbi5mYS12b2x1bWUtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyN1wiO1xufVxuLmZhLXZvbHVtZS11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyOFwiO1xufVxuLmZhLXFyY29kZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyOVwiO1xufVxuLmZhLWJhcmNvZGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMmFcIjtcbn1cbi5mYS10YWc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMmJcIjtcbn1cbi5mYS10YWdzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDJjXCI7XG59XG4uZmEtYm9vazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyZFwiO1xufVxuLmZhLWJvb2ttYXJrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDJlXCI7XG59XG4uZmEtcHJpbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMmZcIjtcbn1cbi5mYS1jYW1lcmE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMzBcIjtcbn1cbi5mYS1mb250OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDMxXCI7XG59XG4uZmEtYm9sZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAzMlwiO1xufVxuLmZhLWl0YWxpYzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAzM1wiO1xufVxuLmZhLXRleHQtaGVpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDM0XCI7XG59XG4uZmEtdGV4dC13aWR0aDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAzNVwiO1xufVxuLmZhLWFsaWduLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMzZcIjtcbn1cbi5mYS1hbGlnbi1jZW50ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMzdcIjtcbn1cbi5mYS1hbGlnbi1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAzOFwiO1xufVxuLmZhLWFsaWduLWp1c3RpZnk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMzlcIjtcbn1cbi5mYS1saXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDNhXCI7XG59XG4uZmEtZGVkZW50OmJlZm9yZSxcbi5mYS1vdXRkZW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDNiXCI7XG59XG4uZmEtaW5kZW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDNjXCI7XG59XG4uZmEtdmlkZW8tY2FtZXJhOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDNkXCI7XG59XG4uZmEtcGhvdG86YmVmb3JlLFxuLmZhLWltYWdlOmJlZm9yZSxcbi5mYS1waWN0dXJlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwM2VcIjtcbn1cbi5mYS1wZW5jaWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNDBcIjtcbn1cbi5mYS1tYXAtbWFya2VyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDQxXCI7XG59XG4uZmEtYWRqdXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDQyXCI7XG59XG4uZmEtdGludDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA0M1wiO1xufVxuLmZhLWVkaXQ6YmVmb3JlLFxuLmZhLXBlbmNpbC1zcXVhcmUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA0NFwiO1xufVxuLmZhLXNoYXJlLXNxdWFyZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDQ1XCI7XG59XG4uZmEtY2hlY2stc3F1YXJlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNDZcIjtcbn1cbi5mYS1hcnJvd3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNDdcIjtcbn1cbi5mYS1zdGVwLWJhY2t3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDQ4XCI7XG59XG4uZmEtZmFzdC1iYWNrd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA0OVwiO1xufVxuLmZhLWJhY2t3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDRhXCI7XG59XG4uZmEtcGxheTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA0YlwiO1xufVxuLmZhLXBhdXNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDRjXCI7XG59XG4uZmEtc3RvcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA0ZFwiO1xufVxuLmZhLWZvcndhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNGVcIjtcbn1cbi5mYS1mYXN0LWZvcndhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNTBcIjtcbn1cbi5mYS1zdGVwLWZvcndhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNTFcIjtcbn1cbi5mYS1lamVjdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1MlwiO1xufVxuLmZhLWNoZXZyb24tbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1M1wiO1xufVxuLmZhLWNoZXZyb24tcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNTRcIjtcbn1cbi5mYS1wbHVzLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1NVwiO1xufVxuLmZhLW1pbnVzLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1NlwiO1xufVxuLmZhLXRpbWVzLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1N1wiO1xufVxuLmZhLWNoZWNrLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1OFwiO1xufVxuLmZhLXF1ZXN0aW9uLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1OVwiO1xufVxuLmZhLWluZm8tY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDVhXCI7XG59XG4uZmEtY3Jvc3NoYWlyczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1YlwiO1xufVxuLmZhLXRpbWVzLWNpcmNsZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDVjXCI7XG59XG4uZmEtY2hlY2stY2lyY2xlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNWRcIjtcbn1cbi5mYS1iYW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNWVcIjtcbn1cbi5mYS1hcnJvdy1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDYwXCI7XG59XG4uZmEtYXJyb3ctcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNjFcIjtcbn1cbi5mYS1hcnJvdy11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA2MlwiO1xufVxuLmZhLWFycm93LWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNjNcIjtcbn1cbi5mYS1tYWlsLWZvcndhcmQ6YmVmb3JlLFxuLmZhLXNoYXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDY0XCI7XG59XG4uZmEtZXhwYW5kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDY1XCI7XG59XG4uZmEtY29tcHJlc3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNjZcIjtcbn1cbi5mYS1wbHVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDY3XCI7XG59XG4uZmEtbWludXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNjhcIjtcbn1cbi5mYS1hc3RlcmlzazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA2OVwiO1xufVxuLmZhLWV4Y2xhbWF0aW9uLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA2YVwiO1xufVxuLmZhLWdpZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNmJcIjtcbn1cbi5mYS1sZWFmOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDZjXCI7XG59XG4uZmEtZmlyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA2ZFwiO1xufVxuLmZhLWV5ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA2ZVwiO1xufVxuLmZhLWV5ZS1zbGFzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA3MFwiO1xufVxuLmZhLXdhcm5pbmc6YmVmb3JlLFxuLmZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDcxXCI7XG59XG4uZmEtcGxhbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNzJcIjtcbn1cbi5mYS1jYWxlbmRhcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA3M1wiO1xufVxuLmZhLXJhbmRvbTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA3NFwiO1xufVxuLmZhLWNvbW1lbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNzVcIjtcbn1cbi5mYS1tYWduZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNzZcIjtcbn1cbi5mYS1jaGV2cm9uLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDc3XCI7XG59XG4uZmEtY2hldnJvbi1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDc4XCI7XG59XG4uZmEtcmV0d2VldDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA3OVwiO1xufVxuLmZhLXNob3BwaW5nLWNhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwN2FcIjtcbn1cbi5mYS1mb2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwN2JcIjtcbn1cbi5mYS1mb2xkZXItb3BlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA3Y1wiO1xufVxuLmZhLWFycm93cy12OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDdkXCI7XG59XG4uZmEtYXJyb3dzLWg6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwN2VcIjtcbn1cbi5mYS1iYXItY2hhcnQtbzpiZWZvcmUsXG4uZmEtYmFyLWNoYXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDgwXCI7XG59XG4uZmEtdHdpdHRlci1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwODFcIjtcbn1cbi5mYS1mYWNlYm9vay1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwODJcIjtcbn1cbi5mYS1jYW1lcmEtcmV0cm86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwODNcIjtcbn1cbi5mYS1rZXk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwODRcIjtcbn1cbi5mYS1nZWFyczpiZWZvcmUsXG4uZmEtY29nczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA4NVwiO1xufVxuLmZhLWNvbW1lbnRzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDg2XCI7XG59XG4uZmEtdGh1bWJzLW8tdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwODdcIjtcbn1cbi5mYS10aHVtYnMtby1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDg4XCI7XG59XG4uZmEtc3Rhci1oYWxmOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDg5XCI7XG59XG4uZmEtaGVhcnQtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA4YVwiO1xufVxuLmZhLXNpZ24tb3V0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDhiXCI7XG59XG4uZmEtbGlua2VkaW4tc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDhjXCI7XG59XG4uZmEtdGh1bWItdGFjazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA4ZFwiO1xufVxuLmZhLWV4dGVybmFsLWxpbms6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwOGVcIjtcbn1cbi5mYS1zaWduLWluOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDkwXCI7XG59XG4uZmEtdHJvcGh5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDkxXCI7XG59XG4uZmEtZ2l0aHViLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5MlwiO1xufVxuLmZhLXVwbG9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5M1wiO1xufVxuLmZhLWxlbW9uLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwOTRcIjtcbn1cbi5mYS1waG9uZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5NVwiO1xufVxuLmZhLXNxdWFyZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDk2XCI7XG59XG4uZmEtYm9va21hcmstbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5N1wiO1xufVxuLmZhLXBob25lLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5OFwiO1xufVxuLmZhLXR3aXR0ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwOTlcIjtcbn1cbi5mYS1mYWNlYm9vay1mOmJlZm9yZSxcbi5mYS1mYWNlYm9vazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5YVwiO1xufVxuLmZhLWdpdGh1YjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5YlwiO1xufVxuLmZhLXVubG9jazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5Y1wiO1xufVxuLmZhLWNyZWRpdC1jYXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDlkXCI7XG59XG4uZmEtZmVlZDpiZWZvcmUsXG4uZmEtcnNzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDllXCI7XG59XG4uZmEtaGRkLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYTBcIjtcbn1cbi5mYS1idWxsaG9ybjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhMVwiO1xufVxuLmZhLWJlbGw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZjNcIjtcbn1cbi5mYS1jZXJ0aWZpY2F0ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhM1wiO1xufVxuLmZhLWhhbmQtby1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhNFwiO1xufVxuLmZhLWhhbmQtby1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGE1XCI7XG59XG4uZmEtaGFuZC1vLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGE2XCI7XG59XG4uZmEtaGFuZC1vLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYTdcIjtcbn1cbi5mYS1hcnJvdy1jaXJjbGUtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhOFwiO1xufVxuLmZhLWFycm93LWNpcmNsZS1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhOVwiO1xufVxuLmZhLWFycm93LWNpcmNsZS11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhYVwiO1xufVxuLmZhLWFycm93LWNpcmNsZS1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGFiXCI7XG59XG4uZmEtZ2xvYmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYWNcIjtcbn1cbi5mYS13cmVuY2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYWRcIjtcbn1cbi5mYS10YXNrczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhZVwiO1xufVxuLmZhLWZpbHRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBiMFwiO1xufVxuLmZhLWJyaWVmY2FzZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBiMVwiO1xufVxuLmZhLWFycm93cy1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYjJcIjtcbn1cbi5mYS1ncm91cDpiZWZvcmUsXG4uZmEtdXNlcnM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYzBcIjtcbn1cbi5mYS1jaGFpbjpiZWZvcmUsXG4uZmEtbGluazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBjMVwiO1xufVxuLmZhLWNsb3VkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGMyXCI7XG59XG4uZmEtZmxhc2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYzNcIjtcbn1cbi5mYS1jdXQ6YmVmb3JlLFxuLmZhLXNjaXNzb3JzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGM0XCI7XG59XG4uZmEtY29weTpiZWZvcmUsXG4uZmEtZmlsZXMtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBjNVwiO1xufVxuLmZhLXBhcGVyY2xpcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBjNlwiO1xufVxuLmZhLXNhdmU6YmVmb3JlLFxuLmZhLWZsb3BweS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGM3XCI7XG59XG4uZmEtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGM4XCI7XG59XG4uZmEtbmF2aWNvbjpiZWZvcmUsXG4uZmEtcmVvcmRlcjpiZWZvcmUsXG4uZmEtYmFyczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBjOVwiO1xufVxuLmZhLWxpc3QtdWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwY2FcIjtcbn1cbi5mYS1saXN0LW9sOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGNiXCI7XG59XG4uZmEtc3RyaWtldGhyb3VnaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBjY1wiO1xufVxuLmZhLXVuZGVybGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBjZFwiO1xufVxuLmZhLXRhYmxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGNlXCI7XG59XG4uZmEtbWFnaWM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZDBcIjtcbn1cbi5mYS10cnVjazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkMVwiO1xufVxuLmZhLXBpbnRlcmVzdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkMlwiO1xufVxuLmZhLXBpbnRlcmVzdC1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZDNcIjtcbn1cbi5mYS1nb29nbGUtcGx1cy1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZDRcIjtcbn1cbi5mYS1nb29nbGUtcGx1czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkNVwiO1xufVxuLmZhLW1vbmV5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGQ2XCI7XG59XG4uZmEtY2FyZXQtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkN1wiO1xufVxuLmZhLWNhcmV0LXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGQ4XCI7XG59XG4uZmEtY2FyZXQtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkOVwiO1xufVxuLmZhLWNhcmV0LXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGRhXCI7XG59XG4uZmEtY29sdW1uczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkYlwiO1xufVxuLmZhLXVuc29ydGVkOmJlZm9yZSxcbi5mYS1zb3J0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGRjXCI7XG59XG4uZmEtc29ydC1kb3duOmJlZm9yZSxcbi5mYS1zb3J0LWRlc2M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZGRcIjtcbn1cbi5mYS1zb3J0LXVwOmJlZm9yZSxcbi5mYS1zb3J0LWFzYzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkZVwiO1xufVxuLmZhLWVudmVsb3BlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGUwXCI7XG59XG4uZmEtbGlua2VkaW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZTFcIjtcbn1cbi5mYS1yb3RhdGUtbGVmdDpiZWZvcmUsXG4uZmEtdW5kbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlMlwiO1xufVxuLmZhLWxlZ2FsOmJlZm9yZSxcbi5mYS1nYXZlbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlM1wiO1xufVxuLmZhLWRhc2hib2FyZDpiZWZvcmUsXG4uZmEtdGFjaG9tZXRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlNFwiO1xufVxuLmZhLWNvbW1lbnQtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlNVwiO1xufVxuLmZhLWNvbW1lbnRzLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZTZcIjtcbn1cbi5mYS1mbGFzaDpiZWZvcmUsXG4uZmEtYm9sdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlN1wiO1xufVxuLmZhLXNpdGVtYXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZThcIjtcbn1cbi5mYS11bWJyZWxsYTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlOVwiO1xufVxuLmZhLXBhc3RlOmJlZm9yZSxcbi5mYS1jbGlwYm9hcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZWFcIjtcbn1cbi5mYS1saWdodGJ1bGItbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlYlwiO1xufVxuLmZhLWV4Y2hhbmdlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGVjXCI7XG59XG4uZmEtY2xvdWQtZG93bmxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZWRcIjtcbn1cbi5mYS1jbG91ZC11cGxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZWVcIjtcbn1cbi5mYS11c2VyLW1kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGYwXCI7XG59XG4uZmEtc3RldGhvc2NvcGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZjFcIjtcbn1cbi5mYS1zdWl0Y2FzZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBmMlwiO1xufVxuLmZhLWJlbGwtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhMlwiO1xufVxuLmZhLWNvZmZlZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBmNFwiO1xufVxuLmZhLWN1dGxlcnk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZjVcIjtcbn1cbi5mYS1maWxlLXRleHQtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBmNlwiO1xufVxuLmZhLWJ1aWxkaW5nLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZjdcIjtcbn1cbi5mYS1ob3NwaXRhbC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGY4XCI7XG59XG4uZmEtYW1idWxhbmNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGY5XCI7XG59XG4uZmEtbWVka2l0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGZhXCI7XG59XG4uZmEtZmlnaHRlci1qZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZmJcIjtcbn1cbi5mYS1iZWVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGZjXCI7XG59XG4uZmEtaC1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZmRcIjtcbn1cbi5mYS1wbHVzLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBmZVwiO1xufVxuLmZhLWFuZ2xlLWRvdWJsZS1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTAwXCI7XG59XG4uZmEtYW5nbGUtZG91YmxlLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTAxXCI7XG59XG4uZmEtYW5nbGUtZG91YmxlLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTAyXCI7XG59XG4uZmEtYW5nbGUtZG91YmxlLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMDNcIjtcbn1cbi5mYS1hbmdsZS1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTA0XCI7XG59XG4uZmEtYW5nbGUtcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMDVcIjtcbn1cbi5mYS1hbmdsZS11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEwNlwiO1xufVxuLmZhLWFuZ2xlLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMDdcIjtcbn1cbi5mYS1kZXNrdG9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTA4XCI7XG59XG4uZmEtbGFwdG9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTA5XCI7XG59XG4uZmEtdGFibGV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTBhXCI7XG59XG4uZmEtbW9iaWxlLXBob25lOmJlZm9yZSxcbi5mYS1tb2JpbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMGJcIjtcbn1cbi5mYS1jaXJjbGUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEwY1wiO1xufVxuLmZhLXF1b3RlLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMGRcIjtcbn1cbi5mYS1xdW90ZS1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEwZVwiO1xufVxuLmZhLXNwaW5uZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMTBcIjtcbn1cbi5mYS1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMTFcIjtcbn1cbi5mYS1tYWlsLXJlcGx5OmJlZm9yZSxcbi5mYS1yZXBseTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExMlwiO1xufVxuLmZhLWdpdGh1Yi1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMTNcIjtcbn1cbi5mYS1mb2xkZXItbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExNFwiO1xufVxuLmZhLWZvbGRlci1vcGVuLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMTVcIjtcbn1cbi5mYS1zbWlsZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTE4XCI7XG59XG4uZmEtZnJvd24tbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExOVwiO1xufVxuLmZhLW1laC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTFhXCI7XG59XG4uZmEtZ2FtZXBhZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExYlwiO1xufVxuLmZhLWtleWJvYXJkLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMWNcIjtcbn1cbi5mYS1mbGFnLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMWRcIjtcbn1cbi5mYS1mbGFnLWNoZWNrZXJlZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExZVwiO1xufVxuLmZhLXRlcm1pbmFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTIwXCI7XG59XG4uZmEtY29kZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyMVwiO1xufVxuLmZhLW1haWwtcmVwbHktYWxsOmJlZm9yZSxcbi5mYS1yZXBseS1hbGw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMjJcIjtcbn1cbi5mYS1zdGFyLWhhbGYtZW1wdHk6YmVmb3JlLFxuLmZhLXN0YXItaGFsZi1mdWxsOmJlZm9yZSxcbi5mYS1zdGFyLWhhbGYtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyM1wiO1xufVxuLmZhLWxvY2F0aW9uLWFycm93OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTI0XCI7XG59XG4uZmEtY3JvcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyNVwiO1xufVxuLmZhLWNvZGUtZm9yazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyNlwiO1xufVxuLmZhLXVubGluazpiZWZvcmUsXG4uZmEtY2hhaW4tYnJva2VuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTI3XCI7XG59XG4uZmEtcXVlc3Rpb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMjhcIjtcbn1cbi5mYS1pbmZvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTI5XCI7XG59XG4uZmEtZXhjbGFtYXRpb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMmFcIjtcbn1cbi5mYS1zdXBlcnNjcmlwdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyYlwiO1xufVxuLmZhLXN1YnNjcmlwdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyY1wiO1xufVxuLmZhLWVyYXNlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyZFwiO1xufVxuLmZhLXB1enpsZS1waWVjZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyZVwiO1xufVxuLmZhLW1pY3JvcGhvbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMzBcIjtcbn1cbi5mYS1taWNyb3Bob25lLXNsYXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTMxXCI7XG59XG4uZmEtc2hpZWxkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTMyXCI7XG59XG4uZmEtY2FsZW5kYXItbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEzM1wiO1xufVxuLmZhLWZpcmUtZXh0aW5ndWlzaGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTM0XCI7XG59XG4uZmEtcm9ja2V0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTM1XCI7XG59XG4uZmEtbWF4Y2RuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTM2XCI7XG59XG4uZmEtY2hldnJvbi1jaXJjbGUtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEzN1wiO1xufVxuLmZhLWNoZXZyb24tY2lyY2xlLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTM4XCI7XG59XG4uZmEtY2hldnJvbi1jaXJjbGUtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMzlcIjtcbn1cbi5mYS1jaGV2cm9uLWNpcmNsZS1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTNhXCI7XG59XG4uZmEtaHRtbDU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxM2JcIjtcbn1cbi5mYS1jc3MzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTNjXCI7XG59XG4uZmEtYW5jaG9yOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTNkXCI7XG59XG4uZmEtdW5sb2NrLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEzZVwiO1xufVxuLmZhLWJ1bGxzZXllOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTQwXCI7XG59XG4uZmEtZWxsaXBzaXMtaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0MVwiO1xufVxuLmZhLWVsbGlwc2lzLXY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNDJcIjtcbn1cbi5mYS1yc3Mtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTQzXCI7XG59XG4uZmEtcGxheS1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNDRcIjtcbn1cbi5mYS10aWNrZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNDVcIjtcbn1cbi5mYS1taW51cy1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNDZcIjtcbn1cbi5mYS1taW51cy1zcXVhcmUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0N1wiO1xufVxuLmZhLWxldmVsLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTQ4XCI7XG59XG4uZmEtbGV2ZWwtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0OVwiO1xufVxuLmZhLWNoZWNrLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0YVwiO1xufVxuLmZhLXBlbmNpbC1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNGJcIjtcbn1cbi5mYS1leHRlcm5hbC1saW5rLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0Y1wiO1xufVxuLmZhLXNoYXJlLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0ZFwiO1xufVxuLmZhLWNvbXBhc3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNGVcIjtcbn1cbi5mYS10b2dnbGUtZG93bjpiZWZvcmUsXG4uZmEtY2FyZXQtc3F1YXJlLW8tZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE1MFwiO1xufVxuLmZhLXRvZ2dsZS11cDpiZWZvcmUsXG4uZmEtY2FyZXQtc3F1YXJlLW8tdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNTFcIjtcbn1cbi5mYS10b2dnbGUtcmlnaHQ6YmVmb3JlLFxuLmZhLWNhcmV0LXNxdWFyZS1vLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTUyXCI7XG59XG4uZmEtZXVybzpiZWZvcmUsXG4uZmEtZXVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTUzXCI7XG59XG4uZmEtZ2JwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTU0XCI7XG59XG4uZmEtZG9sbGFyOmJlZm9yZSxcbi5mYS11c2Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNTVcIjtcbn1cbi5mYS1ydXBlZTpiZWZvcmUsXG4uZmEtaW5yOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTU2XCI7XG59XG4uZmEtY255OmJlZm9yZSxcbi5mYS1ybWI6YmVmb3JlLFxuLmZhLXllbjpiZWZvcmUsXG4uZmEtanB5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTU3XCI7XG59XG4uZmEtcnVibGU6YmVmb3JlLFxuLmZhLXJvdWJsZTpiZWZvcmUsXG4uZmEtcnViOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTU4XCI7XG59XG4uZmEtd29uOmJlZm9yZSxcbi5mYS1rcnc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNTlcIjtcbn1cbi5mYS1iaXRjb2luOmJlZm9yZSxcbi5mYS1idGM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNWFcIjtcbn1cbi5mYS1maWxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTViXCI7XG59XG4uZmEtZmlsZS10ZXh0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTVjXCI7XG59XG4uZmEtc29ydC1hbHBoYS1hc2M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNWRcIjtcbn1cbi5mYS1zb3J0LWFscGhhLWRlc2M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNWVcIjtcbn1cbi5mYS1zb3J0LWFtb3VudC1hc2M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNjBcIjtcbn1cbi5mYS1zb3J0LWFtb3VudC1kZXNjOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTYxXCI7XG59XG4uZmEtc29ydC1udW1lcmljLWFzYzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2MlwiO1xufVxuLmZhLXNvcnQtbnVtZXJpYy1kZXNjOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTYzXCI7XG59XG4uZmEtdGh1bWJzLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTY0XCI7XG59XG4uZmEtdGh1bWJzLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNjVcIjtcbn1cbi5mYS15b3V0dWJlLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2NlwiO1xufVxuLmZhLXlvdXR1YmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNjdcIjtcbn1cbi5mYS14aW5nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTY4XCI7XG59XG4uZmEteGluZy1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNjlcIjtcbn1cbi5mYS15b3V0dWJlLXBsYXk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNmFcIjtcbn1cbi5mYS1kcm9wYm94OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTZiXCI7XG59XG4uZmEtc3RhY2stb3ZlcmZsb3c6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNmNcIjtcbn1cbi5mYS1pbnN0YWdyYW06YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNmRcIjtcbn1cbi5mYS1mbGlja3I6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNmVcIjtcbn1cbi5mYS1hZG46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzBcIjtcbn1cbi5mYS1iaXRidWNrZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzFcIjtcbn1cbi5mYS1iaXRidWNrZXQtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTcyXCI7XG59XG4uZmEtdHVtYmxyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTczXCI7XG59XG4uZmEtdHVtYmxyLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3NFwiO1xufVxuLmZhLWxvbmctYXJyb3ctZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3NVwiO1xufVxuLmZhLWxvbmctYXJyb3ctdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzZcIjtcbn1cbi5mYS1sb25nLWFycm93LWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzdcIjtcbn1cbi5mYS1sb25nLWFycm93LXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTc4XCI7XG59XG4uZmEtYXBwbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzlcIjtcbn1cbi5mYS13aW5kb3dzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTdhXCI7XG59XG4uZmEtYW5kcm9pZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3YlwiO1xufVxuLmZhLWxpbnV4OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTdjXCI7XG59XG4uZmEtZHJpYmJibGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxN2RcIjtcbn1cbi5mYS1za3lwZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3ZVwiO1xufVxuLmZhLWZvdXJzcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxODBcIjtcbn1cbi5mYS10cmVsbG86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxODFcIjtcbn1cbi5mYS1mZW1hbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxODJcIjtcbn1cbi5mYS1tYWxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTgzXCI7XG59XG4uZmEtZ2l0dGlwOmJlZm9yZSxcbi5mYS1ncmF0aXBheTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4NFwiO1xufVxuLmZhLXN1bi1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTg1XCI7XG59XG4uZmEtbW9vbi1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTg2XCI7XG59XG4uZmEtYXJjaGl2ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4N1wiO1xufVxuLmZhLWJ1ZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4OFwiO1xufVxuLmZhLXZrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTg5XCI7XG59XG4uZmEtd2VpYm86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOGFcIjtcbn1cbi5mYS1yZW5yZW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOGJcIjtcbn1cbi5mYS1wYWdlbGluZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOGNcIjtcbn1cbi5mYS1zdGFjay1leGNoYW5nZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4ZFwiO1xufVxuLmZhLWFycm93LWNpcmNsZS1vLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMThlXCI7XG59XG4uZmEtYXJyb3ctY2lyY2xlLW8tbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5MFwiO1xufVxuLmZhLXRvZ2dsZS1sZWZ0OmJlZm9yZSxcbi5mYS1jYXJldC1zcXVhcmUtby1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTkxXCI7XG59XG4uZmEtZG90LWNpcmNsZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTkyXCI7XG59XG4uZmEtd2hlZWxjaGFpcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5M1wiO1xufVxuLmZhLXZpbWVvLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5NFwiO1xufVxuLmZhLXR1cmtpc2gtbGlyYTpiZWZvcmUsXG4uZmEtdHJ5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTk1XCI7XG59XG4uZmEtcGx1cy1zcXVhcmUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5NlwiO1xufVxuLmZhLXNwYWNlLXNodXR0bGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOTdcIjtcbn1cbi5mYS1zbGFjazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5OFwiO1xufVxuLmZhLWVudmVsb3BlLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5OVwiO1xufVxuLmZhLXdvcmRwcmVzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5YVwiO1xufVxuLmZhLW9wZW5pZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5YlwiO1xufVxuLmZhLWluc3RpdHV0aW9uOmJlZm9yZSxcbi5mYS1iYW5rOmJlZm9yZSxcbi5mYS11bml2ZXJzaXR5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTljXCI7XG59XG4uZmEtbW9ydGFyLWJvYXJkOmJlZm9yZSxcbi5mYS1ncmFkdWF0aW9uLWNhcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5ZFwiO1xufVxuLmZhLXlhaG9vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTllXCI7XG59XG4uZmEtZ29vZ2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWEwXCI7XG59XG4uZmEtcmVkZGl0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWExXCI7XG59XG4uZmEtcmVkZGl0LXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhMlwiO1xufVxuLmZhLXN0dW1ibGV1cG9uLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhM1wiO1xufVxuLmZhLXN0dW1ibGV1cG9uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWE0XCI7XG59XG4uZmEtZGVsaWNpb3VzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWE1XCI7XG59XG4uZmEtZGlnZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhNlwiO1xufVxuLmZhLXBpZWQtcGlwZXItcHA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYTdcIjtcbn1cbi5mYS1waWVkLXBpcGVyLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhOFwiO1xufVxuLmZhLWRydXBhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhOVwiO1xufVxuLmZhLWpvb21sYTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhYVwiO1xufVxuLmZhLWxhbmd1YWdlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWFiXCI7XG59XG4uZmEtZmF4OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWFjXCI7XG59XG4uZmEtYnVpbGRpbmc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYWRcIjtcbn1cbi5mYS1jaGlsZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhZVwiO1xufVxuLmZhLXBhdzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiMFwiO1xufVxuLmZhLXNwb29uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWIxXCI7XG59XG4uZmEtY3ViZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiMlwiO1xufVxuLmZhLWN1YmVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWIzXCI7XG59XG4uZmEtYmVoYW5jZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiNFwiO1xufVxuLmZhLWJlaGFuY2Utc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWI1XCI7XG59XG4uZmEtc3RlYW06YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYjZcIjtcbn1cbi5mYS1zdGVhbS1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYjdcIjtcbn1cbi5mYS1yZWN5Y2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWI4XCI7XG59XG4uZmEtYXV0b21vYmlsZTpiZWZvcmUsXG4uZmEtY2FyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWI5XCI7XG59XG4uZmEtY2FiOmJlZm9yZSxcbi5mYS10YXhpOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWJhXCI7XG59XG4uZmEtdHJlZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiYlwiO1xufVxuLmZhLXNwb3RpZnk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYmNcIjtcbn1cbi5mYS1kZXZpYW50YXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWJkXCI7XG59XG4uZmEtc291bmRjbG91ZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiZVwiO1xufVxuLmZhLWRhdGFiYXNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWMwXCI7XG59XG4uZmEtZmlsZS1wZGYtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjMVwiO1xufVxuLmZhLWZpbGUtd29yZC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWMyXCI7XG59XG4uZmEtZmlsZS1leGNlbC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWMzXCI7XG59XG4uZmEtZmlsZS1wb3dlcnBvaW50LW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYzRcIjtcbn1cbi5mYS1maWxlLXBob3RvLW86YmVmb3JlLFxuLmZhLWZpbGUtcGljdHVyZS1vOmJlZm9yZSxcbi5mYS1maWxlLWltYWdlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYzVcIjtcbn1cbi5mYS1maWxlLXppcC1vOmJlZm9yZSxcbi5mYS1maWxlLWFyY2hpdmUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjNlwiO1xufVxuLmZhLWZpbGUtc291bmQtbzpiZWZvcmUsXG4uZmEtZmlsZS1hdWRpby1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWM3XCI7XG59XG4uZmEtZmlsZS1tb3ZpZS1vOmJlZm9yZSxcbi5mYS1maWxlLXZpZGVvLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYzhcIjtcbn1cbi5mYS1maWxlLWNvZGUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjOVwiO1xufVxuLmZhLXZpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxY2FcIjtcbn1cbi5mYS1jb2RlcGVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWNiXCI7XG59XG4uZmEtanNmaWRkbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxY2NcIjtcbn1cbi5mYS1saWZlLWJvdXk6YmVmb3JlLFxuLmZhLWxpZmUtYnVveTpiZWZvcmUsXG4uZmEtbGlmZS1zYXZlcjpiZWZvcmUsXG4uZmEtc3VwcG9ydDpiZWZvcmUsXG4uZmEtbGlmZS1yaW5nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWNkXCI7XG59XG4uZmEtY2lyY2xlLW8tbm90Y2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxY2VcIjtcbn1cbi5mYS1yYTpiZWZvcmUsXG4uZmEtcmVzaXN0YW5jZTpiZWZvcmUsXG4uZmEtcmViZWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZDBcIjtcbn1cbi5mYS1nZTpiZWZvcmUsXG4uZmEtZW1waXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWQxXCI7XG59XG4uZmEtZ2l0LXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkMlwiO1xufVxuLmZhLWdpdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkM1wiO1xufVxuLmZhLXktY29tYmluYXRvci1zcXVhcmU6YmVmb3JlLFxuLmZhLXljLXNxdWFyZTpiZWZvcmUsXG4uZmEtaGFja2VyLW5ld3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZDRcIjtcbn1cbi5mYS10ZW5jZW50LXdlaWJvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWQ1XCI7XG59XG4uZmEtcXE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZDZcIjtcbn1cbi5mYS13ZWNoYXQ6YmVmb3JlLFxuLmZhLXdlaXhpbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkN1wiO1xufVxuLmZhLXNlbmQ6YmVmb3JlLFxuLmZhLXBhcGVyLXBsYW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWQ4XCI7XG59XG4uZmEtc2VuZC1vOmJlZm9yZSxcbi5mYS1wYXBlci1wbGFuZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWQ5XCI7XG59XG4uZmEtaGlzdG9yeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkYVwiO1xufVxuLmZhLWNpcmNsZS10aGluOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWRiXCI7XG59XG4uZmEtaGVhZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWRjXCI7XG59XG4uZmEtcGFyYWdyYXBoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWRkXCI7XG59XG4uZmEtc2xpZGVyczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkZVwiO1xufVxuLmZhLXNoYXJlLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlMFwiO1xufVxuLmZhLXNoYXJlLWFsdC1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZTFcIjtcbn1cbi5mYS1ib21iOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWUyXCI7XG59XG4uZmEtc29jY2VyLWJhbGwtbzpiZWZvcmUsXG4uZmEtZnV0Ym9sLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZTNcIjtcbn1cbi5mYS10dHk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZTRcIjtcbn1cbi5mYS1iaW5vY3VsYXJzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWU1XCI7XG59XG4uZmEtcGx1ZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlNlwiO1xufVxuLmZhLXNsaWRlc2hhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZTdcIjtcbn1cbi5mYS10d2l0Y2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZThcIjtcbn1cbi5mYS15ZWxwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWU5XCI7XG59XG4uZmEtbmV3c3BhcGVyLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZWFcIjtcbn1cbi5mYS13aWZpOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWViXCI7XG59XG4uZmEtY2FsY3VsYXRvcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlY1wiO1xufVxuLmZhLXBheXBhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlZFwiO1xufVxuLmZhLWdvb2dsZS13YWxsZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZWVcIjtcbn1cbi5mYS1jYy12aXNhOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWYwXCI7XG59XG4uZmEtY2MtbWFzdGVyY2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmMVwiO1xufVxuLmZhLWNjLWRpc2NvdmVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWYyXCI7XG59XG4uZmEtY2MtYW1leDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmM1wiO1xufVxuLmZhLWNjLXBheXBhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmNFwiO1xufVxuLmZhLWNjLXN0cmlwZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmNVwiO1xufVxuLmZhLWJlbGwtc2xhc2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZjZcIjtcbn1cbi5mYS1iZWxsLXNsYXNoLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZjdcIjtcbn1cbi5mYS10cmFzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmOFwiO1xufVxuLmZhLWNvcHlyaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmOVwiO1xufVxuLmZhLWF0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWZhXCI7XG59XG4uZmEtZXllZHJvcHBlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmYlwiO1xufVxuLmZhLXBhaW50LWJydXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWZjXCI7XG59XG4uZmEtYmlydGhkYXktY2FrZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmZFwiO1xufVxuLmZhLWFyZWEtY2hhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZmVcIjtcbn1cbi5mYS1waWUtY2hhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMDBcIjtcbn1cbi5mYS1saW5lLWNoYXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjAxXCI7XG59XG4uZmEtbGFzdGZtOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjAyXCI7XG59XG4uZmEtbGFzdGZtLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwM1wiO1xufVxuLmZhLXRvZ2dsZS1vZmY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMDRcIjtcbn1cbi5mYS10b2dnbGUtb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMDVcIjtcbn1cbi5mYS1iaWN5Y2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjA2XCI7XG59XG4uZmEtYnVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjA3XCI7XG59XG4uZmEtaW94aG9zdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwOFwiO1xufVxuLmZhLWFuZ2VsbGlzdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwOVwiO1xufVxuLmZhLWNjOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjBhXCI7XG59XG4uZmEtc2hla2VsOmJlZm9yZSxcbi5mYS1zaGVxZWw6YmVmb3JlLFxuLmZhLWlsczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwYlwiO1xufVxuLmZhLW1lYW5wYXRoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjBjXCI7XG59XG4uZmEtYnV5c2VsbGFkczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwZFwiO1xufVxuLmZhLWNvbm5lY3RkZXZlbG9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjBlXCI7XG59XG4uZmEtZGFzaGN1YmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMTBcIjtcbn1cbi5mYS1mb3J1bWJlZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxMVwiO1xufVxuLmZhLWxlYW5wdWI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMTJcIjtcbn1cbi5mYS1zZWxsc3k6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMTNcIjtcbn1cbi5mYS1zaGlydHNpbmJ1bGs6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMTRcIjtcbn1cbi5mYS1zaW1wbHlidWlsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxNVwiO1xufVxuLmZhLXNreWF0bGFzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjE2XCI7XG59XG4uZmEtY2FydC1wbHVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjE3XCI7XG59XG4uZmEtY2FydC1hcnJvdy1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjE4XCI7XG59XG4uZmEtZGlhbW9uZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxOVwiO1xufVxuLmZhLXNoaXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMWFcIjtcbn1cbi5mYS11c2VyLXNlY3JldDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxYlwiO1xufVxuLmZhLW1vdG9yY3ljbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMWNcIjtcbn1cbi5mYS1zdHJlZXQtdmlldzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxZFwiO1xufVxuLmZhLWhlYXJ0YmVhdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxZVwiO1xufVxuLmZhLXZlbnVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjIxXCI7XG59XG4uZmEtbWFyczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyMlwiO1xufVxuLmZhLW1lcmN1cnk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMjNcIjtcbn1cbi5mYS1pbnRlcnNleDpiZWZvcmUsXG4uZmEtdHJhbnNnZW5kZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMjRcIjtcbn1cbi5mYS10cmFuc2dlbmRlci1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMjVcIjtcbn1cbi5mYS12ZW51cy1kb3VibGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMjZcIjtcbn1cbi5mYS1tYXJzLWRvdWJsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyN1wiO1xufVxuLmZhLXZlbnVzLW1hcnM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMjhcIjtcbn1cbi5mYS1tYXJzLXN0cm9rZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyOVwiO1xufVxuLmZhLW1hcnMtc3Ryb2tlLXY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMmFcIjtcbn1cbi5mYS1tYXJzLXN0cm9rZS1oOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjJiXCI7XG59XG4uZmEtbmV1dGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjJjXCI7XG59XG4uZmEtZ2VuZGVybGVzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyZFwiO1xufVxuLmZhLWZhY2Vib29rLW9mZmljaWFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjMwXCI7XG59XG4uZmEtcGludGVyZXN0LXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMzFcIjtcbn1cbi5mYS13aGF0c2FwcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzMlwiO1xufVxuLmZhLXNlcnZlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzM1wiO1xufVxuLmZhLXVzZXItcGx1czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzNFwiO1xufVxuLmZhLXVzZXItdGltZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMzVcIjtcbn1cbi5mYS1ob3RlbDpiZWZvcmUsXG4uZmEtYmVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjM2XCI7XG59XG4uZmEtdmlhY29pbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzN1wiO1xufVxuLmZhLXRyYWluOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjM4XCI7XG59XG4uZmEtc3Vid2F5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjM5XCI7XG59XG4uZmEtbWVkaXVtOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjNhXCI7XG59XG4uZmEteWM6YmVmb3JlLFxuLmZhLXktY29tYmluYXRvcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzYlwiO1xufVxuLmZhLW9wdGluLW1vbnN0ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyM2NcIjtcbn1cbi5mYS1vcGVuY2FydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzZFwiO1xufVxuLmZhLWV4cGVkaXRlZHNzbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzZVwiO1xufVxuLmZhLWJhdHRlcnktNDpiZWZvcmUsXG4uZmEtYmF0dGVyeTpiZWZvcmUsXG4uZmEtYmF0dGVyeS1mdWxsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjQwXCI7XG59XG4uZmEtYmF0dGVyeS0zOmJlZm9yZSxcbi5mYS1iYXR0ZXJ5LXRocmVlLXF1YXJ0ZXJzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjQxXCI7XG59XG4uZmEtYmF0dGVyeS0yOmJlZm9yZSxcbi5mYS1iYXR0ZXJ5LWhhbGY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNDJcIjtcbn1cbi5mYS1iYXR0ZXJ5LTE6YmVmb3JlLFxuLmZhLWJhdHRlcnktcXVhcnRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0M1wiO1xufVxuLmZhLWJhdHRlcnktMDpiZWZvcmUsXG4uZmEtYmF0dGVyeS1lbXB0eTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0NFwiO1xufVxuLmZhLW1vdXNlLXBvaW50ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNDVcIjtcbn1cbi5mYS1pLWN1cnNvcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0NlwiO1xufVxuLmZhLW9iamVjdC1ncm91cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0N1wiO1xufVxuLmZhLW9iamVjdC11bmdyb3VwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjQ4XCI7XG59XG4uZmEtc3RpY2t5LW5vdGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNDlcIjtcbn1cbi5mYS1zdGlja3ktbm90ZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjRhXCI7XG59XG4uZmEtY2MtamNiOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjRiXCI7XG59XG4uZmEtY2MtZGluZXJzLWNsdWI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNGNcIjtcbn1cbi5mYS1jbG9uZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0ZFwiO1xufVxuLmZhLWJhbGFuY2Utc2NhbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNGVcIjtcbn1cbi5mYS1ob3VyZ2xhc3MtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1MFwiO1xufVxuLmZhLWhvdXJnbGFzcy0xOmJlZm9yZSxcbi5mYS1ob3VyZ2xhc3Mtc3RhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNTFcIjtcbn1cbi5mYS1ob3VyZ2xhc3MtMjpiZWZvcmUsXG4uZmEtaG91cmdsYXNzLWhhbGY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNTJcIjtcbn1cbi5mYS1ob3VyZ2xhc3MtMzpiZWZvcmUsXG4uZmEtaG91cmdsYXNzLWVuZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1M1wiO1xufVxuLmZhLWhvdXJnbGFzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1NFwiO1xufVxuLmZhLWhhbmQtZ3JhYi1vOmJlZm9yZSxcbi5mYS1oYW5kLXJvY2stbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1NVwiO1xufVxuLmZhLWhhbmQtc3RvcC1vOmJlZm9yZSxcbi5mYS1oYW5kLXBhcGVyLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNTZcIjtcbn1cbi5mYS1oYW5kLXNjaXNzb3JzLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNTdcIjtcbn1cbi5mYS1oYW5kLWxpemFyZC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjU4XCI7XG59XG4uZmEtaGFuZC1zcG9jay1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjU5XCI7XG59XG4uZmEtaGFuZC1wb2ludGVyLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNWFcIjtcbn1cbi5mYS1oYW5kLXBlYWNlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNWJcIjtcbn1cbi5mYS10cmFkZW1hcms6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNWNcIjtcbn1cbi5mYS1yZWdpc3RlcmVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjVkXCI7XG59XG4uZmEtY3JlYXRpdmUtY29tbW9uczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1ZVwiO1xufVxuLmZhLWdnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjYwXCI7XG59XG4uZmEtZ2ctY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjYxXCI7XG59XG4uZmEtdHJpcGFkdmlzb3I6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjJcIjtcbn1cbi5mYS1vZG5va2xhc3NuaWtpOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjYzXCI7XG59XG4uZmEtb2Rub2tsYXNzbmlraS1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjRcIjtcbn1cbi5mYS1nZXQtcG9ja2V0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjY1XCI7XG59XG4uZmEtd2lraXBlZGlhLXc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjZcIjtcbn1cbi5mYS1zYWZhcmk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjdcIjtcbn1cbi5mYS1jaHJvbWU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjhcIjtcbn1cbi5mYS1maXJlZm94OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjY5XCI7XG59XG4uZmEtb3BlcmE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNmFcIjtcbn1cbi5mYS1pbnRlcm5ldC1leHBsb3JlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI2YlwiO1xufVxuLmZhLXR2OmJlZm9yZSxcbi5mYS10ZWxldmlzaW9uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjZjXCI7XG59XG4uZmEtY29udGFvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjZkXCI7XG59XG4uZmEtNTAwcHg6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNmVcIjtcbn1cbi5mYS1hbWF6b246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNzBcIjtcbn1cbi5mYS1jYWxlbmRhci1wbHVzLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNzFcIjtcbn1cbi5mYS1jYWxlbmRhci1taW51cy1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjcyXCI7XG59XG4uZmEtY2FsZW5kYXItdGltZXMtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3M1wiO1xufVxuLmZhLWNhbGVuZGFyLWNoZWNrLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNzRcIjtcbn1cbi5mYS1pbmR1c3RyeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3NVwiO1xufVxuLmZhLW1hcC1waW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNzZcIjtcbn1cbi5mYS1tYXAtc2lnbnM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNzdcIjtcbn1cbi5mYS1tYXAtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3OFwiO1xufVxuLmZhLW1hcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3OVwiO1xufVxuLmZhLWNvbW1lbnRpbmc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyN2FcIjtcbn1cbi5mYS1jb21tZW50aW5nLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyN2JcIjtcbn1cbi5mYS1ob3V6ejpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3Y1wiO1xufVxuLmZhLXZpbWVvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjdkXCI7XG59XG4uZmEtYmxhY2stdGllOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjdlXCI7XG59XG4uZmEtZm9udGljb25zOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjgwXCI7XG59XG4uZmEtcmVkZGl0LWFsaWVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjgxXCI7XG59XG4uZmEtZWRnZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI4MlwiO1xufVxuLmZhLWNyZWRpdC1jYXJkLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI4M1wiO1xufVxuLmZhLWNvZGllcGllOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjg0XCI7XG59XG4uZmEtbW9keDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI4NVwiO1xufVxuLmZhLWZvcnQtYXdlc29tZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI4NlwiO1xufVxuLmZhLXVzYjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI4N1wiO1xufVxuLmZhLXByb2R1Y3QtaHVudDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI4OFwiO1xufVxuLmZhLW1peGNsb3VkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjg5XCI7XG59XG4uZmEtc2NyaWJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjhhXCI7XG59XG4uZmEtcGF1c2UtY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjhiXCI7XG59XG4uZmEtcGF1c2UtY2lyY2xlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOGNcIjtcbn1cbi5mYS1zdG9wLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI4ZFwiO1xufVxuLmZhLXN0b3AtY2lyY2xlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOGVcIjtcbn1cbi5mYS1zaG9wcGluZy1iYWc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOTBcIjtcbn1cbi5mYS1zaG9wcGluZy1iYXNrZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOTFcIjtcbn1cbi5mYS1oYXNodGFnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjkyXCI7XG59XG4uZmEtYmx1ZXRvb3RoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjkzXCI7XG59XG4uZmEtYmx1ZXRvb3RoLWI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOTRcIjtcbn1cbi5mYS1wZXJjZW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjk1XCI7XG59XG4uZmEtZ2l0bGFiOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjk2XCI7XG59XG4uZmEtd3BiZWdpbm5lcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI5N1wiO1xufVxuLmZhLXdwZm9ybXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOThcIjtcbn1cbi5mYS1lbnZpcmE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOTlcIjtcbn1cbi5mYS11bml2ZXJzYWwtYWNjZXNzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjlhXCI7XG59XG4uZmEtd2hlZWxjaGFpci1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOWJcIjtcbn1cbi5mYS1xdWVzdGlvbi1jaXJjbGUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI5Y1wiO1xufVxuLmZhLWJsaW5kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjlkXCI7XG59XG4uZmEtYXVkaW8tZGVzY3JpcHRpb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOWVcIjtcbn1cbi5mYS12b2x1bWUtY29udHJvbC1waG9uZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJhMFwiO1xufVxuLmZhLWJyYWlsbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYTFcIjtcbn1cbi5mYS1hc3Npc3RpdmUtbGlzdGVuaW5nLXN5c3RlbXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYTJcIjtcbn1cbi5mYS1hc2wtaW50ZXJwcmV0aW5nOmJlZm9yZSxcbi5mYS1hbWVyaWNhbi1zaWduLWxhbmd1YWdlLWludGVycHJldGluZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJhM1wiO1xufVxuLmZhLWRlYWZuZXNzOmJlZm9yZSxcbi5mYS1oYXJkLW9mLWhlYXJpbmc6YmVmb3JlLFxuLmZhLWRlYWY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYTRcIjtcbn1cbi5mYS1nbGlkZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJhNVwiO1xufVxuLmZhLWdsaWRlLWc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYTZcIjtcbn1cbi5mYS1zaWduaW5nOmJlZm9yZSxcbi5mYS1zaWduLWxhbmd1YWdlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmE3XCI7XG59XG4uZmEtbG93LXZpc2lvbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJhOFwiO1xufVxuLmZhLXZpYWRlbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJhOVwiO1xufVxuLmZhLXZpYWRlby1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYWFcIjtcbn1cbi5mYS1zbmFwY2hhdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJhYlwiO1xufVxuLmZhLXNuYXBjaGF0LWdob3N0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmFjXCI7XG59XG4uZmEtc25hcGNoYXQtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmFkXCI7XG59XG4uZmEtcGllZC1waXBlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJhZVwiO1xufVxuLmZhLWZpcnN0LW9yZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmIwXCI7XG59XG4uZmEteW9hc3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYjFcIjtcbn1cbi5mYS10aGVtZWlzbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYjJcIjtcbn1cbi5mYS1nb29nbGUtcGx1cy1jaXJjbGU6YmVmb3JlLFxuLmZhLWdvb2dsZS1wbHVzLW9mZmljaWFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmIzXCI7XG59XG4uZmEtZmE6YmVmb3JlLFxuLmZhLWZvbnQtYXdlc29tZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJiNFwiO1xufVxuLmZhLWhhbmRzaGFrZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmI1XCI7XG59XG4uZmEtZW52ZWxvcGUtb3BlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJiNlwiO1xufVxuLmZhLWVudmVsb3BlLW9wZW4tbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJiN1wiO1xufVxuLmZhLWxpbm9kZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJiOFwiO1xufVxuLmZhLWFkZHJlc3MtYm9vazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJiOVwiO1xufVxuLmZhLWFkZHJlc3MtYm9vay1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmJhXCI7XG59XG4uZmEtdmNhcmQ6YmVmb3JlLFxuLmZhLWFkZHJlc3MtY2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJiYlwiO1xufVxuLmZhLXZjYXJkLW86YmVmb3JlLFxuLmZhLWFkZHJlc3MtY2FyZC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmJjXCI7XG59XG4uZmEtdXNlci1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYmRcIjtcbn1cbi5mYS11c2VyLWNpcmNsZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmJlXCI7XG59XG4uZmEtdXNlci1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmMwXCI7XG59XG4uZmEtaWQtYmFkZ2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYzFcIjtcbn1cbi5mYS1kcml2ZXJzLWxpY2Vuc2U6YmVmb3JlLFxuLmZhLWlkLWNhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYzJcIjtcbn1cbi5mYS1kcml2ZXJzLWxpY2Vuc2UtbzpiZWZvcmUsXG4uZmEtaWQtY2FyZC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmMzXCI7XG59XG4uZmEtcXVvcmE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYzRcIjtcbn1cbi5mYS1mcmVlLWNvZGUtY2FtcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJjNVwiO1xufVxuLmZhLXRlbGVncmFtOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmM2XCI7XG59XG4uZmEtdGhlcm1vbWV0ZXItNDpiZWZvcmUsXG4uZmEtdGhlcm1vbWV0ZXI6YmVmb3JlLFxuLmZhLXRoZXJtb21ldGVyLWZ1bGw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYzdcIjtcbn1cbi5mYS10aGVybW9tZXRlci0zOmJlZm9yZSxcbi5mYS10aGVybW9tZXRlci10aHJlZS1xdWFydGVyczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJjOFwiO1xufVxuLmZhLXRoZXJtb21ldGVyLTI6YmVmb3JlLFxuLmZhLXRoZXJtb21ldGVyLWhhbGY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYzlcIjtcbn1cbi5mYS10aGVybW9tZXRlci0xOmJlZm9yZSxcbi5mYS10aGVybW9tZXRlci1xdWFydGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmNhXCI7XG59XG4uZmEtdGhlcm1vbWV0ZXItMDpiZWZvcmUsXG4uZmEtdGhlcm1vbWV0ZXItZW1wdHk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyY2JcIjtcbn1cbi5mYS1zaG93ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyY2NcIjtcbn1cbi5mYS1iYXRodHViOmJlZm9yZSxcbi5mYS1zMTU6YmVmb3JlLFxuLmZhLWJhdGg6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyY2RcIjtcbn1cbi5mYS1wb2RjYXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmNlXCI7XG59XG4uZmEtd2luZG93LW1heGltaXplOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmQwXCI7XG59XG4uZmEtd2luZG93LW1pbmltaXplOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmQxXCI7XG59XG4uZmEtd2luZG93LXJlc3RvcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZDJcIjtcbn1cbi5mYS10aW1lcy1yZWN0YW5nbGU6YmVmb3JlLFxuLmZhLXdpbmRvdy1jbG9zZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJkM1wiO1xufVxuLmZhLXRpbWVzLXJlY3RhbmdsZS1vOmJlZm9yZSxcbi5mYS13aW5kb3ctY2xvc2UtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJkNFwiO1xufVxuLmZhLWJhbmRjYW1wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmQ1XCI7XG59XG4uZmEtZ3JhdjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJkNlwiO1xufVxuLmZhLWV0c3k6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZDdcIjtcbn1cbi5mYS1pbWRiOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmQ4XCI7XG59XG4uZmEtcmF2ZWxyeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJkOVwiO1xufVxuLmZhLWVlcmNhc3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZGFcIjtcbn1cbi5mYS1taWNyb2NoaXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZGJcIjtcbn1cbi5mYS1zbm93Zmxha2UtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJkY1wiO1xufVxuLmZhLXN1cGVycG93ZXJzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmRkXCI7XG59XG4uZmEtd3BleHBsb3JlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJkZVwiO1xufVxuLmZhLW1lZXR1cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJlMFwiO1xufVxuLnNyLW9ubHkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxcHg7XG4gIGhlaWdodDogMXB4O1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IC0xcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7XG4gIGJvcmRlcjogMDtcbn1cbi5zci1vbmx5LWZvY3VzYWJsZTphY3RpdmUsXG4uc3Itb25seS1mb2N1c2FibGU6Zm9jdXMge1xuICBwb3NpdGlvbjogc3RhdGljO1xuICB3aWR0aDogYXV0bztcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXJnaW46IDA7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xuICBjbGlwOiBhdXRvO1xufVxuXG5AY2hhcnNldCBcInV0Zi04XCI7XG4uZGlzcGxheUJhciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDIzNnB4O1xuICBoZWlnaHQ6IDE2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7XG4gIGZsb2F0OiBsZWZ0O1xuICBtYXJnaW46IDAgNXB4IDAgMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZDogIzAwMDAwMDtcbn1cbi5kaXNwbGF5QmFyVGV4dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtMnB4O1xuICBsZWZ0OiA1cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xufVxuLmRpc3BsYXlCYXJGaWxsIHtcbiAgd2lkdGg6IDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQ6ICM0MDYyOGE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGZsb2F0OiBsZWZ0O1xufVxuLmRpc3BsYXlCYXJGaWxsLmFsaWduUmlnaHQge1xuICBmbG9hdDogcmlnaHQ7XG59XG4uZGlzcGxheUJhclRleHQuZ29vZCB7XG4gIGNvbG9yOiB3aGl0ZTtcbn1cbi5kaXNwbGF5QmFyVGV4dC5ub3Rnb29kIHtcbiAgY29sb3I6IHdoaXRlO1xufVxuLmRpc3BsYXlCYXJUZXh0LmF2ZXJhZ2Uge1xuICBjb2xvcjogd2hpdGU7XG59XG4uZGlzcGxheUJhclRleHQuYmFkIHtcbiAgY29sb3I6IHdoaXRlO1xufVxuLmRpc3BsYXlCYXJUZXh0LmhpZ2hsaWdodCB7XG4gIGNvbG9yOiBibGFjaztcbn1cbi5kaXNwbGF5QmFyRmlsbC5nb29kIHtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIGJhY2tncm91bmQ6ICM0Zjc1Mjk7XG59XG4uZGlzcGxheUJhckZpbGwubm90Z29vZCB7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBiYWNrZ3JvdW5kOiAjZmZiNDAwO1xufVxuLmRpc3BsYXlCYXJGaWxsLmF2ZXJhZ2Uge1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgYmFja2dyb3VuZDogI2NkNjUwMDtcbn1cbi5kaXNwbGF5QmFyRmlsbC5iYWQge1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgYmFja2dyb3VuZDogI2VlMDAwMDtcbn1cbi5kaXNwbGF5QmFyRmlsbC5oaWdobGlnaHQge1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgYmFja2dyb3VuZDogIzhCQTVDNDtcbn1cbi5saW5rLFxuLmxpbmtPbixcbi5saW5rT2ZmLFxuLnNlbGVjdGVkLFxuLmRpc2FibGVkLFxuLnllbGxvd0J1dHRvbixcbi5yZWRCdXR0b24sXG4ubGlua0VuY291cmFnZSxcbi5saW5rRGlzY291cmFnZSB7XG4gIGZsb2F0OiBsZWZ0O1xuICBtaW4td2lkdGg6IDE1cHg7XG4gIGhlaWdodDogMTZweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBiYWNrZ3JvdW5kOiAjNDA2MjhhO1xuICBib3JkZXI6IDFweCBzb2xpZCAjMTYxNjE2O1xuICBwYWRkaW5nOiAwcHggNHB4IDRweCA0cHg7XG4gIG1hcmdpbjogMCAycHggMnB4IDA7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbi5oYXNJY29uIHtcbiAgcGFkZGluZzogMHB4IDRweCA0cHggMHB4O1xufVxuYS5ob3Zlcixcbi56b29tTGluay5ob3Zlcixcbi5saW5rQWN0aXZlLmhvdmVyIHtcbiAgYmFja2dyb3VuZDogIzUwN2FhYztcbn1cbkBrZXlmcmFtZXMgcGVuZGluZ0FuaW1hdGlvbiB7XG4gIHRvIHtcbiAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICBiYWNrZ3JvdW5kOiAjNTA3YWFjO1xuICB9XG59XG4ubGlua1BlbmRpbmcsXG4ubGlua1BlbmRpbmcuaG92ZXIge1xuICBhbmltYXRpb24tbmFtZTogcGVuZGluZ0FuaW1hdGlvbjtcbiAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjI1cztcbn1cbmEud2hpdGUsXG5hLndoaXRlOmxpbmssXG5hLndoaXRlOnZpc2l0ZWQsXG5hLndoaXRlOmFjdGl2ZSB7XG4gIGNvbG9yOiAjNDA2MjhhO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMxNjE2MTY7XG4gIHBhZGRpbmc6IDFweCA0cHggMXB4IDRweDtcbiAgbWFyZ2luOiAwIDJweCAwIDA7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cbmEud2hpdGUuaG92ZXIge1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgYmFja2dyb3VuZDogIzQwNjI4YTtcbn1cbi5saW5rT24sXG5hLmxpbmtPbjpsaW5rLFxuYS5saW5rT246dmlzaXRlZCxcbmEubGlua09uOmFjdGl2ZSxcbmEubGlua09uLmhvdmVyLFxuLnNlbGVjdGVkLFxuYS5zZWxlY3RlZDpsaW5rLFxuYS5zZWxlY3RlZDp2aXNpdGVkLFxuYS5zZWxlY3RlZDphY3RpdmUsXG5hLnNlbGVjdGVkLmhvdmVyIHtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIGJhY2tncm91bmQ6ICMyZjk0M2M7XG59XG4ubGlua09mZixcbmEubGlua09mZjpsaW5rLFxuYS5saW5rT2ZmOnZpc2l0ZWQsXG5hLmxpbmtPZmY6YWN0aXZlLFxuYS5saW5rT2ZmLmhvdmVyLFxuLmRpc2FibGVkLFxuYS5kaXNhYmxlZDpsaW5rLFxuYS5kaXNhYmxlZDp2aXNpdGVkLFxuYS5kaXNhYmxlZDphY3RpdmUsXG5hLmRpc2FibGVkLmhvdmVyIHtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIGJhY2tncm91bmQ6ICM5OTk5OTk7XG4gIGJvcmRlci1jb2xvcjogIzY2NjY2Njtcbn1cbmEuaWNvbixcbi5saW5rT24uaWNvbixcbi5saW5rT2ZmLmljb24sXG4uc2VsZWN0ZWQuaWNvbixcbi5kaXNhYmxlZC5pY29uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAxcHggNHB4IDJweCAyMHB4O1xufVxuYS5pY29uIGltZyxcbi5saW5rT24uaWNvbiBpbWcsXG4ubGlua09mZi5pY29uIGltZyxcbi5zZWxlY3RlZC5pY29uIGltZyxcbi5kaXNhYmxlZC5pY29uIGltZyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMThweDtcbiAgaGVpZ2h0OiAxOHB4O1xufVxuLmxpbmtEYW5nZXIsXG5hLmxpbmtEYW5nZXI6bGluayxcbmEubGlua0Rhbmdlcjp2aXNpdGVkLFxuYS5saW5rRGFuZ2VyOmFjdGl2ZSB7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmYwMDAwO1xuICBib3JkZXItY29sb3I6ICNhYTAwMDA7XG59XG4ubGlua0Rhbmdlci5ob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjY2NjY7XG59XG4ubGlua0VuY291cmFnZSxcbmEubGlua0VuY291cmFnZTpsaW5rLFxuYS5saW5rRW5jb3VyYWdlOnZpc2l0ZWQsXG5hLmxpbmtFbmNvdXJhZ2U6YWN0aXZlIHtcbiAgY29sb3I6ICM5OWZmMzM7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0MDYyOGE7XG4gIGJvcmRlci1jb2xvcjogIzE2MTYxNjtcbn1cbi5saW5rRW5jb3VyYWdlLmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzUwN2FhYztcbn1cbi5saW5rRGlzY291cmFnZSxcbmEubGlua0Rpc2NvdXJhZ2U6bGluayxcbmEubGlua0Rpc2NvdXJhZ2U6dmlzaXRlZCxcbmEubGlua0Rpc2NvdXJhZ2U6YWN0aXZlIHtcbiAgY29sb3I6ICM4YzhjOGM7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0MDYyOGE7XG4gIGJvcmRlci1jb2xvcjogIzE2MTYxNjtcbn1cbi5saW5rRGlzY291cmFnZS5ob3ZlciB7XG4gIGNvbG9yOiAjZmYwMDAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTA3YWFjO1xufVxuLmluYWN0aXZlLFxuYS5pbmFjdGl2ZTpsaW5rLFxuYS5pbmFjdGl2ZTp2aXNpdGVkLFxuYS5pbmFjdGl2ZTphY3RpdmUsXG5hLmluYWN0aXZlLmhvdmVyIHtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIGJhY2tncm91bmQ6ICM5OTk5OTk7XG4gIGJvcmRlci1jb2xvcjogIzY2NjY2Njtcbn1cbi53aGl0ZSB7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4uZ29vZCB7XG4gIGNvbG9yOiAjNGY3NTI5O1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbi5hdmVyYWdlIHtcbiAgY29sb3I6ICNjZDY1MDA7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuLmJhZCB7XG4gIGNvbG9yOiAjZWUwMDAwO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbi5pZGxlIHtcbiAgY29sb3I6ICMyNzI3Mjc7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuLnJlZEJ1dHRvbiB7XG4gIGJhY2tncm91bmQ6ICNlYTAwMDA7XG59XG4ueWVsbG93QnV0dG9uIHtcbiAgYmFja2dyb3VuZDogI2NhY2MwMDtcbn1cbi5oaWdobGlnaHQge1xuICBjb2xvcjogIzhCQTVDNDtcbn1cbi5kYXJrIHtcbiAgY29sb3I6ICMyNzI3Mjc7XG59XG4vKiBEYW1hZ2UgY29sb3JzIGZvciBjcmV3IG1vbml0b3JpbmcgY29tcHV0ZXIgKi9cbi5idXJuIHtcbiAgY29sb3I6IG9yYW5nZTtcbn1cbi5icnV0ZSB7XG4gIGNvbG9yOiByZWQ7XG59XG4udG94aW4ge1xuICBjb2xvcjogZ3JlZW47XG59XG4udG94aW5fbGlnaHQge1xuICBjb2xvcjogIzNBREYwMDtcbn1cbi5veHlsb3NzIHtcbiAgY29sb3I6IGJsdWU7XG59XG4ub3h5bG9zc19saWdodCB7XG4gIGNvbG9yOiAjNjY5OEZGO1xufVxuLyogV2lyZSBjb2xvcnMgZm9yIG51Y2xlYXIgYm9tYiBkZWZ1c2lvbiAqL1xuLlJlZCB7XG4gIGNvbG9yOiAjRkYwMDAwO1xufVxuLkJsdWUge1xuICBjb2xvcjogIzAwMDBGRjtcbn1cbi5HcmVlbiB7XG4gIGNvbG9yOiAjMDBGRjAwO1xufVxuLk1hcmlnb2xkIHtcbiAgY29sb3I6ICNGREE1MDU7XG59XG4uRnVzY2hpYSB7XG4gIGNvbG9yOiAjRkYwMDgwO1xufVxuLkJsYWNrIHtcbiAgY29sb3I6ICMwMDAwMDA7XG59XG4uUGVhcmwge1xuICBjb2xvcjogI0M2Q0FDQjtcbn1cbi8qIFN0YXR1cyBiYXIgY29sb3JzIGZvciBzbGVlcGVyIHRlbXBlcmF0dXJlcyAqL1xuLmNvbGQxIHtcbiAgY29sb3I6ICM5NEI4RkY7XG59XG4uY29sZDIge1xuICBjb2xvcjogIzY2OTlGRjtcbn1cbi5jb2xkMyB7XG4gIGNvbG9yOiAjMjkzRDY2O1xufVxuLmhvdDEge1xuICBjb2xvcjogI0ZGOTk2Njtcbn1cbi5ob3QyIHtcbiAgY29sb3I6ICM5OTNEMDA7XG59XG4uaG90MyB7XG4gIGNvbG9yOiAjRkY2NjAwO1xufVxuZGl2LmRpc3BsYXkge1xuICBwYWRkaW5nOiA0cHg7XG4gIG1hcmdpbjogNnB4IDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zMyk7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMCA1cHggcmdiYSgwLCAwLCAwLCAwLjUpO1xufVxuZGl2LmRpc3BsYXkgaGVhZGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDk4LjUlO1xuICBwYWRkaW5nOiAwIDRweDtcbiAgbWFyZ2luLWJvdHRvbTogNnB4O1xuICBjb2xvcjogI0ZGRkZGRjtcbiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICM0MDYyOGE7XG59XG5kaXYuZGlzcGxheSBoZWFkZXIgLmJ1dHRvblJpZ2h0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDZweDtcbiAgcmlnaHQ6IDRweDtcbn1cbmRpdi5kaXNwbGF5IGFydGljbGUge1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG59XG4uaXRlbUdyb3VwIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U5YzE4MztcbiAgYmFja2dyb3VuZDogIzJjMmMyYztcbiAgcGFkZGluZzogNHB4O1xuICBjbGVhcjogYm90aDtcbn1cbi5pdGVtIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogNHB4IDAgMCAwO1xuICBjbGVhcjogYm90aDtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4uaXRlbUNvbnRlbnROYXJyb3csXG4uaXRlbUNvbnRlbnQge1xuICBmbG9hdDogbGVmdDtcbn1cbi5pdGVtQ29udGVudE5hcnJvdyB7XG4gIHdpZHRoOiAzMCU7XG59XG4uaXRlbUNvbnRlbnQge1xuICB3aWR0aDogNjklO1xufVxuLml0ZW1MYWJlbE5hcnJvdyxcbi5pdGVtTGFiZWwsXG4uaXRlbUxhYmVsV2lkZSxcbi5pdGVtTGFiZWxXaWRlcixcbi5pdGVtTGFiZWxXaWRlc3Qge1xuICBmbG9hdDogbGVmdDtcbiAgY29sb3I6ICNlOWMxODM7XG59XG4uaXRlbUxhYmVsTmFycm93IHtcbiAgd2lkdGg6IDIwJTtcbn1cbi5pdGVtTGFiZWwge1xuICB3aWR0aDogMzAlO1xufVxuLml0ZW1MYWJlbFdpZGUge1xuICB3aWR0aDogNDUlO1xufVxuLml0ZW1MYWJlbFdpZGVyIHtcbiAgd2lkdGg6IDY5JTtcbn1cbi5pdGVtTGFiZWxXaWRlc3Qge1xuICB3aWR0aDogMTAwJTtcbn1cbi5pdGVtQ29udGVudFdpZGUge1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDc5JTtcbn1cbi5pdGVtQ29udGVudFNtYWxsIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHdpZHRoOiAzMyU7XG59XG4uaXRlbUNvbnRlbnRNZWRpdW0ge1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDU1JTtcbn1cbi5ibG9jayB7XG4gIHBhZGRpbmc6IDhweDtcbiAgbWFyZ2luOiAxMHB4IDRweCA0cHggNHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjNDA2MjhhO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjAyMDIwO1xufVxuLmJsb2NrIGgzIHtcbiAgcGFkZGluZzogMDtcbn1cbi5jbGVhckJvdGgge1xuICBjbGVhcjogYm90aDtcbn1cbi5jbGVhckxlZnQge1xuICBjbGVhcjogbGVmdDtcbn1cbi5jbGVhclJpZ2h0IHtcbiAgY2xlYXI6IHJpZ2h0O1xufVxuLmxpbmUge1xuICB3aWR0aDogMTAwJTtcbiAgY2xlYXI6IGJvdGg7XG59XG4uZml4ZWRMZWZ0IHtcbiAgd2lkdGg6IDExMHB4O1xuICBmbG9hdDogbGVmdDtcbn1cbi5maXhlZExlZnRXaWRlIHtcbiAgd2lkdGg6IDE2NXB4O1xuICBmbG9hdDogbGVmdDtcbn1cbi5maXhlZExlZnRXaWRlciB7XG4gIHdpZHRoOiAyMjBweDtcbiAgZmxvYXQ6IGxlZnQ7XG59XG4uZml4ZWRMZWZ0V2lkZXN0IHtcbiAgd2lkdGg6IDI1MHB4O1xuICBmbG9hdDogbGVmdDtcbn1cbi5mbG9hdFJpZ2h0IHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuLmZsb2F0TGVmdCB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLmhpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4uc3RhdHVzRGlzcGxheSB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICM0MDYyOGE7XG4gIHBhZGRpbmc6IDRweDtcbiAgbWFyZ2luOiAzcHggMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5zdGF0dXNEaXNwbGF5UmVjb3JkcyB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICM0MDYyOGE7XG4gIHBhZGRpbmc6IDRweDtcbiAgbWFyZ2luOiAzcHggMDtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuLnN0YXR1c0xhYmVsIHtcbiAgd2lkdGg6IDEzOHB4O1xuICBmbG9hdDogbGVmdDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgY29sb3I6ICM5OEIwQzM7XG59XG4uc3RhdHVzVmFsdWUge1xuICBmbG9hdDogbGVmdDtcbn1cbi5qb2JWYWx1ZXMge1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDMwJTtcbn1cbi5mYW5jeSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5pLmZhbmN5IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5taW5pbWl6ZSB7XG4gIGNvbG9yOiAjRTlDMTgzO1xuICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDtcbiAgei1pbmRleDogMTAyO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNnB4O1xuICByaWdodDogNDZweDtcbn1cbi5taW5pbWl6ZTpob3ZlciB7XG4gIGNvbG9yOiAjYjhjOWQ2O1xufVxuLmNsb3NlIHtcbiAgY29sb3I6ICNFOUMxODM7XG4gIGN1cnNvcjogcG9pbnRlciAhaW1wb3J0YW50O1xuICB6LWluZGV4OiAxMDI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA0cHg7XG4gIHJpZ2h0OiAxMnB4O1xufVxuLmNsb3NlOmhvdmVyIHtcbiAgY29sb3I6ICNiOGM5ZDY7XG59XG4jdWlDb3JuZXJUTCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgei1pbmRleDogMTAxO1xuICBtaW4td2lkdGg6IDMwcHg7XG4gIG1pbi1oZWlnaHQ6IDMwcHg7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgYmFja2dyb3VuZDogdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCNEFBQUFlQ0FJQUFBQzBVam4xQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUdUR2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQRDk0Y0dGamEyVjBJR0psWjJsdVBTTHZ1NzhpSUdsa1BTSlhOVTB3VFhCRFpXaHBTSHB5WlZONlRsUmplbXRqT1dRaVB6NGdQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlRV1J2WW1VZ1dFMVFJRU52Y21VZ05TNDJMV014TkRJZ056a3VNVFl3T1RJMExDQXlNREUzTHpBM0x6RXpMVEF4T2pBMk9qTTVJQ0FnSUNBZ0lDQWlQaUE4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGlBOGNtUm1Pa1JsYzJOeWFYQjBhVzl1SUhKa1pqcGhZbTkxZEQwaUlpQjRiV3h1Y3pwNGJYQTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzhpSUhodGJHNXpPbVJqUFNKb2RIUndPaTh2Y0hWeWJDNXZjbWN2WkdNdlpXeGxiV1Z1ZEhNdk1TNHhMeUlnZUcxc2JuTTZjR2h2ZEc5emFHOXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNCb2IzUnZjMmh2Y0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JGZG5ROUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlVWMlpXNTBJeUlnZUcxd09rTnlaV0YwYjNKVWIyOXNQU0pCWkc5aVpTQlFhRzkwYjNOb2IzQWdRME1nTWpBeE9DQW9WMmx1Wkc5M2N5a2lJSGh0Y0RwRGNtVmhkR1ZFWVhSbFBTSXlNREU0TFRFeExUSXdWREl5T2pNNE9qSTFMVEE0T2pBd0lpQjRiWEE2VFc5a2FXWjVSR0YwWlQwaU1qQXhPQzB4TVMweU1GUXlNem93TXpvd01TMHdPRG93TUNJZ2VHMXdPazFsZEdGa1lYUmhSR0YwWlQwaU1qQXhPQzB4TVMweU1GUXlNem93TXpvd01TMHdPRG93TUNJZ1pHTTZabTl5YldGMFBTSnBiV0ZuWlM5d2JtY2lJSEJvYjNSdmMyaHZjRHBEYjJ4dmNrMXZaR1U5SWpNaUlIQm9iM1J2YzJodmNEcEpRME5RY205bWFXeGxQU0p6VWtkQ0lFbEZRell4T1RZMkxUSXVNU0lnZUcxd1RVMDZTVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBrT1dSbE16YzFZaTA0WldRd0xXSTNORGN0T1RRelpTMHpOMlV3WkdVMk5Ea3lPRFFpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW1Ga2IySmxPbVJ2WTJsa09uQm9iM1J2YzJodmNEbzBabVZoWmpKbVpDMDNZV1ZoTFdVeU5HUXRZVE5rWlMwNVptSTVaR00wWlRBMFl6SWlJSGh0Y0UxTk9rOXlhV2RwYm1Gc1JHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcGpaVFU0T1RrNU15MW1aRFUyTFRFek5Ea3RZV015TUMwM05HWmtabVk1TmpOallUZ2lQaUE4ZUcxd1RVMDZTR2x6ZEc5eWVUNGdQSEprWmpwVFpYRStJRHh5WkdZNmJHa2djM1JGZG5RNllXTjBhVzl1UFNKamNtVmhkR1ZrSWlCemRFVjJkRHBwYm5OMFlXNWpaVWxFUFNKNGJYQXVhV2xrT21ObE5UZzVPVGt6TFdaa05UWXRNVE0wT1MxaFl6SXdMVGMwWm1SbVpqazJNMk5oT0NJZ2MzUkZkblE2ZDJobGJqMGlNakF4T0MweE1TMHlNRlF5TWpvek9Eb3lOUzB3T0Rvd01DSWdjM1JGZG5RNmMyOW1kSGRoY21WQloyVnVkRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5ESURJd01UZ2dLRmRwYm1SdmQzTXBJaTgrSUR4eVpHWTZiR2tnYzNSRmRuUTZZV04wYVc5dVBTSmpiMjUyWlhKMFpXUWlJSE4wUlhaME9uQmhjbUZ0WlhSbGNuTTlJbVp5YjIwZ2FXMWhaMlV2WjJsbUlIUnZJR2x0WVdkbEwzQnVaeUl2UGlBOGNtUm1PbXhwSUhOMFJYWjBPbUZqZEdsdmJqMGljMkYyWldRaUlITjBSWFowT21sdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlpEbGtaVE0zTldJdE9HVmtNQzFpTnpRM0xUazBNMlV0TXpkbE1HUmxOalE1TWpnMElpQnpkRVYyZERwM2FHVnVQU0l5TURFNExURXhMVEl3VkRJek9qQXpPakF4TFRBNE9qQXdJaUJ6ZEVWMmREcHpiMlowZDJGeVpVRm5aVzUwUFNKQlpHOWlaU0JRYUc5MGIzTm9iM0FnUTBNZ01qQXhPQ0FvVjJsdVpHOTNjeWtpSUhOMFJYWjBPbU5vWVc1blpXUTlJaThpTHo0Z1BDOXlaR1k2VTJWeFBpQThMM2h0Y0UxTk9raHBjM1J2Y25rK0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBpQThMM0prWmpwU1JFWStJRHd2ZURwNGJYQnRaWFJoUGlBOFAzaHdZV05yWlhRZ1pXNWtQU0p5SWo4K1FuUktSQUFBQUloSlJFRlVTSW0xekxjUmdFQU1CTUNEb2tRZjlCL1NCd1F3bU9lTnpHa0wyR25IaGdTTHJIUFNDNEJmbnkrL3ZsOXkvWDZaZGZIUzZ2L0xxYXN2b1c2OTBicnpodXIrNjYrSHI3UFd2SjVhK1pwci9XdXJUYStodHI3YTJ2R3FhdDg3cnQzdm9JNjh2VHI0TnV2NFc2OHBiNlZtdldWTmZEODE5MzFxK252VkdTK0FTVVF5WGdBSHVPZ1lZd09raElZQUFBQUFTVVZPUks1Q1lJST1cIikgbm8tcmVwZWF0O1xufVxuLyogUmVzaXppbmcgKFN0b2xlbiBmcm9tIEdvb24gQ0MtQlktTkMtU0EpICovXG4ucmVzaXplQXJlYSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogOTk5OTk7XG59XG4ucmVzaXplQXJlYS50b3Age1xuICB0b3A6IDA7XG4gIGxlZnQ6IDEwcHg7XG4gIHJpZ2h0OiAxMHB4O1xuICBoZWlnaHQ6IDVweDtcbiAgY3Vyc29yOiBuLXJlc2l6ZTtcbn1cbi5yZXNpemVBcmVhLnRyIHtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgaGVpZ2h0OiAxMHB4O1xuICB3aWR0aDogMTBweDtcbiAgY3Vyc29yOiBuZS1yZXNpemU7XG59XG4ucmVzaXplQXJlYS5yaWdodCB7XG4gIHRvcDogMTBweDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMTBweDtcbiAgd2lkdGg6IDVweDtcbiAgY3Vyc29yOiBlLXJlc2l6ZTtcbn1cbi5yZXNpemVBcmVhLmJyIHtcbiAgYm90dG9tOiAwO1xuICByaWdodDogMDtcbiAgaGVpZ2h0OiAxMHB4O1xuICB3aWR0aDogMTBweDtcbiAgY3Vyc29yOiBzZS1yZXNpemU7XG59XG4ucmVzaXplQXJlYS5ib3R0b20ge1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDEwcHg7XG4gIHJpZ2h0OiAxMHB4O1xuICBoZWlnaHQ6IDVweDtcbiAgY3Vyc29yOiBzLXJlc2l6ZTtcbn1cbi5yZXNpemVBcmVhLmJsIHtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICBoZWlnaHQ6IDEwcHg7XG4gIHdpZHRoOiAxMHB4O1xuICBjdXJzb3I6IHN3LXJlc2l6ZTtcbn1cbi5yZXNpemVBcmVhLmxlZnQge1xuICB0b3A6IDEwcHg7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMTBweDtcbiAgd2lkdGg6IDVweDtcbiAgY3Vyc29yOiB3LXJlc2l6ZTtcbn1cbi5yZXNpemVBcmVhLnRsIHtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBoZWlnaHQ6IDEwcHg7XG4gIHdpZHRoOiAxMHB4O1xuICBjdXJzb3I6IG53LXJlc2l6ZTtcbn1cbi8qIEVuZCBSZXNpemluZyAqL1xuLyogSWNvbnNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyogc3RhdGVzIGFuZCBpbWFnZXMgKi9cbi51aUxpbmtQZW5kaW5nSWNvbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGZsb2F0OiBsZWZ0O1xuICB3aWR0aDogMTZweDtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW46IDJweCAycHggMCAycHg7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCh1aUxpbmtQZW5kaW5nSWNvbi5naWYpO1xufVxuLmxpbmtQZW5kaW5nIC5mYSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubGlua1BlbmRpbmcgLnVpTGlua1BlbmRpbmdJY29uIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4ubWFwSWNvbjE2IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMTZweDtcbiAgaGVpZ2h0OiAxNnB4O1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwodWlJY29uczE2R3JlZW4ucG5nKTtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC05NnB4O1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICB6b29tOiAwLjEyNTtcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XG4gIC8qbWFyZ2luLWJvdHRvbTogLTFweDsqL1xufVxuLm1hcEljb24xNi5kZWFkIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKHVpSWNvbnMxNlJlZC5wbmcpO1xufVxuLm1hcEljb24xNi5iYWQge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwodWlJY29uczE2UmVkLnBuZyk7XG59XG4ubWFwSWNvbjE2LmF2ZXJhZ2Uge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwodWlJY29uczE2T3JhbmdlLnBuZyk7XG59XG4ubWFwSWNvbjE2Lmdvb2Qge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwodWlJY29uczE2R3JlZW4ucG5nKTtcbn1cbi8qIEFpckFsYXJtICovXG4ubWFwSWNvbjE2Lmljb24tYWlyYWxhcm0ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNDRweDtcbn1cbi8qIENvbW1hbmQgUG9zaXRpb25zICovXG4ubWFwSWNvbjE2LnJhbmstY2FwdGFpbiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTEycHg7XG59XG4ubWFwSWNvbjE2LnJhbmstaGVhZG9mcGVyc29ubmVsIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC05NnB4O1xufVxuLm1hcEljb24xNi5yYW5rLWhlYWRvZnNlY3VyaXR5IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xMjhweDtcbn1cbi5tYXBJY29uMTYucmFuay1jaGllZmVuZ2luZWVyIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xMTJweDtcbn1cbi5tYXBJY29uMTYucmFuay1yZXNlYXJjaGRpcmVjdG9yIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xMjhweDtcbn1cbi5tYXBJY29uMTYucmFuay1jaGllZm1lZGljYWxvZmZpY2VyIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTEyOHB4O1xufVxuLyogRW5naW5lZXJpbmcgUG9zaXRpb25zICovXG4ubWFwSWNvbjE2LnJhbmstc3RhdGlvbmVuZ2luZWVyIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xMTJweDtcbn1cbi5tYXBJY29uMTYucmFuay1hdG1vc3BoZXJpY3RlY2huaWNpYW4ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTExMnB4O1xufVxuLyogTWVkaWNhbCBQb3NpdGlvbnMgKi9cbi5tYXBJY29uMTYucmFuay1tZWRpY2FsZG9jdG9yIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTEyOHB4O1xufVxuLm1hcEljb24xNi5yYW5rLWdlbmV0aWNpc3Qge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTI4cHg7XG59XG4ubWFwSWNvbjE2LnJhbmstcHN5Y2hpYXRyaXN0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTEyOHB4O1xufVxuLm1hcEljb24xNi5yYW5rLWNoZW1pc3Qge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTI4cHg7XG59XG4vKiBTY2llbmNlIFBvc2l0aW9ucyAqL1xuLm1hcEljb24xNi5yYW5rLXNjaWVudGlzdCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTI4cHg7XG59XG4ubWFwSWNvbjE2LnJhbmstZ2VuZXRpY2lzdCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTI4cHg7XG59XG4ubWFwSWNvbjE2LnJhbmstcm9ib3RpY2lzdCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTI4cHg7XG59XG4ubWFwSWNvbjE2LnJhbmsteGVub2Jpb2xvZ2lzdCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTI4cHg7XG59XG4vKiBTZWN1cml0eSBQb3NpdGlvbnMgKi9cbi5tYXBJY29uMTYucmFuay13YXJkZW4ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTEyOHB4O1xufVxuLm1hcEljb24xNi5yYW5rLWRldGVjdGl2ZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTI4cHg7XG59XG4ubWFwSWNvbjE2LnJhbmstc2VjdXJpdHlvZmZpY2VyIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xMjhweDtcbn1cbnVsIHtcbiAgcGFkZGluZzogNHB4IDAgMCAxMHB4O1xuICBtYXJnaW46IDA7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbn1cbmxpIHtcbiAgcGFkZGluZzogMCAwIDJweCAwO1xufVxudGFibGUuZml4ZWQge1xuICB0YWJsZS1sYXlvdXQ6IGZpeGVkO1xufVxudGFibGUuZml4ZWQgdGQge1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLyogVGFibGUgc3R5bGluZyBmb3IgdGhlIHBvd2VyIG1vbml0b3IgKi9cbnRhYmxlLnBtb24ge1xuICBib3JkZXI6IDJweCBzb2xpZCBSb3lhbEJsdWU7XG59XG50YWJsZS5wbW9uIHRkLFxudGFibGUucG1vbiB0aCB7XG4gIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgYmxhY2s7XG4gIHBhZGRpbmc6IDBweCA1cHggMHB4IDVweDtcbn1cbi8qIFRhYmxlIHN0eWxpbmcgZm9yIHRoZSBjcmV3IG1hbmlmZXN0ICovXG50aC5jb21tYW5kIHtcbiAgYmFja2dyb3VuZDogIzMzMzNGRjtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAjZmZmZmZmO1xufVxudGguc2VjIHtcbiAgYmFja2dyb3VuZDogIzhlMDAwMDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAjZmZmZmZmO1xufVxudGgubWVkIHtcbiAgYmFja2dyb3VuZDogIzAwNjYwMDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAjZmZmZmZmO1xufVxudGguZW5nIHtcbiAgYmFja2dyb3VuZDogI2IyNzMwMDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAjZmZmZmZmO1xufVxudGguc2NpIHtcbiAgYmFja2dyb3VuZDogI2E2NWJhNjtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAjZmZmZmZmO1xufVxudGguc2VyIHtcbiAgYmFja2dyb3VuZDogIzcxMDBBQTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAjZmZmZmZmO1xufVxudGguc3VwIHtcbiAgYmFja2dyb3VuZDogIzY2NjYyMTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAjZmZmZmZmO1xufVxudGguY2l2IHtcbiAgYmFja2dyb3VuZDogI2EzMjgwMDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAjZmZmZmZmO1xufVxudGgubWlzYyB7XG4gIGJhY2tncm91bmQ6ICM2NjY7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogI2ZmZmZmZjtcbn1cbnNwYW4ucW0tam9iIHtcbiAgY29sb3I6ICNiNzdhNDE7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuLyogU3RyaXBlZCBsaW5lcyBmb3IgdGFibGVzIGFuZCBkaXZzICovXG4uc3RyaXBlZCB0cjpudGgtY2hpbGQoZXZlbikge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDA0MDQwO1xufVxuLnN0cmlwZWQ6bm90KHRhYmxlKSA+IDpudGgtY2hpbGQoZXZlbikge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDA0MDQwO1xufVxuI3VpTm9TY3JpcHQge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIG1hcmdpbjogLTYwcHggMCAwIC0xNTBweDtcbiAgd2lkdGg6IDI4MHB4O1xuICBoZWlnaHQ6IDEyMHB4O1xuICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICBib3JkZXI6IDJweCBzb2xpZCAjZmYwMDAwO1xuICBjb2xvcjogIzAwMDAwMDtcbiAgZm9udC1zaXplOiAxMHB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgei1pbmRleDogOTk5OTtcbiAgcGFkZGluZzogMHB4IDEwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgIC5ub3RpY2UgfCBDYXV0aW9uIFN0cmlwZXNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4ubm90aWNlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBiYWNrZ3JvdW5kOiB1cmwodWlOb3RpY2VCYWNrZ3JvdW5kLmpwZykgNTAlIDUwJTtcbiAgY29sb3I6ICMwMDAwMDA7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgcGFkZGluZzogM3B4IDRweCAzcHggNHB4O1xuICBtYXJnaW46IDRweCAwIDRweCAwO1xufVxuLm5vdGljZVBsYWNlaG9sZGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDEycHg7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHBhZGRpbmc6IDNweCA0cHggM3B4IDRweDtcbiAgbWFyZ2luOiA0cHggMCA0cHggMDtcbn1cbi5ub3RpY2UuaWNvbiB7XG4gIHBhZGRpbmc6IDJweCA0cHggMCAyMHB4O1xufVxuLm5vdGljZSBpbWcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTZweDtcbn1cbmRpdi5ub3RpY2Uge1xuICBjbGVhcjogYm90aDtcbn1cbi8qKioqKioqKioqKioqKioqKioqKlxcXG5cXCoqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICBQREEsIEROQSBNb2RpZmllciBzdHlsZXNcbiAgICBEb24ndCBmaXQgYW55d2hlcmUgZWxzZS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiBQREEgc3R5bGluZyAqL1xuLndob2xlU2NyZWVuIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBjb2xvcjogIzUxNzA4NztcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLnBkYWxpbmsge1xuICBmbG9hdDogbGVmdDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7XG59XG4ucGRhbGluay5kaXNhYmxlZCB7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGJvcmRlcjogbm9uZTtcbiAgY29sb3I6ICM5OTk7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4ucGRhbm90ZSB7XG4gIGNvbG9yOiAjY2Q2NTAwO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbi5pdGVtLm1haW5tZW51IHtcbiAgcGFkZGluZy1ib3R0b206IDAuNWVtO1xufVxuZGl2LmNsb2NrIHtcbiAgY29sb3I6IHdoaXRlO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgZmxvYXQ6IHJpZ2h0O1xuICBwYWRkaW5nLXJpZ2h0OiAyZW07XG59XG4jcGRhRm9vdGVyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kOiAjMjcyNzI3O1xufVxuLnBkYUZvb3RlckJ1dHRvbiB7XG4gIHdpZHRoOiAzMyU7XG4gIHBhZGRpbmc6IDAuNWVtIDA7XG4gIGZvbnQtc2l6ZTogMjAwJTtcbiAgYm9yZGVyOiBub25lO1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBjb2xvcjogI2ZmZjtcbn1cbi5wZGFGb290ZXJCdXR0b24uaG92ZXIge1xuICBiYWNrZ3JvdW5kOiAjNTA3YWFjO1xufVxuLnBkYUZvb3RlckJ1dHRvbi5kaXNhYmxlZCB7XG4gIGJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDtcbiAgY29sb3I6ICM1NTUgIWltcG9ydGFudDtcbn1cbi5wZGFGb290ZXJCdXR0b24gLnVpTGlua1BlbmRpbmdJY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMzMlO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG59XG4vKiBETkEgTW9kaWZpZXIgc3R5bGluZyAqL1xuLmRuYUJsb2NrIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHdpZHRoOiA5MHB4O1xuICBwYWRkaW5nOiAwIDAgNXB4IDA7XG59XG4uZG5hQmxvY2tOdW1iZXIge1xuICBmb250LWZhbWlseTogRml4ZWQsIG1vbm9zcGFjZTtcbiAgZmxvYXQ6IGxlZnQ7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBiYWNrZ3JvdW5kOiAjMzYzNjM2O1xuICBtaW4td2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgcGFkZGluZzogMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmRuYVN1YkJsb2NrIHtcbiAgZm9udC1mYW1pbHk6IEZpeGVkLCBtb25vc3BhY2U7XG4gIGZsb2F0OiBsZWZ0O1xuICBwYWRkaW5nOiAwO1xuICBtaW4td2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMjBweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLm1hc2sge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZDogdXJsKHVpTWFza0JhY2tncm91bmQucG5nKTtcbn1cbi5tYXNrQ29udGVudCB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDIwMHB4O1xuICBtYXJnaW46IDIwMHB4IDA7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi8qKioqKioqKioqKioqKioqKioqKlxcXG5cXCoqKioqKioqKioqKioqKioqKioqL1xuYm9keSB7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBmb250LWZhbWlseTogVmVyZGFuYSwgR2VuZXZhLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxNzAlO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5ociB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0MDYyOGE7XG4gIGhlaWdodDogMXB4O1xuICBib3JkZXI6IG5vbmU7XG59XG5pbWcsXG5hIGltZyB7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbn1cbmgxLFxuaDIsXG5oMyxcbmg0LFxuaDUsXG5oNiB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMTJweCAwIDZweCAwO1xuICBjb2xvcjogI0ZGRkZGRjtcbiAgY2xlYXI6IGJvdGg7XG59XG5oMSB7XG4gIGZvbnQtc2l6ZTogMThweDtcbn1cbmgyIHtcbiAgZm9udC1zaXplOiAxNnB4O1xufVxuaDMge1xuICBmb250LXNpemU6IDE0cHg7XG59XG5oNCB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbn1cbipbZGF0YS10b29sdGlwXSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbipbZGF0YS10b29sdGlwXTo6YWZ0ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB6LWluZGV4OiAyO1xuICB3aWR0aDogMjUwcHg7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgb3BhY2l0eTogMDtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgY29udGVudDogYXR0cihkYXRhLXRvb2x0aXApO1xuICB0cmFuc2l0aW9uOiBhbGwgMC41cztcbiAgYm9yZGVyOiAxcHggc29saWQgIzk5OTk5OTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM2MzYzNjtcbn1cbipbZGF0YS10b29sdGlwXTpob3Zlcjo6YWZ0ZXIge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBvcGFjaXR5OiAxO1xufVxuKltkYXRhLXRvb2x0aXBdLnRvb2x0aXBUb3A6OmFmdGVyIHtcbiAgYm90dG9tOiAxMDAlO1xuICBsZWZ0OiA1MCU7XG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSg4cHgpO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoOHB4KTtcbn1cbipbZGF0YS10b29sdGlwXS50b29sdGlwVG9wOmhvdmVyOjphZnRlciB7XG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtOHB4KTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKC04cHgpO1xufVxuKltkYXRhLXRvb2x0aXBdLnRvb2x0aXBCb3R0b206OmFmdGVyIHtcbiAgdG9wOiAxMDAlO1xuICBsZWZ0OiA1MCU7XG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtOHB4KTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKC04cHgpO1xufVxuKltkYXRhLXRvb2x0aXBdLnRvb2x0aXBCb3R0b206aG92ZXI6OmFmdGVyIHtcbiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKDhweCk7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSg4cHgpO1xufVxuKltkYXRhLXRvb2x0aXBdLnRvb2x0aXBMZWZ0OjphZnRlciB7XG4gIHRvcDogNTAlO1xuICByaWdodDogMTAwJTtcbiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWCg4cHgpIHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoOHB4KSB0cmFuc2xhdGVZKC01MCUpO1xufVxuKltkYXRhLXRvb2x0aXBdLnRvb2x0aXBMZWZ0OmhvdmVyOjphZnRlciB7XG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLThweCkgdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtOHB4KSB0cmFuc2xhdGVZKC01MCUpO1xufVxuKltkYXRhLXRvb2x0aXBdLnRvb2x0aXBSaWdodDo6YWZ0ZXIge1xuICB0b3A6IDUwJTtcbiAgbGVmdDogMTAwJTtcbiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtOHB4KSB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC04cHgpIHRyYW5zbGF0ZVkoLTUwJSk7XG59XG4qW2RhdGEtdG9vbHRpcF0udG9vbHRpcFJpZ2h0OmhvdmVyOjphZnRlciB7XG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoOHB4KSB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDhweCkgdHJhbnNsYXRlWSgtNTAlKTtcbn1cbi5tYWluQkcge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IC0xO1xuICB0b3A6IDMwcHg7XG4gIGxlZnQ6IDBweDtcbiAgcmlnaHQ6IDBweDtcbiAgYm90dG9tOiAwcHg7XG4gIGJhY2tncm91bmQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0MlM0Z4bWwlMjB2ZXJzaW9uJTNEJTIyMS4wJTIyJTIwZW5jb2RpbmclM0QlMjJVVEYtOCUyMiUyMHN0YW5kYWxvbmUlM0QlMjJubyUyMiUzRiUzRSUwRCUwQSUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIwdmVyc2lvbiUzRCUyMjEuMCUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDQyNSUyMDIwMCUyMiUyMG9wYWNpdHklM0QlMjIuMjUlMjIlM0UlMEQlMEElMjAlMjAlM0NwYXRoJTIwZCUzRCUyMm0lMjAxNzguMDAzOTklMkMwLjAzODY5JTIwLTcxLjIwMzkzJTJDMCUyMGElMjA2Ljc2MTM0MjIlMkM2LjAyNTU0OTUlMjAwJTIwMCUyMDAlMjAtNi43NjEzNCUyQzYuMDI1NTUlMjBsJTIwMCUyQzE4Ny44NzE0NyUyMGElMjA2Ljc2MTM0MjIlMkM2LjAyNTU0OTUlMjAwJTIwMCUyMDAlMjA2Ljc2MTM0JTJDNi4wMjU1NCUyMGwlMjA1My4xMDcyJTJDMCUyMGElMjA2Ljc2MTM0MjIlMkM2LjAyNTU0OTUlMjAwJTIwMCUyMDAlMjA2Ljc2MTM1JTJDLTYuMDI1NTQlMjBsJTIwMCUyQy0xMDEuNTQ0MDE4JTIwNzIuMjE2MjglMkMxMDQuNjk5Mzk4JTIwYSUyMDYuNzYxMzQyMiUyQzYuMDI1NTQ5NSUyMDAlMjAwJTIwMCUyMDUuNzYwMTUlMkMyLjg3MDE2JTIwbCUyMDczLjU1NDg3JTJDMCUyMGElMjA2Ljc2MTM0MjIlMkM2LjAyNTU0OTUlMjAwJTIwMCUyMDAlMjA2Ljc2MTM1JTJDLTYuMDI1NTQlMjBsJTIwMCUyQy0xODcuODcxNDclMjBhJTIwNi43NjEzNDIyJTJDNi4wMjU1NDk1JTIwMCUyMDAlMjAwJTIwLTYuNzYxMzUlMkMtNi4wMjU1NSUyMGwlMjAtNTQuNzE2NDQlMkMwJTIwYSUyMDYuNzYxMzQyMiUyQzYuMDI1NTQ5NSUyMDAlMjAwJTIwMCUyMC02Ljc2MTMzJTJDNi4wMjU1NSUyMGwlMjAwJTJDMTAyLjYxOTM1JTIwTCUyMDE4My43NjQxMyUyQzIuOTA4ODYlMjBhJTIwNi43NjEzNDIyJTJDNi4wMjU1NDk1JTIwMCUyMDAlMjAwJTIwLTUuNzYwMTQlMkMtMi44NzAxNyUyMHolMjIlMjAlMkYlM0UlMEQlMEElMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0lMjA0Ljg0NDYzMzMlMkMyMi4xMDg3NSUyMEElMjAxMy40MTIwMzklMkMxMi41MDE4NDIlMjAwJTIwMCUyMDElMjAxMy40Nzc1ODglMkMwLjAzOTI0JTIwbCUyMDY2LjExODMxNSUyQzAlMjBhJTIwNS4zNjQ4MTU4JTJDNS4wMDA3MzclMjAwJTIwMCUyMDElMjA1LjM2NDgyMyUyQzUuMDAwNzMlMjBsJTIwMCUyQzc5Ljg3OTMxJTIweiUyMiUyMCUyRiUzRSUwRCUwQSUyMCUyMCUzQ3BhdGglMjBkJTNEJTIybSUyMDQyMC4xNTUzNSUyQzE3Ny44OTExOSUyMGElMjAxMy40MTIwMzglMkMxMi41MDE4NDIlMjAwJTIwMCUyMDElMjAtOC42MzI5NSUyQzIyLjA2OTUxJTIwbCUyMC02Ni4xMTgzMiUyQzAlMjBhJTIwNS4zNjQ4MTUyJTJDNS4wMDA3MzclMjAwJTIwMCUyMDElMjAtNS4zNjQ4MiUyQy01LjAwMDc0JTIwbCUyMDAlMkMtNzkuODc5MzElMjB6JTIyJTIwJTJGJTNFJTBEJTBBJTNDJTJGc3ZnJTNFJTBEJTBBXCIpIG5vLXJlcGVhdCBmaXhlZCBjZW50ZXIgLyA3MCUgNzAlLCBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjMmEyYTJhIDAlLCAjMjAyMDIwIDEwMCUpIG5vLXJlcGVhdCBmaXhlZCBjZW50ZXIgLyAxMDAlIDEwMCU7XG59XG5odG1sLFxuYm9keSB7XG4gIHNjcm9sbGJhci1mYWNlLWNvbG9yOiAjNjY2NjY2O1xuICBzY3JvbGxiYXItYXJyb3ctY29sb3I6ICNFOUMxODM7XG4gIHNjcm9sbGJhci10cmFjay1jb2xvcjogIzM2MzYzNjtcbiAgc2Nyb2xsYmFyLXNoYWRvdy1jb2xvcjogIzU1NTU1NTtcbn1cbiN1aVdyYXBwZXIge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIHVzZXItc2VsZWN0OiBub25lO1xufVxuI3VpVGl0bGVXcmFwcGVyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBtaW4taGVpZ2h0OiAzMHB4O1xuICBtaW4td2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzNjM2MzY7XG4gIGxlZnQ6IDBweDtcbiAgdG9wOiAwcHg7XG4gIHJpZ2h0OiAwcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHotaW5kZXg6IDEwMDtcbn1cbiN1aVRpdGxlV3JhcHBlciA+IGRpdiB7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cbiN1aVRpdGxlV3JhcHBlciA+IGkge1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG4jdWlUaXRsZVRleHQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNnB4O1xuICBsZWZ0OiA0NHB4O1xuICB3aWR0aDogNjYlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjb2xvcjogI0U5QzE4MztcbiAgZm9udC1zaXplOiAxNnB4O1xufVxuI3VpVGl0bGUuaWNvbiB7XG4gIHBhZGRpbmc6IDZweCA4cHggNnB4IDQycHg7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDJweCA1MCU7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG59XG4jdWlUaXRsZUZsdWZmIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDRweDtcbiAgcmlnaHQ6IDEycHg7XG4gIHdpZHRoOiA0MnB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIGJhY2tncm91bmQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0MlM0Z4bWwlMjB2ZXJzaW9uJTNEJTIyMS4wJTIyJTIwZW5jb2RpbmclM0QlMjJVVEYtOCUyMiUyMHN0YW5kYWxvbmUlM0QlMjJubyUyMiUzRiUzRSUwRCUwQSUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIwdmVyc2lvbiUzRCUyMjEuMCUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDQyNSUyMDIwMCUyMiUyMG9wYWNpdHklM0QlMjIuMjUlMjIlM0UlMEQlMEElMjAlMjAlM0NwYXRoJTIwZCUzRCUyMm0lMjAxNzguMDAzOTklMkMwLjAzODY5JTIwLTcxLjIwMzkzJTJDMCUyMGElMjA2Ljc2MTM0MjIlMkM2LjAyNTU0OTUlMjAwJTIwMCUyMDAlMjAtNi43NjEzNCUyQzYuMDI1NTUlMjBsJTIwMCUyQzE4Ny44NzE0NyUyMGElMjA2Ljc2MTM0MjIlMkM2LjAyNTU0OTUlMjAwJTIwMCUyMDAlMjA2Ljc2MTM0JTJDNi4wMjU1NCUyMGwlMjA1My4xMDcyJTJDMCUyMGElMjA2Ljc2MTM0MjIlMkM2LjAyNTU0OTUlMjAwJTIwMCUyMDAlMjA2Ljc2MTM1JTJDLTYuMDI1NTQlMjBsJTIwMCUyQy0xMDEuNTQ0MDE4JTIwNzIuMjE2MjglMkMxMDQuNjk5Mzk4JTIwYSUyMDYuNzYxMzQyMiUyQzYuMDI1NTQ5NSUyMDAlMjAwJTIwMCUyMDUuNzYwMTUlMkMyLjg3MDE2JTIwbCUyMDczLjU1NDg3JTJDMCUyMGElMjA2Ljc2MTM0MjIlMkM2LjAyNTU0OTUlMjAwJTIwMCUyMDAlMjA2Ljc2MTM1JTJDLTYuMDI1NTQlMjBsJTIwMCUyQy0xODcuODcxNDclMjBhJTIwNi43NjEzNDIyJTJDNi4wMjU1NDk1JTIwMCUyMDAlMjAwJTIwLTYuNzYxMzUlMkMtNi4wMjU1NSUyMGwlMjAtNTQuNzE2NDQlMkMwJTIwYSUyMDYuNzYxMzQyMiUyQzYuMDI1NTQ5NSUyMDAlMjAwJTIwMCUyMC02Ljc2MTMzJTJDNi4wMjU1NSUyMGwlMjAwJTJDMTAyLjYxOTM1JTIwTCUyMDE4My43NjQxMyUyQzIuOTA4ODYlMjBhJTIwNi43NjEzNDIyJTJDNi4wMjU1NDk1JTIwMCUyMDAlMjAwJTIwLTUuNzYwMTQlMkMtMi44NzAxNyUyMHolMjIlMjAlMkYlM0UlMEQlMEElMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0lMjA0Ljg0NDYzMzMlMkMyMi4xMDg3NSUyMEElMjAxMy40MTIwMzklMkMxMi41MDE4NDIlMjAwJTIwMCUyMDElMjAxMy40Nzc1ODglMkMwLjAzOTI0JTIwbCUyMDY2LjExODMxNSUyQzAlMjBhJTIwNS4zNjQ4MTU4JTJDNS4wMDA3MzclMjAwJTIwMCUyMDElMjA1LjM2NDgyMyUyQzUuMDAwNzMlMjBsJTIwMCUyQzc5Ljg3OTMxJTIweiUyMiUyMCUyRiUzRSUwRCUwQSUyMCUyMCUzQ3BhdGglMjBkJTNEJTIybSUyMDQyMC4xNTUzNSUyQzE3Ny44OTExOSUyMGElMjAxMy40MTIwMzglMkMxMi41MDE4NDIlMjAwJTIwMCUyMDElMjAtOC42MzI5NSUyQzIyLjA2OTUxJTIwbCUyMC02Ni4xMTgzMiUyQzAlMjBhJTIwNS4zNjQ4MTUyJTJDNS4wMDA3MzclMjAwJTIwMCUyMDElMjAtNS4zNjQ4MiUyQy01LjAwMDc0JTIwbCUyMDAlMkMtNzkuODc5MzElMjB6JTIyJTIwJTJGJTNFJTBEJTBBJTNDJTJGc3ZnJTNFJTBEJTBBXCIpIDUwJSA1MCUgbm8tcmVwZWF0O1xufVxuLnN0YXR1c2ljb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNHB4O1xuICBsZWZ0OiAxMnB4O1xufVxuI3VpTWFwV3JhcHBlciB7XG4gIGNsZWFyOiBib3RoO1xuICBwYWRkaW5nOiA4cHg7XG4gIG1hcmdpbi10b3A6IDMwcHg7XG59XG4jdWlNYXBIZWFkZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGNsZWFyOiBib3RoO1xufVxuI3VpTWFwQ29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiA2MDBweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYm9yZGVyOiAxcHggc29saWQgIzQwNjI4YTtcbiAgYmFja2dyb3VuZDogdXJsKG5hbm9tYXBCYWNrZ3JvdW5kLnBuZyk7XG59XG4jdWlNYXAge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIG1hcmdpbjogLTUxMnB4IDAgMCAtNTEycHg7XG4gIHdpZHRoOiAyNTZweDtcbiAgaGVpZ2h0OiAyNTZweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgem9vbTogNDtcbn1cbiN1aU1hcEltYWdlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDFweDtcbiAgbGVmdDogMXB4O1xuICB3aWR0aDogMjU2cHg7XG4gIGhlaWdodDogMjU2cHg7XG59XG4jdWlNYXBDb250ZW50IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IC0xMy41cHg7XG4gIGxlZnQ6IDBweDtcbiAgd2lkdGg6IDI1NnB4O1xuICBoZWlnaHQ6IDI1NnB4O1xufVxuI3VpTWFwRm9vdGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBjbGVhcjogYm90aDtcbn1cbiN1aUNvbnRlbnQge1xuICBjbGVhcjogYm90aDtcbiAgcGFkZGluZzogOHB4O1xuICBtYXJnaW4tdG9wOiAzMHB4O1xufVxuI3VpTWFwVG9vbHRpcCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDEwcHg7XG4gIHRvcDogMTBweDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzQwNjI4YTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI3MjcyNztcbiAgcGFkZGluZzogOHB4O1xuICBkaXNwbGF5OiBub25lO1xuICB6LWluZGV4OiA5OTk5O1xufVxuI3VpTG9hZGluZ05vdGljZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZDogdXJsKHVpTm90aWNlQmFja2dyb3VuZC5qcGcpIDUwJSA1MCU7XG4gIGNvbG9yOiAjMDAwMDAwO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHBhZGRpbmc6IDNweCA0cHggM3B4IDRweDtcbiAgbWFyZ2luOiA0cHggMCA0cHggMDtcbn1cbi51bmRlclRpdGxlIHtcbiAgbWFyZ2luLXRvcDogMzBweDtcbn1cbiIsbnVsbCxudWxsLG51bGwsIi5kaXNwbGF5QmFyIHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIHdpZHRoOiAyMzZweDtcclxuICAgIGhlaWdodDogMTZweDtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7XHJcbiAgICBmbG9hdDogbGVmdDtcclxuICAgIG1hcmdpbjogMCA1cHggMCAwO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIGJhY2tncm91bmQ6ICMwMDAwMDA7XHJcbn1cclxuXHJcbi5kaXNwbGF5QmFyVGV4dCB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IC0ycHg7XHJcbiAgICBsZWZ0OiA1cHg7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIGNvbG9yOiAjZmZmZmZmO1xyXG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcclxufVxyXG5cclxuLmRpc3BsYXlCYXJGaWxsIHtcclxuICAgIHdpZHRoOiAwJTtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIGJhY2tncm91bmQ6ICM0MDYyOGE7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgZmxvYXQ6IGxlZnQ7XHJcbn1cclxuXHJcbi5kaXNwbGF5QmFyRmlsbC5hbGlnblJpZ2h0IHtcclxuICAgIGZsb2F0OiByaWdodDtcclxufVxyXG5cclxuLmRpc3BsYXlCYXJUZXh0Lmdvb2Qge1xyXG5cdGNvbG9yOiB3aGl0ZTtcclxufVxyXG5cclxuLmRpc3BsYXlCYXJUZXh0Lm5vdGdvb2Qge1xyXG5cdGNvbG9yOiB3aGl0ZTtcclxufVxyXG5cclxuLmRpc3BsYXlCYXJUZXh0LmF2ZXJhZ2Uge1xyXG5cdGNvbG9yOiB3aGl0ZTtcclxufVxyXG5cclxuLmRpc3BsYXlCYXJUZXh0LmJhZCB7XHJcblx0Y29sb3I6IHdoaXRlO1xyXG59XHJcblxyXG4uZGlzcGxheUJhclRleHQuaGlnaGxpZ2h0IHtcclxuXHRjb2xvcjogYmxhY2s7XHJcbn1cclxuXHJcbi5kaXNwbGF5QmFyRmlsbC5nb29kIHtcclxuICAgIGNvbG9yOiAjZmZmZmZmO1xyXG4gICAgYmFja2dyb3VuZDogQGdvb2QtY29sb3I7XHJcbn1cclxuXHJcbi5kaXNwbGF5QmFyRmlsbC5ub3Rnb29kIHtcclxuICAgIGNvbG9yOiAjZmZmZmZmO1xyXG4gICAgYmFja2dyb3VuZDogI2ZmYjQwMDtcclxufVxyXG5cclxuLmRpc3BsYXlCYXJGaWxsLmF2ZXJhZ2Uge1xyXG4gICAgY29sb3I6ICNmZmZmZmY7XHJcbiAgICBiYWNrZ3JvdW5kOiBAYXZlcmFnZS1jb2xvcjtcclxufVxyXG5cclxuLmRpc3BsYXlCYXJGaWxsLmJhZCB7XHJcbiAgICBjb2xvcjogI2ZmZmZmZjtcclxuICAgIGJhY2tncm91bmQ6IEBiYWQtY29sb3I7XHJcbn1cclxuXHJcbi5kaXNwbGF5QmFyRmlsbC5oaWdobGlnaHQge1xyXG4gICAgY29sb3I6ICNmZmZmZmY7XHJcbiAgICBiYWNrZ3JvdW5kOiBAaGlnaGxpZ2h0LWNvbG9yO1xyXG59XHJcbiIsIi5saW5rLCAubGlua09uLCAubGlua09mZiwgLnNlbGVjdGVkLCAuZGlzYWJsZWQsIC55ZWxsb3dCdXR0b24sIC5yZWRCdXR0b24sIC5saW5rRW5jb3VyYWdlLCAubGlua0Rpc2NvdXJhZ2Uge1xyXG4gICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICBtaW4td2lkdGg6IDE1cHg7XHJcbiAgICBoZWlnaHQ6IDE2cHg7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBjb2xvcjogI2ZmZmZmZjtcclxuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgIGJhY2tncm91bmQ6ICM0MDYyOGE7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjMTYxNjE2O1xyXG4gICAgcGFkZGluZzogMHB4IDRweCA0cHggNHB4O1xyXG4gICAgbWFyZ2luOiAwIDJweCAycHggMDtcclxuICAgIGN1cnNvcjogZGVmYXVsdDtcclxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbn1cclxuXHJcbi5oYXNJY29uIHtcclxuICAgIHBhZGRpbmc6IDBweCA0cHggNHB4IDBweDtcclxufVxyXG5cclxuYS5ob3ZlciwgLnpvb21MaW5rLmhvdmVyLCAubGlua0FjdGl2ZS5ob3ZlciB7XHJcbiAgICBiYWNrZ3JvdW5kOiAjNTA3YWFjO1xyXG59XHJcblxyXG5Aa2V5ZnJhbWVzIHBlbmRpbmdBbmltYXRpb24ge1xyXG4gICAgdG8ge1xyXG4gICAgICAgIGNvbG9yOiAjZmZmZmZmO1xyXG4gICAgICAgIGJhY2tncm91bmQ6ICM1MDdhYWM7XHJcbiAgICB9XHJcbn1cclxuXHJcbi5saW5rUGVuZGluZywgLmxpbmtQZW5kaW5nLmhvdmVyIHtcclxuICAgIGFuaW1hdGlvbi1uYW1lOiBwZW5kaW5nQW5pbWF0aW9uO1xyXG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjI1cztcclxufVxyXG5cclxuYS53aGl0ZSwgYS53aGl0ZTpsaW5rLCBhLndoaXRlOnZpc2l0ZWQsIGEud2hpdGU6YWN0aXZlIHtcclxuICAgIGNvbG9yOiAjNDA2MjhhO1xyXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICMxNjE2MTY7XHJcbiAgICBwYWRkaW5nOiAxcHggNHB4IDFweCA0cHg7XHJcbiAgICBtYXJnaW46IDAgMnB4IDAgMDtcclxuICAgIGN1cnNvcjogZGVmYXVsdDtcclxufVxyXG5cclxuYS53aGl0ZS5ob3ZlciB7XHJcbiAgICBjb2xvcjogI2ZmZmZmZjtcclxuICAgIGJhY2tncm91bmQ6ICM0MDYyOGE7XHJcbn1cclxuXHJcbi5saW5rT24sIGEubGlua09uOmxpbmssIGEubGlua09uOnZpc2l0ZWQsIGEubGlua09uOmFjdGl2ZSwgYS5saW5rT24uaG92ZXIsIC5zZWxlY3RlZCwgYS5zZWxlY3RlZDpsaW5rLCBhLnNlbGVjdGVkOnZpc2l0ZWQsIGEuc2VsZWN0ZWQ6YWN0aXZlLCBhLnNlbGVjdGVkLmhvdmVyIHtcclxuICAgIGNvbG9yOiAjZmZmZmZmO1xyXG4gICAgYmFja2dyb3VuZDogIzJmOTQzYztcclxufVxyXG5cclxuLmxpbmtPZmYsIGEubGlua09mZjpsaW5rLCBhLmxpbmtPZmY6dmlzaXRlZCwgYS5saW5rT2ZmOmFjdGl2ZSwgYS5saW5rT2ZmLmhvdmVyLCAuZGlzYWJsZWQsIGEuZGlzYWJsZWQ6bGluaywgYS5kaXNhYmxlZDp2aXNpdGVkLCBhLmRpc2FibGVkOmFjdGl2ZSwgYS5kaXNhYmxlZC5ob3ZlciB7XHJcbiAgICBjb2xvcjogI2ZmZmZmZjtcclxuICAgIGJhY2tncm91bmQ6ICM5OTk5OTk7XHJcbiAgICBib3JkZXItY29sb3I6ICM2NjY2NjY7XHJcbn1cclxuXHJcbmEuaWNvbiwgLmxpbmtPbi5pY29uLCAubGlua09mZi5pY29uLCAuc2VsZWN0ZWQuaWNvbiwgLmRpc2FibGVkLmljb24ge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgcGFkZGluZzogMXB4IDRweCAycHggMjBweDtcclxufVxyXG5cclxuYS5pY29uIGltZywgLmxpbmtPbi5pY29uIGltZywgLmxpbmtPZmYuaWNvbiBpbWcsIC5zZWxlY3RlZC5pY29uIGltZywgLmRpc2FibGVkLmljb24gaW1nIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICB3aWR0aDogMThweDtcclxuICAgIGhlaWdodDogMThweDtcclxufVxyXG5cclxuLmxpbmtEYW5nZXIsIGEubGlua0RhbmdlcjpsaW5rLCBhLmxpbmtEYW5nZXI6dmlzaXRlZCwgYS5saW5rRGFuZ2VyOmFjdGl2ZSB7XHJcbiAgICBjb2xvcjogI2ZmZmZmZjtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZjAwMDA7XHJcbiAgICBib3JkZXItY29sb3I6ICNhYTAwMDA7XHJcbn1cclxuXHJcbi5saW5rRGFuZ2VyLmhvdmVyIHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZjY2NjY7XHJcbn1cclxuXHJcbi5saW5rRW5jb3VyYWdlLCBhLmxpbmtFbmNvdXJhZ2U6bGluaywgYS5saW5rRW5jb3VyYWdlOnZpc2l0ZWQsIGEubGlua0VuY291cmFnZTphY3RpdmUge1xyXG4gICAgY29sb3I6ICM5OWZmMzM7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDA2MjhhO1xyXG4gICAgYm9yZGVyLWNvbG9yOiAjMTYxNjE2O1xyXG59XHJcblxyXG4ubGlua0VuY291cmFnZS5ob3ZlciB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTA3YWFjO1xyXG59XHJcblxyXG4ubGlua0Rpc2NvdXJhZ2UsIGEubGlua0Rpc2NvdXJhZ2U6bGluaywgYS5saW5rRGlzY291cmFnZTp2aXNpdGVkLCBhLmxpbmtEaXNjb3VyYWdlOmFjdGl2ZSB7XHJcbiAgICBjb2xvcjogIzhjOGM4YztcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICM0MDYyOGE7XHJcbiAgICBib3JkZXItY29sb3I6ICMxNjE2MTY7XHJcbn1cclxuXHJcbi5saW5rRGlzY291cmFnZS5ob3ZlciB7XHJcblx0Y29sb3I6ICNmZjAwMDA7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTA3YWFjO1xyXG59XHJcblxyXG4uaW5hY3RpdmUsIGEuaW5hY3RpdmU6bGluaywgYS5pbmFjdGl2ZTp2aXNpdGVkLCBhLmluYWN0aXZlOmFjdGl2ZSwgYS5pbmFjdGl2ZS5ob3ZlciB7XHJcbiAgICBjb2xvcjogI2ZmZmZmZjtcclxuICAgIGJhY2tncm91bmQ6ICM5OTk5OTk7XHJcbiAgICBib3JkZXItY29sb3I6ICM2NjY2NjY7XHJcbn0iLCJAaW1wb3J0IFwiX2NvbmZpZ1wiO1xyXG5cclxuLndoaXRlIHtcclxuICAgIGNvbG9yOiB3aGl0ZTtcclxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG59XHJcblxyXG4uZ29vZCB7XHJcbiAgICBjb2xvcjogQGdvb2QtY29sb3I7XHJcbiAgICBmb250LXdlaWdodDogYm9sZDtcclxufVxyXG5cclxuLmF2ZXJhZ2Uge1xyXG4gICAgY29sb3I6IEBhdmVyYWdlLWNvbG9yO1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbn1cclxuXHJcbi5iYWQge1xyXG4gICAgY29sb3I6IEBiYWQtY29sb3I7XHJcbiAgICBmb250LXdlaWdodDogYm9sZDtcclxufVxyXG5cclxuLmlkbGUge1xyXG4gICAgY29sb3I6IEBkYXJrLWNvbG9yO1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbn1cclxuXHJcbi5yZWRCdXR0b24ge1xyXG4gICAgYmFja2dyb3VuZDogI2VhMDAwMDtcclxufVxyXG5cclxuLnllbGxvd0J1dHRvbiB7XHJcbiAgICBiYWNrZ3JvdW5kOiAjY2FjYzAwO1xyXG59XHJcblxyXG4uaGlnaGxpZ2h0IHtcclxuICAgIGNvbG9yOiBAaGlnaGxpZ2h0LWNvbG9yO1xyXG59XHJcblxyXG4uZGFyayB7XHJcbiAgICBjb2xvcjogQGRhcmstY29sb3I7XHJcbn1cclxuXHJcbi8qIERhbWFnZSBjb2xvcnMgZm9yIGNyZXcgbW9uaXRvcmluZyBjb21wdXRlciAqL1xyXG4uYnVybiB7XHJcbiAgICBjb2xvcjogb3JhbmdlO1xyXG59XHJcblxyXG4uYnJ1dGUge1xyXG4gICAgY29sb3I6IHJlZDtcclxufVxyXG5cclxuLnRveGluIHtcclxuICAgIGNvbG9yOiBncmVlbjtcclxufVxyXG5cclxuLnRveGluX2xpZ2h0IHtcclxuICAgIGNvbG9yOiAjM0FERjAwO1xyXG59XHJcblxyXG4ub3h5bG9zcyB7XHJcbiAgICBjb2xvcjogYmx1ZTtcclxufVxyXG5cclxuLm94eWxvc3NfbGlnaHQge1xyXG4gICAgY29sb3I6ICM2Njk4RkY7XHJcbn1cclxuXHJcbi8qIFdpcmUgY29sb3JzIGZvciBudWNsZWFyIGJvbWIgZGVmdXNpb24gKi9cclxuLlJlZCB7XHJcbiAgICBjb2xvcjogI0ZGMDAwMDtcclxufVxyXG5cclxuLkJsdWUge1xyXG4gICAgY29sb3I6ICMwMDAwRkY7XHJcbn1cclxuXHJcbi5HcmVlbiB7XHJcbiAgICBjb2xvcjogIzAwRkYwMDtcclxufVxyXG5cclxuLk1hcmlnb2xkIHtcclxuICAgIGNvbG9yOiAjRkRBNTA1O1xyXG59XHJcblxyXG4uRnVzY2hpYSB7XHJcbiAgICBjb2xvcjogI0ZGMDA4MDtcclxufVxyXG5cclxuLkJsYWNrIHtcclxuICAgIGNvbG9yOiAjMDAwMDAwO1xyXG59XHJcblxyXG4uUGVhcmwge1xyXG4gICAgY29sb3I6ICNDNkNBQ0I7XHJcbn1cclxuXHJcbi8qIFN0YXR1cyBiYXIgY29sb3JzIGZvciBzbGVlcGVyIHRlbXBlcmF0dXJlcyAqL1xyXG4uY29sZDEge1xyXG4gICAgY29sb3I6ICM5NEI4RkY7XHJcbn1cclxuXHJcbi5jb2xkMiB7XHJcbiAgICBjb2xvcjogIzY2OTlGRjtcclxufVxyXG5cclxuLmNvbGQzIHtcclxuICAgIGNvbG9yOiAjMjkzRDY2O1xyXG59XHJcblxyXG4uaG90MSB7XHJcbiAgICBjb2xvcjogI0ZGOTk2NjtcclxufVxyXG5cclxuLmhvdDIge1xyXG4gICAgY29sb3I6ICM5OTNEMDA7XHJcbn1cclxuXHJcbi5ob3QzIHtcclxuICAgIGNvbG9yOiAjRkY2NjAwO1xyXG59IiwiZGl2LmRpc3BsYXkge1xyXG5cdHBhZGRpbmc6IDRweDtcclxuXHRtYXJnaW46IDZweCAwO1xyXG5cclxuXHRiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMzMpO1xyXG5cdGJveC1zaGFkb3c6IGluc2V0IDAgMCA1cHggcmdiYSgwLCAwLCAwLCAwLjUpO1xyXG59XHJcblxyXG5kaXYuZGlzcGxheSBoZWFkZXIge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0d2lkdGg6IDk4LjUlO1xyXG4gICAgcGFkZGluZzogMCA0cHg7XHJcbiAgICBtYXJnaW4tYm90dG9tOiA2cHg7XHJcbiAgICBjb2xvcjogI0ZGRkZGRjtcclxuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjNDA2MjhhO1xyXG59XHJcblxyXG5kaXYuZGlzcGxheSBoZWFkZXIgLmJ1dHRvblJpZ2h0IHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGJvdHRvbTogNnB4O1xyXG4gICAgcmlnaHQ6IDRweDtcclxufVxyXG5cclxuZGl2LmRpc3BsYXkgYXJ0aWNsZSB7XHJcbiAgICBkaXNwbGF5OiB0YWJsZTtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcclxufSIsIi5pdGVtR3JvdXAge1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI2U5YzE4MztcclxuICAgIGJhY2tncm91bmQ6ICMyYzJjMmM7XHJcbiAgICBwYWRkaW5nOiA0cHg7XHJcbiAgICBjbGVhcjogYm90aDtcclxufVxyXG5cclxuXHJcbi5pdGVtIHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgbWFyZ2luOiA0cHggMCAwIDA7XHJcbiAgICBjbGVhcjogYm90aDtcclxuICAgIG92ZXJmbG93OiBhdXRvO1xyXG59XHJcblxyXG4uaXRlbUNvbnRlbnROYXJyb3csIC5pdGVtQ29udGVudCB7XHJcbiAgICBmbG9hdDogbGVmdDtcclxufVxyXG5cclxuLml0ZW1Db250ZW50TmFycm93IHtcclxuICAgIHdpZHRoOiAzMCU7XHJcbn1cclxuXHJcbi5pdGVtQ29udGVudCB7XHJcbiAgICB3aWR0aDogNjklO1xyXG59XHJcblxyXG4uaXRlbUxhYmVsTmFycm93LCAuaXRlbUxhYmVsLCAuaXRlbUxhYmVsV2lkZSwgLml0ZW1MYWJlbFdpZGVyLCAuaXRlbUxhYmVsV2lkZXN0IHtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgY29sb3I6ICNlOWMxODM7XHJcbn1cclxuXHJcbi5pdGVtTGFiZWxOYXJyb3cge1xyXG4gICAgd2lkdGg6IDIwJTtcclxufVxyXG5cclxuLml0ZW1MYWJlbCB7XHJcbiAgICB3aWR0aDogMzAlO1xyXG59XHJcblxyXG4uaXRlbUxhYmVsV2lkZSB7XHJcbiAgICB3aWR0aDogNDUlO1xyXG59XHJcblxyXG4uaXRlbUxhYmVsV2lkZXIge1xyXG4gICAgd2lkdGg6IDY5JTtcclxufVxyXG5cclxuLml0ZW1MYWJlbFdpZGVzdCB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxufVxyXG5cclxuLml0ZW1Db250ZW50V2lkZSB7XHJcbiAgICBmbG9hdDogbGVmdDtcclxuICAgIHdpZHRoOiA3OSU7XHJcbn1cclxuXHJcbi5pdGVtQ29udGVudFNtYWxsIHtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgd2lkdGg6IDMzJTtcclxufVxyXG5cclxuLml0ZW1Db250ZW50TWVkaXVtIHtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgd2lkdGg6IDU1JTtcclxufVxyXG5cclxuLmJsb2NrIHtcclxuICAgIHBhZGRpbmc6IDhweDtcclxuICAgIG1hcmdpbjogMTBweCA0cHggNHB4IDRweDtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICM0MDYyOGE7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjAyMDIwO1xyXG59XHJcblxyXG4uYmxvY2sgaDMge1xyXG4gICAgcGFkZGluZzogMDtcclxufVxyXG5cclxuLmNsZWFyQm90aCB7XHJcbiAgICBjbGVhcjogYm90aDtcclxufVxyXG5cclxuLmNsZWFyTGVmdCB7XHJcbiAgICBjbGVhcjogbGVmdDtcclxufVxyXG5cclxuLmNsZWFyUmlnaHQge1xyXG4gICAgY2xlYXI6IHJpZ2h0O1xyXG59XHJcblxyXG4ubGluZSB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGNsZWFyOiBib3RoO1xyXG59XHJcblxyXG4uZml4ZWRMZWZ0IHtcclxuICAgIHdpZHRoOiAxMTBweDtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG59XHJcblxyXG4uZml4ZWRMZWZ0V2lkZSB7XHJcbiAgICB3aWR0aDogMTY1cHg7XHJcbiAgICBmbG9hdDogbGVmdDtcclxufVxyXG5cclxuLmZpeGVkTGVmdFdpZGVyIHtcclxuICAgIHdpZHRoOiAyMjBweDtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG59XHJcblxyXG4uZml4ZWRMZWZ0V2lkZXN0IHtcclxuICAgIHdpZHRoOiAyNTBweDtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG59XHJcblxyXG4uZmxvYXRSaWdodCB7XHJcbiAgICBmbG9hdDogcmlnaHQ7XHJcbn1cclxuXHJcbi5mbG9hdExlZnQge1xyXG4gICAgZmxvYXQ6IGxlZnQ7XHJcbn1cclxuXHJcbi5oaWRkZW4ge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuXHJcbi5zdGF0dXNEaXNwbGF5IHtcclxuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41KTtcclxuICAgIGNvbG9yOiAjZmZmZmZmO1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgIzQwNjI4YTtcclxuICAgIHBhZGRpbmc6IDRweDtcclxuICAgIG1hcmdpbjogM3B4IDA7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG59XHJcblxyXG4uc3RhdHVzRGlzcGxheVJlY29yZHMge1xyXG4gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjUpO1xyXG4gICAgY29sb3I6ICNmZmZmZmY7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjNDA2MjhhO1xyXG4gICAgcGFkZGluZzogNHB4O1xyXG4gICAgbWFyZ2luOiAzcHggMDtcclxuICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcclxuICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbn1cclxuXHJcbi5zdGF0dXNMYWJlbCB7XHJcbiAgICB3aWR0aDogMTM4cHg7XHJcbiAgICBmbG9hdDogbGVmdDtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICBjb2xvcjogIzk4QjBDMztcclxufVxyXG5cclxuLnN0YXR1c1ZhbHVlIHtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG59XHJcblxyXG4uam9iVmFsdWVzIHtcclxuXHRmbG9hdDogbGVmdDtcclxuXHR3aWR0aDogMzAlO1xyXG59XHJcblxyXG4vLyBDSFJPTUVMRVNTIFNUVUZGXHJcblxyXG4uZmFuY3kge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuaS5mYW5jeSB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG59XHJcblxyXG4udGl0bGVidXR0b24oKSB7XHJcbiAgICBjb2xvcjogI0U5QzE4MztcclxuICAgIC8vIFNpbmNlIHdlJ3JlIG9uIHNvbWUgaGlsYXJpb3VzbHkgb3V0ZGF0ZWQgbGlicmFyaWVzLCB0aGUgYmVsb3cgaXMgYW4gaXNzdWVcclxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Gb3J0QXdlc29tZS9Gb250LUF3ZXNvbWUvaXNzdWVzLzEyNzRcclxuICAgIC8vIFVzaW5nIHRoZSAhaW1wb3J0YW50IGRpcmVjdGl2ZSBpcyBuZWNlc3NhcnkgdG8gb3ZlcnJpZGUgdGhlIEZBIHN0eWxlc1xyXG4gICAgY3Vyc29yOiBwb2ludGVyICFpbXBvcnRhbnQ7IFxyXG4gICAgei1pbmRleDogMTAyOyAvLyBUaGlzIGlzIGZvciB0aGUgY29ybmVycyAtIG1ha2VzIHN1cmUgdGhlIGJ1dHRvbnMgcmVuZGVyIG9uIHRvcFxyXG5cclxuICAgICY6aG92ZXIge1xyXG4gICAgICAgIGNvbG9yOiBsaWdodGVuKCM5OGIwYzMsIDEwJSk7XHJcbiAgICB9XHJcbn1cclxuLm1pbmltaXplIHtcclxuICAgIC50aXRsZWJ1dHRvbjtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogNnB4O1xyXG4gICAgcmlnaHQ6IDQ2cHg7XHJcbn1cclxuLmNsb3NlIHtcclxuICAgIC50aXRsZWJ1dHRvbjtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogNHB4O1xyXG4gICAgcmlnaHQ6IDEycHg7XHJcbn0iLCIuY29ybmVyKCkge1xyXG4gICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgei1pbmRleDogMTAxO1xyXG4gICAgbWluLXdpZHRoOiAzMHB4O1xyXG4gICAgbWluLWhlaWdodDogMzBweDtcclxufVxyXG5cclxuI3VpQ29ybmVyVEwge1xyXG4gICAgLmNvcm5lcjtcclxuICAgIHRvcDogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICBiYWNrZ3JvdW5kOiBkYXRhLXVyaSgndGwucG5nJykgbm8tcmVwZWF0O1xyXG59XHJcblxyXG4vKiBSZXNpemluZyAoU3RvbGVuIGZyb20gR29vbiBDQy1CWS1OQy1TQSkgKi9cclxuQHJlc2l6ZTogNXB4O1xyXG4ucmVzaXplQXJlYSB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB6LWluZGV4OiA5OTk5OTtcclxufVxyXG4ucmVzaXplQXJlYS50b3Age1xyXG4gICAgdG9wOiAwO1xyXG4gICAgbGVmdDogMTBweDtcclxuICAgIHJpZ2h0OiAxMHB4O1xyXG4gICAgaGVpZ2h0OiBAcmVzaXplO1xyXG4gICAgY3Vyc29yOiBuLXJlc2l6ZTtcclxufVxyXG4ucmVzaXplQXJlYS50ciB7XHJcbiAgICB0b3A6IDA7XHJcbiAgICByaWdodDogMDtcclxuICAgIGhlaWdodDogMTBweDtcclxuICAgIHdpZHRoOiAxMHB4O1xyXG4gICAgY3Vyc29yOiBuZS1yZXNpemU7XHJcbn1cclxuLnJlc2l6ZUFyZWEucmlnaHQge1xyXG4gICAgdG9wOiAxMHB4O1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICBib3R0b206IDEwcHg7XHJcbiAgICB3aWR0aDogQHJlc2l6ZTtcclxuICAgIGN1cnNvcjogZS1yZXNpemU7XHJcbn1cclxuLnJlc2l6ZUFyZWEuYnIge1xyXG4gICAgYm90dG9tOiAwO1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICBoZWlnaHQ6IDEwcHg7XHJcbiAgICB3aWR0aDogMTBweDtcclxuICAgIGN1cnNvcjogc2UtcmVzaXplO1xyXG59XHJcbi5yZXNpemVBcmVhLmJvdHRvbSB7XHJcbiAgICBib3R0b206IDA7XHJcbiAgICBsZWZ0OiAxMHB4O1xyXG4gICAgcmlnaHQ6IDEwcHg7XHJcbiAgICBoZWlnaHQ6IEByZXNpemU7XHJcbiAgICBjdXJzb3I6IHMtcmVzaXplO1xyXG59XHJcbi5yZXNpemVBcmVhLmJsIHtcclxuICAgIGJvdHRvbTogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICBoZWlnaHQ6IDEwcHg7XHJcbiAgICB3aWR0aDogMTBweDtcclxuICAgIGN1cnNvcjogc3ctcmVzaXplO1xyXG59XHJcbi5yZXNpemVBcmVhLmxlZnQge1xyXG4gICAgdG9wOiAxMHB4O1xyXG4gICAgbGVmdDogMDtcclxuICAgIGJvdHRvbTogMTBweDtcclxuICAgIHdpZHRoOiBAcmVzaXplO1xyXG4gICAgY3Vyc29yOiB3LXJlc2l6ZTtcclxufVxyXG4ucmVzaXplQXJlYS50bCB7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgaGVpZ2h0OiAxMHB4O1xyXG4gICAgd2lkdGg6IDEwcHg7XHJcbiAgICBjdXJzb3I6IG53LXJlc2l6ZTtcclxufVxyXG4vKiBFbmQgUmVzaXppbmcgKi8iLCIvKiBJY29uc1xyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbi8qIHN0YXRlcyBhbmQgaW1hZ2VzICovXHJcbi51aUxpbmtQZW5kaW5nSWNvbiB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICB3aWR0aDogMTZweDtcclxuICAgIGhlaWdodDogMTZweDtcclxuICAgIG1hcmdpbjogMnB4IDJweCAwIDJweDtcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCh1aUxpbmtQZW5kaW5nSWNvbi5naWYpO1xyXG59XHJcblxyXG4ubGlua1BlbmRpbmcgLmZhIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuXHJcbi5saW5rUGVuZGluZyAudWlMaW5rUGVuZGluZ0ljb24ge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbn1cclxuXHJcbi5tYXBJY29uMTYge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgd2lkdGg6IDE2cHg7XHJcbiAgICBoZWlnaHQ6IDE2cHg7XHJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwodWlJY29uczE2R3JlZW4ucG5nKTtcclxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtOTZweDtcclxuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XHJcbiAgICB6b29tOiAwLjEyNTtcclxuICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xyXG4gICAgLyptYXJnaW4tYm90dG9tOiAtMXB4OyovXHJcbn1cclxuLm1hcEljb24xNi5kZWFkICAgICAgICAgICAgICAgICAgICAgICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybCh1aUljb25zMTZSZWQucG5nKTsgICAgfVxyXG4ubWFwSWNvbjE2LmJhZCAgICAgICAgICAgICAgICAgICAgICAgIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKHVpSWNvbnMxNlJlZC5wbmcpOyAgICB9XHJcbi5tYXBJY29uMTYuYXZlcmFnZSAgICAgICAgICAgICAgICAgICAgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwodWlJY29uczE2T3JhbmdlLnBuZyk7IH1cclxuLm1hcEljb24xNi5nb29kICAgICAgICAgICAgICAgICAgICAgICB7IGJhY2tncm91bmQtaW1hZ2U6IHVybCh1aUljb25zMTZHcmVlbi5wbmcpOyAgfVxyXG4vKiBBaXJBbGFybSAqL1xyXG4ubWFwSWNvbjE2Lmljb24tYWlyYWxhcm0gICAgICAgICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQ0cHg7ICAgICAgICAgICAgICB9IFxyXG4vKiBDb21tYW5kIFBvc2l0aW9ucyAqL1xyXG4ubWFwSWNvbjE2LnJhbmstY2FwdGFpbiAgICAgICAgICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xMTJweDsgICAgICAgICB9IFxyXG4ubWFwSWNvbjE2LnJhbmstaGVhZG9mcGVyc29ubmVsICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC05NnB4OyAgICAgICAgICB9XHJcbi5tYXBJY29uMTYucmFuay1oZWFkb2ZzZWN1cml0eSAgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTEyOHB4OyAgICAgICAgIH1cclxuLm1hcEljb24xNi5yYW5rLWNoaWVmZW5naW5lZXIgICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTEycHg7ICAgICAgICAgfVxyXG4ubWFwSWNvbjE2LnJhbmstcmVzZWFyY2hkaXJlY3RvciAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xMjhweDsgICAgICAgICB9XHJcbi5tYXBJY29uMTYucmFuay1jaGllZm1lZGljYWxvZmZpY2VyICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTI4cHg7ICAgICAgICAgIH1cclxuLyogRW5naW5lZXJpbmcgUG9zaXRpb25zICovXHJcbi5tYXBJY29uMTYucmFuay1zdGF0aW9uZW5naW5lZXIgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTExMnB4OyAgICAgICAgIH0gXHJcbi5tYXBJY29uMTYucmFuay1hdG1vc3BoZXJpY3RlY2huaWNpYW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTExMnB4OyAgICAgICAgIH1cclxuLyogTWVkaWNhbCBQb3NpdGlvbnMgKi9cclxuLm1hcEljb24xNi5yYW5rLW1lZGljYWxkb2N0b3IgICAgICAgICB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTEyOHB4OyAgICAgICAgICAgfSBcclxuLm1hcEljb24xNi5yYW5rLWdlbmV0aWNpc3QgICAgICAgICAgICB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTEyOHB4OyAgICAgICAgICAgfVxyXG4ubWFwSWNvbjE2LnJhbmstcHN5Y2hpYXRyaXN0ICAgICAgICAgIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTI4cHg7ICAgICAgICAgICB9XHJcbi5tYXBJY29uMTYucmFuay1jaGVtaXN0ICAgICAgICAgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTI4cHg7ICAgICAgICAgIH1cclxuLyogU2NpZW5jZSBQb3NpdGlvbnMgKi9cclxuLm1hcEljb24xNi5yYW5rLXNjaWVudGlzdCAgICAgICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTI4cHg7ICAgICAgICAgfSBcclxuLm1hcEljb24xNi5yYW5rLWdlbmV0aWNpc3QgICAgICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTI4cHg7ICAgICAgICAgfVxyXG4ubWFwSWNvbjE2LnJhbmstcm9ib3RpY2lzdCAgICAgICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xMjhweDsgICAgICAgICB9XHJcbi5tYXBJY29uMTYucmFuay14ZW5vYmlvbG9naXN0ICAgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTEyOHB4OyAgICAgICAgIH1cclxuLyogU2VjdXJpdHkgUG9zaXRpb25zICovXHJcbi5tYXBJY29uMTYucmFuay13YXJkZW4gICAgICAgICAgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTEyOHB4OyAgICAgICAgIH1cclxuLm1hcEljb24xNi5yYW5rLWRldGVjdGl2ZSAgICAgICAgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTI4cHg7ICAgICAgICAgfVxyXG4ubWFwSWNvbjE2LnJhbmstc2VjdXJpdHlvZmZpY2VyICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xMjhweDsgICAgICAgICB9IiwidWwge1xyXG4gICAgcGFkZGluZzogNHB4IDAgMCAxMHB4O1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xyXG59XHJcblxyXG5saSB7XHJcbiAgICBwYWRkaW5nOiAwIDAgMnB4IDA7XHJcbn1cclxuXHJcbnRhYmxlLmZpeGVkIHtcclxuICAgIHRhYmxlLWxheW91dDpmaXhlZDtcclxufVxyXG5cclxudGFibGUuZml4ZWQgdGQge1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxufVxyXG5cclxuLyogVGFibGUgc3R5bGluZyBmb3IgdGhlIHBvd2VyIG1vbml0b3IgKi9cclxudGFibGUucG1vbiB7XHJcbiAgICBib3JkZXI6IDJweCBzb2xpZCBSb3lhbEJsdWU7XHJcbn1cclxuXHJcbnRhYmxlLnBtb24gdGQsIHRhYmxlLnBtb24gdGgge1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCBibGFjaztcclxuICAgIHBhZGRpbmc6IDBweCA1cHggMHB4IDVweDtcclxufVxyXG5cclxuLyogVGFibGUgc3R5bGluZyBmb3IgdGhlIGNyZXcgbWFuaWZlc3QgKi9cclxuLm1hbmlmZXN0LWhlYWRlcihAY29sb3I6ICM2NjYpIHtcclxuXHRiYWNrZ3JvdW5kOiBAY29sb3I7XHJcbiAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIGNvbG9yOiAjZmZmZmZmO1xyXG59XHJcblxyXG50aC5jb21tYW5kIHtcclxuXHQubWFuaWZlc3QtaGVhZGVyKCMzMzMzRkYpO1xyXG59XHJcblxyXG50aC5zZWMge1xyXG5cdC5tYW5pZmVzdC1oZWFkZXIoIzhlMDAwMCk7XHJcbn1cclxuXHJcbnRoLm1lZCB7XHJcblx0Lm1hbmlmZXN0LWhlYWRlcigjMDA2NjAwKTtcclxufVxyXG5cclxudGguZW5nIHtcclxuXHQubWFuaWZlc3QtaGVhZGVyKCNiMjczMDApO1xyXG59XHJcblxyXG50aC5zY2kge1xyXG5cdC5tYW5pZmVzdC1oZWFkZXIoI2E2NWJhNik7XHJcbn1cclxuXHJcbnRoLnNlciB7XHJcblx0Lm1hbmlmZXN0LWhlYWRlcigjNzEwMEFBKTtcclxufVxyXG5cclxudGguc3VwIHtcclxuXHQubWFuaWZlc3QtaGVhZGVyKCM2NjY2MjEpO1xyXG59XHJcblxyXG50aC5jaXYge1xyXG5cdC5tYW5pZmVzdC1oZWFkZXIoI2EzMjgwMCk7XHJcbn1cclxuXHJcbnRoLm1pc2Mge1xyXG5cdC5tYW5pZmVzdC1oZWFkZXI7XHJcbn1cclxuXHJcbnNwYW4ucW0tam9iIHtcclxuXHRjb2xvcjogbWl4KEBoaWdobGlnaHQtY29sb3IsIEBhdmVyYWdlLWNvbG9yLCAzMyUpO1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbn1cclxuXHJcbi8qIFN0cmlwZWQgbGluZXMgZm9yIHRhYmxlcyBhbmQgZGl2cyAqL1xyXG4uc3RyaXBlZCB7XHJcbiAgICAuc3RyaXBlZC1iYXNlKCkge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0MDQwNDA7XHJcbiAgICB9XHJcbiAgICB0cjpudGgtY2hpbGQoZXZlbikge1xyXG4gICAgICAgIC5zdHJpcGVkLWJhc2U7XHJcbiAgICB9XHJcbiAgICAmOm5vdCh0YWJsZSkgPiA6bnRoLWNoaWxkKGV2ZW4pIHtcclxuICAgICAgICAuc3RyaXBlZC1iYXNlO1xyXG4gICAgfVxyXG59IiwiI3VpTm9TY3JpcHQge1xyXG4gICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgdG9wOiA1MCU7XHJcbiAgICBsZWZ0OiA1MCU7XHJcbiAgICBtYXJnaW46IC02MHB4IDAgMCAtMTUwcHg7XHJcbiAgICB3aWR0aDogMjgwcHg7XHJcbiAgICBoZWlnaHQ6IDEyMHB4O1xyXG4gICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcclxuICAgIGJvcmRlcjogMnB4IHNvbGlkICNmZjAwMDA7XHJcbiAgICBjb2xvcjogIzAwMDAwMDtcclxuICAgIGZvbnQtc2l6ZTogMTBweDtcclxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgei1pbmRleDogOTk5OTtcclxuICAgIHBhZGRpbmc6IDBweCAxMHB4O1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG59XHJcblxyXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgIC5ub3RpY2UgfCBDYXV0aW9uIFN0cmlwZXNcclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLm5vdGljZSB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBiYWNrZ3JvdW5kOiB1cmwodWlOb3RpY2VCYWNrZ3JvdW5kLmpwZykgNTAlIDUwJTtcclxuICAgIGNvbG9yOiAjMDAwMDAwO1xyXG4gICAgZm9udC1zaXplOiAxMnB4O1xyXG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICBwYWRkaW5nOiAzcHggNHB4IDNweCA0cHg7XHJcbiAgICBtYXJnaW46IDRweCAwIDRweCAwO1xyXG59XHJcblxyXG4ubm90aWNlUGxhY2Vob2xkZXIge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgZm9udC1zaXplOiAxMnB4O1xyXG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICBwYWRkaW5nOiAzcHggNHB4IDNweCA0cHg7XHJcbiAgICBtYXJnaW46IDRweCAwIDRweCAwO1xyXG59XHJcblxyXG4ubm90aWNlLmljb24ge1xyXG4gICAgcGFkZGluZzogMnB4IDRweCAwIDIwcHg7XHJcbn1cclxuXHJcbi5ub3RpY2UgaW1nIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICB3aWR0aDogMTZweDtcclxuICAgIGhlaWdodDogMTZweDtcclxufVxyXG5cclxuZGl2Lm5vdGljZSB7XHJcbiAgICBjbGVhcjogYm90aDtcclxufVxyXG4vKioqKioqKioqKioqKioqKioqKipcXFxyXG5cXCoqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHJcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICBQREEsIEROQSBNb2RpZmllciBzdHlsZXNcclxuICAgIERvbid0IGZpdCBhbnl3aGVyZSBlbHNlLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuLyogUERBIHN0eWxpbmcgKi9cclxuLndob2xlU2NyZWVuIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGNvbG9yOiAjNTE3MDg3O1xyXG4gICAgZm9udC1zaXplOiAxNnB4O1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbn1cclxuXHJcbi5wZGFsaW5rIHtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgIGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50O1xyXG5cclxuXHQmLmRpc2FibGVkIHtcclxuXHRcdGJhY2tncm91bmQ6IG5vbmU7XHJcblx0XHRib3JkZXI6IG5vbmU7XHJcblx0XHRjb2xvcjogIzk5OTtcclxuXHRcdHRleHQtYWxpZ246IGxlZnQ7XHJcblx0fVxyXG59XHJcblxyXG4ucGRhbm90ZSB7XHJcbiAgICBjb2xvcjogI2NkNjUwMDtcclxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG59XHJcblxyXG4uaXRlbS5tYWlubWVudSB7XHJcblx0cGFkZGluZy1ib3R0b206IDAuNWVtO1xyXG59XHJcblxyXG5kaXYuY2xvY2sge1xyXG5cdGNvbG9yOiB3aGl0ZTtcclxuXHRmb250LXdlaWdodDogYm9sZDtcclxuXHRmbG9hdDogcmlnaHQ7XHJcblx0cGFkZGluZy1yaWdodDogMmVtO1xyXG59XHJcblxyXG4jcGRhRm9vdGVyIHtcclxuXHRwb3NpdGlvbjogZml4ZWQ7XHJcblx0bGVmdDogMDtcclxuXHRib3R0b206IDA7XHJcblx0d2lkdGg6IDEwMCU7XHJcblx0YmFja2dyb3VuZDogQGRhcmstY29sb3I7XHJcbn1cclxuXHJcbi5wZGFGb290ZXJCdXR0b24ge1xyXG5cdHdpZHRoOiAzMyU7XHJcblx0cGFkZGluZzogMC41ZW0gMDtcclxuXHRmb250LXNpemU6IDIwMCU7XHJcblx0Ym9yZGVyOiBub25lO1xyXG5cdGJhY2tncm91bmQ6IG5vbmU7XHJcblx0Y29sb3I6ICNmZmY7XHJcblxyXG5cdCYuaG92ZXIge1xyXG5cdFx0YmFja2dyb3VuZDogIzUwN2FhYztcclxuXHR9XHJcblxyXG5cdCYuZGlzYWJsZWQge1xyXG5cdFx0YmFja2dyb3VuZDogbm9uZSAhaW1wb3J0YW50O1xyXG5cdFx0Y29sb3I6ICM1NTUgIWltcG9ydGFudDtcclxuXHR9XHJcblxyXG5cdC51aUxpbmtQZW5kaW5nSWNvbiB7XHJcblx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0XHR3aWR0aDogMzMlO1xyXG5cdFx0YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcclxuXHRcdGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcclxuXHR9XHJcbn1cclxuXHJcbi8qIEROQSBNb2RpZmllciBzdHlsaW5nICovXHJcbi5kbmFCbG9jayB7XHJcbiAgICBmbG9hdDogbGVmdDtcclxuICAgIHdpZHRoOiA5MHB4O1xyXG4gICAgcGFkZGluZzogMCAwIDVweCAwO1xyXG59XHJcblxyXG4uZG5hQmxvY2tOdW1iZXIge1xyXG4gICAgZm9udC1mYW1pbHk6IEZpeGVkLCBtb25vc3BhY2U7XHJcbiAgICBmbG9hdDogbGVmdDtcclxuICAgIGNvbG9yOiAjZmZmZmZmO1xyXG4gICAgYmFja2dyb3VuZDogIzM2MzYzNjtcclxuICAgIG1pbi13aWR0aDogMjBweDtcclxuICAgIGhlaWdodDogMjBweDtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbn1cclxuXHJcbi5kbmFTdWJCbG9jayB7XHJcbiAgICBmb250LWZhbWlseTogRml4ZWQsIG1vbm9zcGFjZTtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIG1pbi13aWR0aDogMTZweDtcclxuICAgIGhlaWdodDogMjBweDtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxufVxyXG5cclxuLm1hc2sge1xyXG4gICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHRvcDogMDtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgYmFja2dyb3VuZDogdXJsKHVpTWFza0JhY2tncm91bmQucG5nKTtcclxufVxyXG5cclxuLm1hc2tDb250ZW50IHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiAyMDBweDtcclxuICAgIG1hcmdpbjogMjAwcHggMDtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxufVxyXG4vKioqKioqKioqKioqKioqKioqKipcXFxyXG5cXCoqKioqKioqKioqKioqKioqKioqLyIsIkBpbXBvcnQgXCJfY29uZmlnXCI7XHJcblxyXG5ib2R5IHtcclxuICAgIGNvbG9yOiAjZmZmZmZmO1xyXG4gICAgZm9udC1mYW1pbHk6IEBmb250O1xyXG4gICAgZm9udC1zaXplOiBAZm9udHNpemU7XHJcbiAgICBsaW5lLWhlaWdodDogMTcwJTtcclxuICAgIG1hcmdpbjogMDtcclxuICAgIHBhZGRpbmc6IDA7XHJcbn1cclxuXHJcbmhyIHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICM0MDYyOGE7XHJcbiAgICBoZWlnaHQ6IDFweDtcclxuICAgIGJvcmRlcjogbm9uZTtcclxufVxyXG5cclxuaW1nLCBhIGltZyB7XHJcbiAgICBib3JkZXItc3R5bGU6IG5vbmU7XHJcbn1cclxuXHJcbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYge1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMTJweCAwIDZweCAwO1xyXG4gICAgY29sb3I6ICNGRkZGRkY7XHJcbiAgICBjbGVhcjogYm90aDtcclxufVxyXG5cclxuaDEge1xyXG4gICAgZm9udC1zaXplOiAxOHB4O1xyXG59XHJcblxyXG5oMiB7XHJcbiAgICBmb250LXNpemU6IDE2cHg7XHJcbn1cclxuXHJcbmgzIHtcclxuICAgIGZvbnQtc2l6ZTogMTRweDtcclxufVxyXG5cclxuaDQge1xyXG4gICAgZm9udC1zaXplOiAxMnB4O1xyXG59IiwiKltkYXRhLXRvb2x0aXBdIHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcblxyXG4gICY6OmFmdGVyIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgei1pbmRleDogMjtcclxuICAgIHdpZHRoOiAyNTBweDtcclxuICAgIHBhZGRpbmc6IDEwcHg7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XHJcblxyXG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xyXG4gICAgb3BhY2l0eTogMDtcclxuXHJcbiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xyXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcclxuICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS10b29sdGlwKTtcclxuXHJcbiAgICB0cmFuc2l0aW9uOiBhbGwgLjVzO1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTk5OTtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICMzNjM2MzY7XHJcbiAgfVxyXG5cclxuICAmOmhvdmVyOjphZnRlciB7XHJcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xyXG4gICAgb3BhY2l0eTogMTtcclxuICB9XHJcblxyXG4gICYudG9vbHRpcFRvcDo6YWZ0ZXIge1xyXG4gICAgYm90dG9tOiAxMDAlO1xyXG4gICAgbGVmdDogNTAlO1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoOHB4KTtcclxuICB9XHJcbiAgJi50b29sdGlwVG9wOmhvdmVyOjphZnRlciB7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtOHB4KTtcclxuICB9XHJcblxyXG4gICYudG9vbHRpcEJvdHRvbTo6YWZ0ZXIge1xyXG4gICAgdG9wOiAxMDAlO1xyXG4gICAgbGVmdDogNTAlO1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLThweCk7XHJcbiAgfVxyXG4gICYudG9vbHRpcEJvdHRvbTpob3Zlcjo6YWZ0ZXIge1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoOHB4KTtcclxuICB9XHJcblxyXG4gICYudG9vbHRpcExlZnQ6OmFmdGVyIHtcclxuICAgIHRvcDogNTAlO1xyXG4gICAgcmlnaHQ6IDEwMCU7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoOHB4KSB0cmFuc2xhdGVZKC01MCUpO1xyXG4gIH1cclxuICAmLnRvb2x0aXBMZWZ0OmhvdmVyOjphZnRlciB7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLThweCkgdHJhbnNsYXRlWSgtNTAlKTtcclxuICB9XHJcblxyXG4gICYudG9vbHRpcFJpZ2h0OjphZnRlciB7XHJcbiAgICB0b3A6IDUwJTtcclxuICAgIGxlZnQ6IDEwMCU7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLThweCkgdHJhbnNsYXRlWSgtNTAlKTtcclxuICB9XHJcbiAgJi50b29sdGlwUmlnaHQ6aG92ZXI6OmFmdGVyIHtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg4cHgpIHRyYW5zbGF0ZVkoLTUwJSk7XHJcbiAgfVxyXG59IixudWxsLCJAY2hhcnNldCBcInV0Zi04XCI7XHJcblxyXG5AaW1wb3J0IFwiX2JhcnNcIjtcclxuQGltcG9ydCBcIl9saW5rXCI7XHJcbkBpbXBvcnQgXCJfY29sb3JcIjtcclxuQGltcG9ydCBcIl9jb25maWdcIjtcclxuQGltcG9ydCBcIl9kaXNwbGF5XCI7XHJcbkBpbXBvcnQgXCJfZm9ybWF0dGluZ1wiO1xyXG5AaW1wb3J0IFwiX2ZhbmN5XCI7XHJcbkBpbXBvcnQgXCJfaWNvblwiO1xyXG5AaW1wb3J0IFwiX2xpc3RzXCI7XHJcbkBpbXBvcnQgXCJfbWlzY1wiO1xyXG5AaW1wb3J0IFwiX25hdGl2ZVwiO1xyXG5AaW1wb3J0IFwiX3Rvb2x0aXBcIjtcclxuXHJcblxyXG4ubWFpbkJHIHtcclxuICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgIHotaW5kZXg6IC0xO1xyXG4gICAgdG9wOiAzMHB4O1xyXG4gICAgbGVmdDogMHB4O1xyXG4gICAgcmlnaHQ6IDBweDtcclxuICAgIGJvdHRvbTogMHB4O1xyXG4gICAgYmFja2dyb3VuZDogZGF0YS11cmkoJ25hbm90cmFzZW4uc3ZnJykgbm8tcmVwZWF0IGZpeGVkIGNlbnRlci83MCUgNzAlLFxyXG4gICAgICAgIGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sXHJcbiAgICAgICAgQGJhY2tncm91bmQtc3RhcnQgMCUsXHJcbiAgICAgICAgQGJhY2tncm91bmQtZW5kIDEwMCUpIG5vLXJlcGVhdCBmaXhlZCBjZW50ZXIvMTAwJSAxMDAlO1xyXG59XHJcblxyXG4vL25hbm8gc2Nyb2xsYmFyIHN0eWxpbmdcclxuaHRtbCxib2R5IHtcclxuICAgIHNjcm9sbGJhci1mYWNlLWNvbG9yOiM2NjY2NjY7XHJcbiAgICBzY3JvbGxiYXItYXJyb3ctY29sb3I6I0U5QzE4MztcclxuICAgIHNjcm9sbGJhci10cmFjay1jb2xvcjojMzYzNjM2O1xyXG4gICAgc2Nyb2xsYmFyLXNoYWRvdy1jb2xvcjojNTU1NTU1OyAgICBcclxufVxyXG5cclxuI3VpV3JhcHBlciB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcclxuICAgIHVzZXItc2VsZWN0OiBub25lO1xyXG59XHJcblxyXG4jdWlUaXRsZVdyYXBwZXIge1xyXG4gICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgbWluLWhlaWdodDogMzBweDtcclxuICAgIG1pbi13aWR0aDogMTAwJTsgXHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzYzNjM2O1xyXG4gICAgbGVmdDogMHB4O1xyXG4gICAgdG9wOiAwcHg7XHJcbiAgICByaWdodDogMHB4O1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIHotaW5kZXg6IDEwMDtcclxuICAgICYgPiBkaXYge1xyXG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcclxuICAgIH1cclxuICAgICYgPiBpIHtcclxuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbiN1aVRpdGxlVGV4dCB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDZweDtcclxuICAgIGxlZnQ6IDQ0cHg7XHJcbiAgICB3aWR0aDogNjYlO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIGNvbG9yOiAjRTlDMTgzO1xyXG4gICAgZm9udC1zaXplOiAxNnB4O1xyXG59XHJcblxyXG4jdWlUaXRsZS5pY29uIHtcclxuICAgIHBhZGRpbmc6IDZweCA4cHggNnB4IDQycHg7XHJcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAycHggNTAlO1xyXG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcclxufVxyXG5cclxuI3VpVGl0bGVGbHVmZiB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDRweDtcclxuICAgIHJpZ2h0OiAxMnB4O1xyXG4gICAgd2lkdGg6IDQycHg7XHJcbiAgICBoZWlnaHQ6IDI0cHg7XHJcbiAgICBiYWNrZ3JvdW5kOiBkYXRhLXVyaSgnbmFub3RyYXNlbi5zdmcnKSA1MCUgNTAlIG5vLXJlcGVhdDtcclxufVxyXG5cclxuLnN0YXR1c2ljb24ge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiA0cHg7XHJcbiAgICBsZWZ0OiAxMnB4O1xyXG59XHJcblxyXG4jdWlNYXBXcmFwcGVyIHtcclxuICAgIGNsZWFyOiBib3RoO1xyXG4gICAgcGFkZGluZzogOHB4O1xyXG4gICAgbWFyZ2luLXRvcDogMzBweDtcclxufVxyXG5cclxuI3VpTWFwSGVhZGVyIHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIGNsZWFyOiBib3RoO1xyXG59XHJcblxyXG4jdWlNYXBDb250YWluZXIge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IDYwMHB4O1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICM0MDYyOGE7XHJcbiAgICBiYWNrZ3JvdW5kOiB1cmwobmFub21hcEJhY2tncm91bmQucG5nKTtcclxufVxyXG5cclxuI3VpTWFwIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogNTAlO1xyXG4gICAgbGVmdDogNTAlO1xyXG4gICAgbWFyZ2luOiAtNTEycHggMCAwIC01MTJweDtcclxuICAgIHdpZHRoOiAyNTZweDtcclxuICAgIGhlaWdodDogMjU2cHg7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgem9vbTogNDtcclxufVxyXG5cclxuI3VpTWFwSW1hZ2Uge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgYm90dG9tOiAxcHg7XHJcbiAgICBsZWZ0OiAxcHg7XHJcbiAgICB3aWR0aDogMjU2cHg7XHJcbiAgICBoZWlnaHQ6IDI1NnB4O1xyXG59XHJcblxyXG4jdWlNYXBDb250ZW50IHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGJvdHRvbTogLTEzLjVweDtcclxuICAgIGxlZnQ6IDBweDtcclxuICAgIHdpZHRoOiAyNTZweDtcclxuICAgIGhlaWdodDogMjU2cHg7XHJcbn1cclxuXHJcbiN1aU1hcEZvb3RlciB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBjbGVhcjogYm90aDtcclxufVxyXG5cclxuI3VpQ29udGVudCB7XHJcbiAgICBjbGVhcjogYm90aDtcclxuICAgIHBhZGRpbmc6IDhweDtcclxuICAgIG1hcmdpbi10b3A6IDMwcHg7XHJcbn1cclxuXHJcbiN1aU1hcFRvb2x0aXAge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgcmlnaHQ6IDEwcHg7XHJcbiAgICB0b3A6IDEwcHg7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjNDA2MjhhO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzI3MjcyNztcclxuICAgIHBhZGRpbmc6IDhweDtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICB6LWluZGV4OiA5OTk5O1xyXG59XHJcblxyXG4jdWlMb2FkaW5nTm90aWNlIHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIGJhY2tncm91bmQ6IHVybCh1aU5vdGljZUJhY2tncm91bmQuanBnKSA1MCUgNTAlO1xyXG4gICAgY29sb3I6ICMwMDAwMDA7XHJcbiAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XHJcbiAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIHBhZGRpbmc6IDNweCA0cHggM3B4IDRweDtcclxuICAgIG1hcmdpbjogNHB4IDAgNHB4IDA7XHJcbn1cclxuXHJcbi51bmRlclRpdGxlIHtcclxuICAgIG1hcmdpbi10b3A6IDMwcHg7XHJcbn0iXX0= */ diff --git a/nano/styles/_link.less b/nano/styles/_link.less index 24a8c33c7b6..5a3d7fa267e 100644 --- a/nano/styles/_link.less +++ b/nano/styles/_link.less @@ -1,4 +1,4 @@ -.link, .linkOn, .linkOff, .selected, .disabled, .yellowButton, .redButton { +.link, .linkOn, .linkOff, .selected, .disabled, .yellowButton, .redButton, .linkEncourage, .linkDiscourage { float: left; min-width: 15px; height: 16px; @@ -82,6 +82,27 @@ a.icon img, .linkOn.icon img, .linkOff.icon img, .selected.icon img, .disabled.i background-color: #ff6666; } +.linkEncourage, a.linkEncourage:link, a.linkEncourage:visited, a.linkEncourage:active { + color: #99ff33; + background-color: #40628a; + border-color: #161616; +} + +.linkEncourage.hover { + background-color: #507aac; +} + +.linkDiscourage, a.linkDiscourage:link, a.linkDiscourage:visited, a.linkDiscourage:active { + color: #8c8c8c; + background-color: #40628a; + border-color: #161616; +} + +.linkDiscourage.hover { + color: #ff0000; + background-color: #507aac; +} + .inactive, a.inactive:link, a.inactive:visited, a.inactive:active, a.inactive.hover { color: #ffffff; background: #999999; diff --git a/nano/templates/card_prog.tmpl b/nano/templates/card_prog.tmpl index 478c8f6b400..8ce688e1997 100644 --- a/nano/templates/card_prog.tmpl +++ b/nano/templates/card_prog.tmpl @@ -11,6 +11,7 @@ {{:helper.link('Job Management', 'gear', {'action' : 'PRG_mode', 'mode_target' : 1}, data.mode == 1 ? 'disabled' : null)}} {{:helper.link('Crew Manifest', 'folder-open', {'action' : 'PRG_mode', 'mode_target' : 2}, data.mode == 2 ? 'disabled' : null)}} {{:helper.link('Print', 'print', {'action' : 'PRG_print'}, data.printer && (data.mode == 2 || data.has_modify && !data.mode) ? null : 'disabled')}} + {{:helper.link('Records', 'file', {'action' : 'PRG_mode', 'mode_target' : 3}, (data.mode == 3) ? 'disabled' : null)}} {{if data.mode == 1}}
    @@ -52,6 +53,31 @@
    {{:data.manifest}}
    + {{else data.mode == 3}} +
    +

    Records

    +
    +
    +
    + Authorized Identity: +
    +
    + {{:helper.link(data.scan_name, 'eject', {'action' : 'scan'})}} +
    +
    +
    + {{if data.authenticated}} + {{:data.id_change_html}} + {{if data.centcom_access}} + {{:helper.link('Delete Records By: ' + data.scan_owner, null, {'action' : 'PRG_wipe_my_logs'}, null, 'linkDanger')}} + {{/if}} + {{if !data.target_dept}} + {{:helper.link('Delete ALL Records', null, {'action' : 'PRG_wipe_all_logs'}, null, 'linkDanger')}} + {{/if}} + {{else}} + Please insert an authorized ID into the terminal to proceed.
    + {{/if}} +
    {{else}}

    Access Modification

    @@ -149,7 +175,11 @@ Terminations:
    - {{:helper.link('Terminate ' + data.target_owner, 'gear', {'action' : 'PRG_terminate'}, data.target_rank == "Terminated" ? 'disabled' : null, data.target_rank == "Terminated" ? 'disabled' : 'linkDanger')}} + {{if data.target_rank == "Terminated"}} + {{:data.target_owner}} has already been terminated! + {{else}} + {{:helper.link('Terminate ' + data.target_owner, 'gear', {'action' : 'PRG_terminate'}, data.target_rank == "Terminated" ? 'disabled' : null, data.target_rank == "Terminated" ? 'disabled' : 'linkDanger')}} + {{/if}}
    @@ -168,15 +198,16 @@ Special - {{:helper.link("Captain", '', {'action' : 'PRG_assign', 'assign_target' : 'Captain'}, data.target_rank == 'Captain' ? 'disabled' : null)}} - {{:helper.link("Custom", '', {'action' : 'PRG_assign', 'assign_target' : 'Custom'})}} + {{for data.top_jobs}} + {{:helper.link(value.display_name, '', {'action' : 'PRG_assign', 'assign_target' : value.job}, value.jlinkformat == 'disabled' ? 'disabled' : null, value.jlinkformat ? value.jlinkformat : null)}} + {{/for}} Engineering {{for data.engineering_jobs}} - {{:helper.link(value.display_name, '', {'action' : 'PRG_assign', 'assign_target' : value.job}, data.target_rank == value.job ? 'disabled' : null)}} + {{:helper.link(value.display_name, '', {'action' : 'PRG_assign', 'assign_target' : value.job}, value.jlinkformat == 'disabled' ? 'disabled' : null, value.jlinkformat ? value.jlinkformat : null)}} {{/for}} @@ -184,7 +215,7 @@ Medical {{for data.medical_jobs}} - {{:helper.link(value.display_name, '', {'action' : 'PRG_assign', 'assign_target' : value.job}, data.target_rank == value.job ? 'disabled' : null)}} + {{:helper.link(value.display_name, '', {'action' : 'PRG_assign', 'assign_target' : value.job}, value.jlinkformat == 'disabled' ? 'disabled' : null, value.jlinkformat ? value.jlinkformat : null)}} {{/for}} @@ -192,7 +223,7 @@ Security {{for data.security_jobs}} - {{:helper.link(value.display_name, '', {'action' : 'PRG_assign', 'assign_target' : value.job}, data.target_rank == value.job ? 'disabled' : null)}} + {{:helper.link(value.display_name, '', {'action' : 'PRG_assign', 'assign_target' : value.job}, value.jlinkformat == 'disabled' ? 'disabled' : null, value.jlinkformat ? value.jlinkformat : null)}} {{/for}} @@ -200,7 +231,7 @@ Science {{for data.science_jobs}} - {{:helper.link(value.display_name, '', {'action' : 'PRG_assign', 'assign_target' : value.job}, data.target_rank == value.job ? 'disabled' : null)}} + {{:helper.link(value.display_name, '', {'action' : 'PRG_assign', 'assign_target' : value.job}, value.jlinkformat == 'disabled' ? 'disabled' : null, value.jlinkformat ? value.jlinkformat : null)}} {{/for}} @@ -208,7 +239,7 @@ Support {{for data.support_jobs}} - {{:helper.link(value.display_name, '', {'action' : 'PRG_assign', 'assign_target' : value.job}, data.target_rank == value.job ? 'disabled' : null)}} + {{:helper.link(value.display_name, '', {'action' : 'PRG_assign', 'assign_target' : value.job}, value.jlinkformat == 'disabled' ? 'disabled' : null, value.jlinkformat ? value.jlinkformat : null)}} {{/for}} @@ -216,7 +247,7 @@ Civilian {{for data.civilian_jobs}} - {{:helper.link(value.display_name, '', {'action' : 'PRG_assign', 'assign_target' : value.job}, data.target_rank == value.job ? 'disabled' : null)}} + {{:helper.link(value.display_name, '', {'action' : 'PRG_assign', 'assign_target' : value.job}, value.jlinkformat == 'disabled' ? 'disabled' : null, value.jlinkformat ? value.jlinkformat : null)}} {{/for}} @@ -225,7 +256,7 @@ CentComm {{for data.centcom_jobs}} - {{:helper.link(value.display_name, '', {'action' : 'PRG_assign', 'assign_target' : value.job}, data.target_rank == value.job ? 'disabled' : null)}} + {{:helper.link(value.display_name, '', {'action' : 'PRG_assign', 'assign_target' : value.job}, value.jlinkformat == 'disabled' ? 'disabled' : null, value.jlinkformat ? value.jlinkformat : null)}} {{/for}} diff --git a/nano/templates/identification_computer.tmpl b/nano/templates/identification_computer.tmpl index ad2779f7864..606af520168 100644 --- a/nano/templates/identification_computer.tmpl +++ b/nano/templates/identification_computer.tmpl @@ -11,7 +11,8 @@ {{if !data.target_dept}}{{:helper.link('Job Management', 'gear', {'choice' : 'mode', 'mode_target' : 1}, data.mode == 1 ? 'disabled' : null)}}{{/if}} {{:helper.link('Crew Manifest', 'folder-open', {'choice' : 'mode', 'mode_target' : 2}, data.mode == 2 ? 'disabled' : null)}} {{if !data.target_dept}}{{:helper.link('Print', 'print', {'choice' : 'print'}, (data.mode == 2 || data.has_modify && !data.mode) ? null : 'disabled')}}{{/if}} - + {{:helper.link('Records', 'file', {'choice' : 'mode', 'mode_target' : 3}, (data.mode == 3) ? 'disabled' : null)}} + {{if data.mode == 1 && !data.target_dept}}

    Job Management

    @@ -52,6 +53,31 @@
    {{:data.manifest}}
    + {{else data.mode == 3}} +
    +

    Records

    +
    +
    +
    + Authorized Identity: +
    +
    + {{:helper.link(data.scan_name, 'eject', {'choice' : 'scan'})}} +
    +
    +
    + {{if data.authenticated}} + {{:data.id_change_html}} + {{if data.centcom_access}} + {{:helper.link('Delete Records By: ' + data.scan_owner, null, {'choice' : 'wipe_my_logs'}, null, 'linkDanger')}} + {{/if}} + {{if !data.target_dept}} + {{:helper.link('Delete ALL Records', null, {'choice' : 'wipe_all_logs'}, null, 'linkDanger')}} + {{/if}} + {{else}} + Please insert an authorized ID into the terminal to proceed.
    + {{/if}} +
    {{else}}

    Access Modification

    @@ -145,21 +171,31 @@
    {{/if}} -
    + {{if data.target_rank != "Terminated"}} +
    Demotions:
    - {{:helper.link('Demote ' + data.target_owner, 'gear', {'choice' : 'demote'}, (data.target_rank == "Civilian" || data.target_rank == "Unassigned" || data.target_rank == "Terminated") ? 'disabled' : null, (data.target_rank == "Civilian" || data.target_rank == "Unassigned" || data.target_rank == "Terminated") ? 'disabled' : 'linkDanger')}} + {{if data.target_rank == "Demoted"}} + {{:data.target_owner}} has already been demoted! + {{else}} + {{:helper.link('Demote ' + data.target_owner, 'gear', {'choice' : 'demote'}, (data.target_rank == "Civilian" || data.target_rank == "Unassigned") ? 'disabled' : null, (data.target_rank == "Civilian" || data.target_rank == "Unassigned") ? 'disabled' : 'linkDanger')}} + {{/if}}
    + {{/if}} {{if !data.target_dept}}
    Terminations:
    - {{:helper.link('Terminate ' + data.target_owner, 'gear', {'choice' : 'terminate'}, data.target_rank == "Terminated" ? 'disabled' : null, data.target_rank == "Terminated" ? 'disabled' : 'linkDanger')}} + {{if data.target_rank == "Terminated"}} + {{:data.target_owner}} has already been terminated! + {{else}} + {{:helper.link('Terminate ' + data.target_owner, 'gear', {'choice' : 'terminate'}, data.target_rank == "Terminated" ? 'disabled' : null, data.target_rank == "Terminated" ? 'disabled' : 'linkDanger')}} + {{/if}}
    @@ -187,8 +223,9 @@ Special - {{:helper.link("Captain", '', {'choice' : 'assign', 'assign_target' : 'Captain'}, data.target_rank == 'Captain' ? 'disabled' : null)}} - {{:helper.link("Custom", '', {'choice' : 'assign', 'assign_target' : 'Custom'})}} + {{for data.top_jobs}} + {{:helper.link(value.display_name, '', {'choice' : 'assign', 'assign_target' : value.job}, value.jlinkformat == 'disabled' ? 'disabled' : null, value.jlinkformat ? value.jlinkformat : null)}} + {{/for}} {{/if}} @@ -197,7 +234,7 @@ Engineering {{for data.engineering_jobs}} - {{:helper.link(value.display_name, '', {'choice' : 'assign', 'assign_target' : value.job}, data.target_rank == value.job ? 'disabled' : null)}} + {{:helper.link(value.display_name, '', {'choice' : 'assign', 'assign_target' : value.job}, value.jlinkformat == 'disabled' ? 'disabled' : null, value.jlinkformat ? value.jlinkformat : null)}} {{/for}} @@ -207,7 +244,7 @@ Medical {{for data.medical_jobs}} - {{:helper.link(value.display_name, '', {'choice' : 'assign', 'assign_target' : value.job}, data.target_rank == value.job ? 'disabled' : null)}} + {{:helper.link(value.display_name, '', {'choice' : 'assign', 'assign_target' : value.job}, value.jlinkformat == 'disabled' ? 'disabled' : null, value.jlinkformat ? value.jlinkformat : null)}} {{/for}} @@ -217,7 +254,7 @@ Security {{for data.security_jobs}} - {{:helper.link(value.display_name, '', {'choice' : 'assign', 'assign_target' : value.job}, data.target_rank == value.job ? 'disabled' : null)}} + {{:helper.link(value.display_name, '', {'choice' : 'assign', 'assign_target' : value.job}, value.jlinkformat == 'disabled' ? 'disabled' : null, value.jlinkformat ? value.jlinkformat : null)}} {{/for}} @@ -227,9 +264,9 @@ Science {{for data.science_jobs}} - {{:helper.link(value.display_name, '', {'choice' : 'assign', 'assign_target' : value.job}, data.target_rank == value.job ? 'disabled' : null)}} + {{:helper.link(value.display_name, '', {'choice' : 'assign', 'assign_target' : value.job}, value.jlinkformat == 'disabled' ? 'disabled' : null, value.jlinkformat ? value.jlinkformat : null)}} {{/for}} - + {{/if}} {{if !data.target_dept}} @@ -237,7 +274,7 @@ Support {{for data.support_jobs}} - {{:helper.link(value.display_name, '', {'choice' : 'assign', 'assign_target' : value.job}, data.target_rank == value.job ? 'disabled' : null)}} + {{:helper.link(value.display_name, '', {'choice' : 'assign', 'assign_target' : value.job}, value.jlinkformat == 'disabled' ? 'disabled' : null, value.jlinkformat ? value.jlinkformat : null)}} {{/for}} @@ -246,7 +283,7 @@ Civilian {{for data.civilian_jobs}} - {{:helper.link(value.display_name, '', {'choice' : 'assign', 'assign_target' : value.job}, data.target_rank == value.job ? 'disabled' : null)}} + {{:helper.link(value.display_name, '', {'choice' : 'assign', 'assign_target' : value.job}, value.jlinkformat == 'disabled' ? 'disabled' : null, value.jlinkformat ? value.jlinkformat : null)}} {{/for}} @@ -255,7 +292,7 @@ CentComm {{for data.centcom_jobs}} - {{:helper.link(value.display_name, '', {'choice' : 'assign', 'assign_target' : value.job}, data.target_rank == value.job ? 'disabled' : null)}} + {{:helper.link(value.display_name, '', {'choice' : 'assign', 'assign_target' : value.job}, value.jlinkformat == 'disabled' ? 'disabled' : null, value.jlinkformat ? value.jlinkformat : null)}} {{/for}} diff --git a/paradise.dme b/paradise.dme index 12331e3bc78..c52d2302dce 100644 --- a/paradise.dme +++ b/paradise.dme @@ -2136,7 +2136,6 @@ #include "code\modules\power\powernet.dm" #include "code\modules\power\smes.dm" #include "code\modules\power\solar.dm" -#include "code\modules\power\switch.dm" #include "code\modules\power\terminal.dm" #include "code\modules\power\tracker.dm" #include "code\modules\power\treadmill.dm" diff --git a/sound/voice/borg_deathsound.ogg b/sound/voice/borg_deathsound.ogg new file mode 100644 index 00000000000..06e847165ff Binary files /dev/null and b/sound/voice/borg_deathsound.ogg differ diff --git a/sound/weapons/bolathrow.ogg b/sound/weapons/bolathrow.ogg new file mode 100644 index 00000000000..9a7b78fb67f Binary files /dev/null and b/sound/weapons/bolathrow.ogg differ diff --git a/strings/revenant_names.json b/strings/revenant_names.json new file mode 100644 index 00000000000..8c1229296f4 --- /dev/null +++ b/strings/revenant_names.json @@ -0,0 +1,55 @@ +{ + "spirit_type": [ + "Essence", + "Ghost", + "Phantom", + "Poltergeist", + "Revenant", + "Soul", + "Spectre", + "Spirit" + ], + + "adjective": [ + "", + "Abysmal ", + "Abyssal ", + "Brutal ", + "Dark ", + "Endless ", + "Eternal ", + "Fiery ", + "Hateful ", + "Hideous ", + "Hilarious ", + "Indifferent ", + "Malevolent ", + "Peaceful ", + "Searing ", + "Silent ", + "Spiteful ", + "Vicious ", + "Violent " + ], + + "theme": [ + "Agony", + "Anger", + "Death", + "Despair", + "Desperation", + "Destruction", + "Disease", + "Grief", + "Hate", + "Hellfire", + "Laughter", + "Misery", + "Ruin", + "Salt", + "Screams", + "Sorrow", + "Suffering", + "Vengeance" + ] +}