diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 60a6fbdad96..3def1e0390c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -71,6 +71,11 @@ /icons/ @ShizCalev /sound/ @ShizCalev +# stylemistake + +/tgui @stylemistake +/tgui-next @stylemistake + # Qustinnus /code/datums/components/mood.dm @Qustinnus /code/datums/mood_events/ @Qustinnus diff --git a/.vscode/extensions.json b/.vscode/extensions.json index e9cb60a587a..0abac7a5338 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -2,6 +2,7 @@ "recommendations": [ "gbasood.byond-dm-language-support", "platymuus.dm-langclient", - "EditorConfig.EditorConfig" + "EditorConfig.EditorConfig", + "dbaeumer.vscode-eslint" ] } diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index d685ef9e46e..68f1d8dc605 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -187,6 +187,11 @@ /proc/log_mapping(text) WRITE_LOG(GLOB.world_map_error_log, text) +/* ui logging */ + +/proc/log_tgui(text) + WRITE_LOG(GLOB.tgui_log, text) + /* For logging round startup. */ /proc/start_log(log) WRITE_LOG(log, "Starting up round ID [GLOB.round_id].\n-------------------------") diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm index 45e96b9b9b6..0693158a653 100644 --- a/code/_globalvars/logging.dm +++ b/code/_globalvars/logging.dm @@ -38,6 +38,8 @@ GLOBAL_VAR(world_map_error_log) GLOBAL_PROTECT(world_map_error_log) GLOBAL_VAR(world_paper_log) GLOBAL_PROTECT(world_paper_log) +GLOBAL_VAR(tgui_log) +GLOBAL_PROTECT(tgui_log) GLOBAL_LIST_EMPTY(bombers) GLOBAL_PROTECT(bombers) diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 3a3f58b5c5f..4dcb8f1906a 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -137,10 +137,7 @@ if(obj_flags & EMAGGED) return - if(locked) - bolt_raise(usr) - else - bolt_drop(usr) + toggle_bolt(usr) add_hiddenprint(usr) /obj/machinery/door/airlock/AIAltClick() // Eletrifies doors. @@ -163,10 +160,7 @@ if(obj_flags & EMAGGED) return - if(!emergency) - emergency_on(usr) - else - emergency_off(usr) + toggle_emergency(usr) add_hiddenprint(usr) /* APC */ diff --git a/code/controllers/subsystem/tgui.dm b/code/controllers/subsystem/tgui.dm index b10d0af8c51..c687a3b20e0 100644 --- a/code/controllers/subsystem/tgui.dm +++ b/code/controllers/subsystem/tgui.dm @@ -11,7 +11,7 @@ SUBSYSTEM_DEF(tgui) var/basehtml // The HTML base used for all UIs. /datum/controller/subsystem/tgui/PreInit() - basehtml = file2text('tgui/tgui.html') + basehtml = file2text('tgui-next/packages/tgui/public/tgui-main.html') /datum/controller/subsystem/tgui/Shutdown() close_all_uis() @@ -34,4 +34,3 @@ SUBSYSTEM_DEF(tgui) processing_uis.Remove(ui) if (MC_TICK_CHECK) return - diff --git a/code/datums/wires/_wires.dm b/code/datums/wires/_wires.dm index ce8cb318560..8204e98653b 100644 --- a/code/datums/wires/_wires.dm +++ b/code/datums/wires/_wires.dm @@ -222,7 +222,7 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "wires", "[holder.name] wires", 350, 150 + wires.len * 30, master_ui, state) + ui = new(user, src, ui_key, "wires", "[holder.name] Wires", 350, 150 + wires.len * 30, master_ui, state) ui.open() /datum/wires/ui_data(mob/user) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index ff8ee8b3bf8..83d6c40f4a4 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1365,7 +1365,7 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "ai_airlock", name, 550, 456, master_ui, state) + ui = new(user, src, ui_key, "ai_airlock", name, 500, 390, master_ui, state) ui.open() return TRUE @@ -1434,84 +1434,24 @@ if("shock-perm") shock_perm(usr) . = TRUE - if("idscan-on") - if(wires.is_cut(WIRE_IDSCAN)) - to_chat(usr, "You can't enable IdScan - The IdScan wire has been cut.") - else if(aiDisabledIdScanner) - aiDisabledIdScanner = FALSE - else - to_chat(usr, "The IdScan feature is not disabled.") + if("idscan-toggle") + aiDisabledIdScanner = !aiDisabledIdScanner . = TRUE - if("idscan-off") - if(wires.is_cut(WIRE_IDSCAN)) - to_chat(usr, "The IdScan wire has been cut - So, you can't disable it, but it is already disabled anyways.") - else if(aiDisabledIdScanner) - to_chat(usr, "You've already disabled the IdScan feature.") - else - aiDisabledIdScanner = TRUE + if("emergency-toggle") + toggle_emergency(usr) . = TRUE - if("emergency-on") - emergency_on(usr) + if("bolt-toggle") + toggle_bolt(usr) . = TRUE - if("emergency-off") - emergency_off(usr) + if("light-toggle") + lights = !lights + update_icon() . = TRUE - if("bolt-raise") - bolt_raise(usr) + if("safe-toggle") + safe = !safe . = TRUE - if("bolt-drop") - bolt_drop(usr) - . = TRUE - if("light-on") - if(wires.is_cut(WIRE_LIGHT)) - to_chat(usr, "Control to door bolt lights has been severed.") - else if (!lights) - lights = TRUE - update_icon() - else - to_chat(usr, text("Door bolt lights are already enabled!")) - . = TRUE - if("light-off") - if(wires.is_cut(WIRE_LIGHT)) - to_chat(usr, "Control to door bolt lights has been severed.") - else if (lights) - lights = FALSE - update_icon() - else - to_chat(usr, "Door bolt lights are already disabled!") - . = TRUE - if("safe-on") - if(wires.is_cut(WIRE_SAFETY)) - to_chat(usr, "Control to door sensors is disabled.") - else if (!safe) - safe = TRUE - else - to_chat(usr, "Firmware reports safeties already in place.") - . = TRUE - if("safe-off") - if(wires.is_cut(WIRE_SAFETY)) - to_chat(usr, "Control to door sensors is disabled.") - else if (safe) - safe = FALSE - else - to_chat(usr, "Firmware reports safeties already overridden.") - . = TRUE - if("speed-on") - if(wires.is_cut(WIRE_TIMING)) - to_chat(usr, "Control to door timing circuitry has been severed.") - else if (!normalspeed) - normalspeed = 1 - else - to_chat(usr,"Door timing circuitry currently operating normally.") - . = TRUE - if("speed-off") - if(wires.is_cut(WIRE_TIMING)) - to_chat(usr, "Control to door timing circuitry has been severed.") - else if (normalspeed) - normalspeed = 0 - else - to_chat(usr, "Door timing circuitry already accelerated.") - + if("speed-toggle") + normalspeed = !normalspeed . = TRUE if("open-close") user_toggle_open(usr) @@ -1544,45 +1484,26 @@ else set_electrified(MACHINE_ELECTRIFIED_PERMANENT, user) -/obj/machinery/door/airlock/proc/emergency_on(mob/user) - if(!user_allowed(user)) - return - if (!emergency) - emergency = TRUE - update_icon() - else - to_chat(user, "Emergency access is already enabled!") - -/obj/machinery/door/airlock/proc/emergency_off(mob/user) - if(!user_allowed(user)) - return - if (emergency) - emergency = FALSE - update_icon() - else - to_chat(user, "Emergency access is already disabled!") - -/obj/machinery/door/airlock/proc/bolt_raise(mob/user) +/obj/machinery/door/airlock/proc/toggle_bolt(mob/user) if(!user_allowed(user)) return if(wires.is_cut(WIRE_BOLTS)) - to_chat(user, "The door bolt drop wire is cut - you can't raise the door bolts") - else if(!locked) - to_chat(user, "The door bolts are already up") - else - if(hasPower()) - unbolt() + to_chat(user, "The door bolt drop wire is cut - you can't toggle the door bolts.") + return + if(locked) + if(!hasPower()) + to_chat(user, "The door has no power - you can't raise the door bolts.") else - to_chat(user, "Cannot raise door bolts due to power failure") - -/obj/machinery/door/airlock/proc/bolt_drop(mob/user) - if(!user_allowed(user)) - return - if(wires.is_cut(WIRE_BOLTS)) - to_chat(user, "You can't drop the door bolts - The door bolt dropping wire has been cut.") + unbolt() else bolt() +/obj/machinery/door/airlock/proc/toggle_emergency(mob/user) + if(!user_allowed(user)) + return + emergency = !emergency + update_icon() + /obj/machinery/door/airlock/proc/user_toggle_open(mob/user) if(!user_allowed(user)) return diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index 48d826fac53..395d581527a 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -15,7 +15,7 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "airlock_electronics", name, 975, 420, master_ui, state) + ui = new(user, src, ui_key, "airlock_electronics", name, 420, 485, master_ui, state) ui.open() /obj/item/electronics/airlock/ui_data() @@ -44,10 +44,13 @@ if(..()) return switch(action) - if("clear") + if("clear_all") accesses = list() one_access = 0 . = TRUE + if("grant_all") + accesses = get_all_accesses() + . = TRUE if("one_access") one_access = !one_access . = TRUE diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index b193017dc37..18384a611bf 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -38,7 +38,7 @@ maptext_width = 32 maptext_y = -1 ui_x = 300 - ui_y = 200 + ui_y = 138 /obj/machinery/door_timer/Initialize() . = ..() diff --git a/code/game/world.dm b/code/game/world.dm index bd6d64e1ebd..2ed3151d132 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -130,6 +130,7 @@ GLOBAL_VAR(restart_counter) GLOB.query_debug_log = "[GLOB.log_directory]/query_debug.log" GLOB.world_job_debug_log = "[GLOB.log_directory]/job_debug.log" GLOB.world_paper_log = "[GLOB.log_directory]/paper.log" + GLOB.tgui_log = "[GLOB.log_directory]/tgui.log" #ifdef UNIT_TESTS GLOB.test_log = file("[GLOB.log_directory]/tests.log") @@ -144,6 +145,7 @@ GLOBAL_VAR(restart_counter) start_log(GLOB.world_qdel_log) start_log(GLOB.world_runtime_log) start_log(GLOB.world_job_debug_log) + start_log(GLOB.tgui_log) GLOB.changelog_hash = md5('html/changelog.html') //for telling if the changelog has changed recently if(fexists(GLOB.config_error_log)) diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index 5a15d4e000b..1dd0756c223 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -15,7 +15,7 @@ pipe_state = "filter" ui_x = 475 - ui_y = 195 + ui_y = 185 /obj/machinery/atmospherics/components/trinary/filter/CtrlClick(mob/user) if(user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) diff --git a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm index 53d5a5632ff..517b444a16e 100644 --- a/code/modules/cargo/console.dm +++ b/code/modules/cargo/console.dm @@ -3,8 +3,8 @@ desc = "Used to order supplies, approve requests, and control the shuttle." icon_screen = "supply" circuit = /obj/item/circuitboard/computer/cargo - ui_x = 750 - ui_y = 850 + ui_x = 780 + ui_y = 750 var/requestonly = FALSE var/contraband = FALSE @@ -131,8 +131,6 @@ /obj/machinery/computer/cargo/ui_act(action, params, datum/tgui/ui) if(..()) return - if(action != "add" && requestonly) - return switch(action) if("send") if(!SSshuttle.supply.canMove()) diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index 15f5371022e..a36c3c7bcdb 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -325,6 +325,13 @@ GLOBAL_LIST_EMPTY(asset_datums) var/size_id = sprite[SPR_SIZE] return {""} +/datum/asset/spritesheet/proc/icon_class_name(sprite_name) + var/sprite = sprites[sprite_name] + if (!sprite) + return null + var/size_id = sprite[SPR_SIZE] + return {"[name][size_id] [sprite_name]"} + #undef SPR_SIZE #undef SPR_IDX #undef SPRSZ_COUNT @@ -381,8 +388,19 @@ GLOBAL_LIST_EMPTY(asset_datums) /datum/asset/simple/tgui assets = list( - "tgui.css" = 'tgui/assets/tgui.css', - "tgui.js" = 'tgui/assets/tgui.js', + // tgui + "tgui.css" = 'tgui/assets/tgui.css', + "tgui.js" = 'tgui/assets/tgui.js', + // tgui-next + "tgui-main.html" = 'tgui-next/packages/tgui/public/tgui-main.html', + "tgui-fallback.html" = 'tgui-next/packages/tgui/public/tgui-fallback.html', + "tgui.bundle.js" = 'tgui-next/packages/tgui/public/bundles/tgui.bundle.js', + "tgui.bundle.css" = 'tgui-next/packages/tgui/public/bundles/tgui.bundle.css', + "shim-console.js" = 'tgui-next/packages/tgui/public/shim-console.js', + "shim-html5shiv.js" = 'tgui-next/packages/tgui/public/shim-html5shiv.js', + "shim-ie8.js" = 'tgui-next/packages/tgui/public/shim-ie8.js', + "shim-dom4.js" = 'tgui-next/packages/tgui/public/shim-dom4.js', + "shim-css-om.js" = 'tgui-next/packages/tgui/public/shim-css-om.js', ) /datum/asset/group/tgui diff --git a/code/modules/plumbing/plumbers/acclimator.dm b/code/modules/plumbing/plumbers/acclimator.dm index a791a690df9..1a2a070504b 100644 --- a/code/modules/plumbing/plumbers/acclimator.dm +++ b/code/modules/plumbing/plumbers/acclimator.dm @@ -22,7 +22,7 @@ ///COOLING, HEATING or NEUTRAL. We track this for change, so we dont needlessly update our icon var/acclimate_state - ui_x = 300 + ui_x = 320 ui_y = 260 /obj/machinery/plumbing/acclimator/Initialize() @@ -86,10 +86,8 @@ if("set_allowed_temperature_difference") var/target = input("New acceptable difference:", name, allowed_temperature_difference) as num|null allowed_temperature_difference = CLAMP(target, 0, 1000) - if("turn_on") - enabled = TRUE - if("turn_off") - enabled = FALSE + if("toggle_power") + enabled = !enabled #undef COOLING #undef HEATING #undef NEUTRAL diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 0351c9df6c3..9b1b7187fba 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -57,8 +57,8 @@ damage_deflection = 10 resistance_flags = FIRE_PROOF interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON - ui_x = 535 - ui_y = 515 + ui_x = 450 + ui_y = 460 var/lon_range = 1.5 var/area/area diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 70faaecae22..31f7c291cf0 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -23,7 +23,7 @@ resistance_flags = FIRE_PROOF | ACID_PROOF circuit = /obj/item/circuitboard/machine/chem_dispenser ui_x = 565 - ui_y = 550 + ui_y = 620 var/obj/item/stock_parts/cell/cell var/powerefficiency = 0.1 diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index 700bb3926f6..921ab8444bd 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -298,8 +298,7 @@ data["full_pressure"] = full_pressure data["pressure_charging"] = pressure_charging data["panel_open"] = panel_open - var/per = CLAMP(100* air_contents.return_pressure() / (SEND_PRESSURE), 0, 100) - data["per"] = round(per, 1) + data["per"] = CLAMP01(air_contents.return_pressure() / (SEND_PRESSURE)) data["isai"] = isAI(user) return data diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm index 9992e20c4c2..502fd567a60 100644 --- a/code/modules/station_goals/bsa.dm +++ b/code/modules/station_goals/bsa.dm @@ -215,7 +215,7 @@ icon = 'icons/obj/machines/particle_accelerator.dmi' icon_state = "control_boxp" ui_x = 400 - ui_y = 305 + ui_y = 220 var/obj/machinery/bsa/full/cannon var/notice @@ -255,6 +255,8 @@ update_icon() /obj/machinery/computer/bsa_control/proc/calibrate(mob/user) + if(!GLOB.bsa_unlock) + return var/list/gps_locators = list() for(var/datum/component/gps/G in GLOB.GPS_list) //nulls on the list somehow if(G.tracking) diff --git a/code/modules/tgui/tgui.dm b/code/modules/tgui/tgui.dm index a13bb7f901e..5d7b03d742c 100644 --- a/code/modules/tgui/tgui.dm +++ b/code/modules/tgui/tgui.dm @@ -289,6 +289,8 @@ if(params["screen"]) ui_screen = params["screen"] SStgui.update_uis(src_object) + if("tgui:log") + log_message(params["log"]) if("tgui:link") user << link(params["url"]) if("tgui:fancy") @@ -385,3 +387,6 @@ /datum/tgui/proc/set_titlebar(value) titlebar = value + +/datum/tgui/proc/log_message(message) + log_tgui("[user] ([user.ckey]) using \"[title]\":\n[message]") diff --git a/tgui-next/.editorconfig b/tgui-next/.editorconfig new file mode 100644 index 00000000000..33092d4928a --- /dev/null +++ b/tgui-next/.editorconfig @@ -0,0 +1,13 @@ +# http://editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +max_line_length = 80 diff --git a/tgui-next/.eslintignore b/tgui-next/.eslintignore new file mode 100644 index 00000000000..010416b9e88 --- /dev/null +++ b/tgui-next/.eslintignore @@ -0,0 +1,6 @@ +/**/node_modules +/**/*.bundle.* +/**/*.chunk.* +/**/*.hot-update.* +/packages/inferno/** +/packages/tgui/public/shim-*.js diff --git a/tgui-next/.eslintrc.yml b/tgui-next/.eslintrc.yml new file mode 100644 index 00000000000..13f468ab3a8 --- /dev/null +++ b/tgui-next/.eslintrc.yml @@ -0,0 +1,118 @@ +parser: babel-eslint +parserOptions: + ecmaVersion: 2019 + sourceType: module + ecmaFeatures: + jsx: true +env: + browser: true + node: true +rules: + ## Possible Errors + # for-direction: error + # getter-return: error + no-async-promise-executor: error + # no-await-in-loop: error + # no-compare-neg-zero: error + no-cond-assign: error + # no-console: error + # no-constant-condition: error + # no-control-regex: error + # no-debugger: error + no-dupe-args: error + no-dupe-keys: error + no-duplicate-case: error + # no-empty: error + no-empty-character-class: error + no-ex-assign: error + no-extra-boolean-cast: error + # no-extra-parens: warn + no-extra-semi: error + no-func-assign: error + no-import-assign: error + no-inner-declarations: error + no-invalid-regexp: error + no-irregular-whitespace: error + no-misleading-character-class: error + no-obj-calls: error + no-prototype-builtins: error + no-regex-spaces: error + no-sparse-arrays: error + no-template-curly-in-string: error + no-unexpected-multiline: error + # no-unreachable: warn + no-unsafe-finally: error + no-unsafe-negation: error + # require-atomic-updates: error + use-isnan: error + valid-typeof: error + + ## Best practices + complexity: [error, { max: 50 }] ## That is a VERY generous limit + curly: [error, all] + eqeqeq: [error, always] + dot-location: [error, property] + no-empty-pattern: error + no-multi-spaces: warn + no-octal: error + no-octal-escape: error + no-return-assign: error + no-self-assign: error + no-sequences: error + no-unused-labels: warn + no-useless-escape: warn + no-with: error + radix: error + + ## Code style + array-bracket-newline: [error, consistent] + array-bracket-spacing: [error, never] + block-spacing: [error, always] + brace-style: [error, stroustrup, { allowSingleLine: false }] + comma-dangle: [error, always-multiline] + comma-spacing: [error, { before: false, after: true }] + comma-style: [error, last] + computed-property-spacing: [error, never] + func-call-spacing: [error, never] + func-style: [error, expression] + ## This rule does not honor a newline on opening paren. + # function-paren-newline: [error, never] + indent: [error, 2, { + SwitchCase: 1, + }] + jsx-quotes: [error, prefer-double] + key-spacing: [error, { beforeColon: false, afterColon: true }] + keyword-spacing: [error, { before: true, after: true }] + max-len: [error, { code: 120 }] + multiline-ternary: [error, always-multiline] + no-mixed-spaces-and-tabs: error + no-whitespace-before-property: error + operator-linebreak: [error, before] + # quotes: [error, single] + semi: error + semi-spacing: [error, { before: false, after: true }] + semi-style: [error, last] + space-before-blocks: [error, always] + space-before-function-paren: [error, { + anonymous: always, + named: never, + asyncArrow: always, + }] + space-in-parens: [error, never] + spaced-comment: [error, always] + switch-colon-spacing: [error, { before: false, after: true }] + template-tag-spacing: [error, never] + # unicode-bom: [error, never] + + ## ES6 + arrow-parens: [error, as-needed] + arrow-spacing: [error, { before: true, after: true }] + generator-star-spacing: [error, { before: false, after: true }] + no-class-assign: error + no-const-assign: error + no-dupe-class-members: error + no-new-symbol: error + no-this-before-super: error + no-var: error + prefer-arrow-callback: error + yield-star-spacing: [error, { before: false, after: true }] diff --git a/tgui-next/.gitattributes b/tgui-next/.gitattributes new file mode 100644 index 00000000000..eedf5cb0fc1 --- /dev/null +++ b/tgui-next/.gitattributes @@ -0,0 +1,10 @@ +* text=auto + +## Enforce text mode and LF line breaks +*.js text eol=lf +*.css text eol=lf +*.html text eol=lf +*.json text eol=lf + +## Treat bundles as binary and ignore them during conflicts +# *.bundle.* binary merge=theirs diff --git a/tgui-next/.gitignore b/tgui-next/.gitignore new file mode 100644 index 00000000000..2844d947c39 --- /dev/null +++ b/tgui-next/.gitignore @@ -0,0 +1,4 @@ +node_modules +*.log +/packages/tgui/public/bundles/*.hot-update.* +package-lock.json diff --git a/tgui-next/README.md b/tgui-next/README.md new file mode 100644 index 00000000000..a56d74d45b4 --- /dev/null +++ b/tgui-next/README.md @@ -0,0 +1,570 @@ +# tgui-next + +## Introduction + +tgui is a robust user interface framework of /tg/station. It is rendered +completely in the browser, based on JSON data sent from the server. +This data flow is always unidirectional, and the only way to make changes +to the game state is to dispatch actions which are processed on the server, +in a similar method to native BYOND Topic(). Once the action is processed, +an updated JSON is sent. + +tgui is very different from most UIs you will encounter in BYOND programming, +and is heavily reliant of Javascript and web technologies as opposed to DM. +However, if you are familiar with NanoUI (a library which can be found on almost +every other SS13 codebase), tgui should be fairly easy to pick up. + +tgui is a fork of an older tgui (based on Ractive), which is a fork of NanoUI. +The server-side code (DM) is similar and derived from NanoUI, while the +clientside is a wholly new project with no code in common. + +To get a clearer picture how to create a completely new interface from scratch, +please refer to this [tutorial document](docs/tutorial-and-examples.md). +If you don't know how tgui backend works, or have very little knowledge about +both frontend and backend, or simply want a step by step instruction, +we recommend you first read the document linked above. + +This project uses **Inferno** - a very fast UI rendering engine with a similar +API to React. If you are new to Inferno or React, take your time to read +these documents: + +- [React guide](https://reactjs.org/docs/hello-world.html) +- [Inferno documentation](https://infernojs.org/docs/guides/components) - +highlights differences with React. + +## Pre-requisites + +You will need these programs to start developing in tgui: + +- [Node 12.x](https://nodejs.org) +- [MSys2](https://www.msys2.org/) (optional) + +> MSys2 closely replicates a unix-like environment which is necessary for +> the `bin/tgui` script to run. It comes with a robust "mintty" terminal +> emulator which is better than any standard Windows shell, it supports +> "git" out of the box (almost like Git for Windows, but better), has +> a "pacman" package manager, and you can install a text editor like "vim" +> for a full boomer experience. + +## Workflow + +If you haven't opened the console already, you can do that by holding +Shift and right clicking on the `tgui-next` folder, then pressing +either `Open command window here` or `Open PowerShell window here`. + +Run `npm install`, then: + +- `npm run build` - build the project in production mode. +- `npm run watch` - launch a development server. +- `npm run lint` - show and fix potential problems with the code. +- `npm run analyze` - run a bundle analyzer. + +For MSys2, WSL, Linux or macOS users: + +- `bin/tgui` - build the project in production mode. +- `bin/tgui --dev` - launch a development server. +- `bin/tgui --lint` - show and fix potential problems with the code. +- `bin/tgui --analyze` - run a bundle analyzer. +- `bin/tgui --clean` - clean up project repo. +- `bin/tgui [webpack options]` - build the project with custom webpack +options. + +For absolute brainlets, we also got a batch file in store. Double click +it to build the project: + +- `bin/tgui-build.bat` - build the project in production mode. + +Remember to always run a full build before submitting a PR. It creates +a compressed javascript bundle which is then referenced from DM code. +We prefer to keep it version controlled, so that people could build the +game just by using Dream Maker. + +## Project structure + +- `/packages` - Each folder here represents a self-contained Node module. +- `/packages/common` - Helper functions +- `/packages/tgui/index.js` - Application entry point. +- `/packages/tgui/components` - Basic UI building blocks. +- `/packages/tgui/interfaces` - Actual in-game interfaces. +Interface takes data via the `state` prop and outputs an html-like stucture, +which you can build using existing UI components. +- `/packages/tgui/routes.js` - This is where you want to register new +interfaces, otherwise they simply won't load. +- `/packages/tgui/layout.js` - A root-level component, holding the +window elements, like the titlebar, buttons, resize handlers. Calls +`routes.js` to decide which component to render. +- `/packages/tgui/styles/main.scss` - CSS entry point. +- `/packages/tgui/styles/atomic.scss` - Atomic CSS classes. +These are very simple, tiny, reusable CSS classes which you can use and +combine to change appearance of your elements. Keep them small. +- `/packages/tgui/styles/components.scss` - CSS classes which are used +in UI components, and most of the stylesheets referenced here are located +in `/packages/tgui/components`. These stylesheets closely follow the +[BEM](https://en.bem.info/methodology/) methodology. +- `/packages/tgui/styles/functions.scss` - Useful SASS functions. +Stuff like `lighten`, `darken`, `luminance` are defined here. + +## Component reference + +> Notice: This documentation might be out of date, so always check the source +> code to see the most up-to-date information. + +These are the components which you can use for interface construction. +If you have trouble finding the exact prop you need on a component, +please note, that most of these components inherit from other basic +components, such as `Box`. This component in particular provides a lot +of styling options for all components, e.g. `color` and `opacity`, thus +it is used a lot in this framework. + +There are a few important semantics you need to know about: + +- `content` prop is a synonym to a `children` prop. + - `content` is better used when your element is a self-closing tag + (like ``), and when content is long and complex. This is + a native React prop (unlike `content`), and contains all elements you + defined between the opening and the closing tag of an element. + - You should never use both on a same element. + - You should never use `children` explicitly as a prop on an element. +- Inferno supports both camelcase (`onClick`) and lowercase (`onclick`) +event names. + - Camel case names are what's called "synthetic" events, and are the + *preferred way* of handling events in React, for efficiency and + performance reasons. Please read + [Inferno Event Handling](https://infernojs.org/docs/guides/event-handling) + to understand what this is about. + - Lower case names are native browser events and should be used sparingly, + for example when you need an explicit IE8 support. **DO NOT** use + lowercase event handlers unless you really know what you are doing. + - [Button](#button) component straight up does not support lowercase event + handlers. Use the camel case `onClick` instead. + +### `AnimatedNumber` + +This component provides animations for numeric values. + +Props: + +- `value: number` - Value to animate. +- `initial: number` - Initial value to use in animation when element +first appears. If you set initial to `0` for example, number will always +animate starting from `0`, and if omitted, it will not play an initial +animation. +- `format: function` - Output formatter. + - Example: `value => Math.round(value)`. + +### `Box` + +The Box component serves as a wrapper component for most of the CSS utility +needs. It creates a new DOM element, a `
` by default that can be changed +with the `as` property. Let's say you want to use a `` instead: + +```jsx + + + ); + })} +
+
+ {content || null} +
+ + ); + } +} + +/** + * A dummy component, which is used for carrying props for the + * tab container. + */ +export const Tab = props => null; + +Tabs.Tab = Tab; diff --git a/tgui-next/packages/tgui/components/Tabs.scss b/tgui-next/packages/tgui/components/Tabs.scss new file mode 100644 index 00000000000..b13b91a2cd7 --- /dev/null +++ b/tgui-next/packages/tgui/components/Tabs.scss @@ -0,0 +1,36 @@ +.Tabs__content { + padding-top: 6px; + border-top: 2px solid rgba(255, 255, 255, 0.1); +} + +.Tabs--vertical { + display: table-row; + + .Tabs__content { + display: table-cell; + width: 100%; + padding-top: 0; + padding-left: 9px; + border-top: 0; + } + + .Tabs__tabBox { + display: table-cell; + // padding-right: 2px; + border-right: 2px solid rgba(255, 255, 255, 0.1); + // Disable baseline alignment when doing vertical tabs + vertical-align: top; + } + + .Tabs__tab { + display: block; + margin-right: 0; + margin-bottom: 0; + padding: 1px 9px 0px 6px; + border-bottom: 2px solid rgba(255, 255, 255, 0.1); + + &:last-child { + border-bottom: 0; + } + } +} diff --git a/tgui-next/packages/tgui/components/TitleBar.js b/tgui-next/packages/tgui/components/TitleBar.js new file mode 100644 index 00000000000..81d53386301 --- /dev/null +++ b/tgui-next/packages/tgui/components/TitleBar.js @@ -0,0 +1,38 @@ +import { classes, pureComponentHooks } from 'common/react'; +import { UI_DISABLED, UI_INTERACTIVE, UI_UPDATE } from '../constants'; +import { Icon } from './Icon'; + +const statusToColor = status => { + switch (status) { + case UI_INTERACTIVE: + return 'good'; + case UI_UPDATE: + return 'average'; + case UI_DISABLED: + default: + return 'bad'; + } +}; + +export const TitleBar = props => { + const { className, title, status, fancy, onDragStart, onClose } = props; + return ( +
+ +
+ {title} +
+
fancy && onDragStart(e)} /> + {!!fancy && ( +
+ )} +
+ ); +}; + +TitleBar.defaultHooks = pureComponentHooks; diff --git a/tgui-next/packages/tgui/components/TitleBar.scss b/tgui-next/packages/tgui/components/TitleBar.scss new file mode 100644 index 00000000000..9335ed5211e --- /dev/null +++ b/tgui-next/packages/tgui/components/TitleBar.scss @@ -0,0 +1,67 @@ +.TitleBar { + background-color: $titlebar-color-background; + border-bottom: 1px solid $titlebar-color-coreshadow; + box-shadow: 0 2px 2px $titlebar-color-shadow; + user-select: none; + -ms-user-select: none; +} + +.TitleBar__clickable { + color: rgba(255, 255, 255, 0.5); + background-color: darken($titlebar-color-background, 0%); + transition: color, background-color 250ms; + + &:hover { + color: rgba(255, 255, 255, 1.0); + background-color: #c00; + transition: color, background-color 0ms; + } +} + +.TitleBar__title { + position: absolute; + top: 0; + left: 46px; + color: rgba(255, 255, 255, 0.7); + font-size: 14px; + line-height: 31px; + white-space: nowrap; +} + +.TitleBar__dragZone { + position: absolute; + top: 0; + left: 0; + right: 0; + height: 32px; +} + +.TitleBar__statusIcon { + position: absolute; + top: 0; + left: 12px; + transition: color 0.5s; + font-size: 20px; + line-height: 32px !important; +} + +.TitleBar__minimize { + position: absolute; + top: 6px; + right: 46px; +} + +.TitleBar__close { + position: absolute; + top: -1px; + right: 0; + width: 45px; + height: 32px; + font-size: 20px; + line-height: 31px; + text-align: center; + + &::after { + content: '×'; + } +} diff --git a/tgui-next/packages/tgui/components/Toast.js b/tgui-next/packages/tgui/components/Toast.js new file mode 100644 index 00000000000..d3b9d603de2 --- /dev/null +++ b/tgui-next/packages/tgui/components/Toast.js @@ -0,0 +1,57 @@ +import { pureComponentHooks } from 'common/react'; + +export const Toast = props => { + const { content, children } = props; + return ( +
+ {content} + {children} +
+ ); +}; + +Toast.defaultHooks = pureComponentHooks; + +let toastTimeout; + +/** + * Shows a toast at the bottom of the screen. + * + * Takes the store's dispatch function, and text as a second argument. + */ +export const showToast = (dispatch, text) => { + if (toastTimeout) { + clearTimeout(toastTimeout); + } + toastTimeout = setTimeout(() => { + toastTimeout = undefined; + dispatch({ + type: 'hideToast', + }); + }, 5000); + dispatch({ + type: 'showToast', + payload: { text }, + }); +}; + +export const toastReducer = (state, action) => { + const { type, payload } = action; + + if (type === 'showToast') { + const { text } = payload; + return { + ...state, + toastText: text, + }; + } + + if (type === 'hideToast') { + return { + ...state, + toastText: null, + }; + } + + return state; +}; diff --git a/tgui-next/packages/tgui/components/Tooltip.js b/tgui-next/packages/tgui/components/Tooltip.js new file mode 100644 index 00000000000..bd5839b4ec0 --- /dev/null +++ b/tgui-next/packages/tgui/components/Tooltip.js @@ -0,0 +1,16 @@ +import { classes } from 'common/react'; + +export const Tooltip = props => { + const { + content, + position = 'bottom', + } = props; + return ( +
+ ); +}; diff --git a/tgui-next/packages/tgui/components/Tooltip.scss b/tgui-next/packages/tgui/components/Tooltip.scss new file mode 100644 index 00000000000..9b31e907f9a --- /dev/null +++ b/tgui-next/packages/tgui/components/Tooltip.scss @@ -0,0 +1,71 @@ +.Tooltip { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + + &::after { + position: absolute; + display: block; + z-index: 2; + width: 250px; + padding: 10px; + transform: translateX(-50%); + pointer-events: none; + visibility: hidden; + opacity: 0; + white-space: normal; + text-align: left; + content: attr(data-tooltip); + transition: all 150ms; + border: 1px solid $tooltip-color-border; + background-color: $tooltip-color-background; + } + + &:hover::after { + pointer-events: none; + visibility: visible; + opacity: 1; + } +} + +.Tooltip--top::after { + bottom: 100%; + left: 50%; + transform: translateX(-50%) translateY(8px); +} + +.Tooltip--top:hover::after { + transform: translateX(-50%) translateY(-8px); +} + +.Tooltip--bottom::after { + top: 100%; + left: 50%; + transform: translateX(-50%) translateY(-8px); +} + +.Tooltip--bottom:hover::after { + transform: translateX(-50%) translateY(8px); +} + +.Tooltip--left::after { + top: 50%; + right: 100%; + transform: translateX(8px) translateY(-50%); +} + +.Tooltip--left:hover::after { + transform: translateX(-8px) translateY(-50%); +} + +.Tooltip--right::after { + top: 50%; + left: 100%; + transform: translateX(-8px) translateY(-50%); +} + +.Tooltip--right:hover::after { + transform: translateX(8px) translateY(-50%); +} diff --git a/tgui-next/packages/tgui/components/index.js b/tgui-next/packages/tgui/components/index.js new file mode 100644 index 00000000000..188af90b2e9 --- /dev/null +++ b/tgui-next/packages/tgui/components/index.js @@ -0,0 +1,13 @@ +export { AnimatedNumber } from './AnimatedNumber'; +export { Box } from './Box'; +export { Button } from './Button'; +export { Flex } from './Flex'; +export { Icon } from './Icon'; +export { LabeledList } from './LabeledList'; +export { NoticeBox } from './NoticeBox'; +export { ProgressBar } from './ProgressBar'; +export { Section } from './Section'; +export { Tabs } from './Tabs'; +export { TitleBar } from './TitleBar'; +export { Toast } from './Toast'; +export { Tooltip } from './Tooltip'; diff --git a/tgui-next/packages/tgui/constants.js b/tgui-next/packages/tgui/constants.js new file mode 100644 index 00000000000..d9394d6ee3a --- /dev/null +++ b/tgui-next/packages/tgui/constants.js @@ -0,0 +1,19 @@ +// Constants used in tgui. +// These are mirrored from the BYOND code. + +export const UI_INTERACTIVE = 2; +export const UI_UPDATE = 1; +export const UI_DISABLED = 0; +export const UI_CLOSE = -1; + +export const GAS_LABEL_MAPPING = { + o2: 'O₂', + n2: 'N₂', + co2: 'CO₂', + water_vapor: 'H₂O', + n2o: 'N₂O', + no2: 'NO₂', + bz: 'BZ', +}; + +export const getGasLabel = name => GAS_LABEL_MAPPING[name] || name; diff --git a/tgui-next/packages/tgui/drag.js b/tgui-next/packages/tgui/drag.js new file mode 100644 index 00000000000..4860af97211 --- /dev/null +++ b/tgui-next/packages/tgui/drag.js @@ -0,0 +1,122 @@ +import { winset, winget } from './byond'; +import { createLogger } from './logging'; + +const logger = createLogger('drag'); + +const dragState = { + dragging: false, + resizing: false, + windowRef: undefined, + screenOffset: { x: 0, y: 0 }, + dragPointOffset: {}, + resizeMatrix: {}, + initialWindowSize: {}, +}; + +export const setupDrag = async state => { + logger.log('setting up'); + dragState.windowRef = state.config.window; + // Remove window borders + if (state.config.fancy) { + winset(state.config.window, 'titlebar', false); + winset(state.config.window, 'can-resize', false); + } + // Calculate offset caused by windows taskbar + const realPosition = await winget(dragState.windowRef, 'pos'); + dragState.screenOffset = { + x: realPosition.x - window.screenX, + y: realPosition.y - window.screenY, + }; + logger.log('current dragState', dragState); +}; + +export const dragStartHandler = event => { + logger.log('drag start'); + dragState.dragging = true; + dragState.dragPointOffset = { + x: window.screenX - event.screenX, + y: window.screenY - event.screenY, + }; + document.addEventListener('mousemove', dragMoveHandler); + document.addEventListener('mouseup', dragEndHandler); + dragHandler(event); +}; + +export const dragMoveHandler = event => { + dragHandler(event); +}; + +export const dragEndHandler = event => { + logger.log('drag end'); + dragHandler(event); + document.removeEventListener('mousemove', dragMoveHandler); + document.removeEventListener('mouseup', dragEndHandler); + dragState.dragging = false; +}; + +const dragHandler = event => { + if (!dragState.dragging) { + return; + } + event.preventDefault(); + let x = event.screenX + + dragState.screenOffset.x + + dragState.dragPointOffset.x; + let y = event.screenY + + dragState.screenOffset.y + + dragState.dragPointOffset.y; + winset(dragState.windowRef, 'pos', [x, y].join(',')); +}; + +export const resizeStartHandler = (x, y) => event => { + logger.log('resize start', [x, y]); + dragState.resizing = true; + dragState.resizeMatrix = { x, y }; + dragState.dragPointOffset = { + x: window.screenX - event.screenX, + y: window.screenY - event.screenY, + }; + dragState.initialWindowSize = { + x: window.innerWidth, + y: window.innerHeight, + }; + document.addEventListener('mousemove', resizeMoveHandler); + document.addEventListener('mouseup', resizeEndHandler); + resizeHandler(event); +}; + +export const resizeMoveHandler = event => { + resizeHandler(event); +}; + +export const resizeEndHandler = event => { + logger.log('resize end'); + resizeHandler(event); + document.removeEventListener('mousemove', resizeMoveHandler); + document.removeEventListener('mouseup', resizeEndHandler); + dragState.resizing = false; +}; + +const resizeHandler = event => { + if (!dragState.resizing) { + return; + } + event.preventDefault(); + let x = dragState.initialWindowSize.x + + (event.screenX + - window.screenX + + dragState.dragPointOffset.x + + 1) + * dragState.resizeMatrix.x; + let y = dragState.initialWindowSize.y + + (event.screenY + - window.screenY + + dragState.dragPointOffset.y + + 1) + * dragState.resizeMatrix.y; + winset(dragState.windowRef, 'size', [ + // Sane window size values + Math.max(x, 250), + Math.max(y, 120), + ].join(',')); +}; diff --git a/tgui-next/packages/tgui/hotkeys.js b/tgui-next/packages/tgui/hotkeys.js new file mode 100644 index 00000000000..e39dfb868bc --- /dev/null +++ b/tgui-next/packages/tgui/hotkeys.js @@ -0,0 +1,96 @@ +import { createLogger } from './logging'; + +const logger = createLogger('hotkeys'); + +// Key codes +export const KEY_0 = 48; +export const KEY_1 = 49; +export const KEY_2 = 50; +export const KEY_3 = 51; +export const KEY_4 = 52; +export const KEY_5 = 53; +export const KEY_6 = 54; +export const KEY_7 = 55; +export const KEY_8 = 56; +export const KEY_9 = 57; +export const KEY_A = 65; +export const KEY_B = 66; +export const KEY_C = 67; +export const KEY_D = 68; +export const KEY_E = 69; +export const KEY_F = 70; +export const KEY_G = 71; +export const KEY_H = 72; +export const KEY_I = 73; +export const KEY_J = 74; +export const KEY_K = 75; +export const KEY_L = 76; +export const KEY_M = 77; +export const KEY_N = 78; +export const KEY_O = 79; +export const KEY_P = 80; +export const KEY_Q = 81; +export const KEY_R = 82; +export const KEY_S = 83; +export const KEY_T = 84; +export const KEY_U = 85; +export const KEY_V = 86; +export const KEY_W = 87; +export const KEY_X = 88; +export const KEY_Y = 89; +export const KEY_Z = 90; +export const KEY_MINUS = 189; +export const KEY_EQUAL = 187; + +const makeComboString = (ctrlKey, altKey, keyCode) => { + const parts = [ + ctrlKey && 'Ctrl', + altKey && 'Alt', + '[' + keyCode + ']', + ]; + return parts + .filter(value => value) + .join('+'); +}; + +// Middleware +export const hotKeyMiddleware = store => { + const { dispatch } = store; + // Subscribe for hotkey events + document.addEventListener('keyup', e => { + const { ctrlKey, altKey } = e; + const keyCode = window.event ? e.which : e.keyCode; + // Dispatch them as store actions + if (ctrlKey || altKey) { + const comboString = makeComboString(ctrlKey, altKey, keyCode); + logger.log(comboString); + dispatch({ + type: 'hotKey', + payload: { ctrlKey, altKey, keyCode }, + }); + } + }); + // Pass through actions (do nothing) + return next => action => next(action); +}; + +// Reducer +export const hotKeyReducer = (state, action) => { + const { type, payload } = action; + + if (type === 'hotKey') { + const { ctrlKey, altKey, keyCode } = payload; + + if (ctrlKey && altKey && keyCode === KEY_EQUAL) { + // Toggle kitchen sink mode + return { + ...state, + showKitchenSink: !state.showKitchenSink, + }; + } + + return state; + } + + return state; +}; diff --git a/tgui-next/packages/tgui/index.js b/tgui-next/packages/tgui/index.js new file mode 100644 index 00000000000..3f7738f7421 --- /dev/null +++ b/tgui-next/packages/tgui/index.js @@ -0,0 +1,134 @@ +import 'core-js/stable'; +import 'regenerator-runtime/runtime'; +import './polyfills'; + +import { loadCSS } from 'fg-loadcss'; +import { render } from 'inferno'; +import { setupHotReloading } from 'tgui-dev-server/link/client'; +import { backendUpdate } from './backend'; +import { act, tridentVersion } from './byond'; +import { setupDrag } from './drag'; +import { createLogger, setLoggerRef } from './logging'; +import { getRoute } from './routes'; +import { createStore } from './store'; + +const logger = createLogger(); +const store = createStore(); +const reactRoot = document.getElementById('react-root'); + +let initialRender = true; +let handedOverToOldTgui = false; + +const renderLayout = () => { + // Short-circuit the renderer + if (handedOverToOldTgui) { + return; + } + try { + const state = store.getState(); + // Initial render setup + if (initialRender) { + initialRender = false; + + // ----- Old TGUI chain-loader: begin ----- + const route = getRoute(state); + // Route was not found, load old TGUI + if (!route) { + logger.info('loading old tgui'); + // Short-circuit the renderer + handedOverToOldTgui = true; + // Unsubscribe from updates + window.update = window.initialize = () => {}; + // Load old TGUI using redirection method for IE8 + if (tridentVersion <= 4) { + setTimeout(() => { + location.href = 'tgui-fallback.html?ref=' + ref; + }, 10); + return; + } + // Inject current state into the data holder + const holder = document.getElementById('data'); + holder.textContent = JSON.stringify(state); + // Load old TGUI by injecting new scripts + loadCSS('v4shim.css'); + loadCSS('tgui.css'); + const head = document.getElementsByTagName('head')[0]; + const script = document.createElement('script'); + script.type = 'text/javascript'; + script.src = 'tgui.js'; + head.appendChild(script); + // Bail + return; + } + // ----- Old TGUI chain-loader: end ----- + + logger.log('initial render', state); + // Setup dragging + setupDrag(state); + } + // Start rendering + const { Layout } = require('./layout'); + const element = ; + render(element, reactRoot); + } + catch (err) { + logger.error('rendering error', err.stack || String(err)); + } +}; + +const setupApp = () => { + // Find data in the page, load inlined state. + const holder = document.getElementById('data'); + const ref = holder.getAttribute('data-ref'); + const stateJson = holder.textContent; + const state = JSON.parse(stateJson); + + // Initialize logger + setLoggerRef(ref); + + // Subscribe for state updates + store.subscribe(() => { + renderLayout(); + }); + + // Subscribe for bankend updates + window.update = window.initialize = stateJson => { + const state = JSON.parse(stateJson); + // Backend update dispatches a store action + store.dispatch(backendUpdate(state)); + }; + + // Render the app + if (state.config) { + logger.log('found inlined state'); + store.dispatch(backendUpdate(state)); + } + + // Enable hot module reloading + if (module.hot) { + setupHotReloading(); + module.hot.accept(['./layout', './routes'], () => { + renderLayout(); + }); + } + + // Initialize + act(ref, 'tgui:initialize'); + + // Dynamically load font-awesome from browser's cache + loadCSS('font-awesome.css'); +}; + +// Wait for DOM to properly load on IE8 +if (tridentVersion <= 4) { + if (document.readyState !== 'loading') { + setupApp(); + } + else { + document.addEventListener('DOMContentLoaded', setupApp); + } +} +// Load right away on all other browsers +else { + setupApp(); +} diff --git a/tgui-next/packages/tgui/interfaces/APC.js b/tgui-next/packages/tgui/interfaces/APC.js new file mode 100644 index 00000000000..4fbe70b3ff7 --- /dev/null +++ b/tgui-next/packages/tgui/interfaces/APC.js @@ -0,0 +1,206 @@ +import { Fragment } from 'inferno'; +import { act } from '../byond'; +import { Button, LabeledList, NoticeBox, ProgressBar, Section, Box } from '../components'; +import { InterfaceLockNoticeBox } from './common/InterfaceLockNoticeBox'; + +export const APC = props => { + const { state } = props; + const { config, data } = state; + const { ref } = config; + const locked = data.locked && !data.siliconUser; + const powerStatusMap = { + 2: { + color: 'good', + externalPowerText: 'External Power', + chargingText: 'Fully Charged', + }, + 1: { + color: 'average', + externalPowerText: 'Low External Power', + chargingText: 'Charging', + }, + 0: { + color: 'bad', + externalPowerText: 'No External Power', + chargingText: 'Not Charging', + }, + }; + const malfMap = { + 1: { + icon: 'terminal', + content: 'Override Programming', + action: 'hack', + }, + 2: { + icon: 'caret-square-down', + content: 'Shunt Core Process', + action: 'occupy', + }, + 3: { + icon: 'caret-square-left', + content: 'Return to Main Core', + action: 'deoccupy', + }, + 4: { + icon: 'caret-square-down', + content: 'Shunt Core Process', + action: 'occupy', + }, + }; + const externalPowerStatus = powerStatusMap[data.externalPower] || powerStatusMap[0]; + const chargingStatus = powerStatusMap[data.chargingStatus] || powerStatusMap[0]; + const channelArray = data.powerChannels || []; + const malfStatus = malfMap[data.malfStatus] || malfMap[0]; + const adjustedCellChange = data.powerCellStatus / 100; + + if (data.failTime > 0) { + return ( + +

SYSTEM FAILURE

+ I/O regulators malfunction detected! + Waiting for system reboot...
+ Automatic reboot in {data.failTime} seconds... + + \n );\n })}\n
\n
\n {content || null}\n
\n \n );\n }\n}\n\n/**\n * A dummy component, which is used for carrying props for the\n * tab container.\n */\nexport const Tab = props => null;\n\nTabs.Tab = Tab;\n","import { classes, pureComponentHooks } from 'common/react';\nimport { UI_DISABLED, UI_INTERACTIVE, UI_UPDATE } from '../constants';\nimport { Icon } from './Icon';\n\nconst statusToColor = status => {\n switch (status) {\n case UI_INTERACTIVE:\n return 'good';\n case UI_UPDATE:\n return 'average';\n case UI_DISABLED:\n default:\n return 'bad';\n }\n};\n\nexport const TitleBar = props => {\n const { className, title, status, fancy, onDragStart, onClose } = props;\n return (\n
\n \n
\n {title}\n
\n
fancy && onDragStart(e)} />\n {!!fancy && (\n
\n )}\n
\n );\n};\n\nTitleBar.defaultHooks = pureComponentHooks;\n","import { pureComponentHooks } from 'common/react';\n\nexport const Toast = props => {\n const { content, children } = props;\n return (\n
\n {content}\n {children}\n
\n );\n};\n\nToast.defaultHooks = pureComponentHooks;\n\nlet toastTimeout;\n\n/**\n * Shows a toast at the bottom of the screen.\n *\n * Takes the store's dispatch function, and text as a second argument.\n */\nexport const showToast = (dispatch, text) => {\n if (toastTimeout) {\n clearTimeout(toastTimeout);\n }\n toastTimeout = setTimeout(() => {\n toastTimeout = undefined;\n dispatch({\n type: 'hideToast',\n });\n }, 5000);\n dispatch({\n type: 'showToast',\n payload: { text },\n });\n};\n\nexport const toastReducer = (state, action) => {\n const { type, payload } = action;\n\n if (type === 'showToast') {\n const { text } = payload;\n return {\n ...state,\n toastText: text,\n };\n }\n\n if (type === 'hideToast') {\n return {\n ...state,\n toastText: null,\n };\n }\n\n return state;\n};\n","import { classes } from 'common/react';\n\nexport const Tooltip = props => {\n const {\n content,\n position = 'bottom',\n } = props;\n return (\n \n );\n};\n","export { AnimatedNumber } from './AnimatedNumber';\nexport { Box } from './Box';\nexport { Button } from './Button';\nexport { Flex } from './Flex';\nexport { Icon } from './Icon';\nexport { LabeledList } from './LabeledList';\nexport { NoticeBox } from './NoticeBox';\nexport { ProgressBar } from './ProgressBar';\nexport { Section } from './Section';\nexport { Tabs } from './Tabs';\nexport { TitleBar } from './TitleBar';\nexport { Toast } from './Toast';\nexport { Tooltip } from './Tooltip';\n","// Constants used in tgui.\n// These are mirrored from the BYOND code.\n\nexport const UI_INTERACTIVE = 2;\nexport const UI_UPDATE = 1;\nexport const UI_DISABLED = 0;\nexport const UI_CLOSE = -1;\n\nexport const GAS_LABEL_MAPPING = {\n o2: 'O₂',\n n2: 'N₂',\n co2: 'CO₂',\n water_vapor: 'H₂O',\n n2o: 'N₂O',\n no2: 'NO₂',\n bz: 'BZ',\n};\n\nexport const getGasLabel = name => GAS_LABEL_MAPPING[name] || name;\n","import { winset, winget } from './byond';\nimport { createLogger } from './logging';\n\nconst logger = createLogger('drag');\n\nconst dragState = {\n dragging: false,\n resizing: false,\n windowRef: undefined,\n screenOffset: { x: 0, y: 0 },\n dragPointOffset: {},\n resizeMatrix: {},\n initialWindowSize: {},\n};\n\nexport const setupDrag = async state => {\n logger.log('setting up');\n dragState.windowRef = state.config.window;\n // Remove window borders\n if (state.config.fancy) {\n winset(state.config.window, 'titlebar', false);\n winset(state.config.window, 'can-resize', false);\n }\n // Calculate offset caused by windows taskbar\n const realPosition = await winget(dragState.windowRef, 'pos');\n dragState.screenOffset = {\n x: realPosition.x - window.screenX,\n y: realPosition.y - window.screenY,\n };\n logger.log('current dragState', dragState);\n};\n\nexport const dragStartHandler = event => {\n logger.log('drag start');\n dragState.dragging = true;\n dragState.dragPointOffset = {\n x: window.screenX - event.screenX,\n y: window.screenY - event.screenY,\n };\n document.addEventListener('mousemove', dragMoveHandler);\n document.addEventListener('mouseup', dragEndHandler);\n dragHandler(event);\n};\n\nexport const dragMoveHandler = event => {\n dragHandler(event);\n};\n\nexport const dragEndHandler = event => {\n logger.log('drag end');\n dragHandler(event);\n document.removeEventListener('mousemove', dragMoveHandler);\n document.removeEventListener('mouseup', dragEndHandler);\n dragState.dragging = false;\n};\n\nconst dragHandler = event => {\n if (!dragState.dragging) {\n return;\n }\n event.preventDefault();\n let x = event.screenX\n + dragState.screenOffset.x\n + dragState.dragPointOffset.x;\n let y = event.screenY\n + dragState.screenOffset.y\n + dragState.dragPointOffset.y;\n winset(dragState.windowRef, 'pos', [x, y].join(','));\n};\n\nexport const resizeStartHandler = (x, y) => event => {\n logger.log('resize start', [x, y]);\n dragState.resizing = true;\n dragState.resizeMatrix = { x, y };\n dragState.dragPointOffset = {\n x: window.screenX - event.screenX,\n y: window.screenY - event.screenY,\n };\n dragState.initialWindowSize = {\n x: window.innerWidth,\n y: window.innerHeight,\n };\n document.addEventListener('mousemove', resizeMoveHandler);\n document.addEventListener('mouseup', resizeEndHandler);\n resizeHandler(event);\n};\n\nexport const resizeMoveHandler = event => {\n resizeHandler(event);\n};\n\nexport const resizeEndHandler = event => {\n logger.log('resize end');\n resizeHandler(event);\n document.removeEventListener('mousemove', resizeMoveHandler);\n document.removeEventListener('mouseup', resizeEndHandler);\n dragState.resizing = false;\n};\n\nconst resizeHandler = event => {\n if (!dragState.resizing) {\n return;\n }\n event.preventDefault();\n let x = dragState.initialWindowSize.x\n + (event.screenX\n - window.screenX\n + dragState.dragPointOffset.x\n + 1)\n * dragState.resizeMatrix.x;\n let y = dragState.initialWindowSize.y\n + (event.screenY\n - window.screenY\n + dragState.dragPointOffset.y\n + 1)\n * dragState.resizeMatrix.y;\n winset(dragState.windowRef, 'size', [\n // Sane window size values\n Math.max(x, 250),\n Math.max(y, 120),\n ].join(','));\n};\n","import { createLogger } from './logging';\n\nconst logger = createLogger('hotkeys');\n\n// Key codes\nexport const KEY_0 = 48;\nexport const KEY_1 = 49;\nexport const KEY_2 = 50;\nexport const KEY_3 = 51;\nexport const KEY_4 = 52;\nexport const KEY_5 = 53;\nexport const KEY_6 = 54;\nexport const KEY_7 = 55;\nexport const KEY_8 = 56;\nexport const KEY_9 = 57;\nexport const KEY_A = 65;\nexport const KEY_B = 66;\nexport const KEY_C = 67;\nexport const KEY_D = 68;\nexport const KEY_E = 69;\nexport const KEY_F = 70;\nexport const KEY_G = 71;\nexport const KEY_H = 72;\nexport const KEY_I = 73;\nexport const KEY_J = 74;\nexport const KEY_K = 75;\nexport const KEY_L = 76;\nexport const KEY_M = 77;\nexport const KEY_N = 78;\nexport const KEY_O = 79;\nexport const KEY_P = 80;\nexport const KEY_Q = 81;\nexport const KEY_R = 82;\nexport const KEY_S = 83;\nexport const KEY_T = 84;\nexport const KEY_U = 85;\nexport const KEY_V = 86;\nexport const KEY_W = 87;\nexport const KEY_X = 88;\nexport const KEY_Y = 89;\nexport const KEY_Z = 90;\nexport const KEY_MINUS = 189;\nexport const KEY_EQUAL = 187;\n\nconst makeComboString = (ctrlKey, altKey, keyCode) => {\n const parts = [\n ctrlKey && 'Ctrl',\n altKey && 'Alt',\n '[' + keyCode + ']',\n ];\n return parts\n .filter(value => value)\n .join('+');\n};\n\n// Middleware\nexport const hotKeyMiddleware = store => {\n const { dispatch } = store;\n // Subscribe for hotkey events\n document.addEventListener('keyup', e => {\n const { ctrlKey, altKey } = e;\n const keyCode = window.event ? e.which : e.keyCode;\n // Dispatch them as store actions\n if (ctrlKey || altKey) {\n const comboString = makeComboString(ctrlKey, altKey, keyCode);\n logger.log(comboString);\n dispatch({\n type: 'hotKey',\n payload: { ctrlKey, altKey, keyCode },\n });\n }\n });\n // Pass through actions (do nothing)\n return next => action => next(action);\n};\n\n// Reducer\nexport const hotKeyReducer = (state, action) => {\n const { type, payload } = action;\n\n if (type === 'hotKey') {\n const { ctrlKey, altKey, keyCode } = payload;\n\n if (ctrlKey && altKey && keyCode === KEY_EQUAL) {\n // Toggle kitchen sink mode\n return {\n ...state,\n showKitchenSink: !state.showKitchenSink,\n };\n }\n\n return state;\n }\n\n return state;\n};\n","import 'core-js/stable';\nimport 'regenerator-runtime/runtime';\nimport './polyfills';\n\nimport { loadCSS } from 'fg-loadcss';\nimport { render } from 'inferno';\nimport { setupHotReloading } from 'tgui-dev-server/link/client';\nimport { backendUpdate } from './backend';\nimport { act, tridentVersion } from './byond';\nimport { setupDrag } from './drag';\nimport { createLogger, setLoggerRef } from './logging';\nimport { getRoute } from './routes';\nimport { createStore } from './store';\n\nconst logger = createLogger();\nconst store = createStore();\nconst reactRoot = document.getElementById('react-root');\n\nlet initialRender = true;\nlet handedOverToOldTgui = false;\n\nconst renderLayout = () => {\n // Short-circuit the renderer\n if (handedOverToOldTgui) {\n return;\n }\n try {\n const state = store.getState();\n // Initial render setup\n if (initialRender) {\n initialRender = false;\n\n // ----- Old TGUI chain-loader: begin -----\n const route = getRoute(state);\n // Route was not found, load old TGUI\n if (!route) {\n logger.warn('loading old tgui');\n // Short-circuit the renderer\n handedOverToOldTgui = true;\n // Unsubscribe from updates\n window.update = window.initialize = () => {};\n // Load old TGUI using redirection method for IE8\n if (tridentVersion <= 4) {\n setTimeout(() => {\n location.href = 'tgui-fallback.html?ref=' + ref;\n }, 10);\n return;\n }\n // Inject current state into the data holder\n const holder = document.getElementById('data');\n holder.textContent = JSON.stringify(state);\n // Load old TGUI by injecting new scripts\n loadCSS('v4shim.css');\n loadCSS('tgui.css');\n const head = document.getElementsByTagName('head')[0];\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = 'tgui.js';\n head.appendChild(script);\n // Bail\n return;\n }\n // ----- Old TGUI chain-loader: end -----\n\n logger.log('initial render', state);\n // Setup dragging\n setupDrag(state);\n }\n // Start rendering\n const { Layout } = require('./layout');\n const element = ;\n render(element, reactRoot);\n }\n catch (err) {\n logger.error('rendering error', err.stack || String(err));\n }\n};\n\nconst setupApp = () => {\n // Find data in the page, load inlined state.\n const holder = document.getElementById('data');\n const ref = holder.getAttribute('data-ref');\n const stateJson = holder.textContent;\n const state = JSON.parse(stateJson);\n\n // Initialize logger\n setLoggerRef(ref);\n\n // Subscribe for state updates\n store.subscribe(() => {\n renderLayout();\n });\n\n // Subscribe for bankend updates\n window.update = window.initialize = stateJson => {\n const state = JSON.parse(stateJson);\n // Backend update dispatches a store action\n store.dispatch(backendUpdate(state));\n };\n\n // Render the app\n if (state.config) {\n logger.log('found inlined state');\n store.dispatch(backendUpdate(state));\n }\n\n // Enable hot module reloading\n if (module.hot) {\n setupHotReloading();\n module.hot.accept(['./layout', './routes'], () => {\n renderLayout();\n });\n }\n\n // Initialize\n act(ref, 'tgui:initialize');\n\n // Dynamically load font-awesome from browser's cache\n loadCSS('font-awesome.css');\n};\n\n// Wait for DOM to properly load on IE8\nif (tridentVersion <= 4) {\n if (document.readyState !== 'loading') {\n setupApp();\n }\n else {\n document.addEventListener('DOMContentLoaded', setupApp);\n }\n}\n// Load right away on all other browsers\nelse {\n setupApp();\n}\n","import { Fragment } from 'inferno';\nimport { act } from '../byond';\nimport { Button, LabeledList, NoticeBox, ProgressBar, Section, Box } from '../components';\nimport { InterfaceLockNoticeBox } from './common/InterfaceLockNoticeBox';\n\nexport const APC = props => {\n const { state } = props;\n const { config, data } = state;\n const { ref } = config;\n const locked = data.locked && !data.siliconUser;\n const powerStatusMap = {\n 2: {\n color: 'good',\n externalPowerText: 'External Power',\n chargingText: 'Fully Charged',\n },\n 1: {\n color: 'average',\n externalPowerText: 'Low External Power',\n chargingText: 'Charging',\n },\n 0: {\n color: 'bad',\n externalPowerText: 'No External Power',\n chargingText: 'Not Charging',\n },\n };\n const malfMap = {\n 1: {\n icon: 'terminal',\n content: 'Override Programming',\n action: 'hack',\n },\n 2: {\n icon: 'caret-square-down',\n content: 'Shunt Core Process',\n action: 'occupy',\n },\n 3: {\n icon: 'caret-square-left',\n content: 'Return to Main Core',\n action: 'deoccupy',\n },\n 4: {\n icon: 'caret-square-down',\n content: 'Shunt Core Process',\n action: 'occupy',\n },\n };\n const externalPowerStatus = powerStatusMap[data.externalPower] || powerStatusMap[0];\n const chargingStatus = powerStatusMap[data.chargingStatus] || powerStatusMap[0];\n const channelArray = data.powerChannels || [];\n const malfStatus = malfMap[data.malfStatus] || malfMap[0];\n const adjustedCellChange = data.powerCellStatus / 100;\n\n if (data.failTime > 0) {\n return (\n \n

SYSTEM FAILURE

\n I/O regulators malfunction detected!\n Waiting for system reboot...
\n Automatic reboot in {data.failTime} seconds...\n act(ref, 'reboot')} />\n
\n );\n }\n\n return (\n \n act(ref, 'lock')} />\n
\n \n act(ref, 'breaker')} />\n )}>\n [ {externalPowerStatus.externalPowerText} ]\n \n \n \n \n act(ref, 'charge')} />\n )}>\n [ {chargingStatus.chargingText} ]\n \n \n
\n
\n \n {channelArray.map(channel => {\n const { topicParams } = channel;\n return (\n \n = 2 ? 'good' : 'bad'}>\n {channel.status >= 2 ? 'On' : 'Off' }\n \n act(ref, 'channel', topicParams.auto)} />\n act(ref, 'channel', topicParams.on)} />\n act(ref, 'channel', topicParams.off)} />\n \n )}>\n {channel.powerLoad}\n \n );\n })}\n \n {data.totalLoad}\n \n \n
\n \n {!!data.siliconUser && (\n \n {!!data.malfStatus && (\n act(ref, malfStatus.action)} />\n )}\n act(ref, 'overload')} />\n \n )}\n
\n )}>\n act(ref, 'cover')} />\n )} />\n act(ref, 'emergency_lighting')} />\n )} />\n act(ref, 'toggle_nightshift')} />\n )} />\n \n \n );\n};\n","import { Fragment } from 'inferno';\nimport { act } from '../byond';\nimport { Box, Button, Section } from '../components';\n\nexport const Acclimator = props => {\n const { state } = props;\n const { config, data } = state;\n const { ref } = config;\n return (\n \n
\n Current Temperature - {data.chem_temp}\n \n Target Temperature -\n act(ref, 'set_target_temperature')} />\n \n Acceptable Temperature Difference -\n act(ref, 'set_allowed_temperature_difference')} />\n
\n
\n Current Operation - {data.acclimate_state}\n \n act(ref, 'toggle_power')} />\n
\n
\n );\n};\n","import { Fragment } from 'inferno';\nimport { act } from '../byond';\nimport { Button, LabeledList, Section } from '../components';\n\nexport const AiAirlock = props => {\n const { state } = props;\n const { config, data } = state;\n const { ref } = config;\n const dangerMap = {\n 2: {\n color: 'good',\n localStatusText: 'Offline',\n },\n 1: {\n color: 'average',\n localStatusText: 'Caution',\n },\n 0: {\n color: 'bad',\n localStatusText: 'Optimal',\n },\n };\n const statusMain = dangerMap[data.power.main] || dangerMap[0];\n const statusBackup = dangerMap[data.power.backup] || dangerMap[0];\n const statusElectrify = dangerMap[data.shock] || dangerMap[0];\n return (\n \n
\n \n act(ref, 'disrupt-main')} />\n )}>\n {data.power.main ? 'Online' : 'Offline'}\n {' '}\n {(!data.wires.main_1 || !data.wires.main_2)\n && '[Wires have been cut!]'\n || (data.power.main_timeleft > 0\n && `[${data.power.main_timeleft}s]`)\n }\n \n act(ref, 'disrupt-backup')} />\n )}>\n {data.power.backup ? 'Online' : 'Offline'}\n {' '}\n {(!data.wires.backup_1 || !data.wires.backup_2)\n && '[Wires have been cut!]'\n || (data.power.backup_timeleft > 0\n && `[${data.power.backup_timeleft}s]`)\n }\n \n \n act(ref, 'shock-restore')} />\n act(ref, 'shock-temp')} />\n act(ref, 'shock-perm')} />\n \n )}>\n {data.shock === 2 ? 'Safe' : 'Electrified'}\n {' '}\n {!data.wires.shock\n && '[Wires have been cut!]'\n || (data.shock_timeleft > 0\n && `[${data.shock_timeleft}s]`)\n || (data.shock_timeleft === -1\n && '[Permanent]')\n }\n \n \n
\n
\n \n act(ref, 'idscan-toggle')} />\n )}>\n {!data.wires.id_scanner && '[Wires have been cut!]'}\n \n act(ref, 'emergency-toggle')} />\n )}/>\n \n act(ref, 'bolt-toggle')} />\n )}>\n {!data.wires.bolts && '[Wires have been cut!]'}\n \n act(ref, 'light-toggle')} />\n )}>\n {!data.wires.lights && '[Wires have been cut!]'}\n \n act(ref, 'safe-toggle')} />\n )}>\n {!data.wires.safe && '[Wires have been cut!]'}\n \n act(ref, 'speed-toggle')} />\n )}>\n {!data.wires.timing && '[Wires have been cut!]'}\n \n \n act(ref, 'open-close')} />\n )}>\n {!!(data.locked || data.welded) && (\n \n [Door is {data.locked ? 'bolted' : ''}\n {(data.locked && data.welded) ? ' and ' : ''}\n {data.welded ? 'welded' : ''}!]\n \n )}\n \n \n
\n
\n );\n};\n","import { toFixed } from 'common/math';\nimport { decodeHtmlEntities } from 'common/string';\nimport { Fragment } from 'inferno';\nimport { act } from '../byond';\nimport { Box, Button, LabeledList, Section } from '../components';\nimport { GAS_LABEL_MAPPING } from '../constants';\nimport { createLogger } from '../logging';\nimport { InterfaceLockNoticeBox } from './common/InterfaceLockNoticeBox';\n\nconst logger = createLogger('AirAlarm');\n\nexport const AirAlarm = props => {\n const { state } = props;\n const { config, data } = state;\n const { ref } = config;\n const locked = data.locked && !data.siliconUser;\n return (\n \n act(ref, 'lock')} />\n \n {!locked && (\n \n )}\n \n );\n};\n\nconst AirAlarmStatus = props => {\n const { state } = props;\n const { config, data } = state;\n const { ref } = config;\n const entries = data.environment_data || [];\n const dangerMap = {\n 0: {\n color: 'good',\n localStatusText: 'Optimal',\n },\n 1: {\n color: 'average',\n localStatusText: 'Caution',\n },\n 2: {\n color: 'bad',\n localStatusText: 'Danger (Internals Required)',\n },\n };\n const localStatus = dangerMap[data.danger_level] || dangerMap[0];\n return (\n
\n \n {entries.length > 0 && (\n \n {entries.map(entry => {\n const status = dangerMap[entry.danger_level] || dangerMap[0];\n return (\n \n {toFixed(entry.value, 2)}{entry.unit}\n \n );\n })}\n \n {localStatus.localStatusText}\n \n \n {data.atmos_alarm && 'Atmosphere Alarm'\n || data.fire_alarm && 'Fire Alarm'\n || 'Nominal'}\n \n \n ) || (\n \n Cannot obtain air sample for analysis.\n \n )}\n {!!data.emagged && (\n \n Safety measures offline. Device may exhibit abnormal behavior.\n \n )}\n \n
\n );\n};\n\nconst AIR_ALARM_ROUTES = {\n home: {\n title: 'Air Controls',\n component: () => AirAlarmControlHome,\n },\n vents: {\n title: 'Vent Controls',\n component: () => AirAlarmControlVents,\n },\n scrubbers: {\n title: 'Scrubber Controls',\n component: () => AirAlarmControlScrubbers,\n },\n modes: {\n title: 'Operating Mode',\n component: () => AirAlarmControlModes,\n },\n thresholds: {\n title: 'Alarm Thresholds',\n component: () => AirAlarmControlThresholds,\n },\n};\n\nconst AirAlarmControl = props => {\n const { state } = props;\n const { config, data } = state;\n const { ref } = config;\n const route = AIR_ALARM_ROUTES[config.screen] || AIR_ALARM_ROUTES.home;\n const Component = route.component();\n return (\n act(ref, 'tgui:view', {\n screen: 'home',\n })} />\n )}>\n \n \n );\n};\n\n\n// Home screen\n// --------------------------------------------------------\n\nconst AirAlarmControlHome = props => {\n const { state } = props;\n const { config, data } = state;\n const { ref } = config;\n return (\n \n act(ref,\n data.atmos_alarm ? 'reset' : 'alarm')} />\n \n act(ref, 'mode', {\n mode: data.mode === 3 ? 1 : 3,\n })} />\n \n act(ref, 'tgui:view', {\n screen: 'vents',\n })} />\n \n act(ref, 'tgui:view', {\n screen: 'scrubbers',\n })} />\n \n act(ref, 'tgui:view', {\n screen: 'modes',\n })} />\n \n act(ref, 'tgui:view', {\n screen: 'thresholds',\n })} />\n \n );\n};\n\n\n// Vents\n// --------------------------------------------------------\n\nconst AirAlarmControlVents = props => {\n const { state } = props;\n const { vents } = state.data;\n if (!vents || vents.length === 0) {\n return 'Nothing to show';\n }\n return vents.map(vent => (\n \n ));\n};\n\nconst Vent = props => {\n const {\n state,\n id_tag,\n long_name,\n power,\n checks,\n excheck,\n incheck,\n direction,\n external,\n internal,\n extdefault,\n intdefault,\n } = props;\n const { ref } = state.config;\n return (\n act(ref, 'power', {\n id_tag,\n val: Number(!power),\n })} />\n )}>\n \n \n {direction === 'release' ? 'Pressurizing' : 'Releasing'}\n \n \n act(ref, 'incheck', {\n id_tag,\n val: checks,\n })} />\n act(ref, 'excheck', {\n id_tag,\n val: checks,\n })} />\n \n {!!incheck && (\n \n act(ref, 'set_internal_pressure', {\n id_tag,\n })} />\n act(ref, 'reset_internal_pressure', {\n id_tag,\n })} />\n \n )}\n {!!excheck && (\n \n act(ref, 'set_external_pressure', {\n id_tag,\n })} />\n act(ref, 'reset_external_pressure', {\n id_tag,\n })} />\n \n )}\n \n \n );\n};\n\n\n// Scrubbers\n// --------------------------------------------------------\n\nconst AirAlarmControlScrubbers = props => {\n const { state } = props;\n const { scrubbers } = state.data;\n if (!scrubbers || scrubbers.length === 0) {\n return 'Nothing to show';\n }\n return scrubbers.map(scrubber => (\n \n ));\n};\n\nconst Scrubber = props => {\n const {\n state,\n long_name,\n power,\n scrubbing,\n id_tag,\n widenet,\n filter_types,\n } = props;\n const { ref } = state.config;\n return (\n act(ref, 'power', {\n id_tag,\n val: Number(!power),\n })} />\n )}>\n \n \n act(ref, 'scrubbing', {\n id_tag,\n val: Number(!scrubbing),\n })} />\n act(ref, 'widenet', {\n id_tag,\n val: Number(!widenet),\n })} />\n \n \n {scrubbing\n && filter_types.map(filter => (\n \n act(ref, 'target', {\n adjust: 5,\n })} />\n act(ref, 'target', {\n adjust: 20,\n })} />\n \n \n \n \n );\n};\n","import { Fragment } from 'inferno';\nimport { act } from '../byond';\nimport { Button, LabeledList, Section } from '../components';\nimport { createLogger } from '../logging';\n\nconst logger = createLogger('AirAlarm');\n\nexport const Wires = props => {\n const { state } = props;\n const { config, data } = state;\n const { ref } = config;\n const wires = data.wires || [];\n const statuses = data.status || [];\n return (\n \n
\n \n {wires.map(wire => (\n \n act(ref, 'cut', {\n wire: wire.color,\n })} />\n act(ref, 'pulse', {\n wire: wire.color,\n })} />\n act(ref, 'attach', {\n wire: wire.color,\n })} />\n \n )} />\n ))}\n \n
\n {!!statuses.length && (\n
\n {statuses.map(status => (\n \n {status}\n
\n
\n ))}\n
\n )}\n
\n );\n};\n","import { Button, Flex, NoticeBox } from '../../components';\n\nexport const InterfaceLockNoticeBox = props => {\n const { siliconUser, locked, onLockStatusChange } = props;\n // For silicon users\n if (siliconUser) {\n return (\n \n \n \n Interface lock status:\n \n \n \n {\n if (onLockStatusChange) {\n onLockStatusChange(!locked);\n }\n }} />\n \n \n \n );\n }\n // For everyone else\n return (\n \n Swipe an ID card to {locked ? 'unlock' : 'lock'} this interface.\n \n );\n};\n","import { classes } from 'common/react';\nimport { decodeHtmlEntities } from 'common/string';\nimport { Component, createRef } from 'inferno';\nimport { runCommand, tridentVersion, winset } from './byond';\nimport { TitleBar, Box } from './components';\nimport { BUTTON_ACTIVATION_KEYCODES } from './components/Button';\nimport { Toast } from './components/Toast';\nimport { UI_INTERACTIVE } from './constants';\nimport { dragStartHandler, resizeStartHandler } from './drag';\nimport { createLogger } from './logging';\nimport { getRoute } from './routes';\n\nconst logger = createLogger('Layout');\n\nexport class Layout extends Component {\n constructor() {\n super();\n this.contentRef = createRef();\n }\n\n render() {\n const { props } = this;\n const { state, dispatch } = props;\n const { config } = state;\n const route = getRoute(state);\n if (!route) {\n return `Component for '${config.interface}' was not found.`;\n }\n const Component = route.component();\n const { scrollable } = route;\n return (\n \n {\n logger.log('pressed close');\n winset(config.window, 'is-visible', false);\n runCommand(`uiclose ${config.ref}`);\n }} />\n {\n // Abort this code path on IE8\n if (tridentVersion <= 4) {\n return;\n }\n // Bring focus back to the window on every click\n this.contentRef.current.focus();\n }}\n onKeyPress={e => {\n // Abort this code path on IE8\n if (tridentVersion <= 4) {\n return;\n }\n // Bring focus back to the window on every keypress\n const keyCode = window.event ? e.which : e.keyCode;\n if (BUTTON_ACTIVATION_KEYCODES.includes(keyCode)) {\n this.contentRef.current.focus();\n }\n }}>\n \n \n \n
\n {config.status !== UI_INTERACTIVE && (\n
\n )}\n {state.toastText && (\n \n )}\n {config.fancy && scrollable && (\n \n
\n
\n
\n \n )}\n \n );\n }\n}\n","import { sendLogEntry } from 'tgui-dev-server/link/client';\nimport { act } from './byond';\n\nlet _ref = null;\n\nexport const setLoggerRef = ref => {\n _ref = ref;\n};\n\nconst LEVEL_ERROR = 0;\nconst LEVEL_WARN = 1;\nconst LEVEL_INFO = 2;\nconst LEVEL_LOG = 3;\nconst LEVEL_DEBUG = 4;\n\nconst log = (level, ns, ...args) => {\n // Send logs to a remote log collector\n if (process.env.NODE_ENV !== 'production') {\n sendLogEntry(ns, ...args);\n }\n // Send logs to a globally defined debug print\n if (window.debugPrint) {\n debugPrint([ns, ...args]);\n }\n // Send important logs to the backend\n if (level >= LEVEL_WARN) {\n const logEntry = [ns, ...args]\n .map(value => {\n if (typeof value === 'string') {\n return value;\n }\n return JSON.stringify(value);\n })\n .filter(value => value)\n .join(' ')\n + '\\nUser Agent: ' + navigator.userAgent;\n act(_ref, 'tgui:log', {\n error: level === LEVEL_ERROR,\n log: logEntry,\n });\n }\n};\n\nexport const createLogger = ns => {\n return {\n log: (...args) => log(LEVEL_ERROR, ns, ...args),\n debug: (...args) => log(LEVEL_DEBUG, ns, ...args),\n info: (...args) => log(LEVEL_INFO, ns, ...args),\n warn: (...args) => log(LEVEL_LOG, ns, ...args),\n error: (...args) => log(LEVEL_WARN, ns, ...args),\n };\n};\n","// This one is necessary for Inferno to do complex DOM patching on IE8.\n// Not the fastest one or most spec compliant, but hey, it works!\nif (!window.Int32Array) {\n window.Int32Array = Array;\n}\n","import { Acclimator } from './interfaces/Acclimator';\nimport { AiAirlock } from './interfaces/AiAirlock';\nimport { AirAlarm } from './interfaces/AirAlarm';\nimport { AirlockElectronics } from './interfaces/AirlockElectronics';\nimport { APC } from './interfaces/APC';\nimport { AtmosAlertConsole } from './interfaces/AtmosAlertConsole';\nimport { AtmosControlConsole } from './interfaces/AtmosControlConsole';\nimport { AtmosFilter } from './interfaces/AtmosFilter';\nimport { AtmosMixer } from './interfaces/AtmosMixer';\nimport { AtmosPump } from './interfaces/AtmosPump';\nimport { BorgPanel } from './interfaces/BorgPanel';\nimport { BrigTimer } from './interfaces/BrigTimer';\nimport { BSA } from './interfaces/BSA';\nimport { Canister } from './interfaces/Canister';\nimport { Cargo } from './interfaces/Cargo';\nimport { CellularEmporium } from './interfaces/CellularEmporium';\nimport { CentcomPodlauncher } from './interfaces/CentcomPodlauncher';\nimport { ChemDispenser } from './interfaces/ChemDispenser';\nimport { Crayon } from './interfaces/Crayon';\nimport { DisposalUnit } from './interfaces/DisposalUnit';\nimport { KitchenSink } from './interfaces/KitchenSink';\nimport { ThermoMachine } from './interfaces/ThermoMachine';\nimport { Wires } from './interfaces/Wires';\n\nconst ROUTES = {\n airalarm: {\n component: () => AirAlarm,\n scrollable: true,\n },\n acclimator: {\n component: () => Acclimator,\n scrollable: false,\n },\n ai_airlock: {\n component: () => AiAirlock,\n scrollable: false,\n },\n canister: {\n component: () => Canister,\n scrollable: false,\n },\n airlock_electronics: {\n component: () => AirlockElectronics,\n scrollable: false,\n },\n apc: {\n component: () => APC,\n scrollable: false,\n },\n atmos_alert: {\n component: () => AtmosAlertConsole,\n scrollable: true,\n },\n atmos_control: {\n component: () => AtmosControlConsole,\n scrollable: true,\n },\n atmos_filter: {\n component: () => AtmosFilter,\n scrollable: false,\n },\n atmos_mixer: {\n component: () => AtmosMixer,\n scrollable: false,\n },\n atmos_pump: {\n component: () => AtmosPump,\n scrollable: false,\n },\n borgopanel: {\n component: () => BorgPanel,\n scrollable: true,\n },\n brig_timer: {\n component: () => BrigTimer,\n scrollable: false,\n },\n bsa: {\n component: () => BSA,\n scrollable: false,\n },\n cargo: {\n component: () => Cargo,\n scrollable: true,\n },\n cellular_emporium: {\n component: () => CellularEmporium,\n scrollable: true,\n },\n centcom_podlauncher: {\n component: () => CentcomPodlauncher,\n scrollable: false,\n },\n chem_dispenser: {\n component: () => ChemDispenser,\n scrollable: true,\n },\n thermomachine: {\n component: () => ThermoMachine,\n scrollable: false,\n },\n crayon: {\n component: () => Crayon,\n scrollable: true,\n },\n disposal_unit: {\n component: () => DisposalUnit,\n scrollable: false,\n },\n wires: {\n component: () => Wires,\n scrollable: false,\n },\n};\n\nexport const getRoute = state => {\n // Show a kitchen sink\n if (state.showKitchenSink) {\n return {\n component: () => KitchenSink,\n scrollable: true,\n };\n }\n // Refer to the routing table\n return ROUTES[state.config && state.config.interface];\n};\n","import { flow } from 'common/fp';\nimport { applyMiddleware, createStore as createReduxStore } from 'common/redux';\nimport { backendReducer } from './backend';\nimport { toastReducer } from './components/Toast';\nimport { hotKeyMiddleware, hotKeyReducer } from './hotkeys';\nimport { createLogger } from './logging';\n\nconst logger = createLogger('store');\n\n// const loggingMiddleware = store => next => action => {\n// const { type, payload } = action;\n// logger.log('dispatching', type);\n// next(action);\n// };\n\nexport const createStore = () => {\n const reducer = flow([\n // State initializer\n (state = {}, action) => state,\n // Global state reducers\n backendReducer,\n toastReducer,\n hotKeyReducer,\n ]);\n const middleware = [\n // loggingMiddleware,\n hotKeyMiddleware,\n ];\n return createReduxStore(reducer, applyMiddleware(...middleware));\n};\n","// extracted by extract-css-chunks-webpack-plugin\n if(module.hot) {\n // 1570691558352\n var cssReload = require(\"C:/MSys64/home/style/tgstation/tgui-next/node_modules/extract-css-chunks-webpack-plugin/dist/hmr/hotModuleReplacement.js\")(module.id, {\"hot\":true,\"locals\":false});\n module.hot.dispose(cssReload);\n module.hot.accept(undefined, cssReload);\n }\n "],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACxxBA;AACA;AACA;AACA;AACA;AADA;AACA;;;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;;;;;;;;;;;;;;ACNA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChBA;AACA;AAAA;AAGA;AACA;AACA;AADA;AACA;AACA;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AADA;AACA;;;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;;;;;;;;;;;;ACNA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AACA;AAWA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AALA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AACA;AAFA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;;;;;;;;;;;;ACvJA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AATA;AAAA;AACA;AASA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAnBA;AAAA;AACA;AAmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAhDA;AAoDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAAA;AACA;AAGA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAJA;AAOA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpSA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AADA;AACA;AACA;AApBA;AAAA;;;;;;;;;;;;ACTA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAVA;AAAA;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;ACNA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AA9BA;AAAA;;;;;;;;;;;;;;ACXA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;;;;;;;;;;;;;;ACxBA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAJA;AAMA;AACA;AAZA;AACA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AArBA;;;;;;;;;;;;AC1CA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAXA;AAAA;;;;;;;;;;;;;;ACbA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;;;;;;;;;;;;;;ACdA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAFA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;;;;;;;;;;;;;;AChCA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AADA;AACA;;;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAZA;AACA;AAaA;AAAA;AAAA;AACA;AACA;AACA;;;;;;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAHA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAJA;AACA;AAOA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAHA;AAAA;AADA;AAKA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;;;;;;;;;;;;;;ACrCA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACJA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AAGA;;;;;;;;;;;;ACxBA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAQA;AACA;AACA;AACA;AAEA;AACA;AACA;AADA;AACA;AACA;AAzBA;AAAA;AACA;AAyBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAAA;AACA;AAWA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAfA;AAAA;AAeA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AADA;AACA;AACA;AAjBA;AAAA;AAiBA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAVA;AAAA;AAUA;AACA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAnDA;AAwDA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAPA;AAWA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAFA;AAMA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;AAKA;AACA;AACA;AArIA;AAAA;AAqIA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAnCA;AAAA;AAtIA;;;;;;;;;;;;AChBA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAIA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAAA;AACA;AACA;AAEA;AACA;AALA;AAAA;AAKA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAAA;AAbA;AAsBA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAPA;AAAA;AACA;AAOA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAAA;AAOA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAAA;AAZA;AAqBA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAAA;AAQA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAXA;AAeA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAFA;AAOA;AACA;AACA;AAjEA;AAAA;AADA;;;;;;;;;;;;ACtDA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAEA;AACA;AACA;AACA;AACA;AANA;AAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AAEA;AACA;;;;;;;;;;;;;;AChGA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AADA;AACA;;;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;;;;;;;;;;;;;;ACNA;AACA;AACA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACXA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;ACTA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AAnBA;AAAA;;;;;;;;;;;;ACZA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAHA;AACA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACzFA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AADA;AAGA;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AACA;;;;;;;;;;;;;;ACLA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA/BA;;;;;;;;;;;;;;ACFA;AACA;;;;;;;;;;;;;;ACDA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;;;;;;;;;;;;;;;;AAcA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;;;;;;;;;;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAFA;AAGA;AAAA;AAEA;AALA;AAMA;AAAA;AAEA;AACA;AACA;;;;;;;;;;;;AC5FA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;;;;;;;;;;;;AC/BA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;;;;;;;;;;;;;;ACZA;AAGA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACTA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACJA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AADA;AACA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAVA;AAAA;;;;;;;;;;;;;;ACjBA;AACA;AACA;;;;;;;;;;;;;;ACFA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;ACVA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;;;ACVA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AADA;AACA;;;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAKA;;;;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACJA;;;;;;;;;;;;;;ACAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;;;;;;;;;;;;;;ACPA;AACA;AACA;;;;;;;;;;;;;;ACFA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AADA;AAGA;;;;;;;;;;;;;;ACTA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACZA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAKA;AACA;;;;;;;;;;;;;;AChBA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAHA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAOA;;;;;;;;;;;;;;AC5DA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AALA;;;;;;;;;;;;;;ACtDA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;;;ACTA;AAGA;AACA;AACA;AADA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;ACpBA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;;;ACNA;AACA;AACA;;;;;;;;;;;;;;ACFA;;;;;;;;;;;;;;ACAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AACA;AACA;AACA;;;;;;;;;;;;;;ACXA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AADA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzCA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAFA;;;;;;;;;;;;;;AC/BA;;;;;;;;;;;;;;ACAA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AARA;AAAA;;;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AADA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAAA;;;;;;;;;;;;;;ACfA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;;;ACJA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAAA;;;;;;;;;;;;;;ACFA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AADA;AACA;;;;;;;;;;;;;;AC7EA;AACA;AACA;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACNA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAaA;;;;;;;;;;;;;;ACvBA;AACA;AAAA;AACA;AACA;AAEA;;;;;;;;;;;;ACLA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;;;;;;;;;;;;;;ACNA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;ACNA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AA3BA;AAAA;;;;;;;;;;;;;;ACdA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAGA;AACA;AACA;AADA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAXA;AAAA;AACA;AAWA;;;;;;;;;;;;;;AChDA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AATA;AAAA;;;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAXA;AAAA;;;;;;;;;;;;;;ACTA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AARA;AAAA;;;;;;;;;;;;;;ACZA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AALA;AAAA;;;;;;;;;;;;;;ACjBA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;;;ACPA;;;;;;;;;;;;;;ACAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AADA;AACA;;;;;;;;;;;;;;AChBA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAFA;AACA;AAEA;AACA;;;;;;;;;;;;;;AChBA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;ACLA;AACA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAAA;;;;;;;;;;;;;;ACTA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAPA;AAAA;AAOA;;;;;;;;;;;;;;ACvBA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;;;;;;;;;;;;ACxBA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;;;ACXA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AALA;AAAA;;;;;;;;;;;;;;ACNA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AALA;AAAA;;;;;;;;;;;;;;ACTA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAAA;;;;;;;;;;;;;;ACVA;;;;;;;;;;;;;;ACAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;;;;;;;;;;;;;ACNA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAEA;;;;;;;;AAOA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;;;;;AAGA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAIA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAEA;;;;AAIA;AACA;AACA;AADA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;;;;;;;;;;;;;;ACvKA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;;;;;;;;;;;;;;ACLA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AAvBA;AAAA;;;;;;;;;;;;;;AChBA;AACA;AAAA;AAGA;AACA;AACA;AADA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpBA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA1BA;AAAA;AA0BA;AACA;AACA;;;;;;;;;;;;ACrDA;AACA;AAAA;AAGA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACLA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAAA;;;;;;;;;;;;;;ACFA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;;;;;;;;;;;;ACTA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAFA;AAIA;AACA;;;;;;;;;;;;;;AClBA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;;;;;;;;;;;;;ACVA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAHA;;;;;;;;;;;;ACTA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;;;;;;;;;;;;;;ACTA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACZA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;;;;;;;;;;;;;;ACnBA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;;;;;;;;;;;;ACvBA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AARA;AAAA;;;;;;;;;;;;;;ACNA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;;;;;;;;;;;;;;ACjBA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAXA;AAAA;AACA;AAUA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;;;;;;;;;;;;;;AC/FA;AAGA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AAAA;AACA;;;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AACA;AACA;AACA;;;;;;;;;;;;;;ACXA;AACA;AAAA;AAGA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACXA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACNA;AACA;AAGA;AACA;AAAA;AACA;AACA;;;;;;;;;;;;;;ACPA;AACA;AACA;AAGA;AACA;AAAA;AACA;AACA;;;;;;;;;;;;;;ACRA;AAGA;AACA;AACA;AADA;AACA;AACA;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACNA;AAGA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACbA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AAAA;AACA;AAGA;AACA;AALA;AAAA;AACA;AAKA;AAAA;AACA;AAAA;AAUA;AACA;AACA;AACA;AADA;AACA;AACA;AAfA;AAAA;AACA;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAFA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAPA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AALA;AACA;AAMA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AADA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;;;;;;;;;;;;;AC9NA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAxBA;AAAA;;;;;;;;;;;;;;ACPA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACLA;AACA;AACA;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACJA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;ACXA;AACA;AACA;;;;;;;;;;;;;;ACFA;;;;;;;;;;;;ACAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAIA;;;;;;;;;;;;;;AChBA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AADA;AACA;AACA;AAfA;AAAA;AADA;;;;;;;;;;;;ACnBA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAnBA;AAAA;AADA;;;;;;;;;;;;;;ACnCA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AACA;AAIA;;;;;;;;;;;;ACXA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AACA;AAIA;;;;;;;;;;;;ACXA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;AACA;AAMA;;;;;;;;;;;;ACpBA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;AACA;AAMA;;;;;;;;;;;;ACpBA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAAA;AADA;;;;;;;;;;;;ACVA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAAA;AADA;;;;;;;;;;;;ACVA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;;;ACNA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;ACVA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;AACA;AAMA;;;;;;;;;;;;ACdA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AANA;AAAA;AADA;;;;;;;;;;;;;;ACZA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;ACLA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AALA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;ACpDA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACbA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;ACLA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AARA;AAAA;AADA;;;;;;;;;;;;ACbA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAzBA;AAAA;AADA;;;;;;;;;;;;AClBA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAGA;AACA;AALA;AAAA;AADA;;;;;;;;;;;;;;ACzBA;AAGA;AACA;AACA;AADA;;;;;;;;;;;;ACJA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AA9CA;AAAA;AADA;;;;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACJA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;;;ACNA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACJA;AACA;AAAA;AAGA;AACA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;ACNA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AALA;AAAA;AAFA;;;;;;;;;;;;;;ACbA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAAA;;;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AALA;AAAA;AAKA;;;;;;;;;;;;;;AChBA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;ACLA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAPA;AAAA;AAAA;AAOA;;;;;;;;;;;;;;ACnBA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAAA;AAFA;AAUA;;;;;;;;;;;;;;ACrBA;AACA;AAAA;AAGA;AACA;AACA;AADA;;;;;;;;;;;;ACLA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;;;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAOA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAGA;AACA;AALA;AAAA;AADA;;;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAAA;AADA;;;;;;;;;;;;;;ACTA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;ACLA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAnBA;AAAA;AADA;;;;;;;;;;;;;;ACZA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAAA;AADA;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACPA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACPA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;;;ACLA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACfA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AALA;AAAA;AADA;;;;;;;;;;;;;;ACPA;AAGA;AACA;AACA;AADA;;;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAHA;AACA;AAIA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AACA;AADA;AACA;AACA;AACA;AADA;AACA;AAGA;AACA;AACA;AADA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAEA;AACA;AARA;AAAA;AACA;AAOA;AAEA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;;;;;;;;;;;;;;AC7EA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;;;ACJA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;ACLA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;;;ACLA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAAA;AADA;;;;;;;;;;;;;;ACJA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACPA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;;;ACJA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;;;ACJA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;;;ACLA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;ACLA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AAMA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAAA;AACA;AASA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAAA;AACA;AASA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AAVA;AAAA;AACA;AAUA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AADA;AACA;AACA;AApFA;AAAA;AAFA;;;;;;;;;;;;;;ACvCA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;;;ACLA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;ACNA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAHA;AAAA;AADA;AAKA;;;;;;;;;;;;;;AChBA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;;;ACNA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;ACNA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAHA;AAAA;AADA;AAKA;;;;;;;;;;;;;;AChBA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACLA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACXA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAAA;AADA;;;;;;;;;;;;;;ACNA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACXA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAbA;AAAA;AADA;;;;;;;;;;;;;;ACTA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACVA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACTA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACTA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACTA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;;;ACLA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACTA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AARA;AAAA;AADA;AAUA;;;;;;;;;;;;ACtBA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AARA;AAAA;AADA;AAUA;;;;;;;;;;;;;;ACtBA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACXA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACXA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;;;ACLA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AACA;AAAA;AAAA;AACA;;;;;;;;;;;;;;ACTA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACLA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;ACLA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAZA;AAAA;AADA;AACA;AAeA;AACA;AACA;;;;;;;;;;;;AC7BA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AALA;AAQA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAAA;AACA;AACA;AAUA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAUA;AACA;AAZA;AAAA;AACA;AAWA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAAA;AAWA;AACA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAhBA;AACA;AAmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAAA;AACA;AAOA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAFA;AAMA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAIA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AALA;AAAA;AAHA;AAUA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAHA;AAQA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3BA;AAAA;AA2BA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAbA;AAAA;AAhCA;;;;;;;;;;;;;;ACrUA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAPA;AAAA;AADA;;;;;;;;;;;;;;AChBA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AALA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAzBA;AAAA;AADA;;;;;;;;;;;;;;ACxBA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAAA;AADA;;;;;;;;;;;;;;ACfA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAAA;AADA;;;;;;;;;;;;;;ACNA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;;;ACrBA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACJA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAAA;AADA;;;;;;;;;;;;;;ACPA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;;;ACLA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAVA;AAAA;AADA;;;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAVA;AAAA;AADA;;;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;;;ACjCA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAOA;AACA;AAZA;AAAA;AACA;AAWA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAHA;AAKA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3DA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;;;ACJA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AACA;AACA;AACA;AAFA;AAIA;;;;;;;;;;;;ACXA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAAA;AAMA;AAAA;AACA;;;;;;;;;;;;ACxBA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACNA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAXA;AAAA;AADA;;;;;;;;;;;;ACZA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAIA;AACA;AADA;AACA;AACA;AAdA;AAAA;AADA;;;;;;;;;;;;ACXA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAJA;AAAA;AADA;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AAHA;AAMA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAlBA;AAAA;;;;;;;;;;;;ACXA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAFA;AAGA;AACA;AACA;AACA;AACA;AACA;AARA;AAAA;AASA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;;;;;;;;;;;;AC3CA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AAXA;AAAA;AADA;;;;;;;;;;;;;;ACNA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;ACLA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAFA;AAGA;AACA;AACA;AACA;AAGA;AACA;AAVA;AAAA;AAWA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAjBA;AACA;AAkBA;AACA;AACA;AACA;;;;;;;;;;;;AC7HA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAFA;AAGA;AACA;AACA;AACA;AACA;AACA;AARA;AAAA;AASA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;ACjCA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAFA;AAGA;AACA;AACA;AACA;AAGA;AACA;AAVA;AAAA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAMA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;;;;;;;;;;;;ACrIA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AATA;AAAA;AADA;;;;;;;;;;;;ACZA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAFA;;;;;;;;;;;;ACbA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAFA;;;;;;;;;;;;ACbA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;ACPA;AAGA;AACA;AACA;AADA;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AATA;AAAA;AACA;AAQA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAAA;AAFA;AAWA;AAAA;AAAA;AAAA;AACA;AADA;AAGA;;;;;;;;;;;;;;ACjDA;AAGA;AACA;AACA;AADA;;;;;;;;;;;;;;ACJA;AAGA;AACA;AACA;AADA;;;;;;;;;;;;;;ACJA;AAGA;AACA;AACA;AADA;;;;;;;;;;;;ACJA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AADA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AADA;AACA;AACA;AADA;AACA;AACA;AAfA;AAAA;AACA;AAeA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAAA;AACA;AASA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AACA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAAA;AACA;AAMA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAVA;AAAA;AACA;AAUA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAAA;AACA;AAQA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAAA;AAaA;AACA;AACA;AADA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AALA;AAAA;AACA;AAIA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAZA;AAAA;AACA;AAYA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAFA;AACA;AAKA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAIA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAAA;AAQA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAlBA;AAqBA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAZA;AAeA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAUA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;AAOA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAFA;AAKA;AARA;AASA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAIA;AACA;AACA;AACA;AAdA;AAAA;AADA;AAkBA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;;;;;;;;;;;;;;AC1SA;AAGA;AACA;AACA;AADA;;;;;;;;;;;;;;ACJA;AAGA;AACA;AACA;AADA;;;;;;;;;;;;;;ACJA;AAGA;AACA;AACA;AADA;;;;;;;;;;;;;;ACJA;AAGA;AACA;AACA;AADA;;;;;;;;;;;;;;ACJA;AAGA;AACA;AACA;AADA;;;;;;;;;;;;;;ACJA;AAGA;AACA;AACA;AADA;;;;;;;;;;;;;;ACJA;AAGA;AACA;AACA;AADA;;;;;;;;;;;;;;ACJA;AAGA;AACA;AACA;AADA;;;;;;;;;;;;ACJA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;ACTA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AATA;AAAA;;;;;;;;;;;;ACVA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;;;ACRA;AAGA;AACA;AACA;AADA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;;;;;;;;;;;;;;ACRA;AAGA;AACA;AACA;AADA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;;;;;;;;;;;;ACPA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;;;ACRA;AAGA;AACA;AACA;AADA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;;;;;;;;;;;;;;ACRA;AAGA;AACA;AACA;AADA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;;;;;;;;;;;;;;ACRA;AAGA;AACA;AACA;AADA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAKA;AACA;AACA;AADA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAIA;AACA;AAAA;AAEA;AACA;AAAA;;;;;;;;;;;;ACrCA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;ACTA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;ACTA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AALA;AAAA;;;;;;;;;;;;ACVA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAPA;AAAA;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AAZA;AAAA;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAVA;AAAA;;;;;;;;;;;;AChBA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AATA;AAAA;;;;;;;;;;;;AChBA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAKA;AACA;AAVA;AAAA;;;;;;;;;;;;ACVA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;;;;;;;;;;;;ACvBA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAGA;AACA;AACA;AADA;;;;;;;;;;;;;;AClBA;AAGA;AACA;AACA;AADA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;;;;;;;;;;;;;;ACRA;AAGA;AACA;AACA;AADA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;;;;;;;;;;;;;;ACRA;AAGA;AACA;AACA;AADA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;;;;;;;;;;;;;;ACRA;AAGA;AACA;AACA;AADA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAGA;AACA;AACA;AADA;AAGA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AAPA;AAAA;AAOA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AAPA;AAAA;AAOA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AAPA;AAAA;AAOA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AARA;AAAA;AAtBA;AA+BA;;;;;;;;;;;;AClEA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;;;;;;;;;;;;;;ACRA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACdA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC9BA;AACA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;;;;;;;;;;;;;;ACNA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAAA;AADA;;;;;;;;;;;;;;ACVA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AAPA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AADA;AACA;AACA;AAfA;AAAA;AAiBA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAJA;AACA;AAMA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAKA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAlCA;AAAA;AACA;AAkCA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AANA;AAAA;AAMA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AACA;AAZA;AAAA;AAYA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAVA;AAAA;AAUA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAXA;AAAA;AAWA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAVA;AAAA;AAUA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAtBA;AAAA;AAsBA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAnBA;AAAA;AAmBA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAVA;AAAA;AAUA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AA7HA;AAgIA;AAAA;AACA;AAEA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AAVA;AAAA;AASA;AAAA;AAEA;AAEA;AAAA;AAAA;AAAA;AACA;AADA;AAIA;AACA;AACA;AAFA;;;;;;;;;;;;ACnTA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AADA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AADA;AAGA;AACA;AAAA;AAAA;AAAA;AADA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AAKA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AADA;AACA;AACA;AACA;AACA;AA3WA;AACA;AA6WA;AACA;AACA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AApCA;AAAA;AACA;AAoCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AArGA;AAuGA;AAGA;AACA;AACA;AADA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAEA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;;;;;;;;;;;;AC7+BA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;ACLA;AAEA;AACA;AACA;;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClNA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAHA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAVA;AACA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChKA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA,WAGA;AACA;;;;;;;;;;;;;;;;;;ACvFA;AACA;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3CA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACNA;AACA;AACA;AADA;AAEA;AACA;AAEA;AAEA;AACA;AAAA;AAKA;AACA;AAEA;;;;;;;AAKA;AACA;AACA;AACA;AAHA;AACA;AAIA;AACA;AANA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;AAbA;AACA;AAcA;AACA;AAhBA;AAAA;AAkBA;AAlBA;AACA;AAmBA;AACA;AACA;AACA;AACA;AAHA;AACA;AAKA;AACA;AA5BA;AAAA;AACA;AA+BA;AACA;AAEA;AACA;AACA;;;;;;;AAMA;AACA;AACA;AAEA;;;;;;;;;;AAQA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAEA;;;;;;;;;;;;AAUA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;AAaA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;;;;;;;;;;AAQA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;;;;;;;;;;;AASA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAEA;;;;;;;;;;;;;AAWA;AACA;AACA;AACA;AACA;AAEA;;;;;;;AAKA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAEA;;;;;;;;;AAOA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAaA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;;;;;;;;;AAOA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAWA;AACA;AACA;AAAA;AACA;AAfA;AAAA;AACA;AAmBA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AACA;AADA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAEA;;;;;;;;;;;;;AAWA;AACA;AACA;AAGA;AACA;AAEA;;;;;;;;;;;;;AAWA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AADA;AACA;;;;;AAKA;AACA;AAAA;;;;;;;AAOA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AArBA;AAwBA;AACA;AACA;AACA;AAAA;AAKA;AACA;AACA;AAAA;AACA,WAaA;AAEA;;;;;;;;;;;;;ACphBA;;;;;AAMA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AADA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzFA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACbA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAYA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAKA;AAjCA;AAmCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3CA;AA6CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAGA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;AAMA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAaA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;;;;;;;;;;;;ACpFA;AACA;AACA;AACA;;;;;;;;;;;;;;ACHA;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAIA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AADA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AAGA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AACA;AAIA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAKA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAzEA;AAAA;AAyEA;AAGA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AADA;AACA;AACA;AAGA;AACA;AACA;AADA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AAhBA;AAAA;AAgBA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAdA;AAAA;AACA;AAcA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAzBA;AAAA;AA0BA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAAA;AAYA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AA3DA;AAAA;AA4DA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAjCA;AAAA;AAkCA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAlBA;AAAA;AAmBA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAVA;AAAA;AAWA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AACA;AADA;AACA;AACA;AAjBA;AAAA;AAkBA;AAAA;AACA;AACA;AACA;AACA;AAHA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAfA;AAAA;AAvLA;AAyMA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrtBA;AACA;AAAA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AADA;AAAA;AAAA;AAIA;AAJA;AAOA;AACA;AARA;AAWA;AAXA;AAcA;AAdA;AAgBA;AACA;AACA;AACA;AAnBA;AAAA;AAAA;AAAA;AAAA;AAyBA;AACA;AACA;AAFA;AAzBA;AA8BA;AACA;AACA;AAFA;AA9BA;AAmCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAVA;AAnCA;AACA;AAgDA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AADA;AAAA;AAAA;AAAA;AAKA;AACA;AAEA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAGA;AACA;AACA;AADA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAEA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AACA;AAGA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AADA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAKA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AACA;AADA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AADA;AACA;AAKA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAGA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;;;;;;;;;;;;AC3tBA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAVA;;;;;;;;;;;;;;ACFA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAFA;AAMA;AACA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAFA;AAMA;AACA;AACA;AAAA;AACA;;;;;;;;;;;;;;;;;ACrBA;;;;;;AAMA;;;;;AAKA;AAAA;AAAA;AAAA;AACA;AADA;AACA;AACA;AAFA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAZA;AAcA;;;;;;;;;;;;;;;;AAYA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAEA;AAEA;;;;;;;;;;;;AAQA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAjBA;AACA;;;;;;;;;;;;;;;;;;ACzDA;;;AAGA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;;;;;;;;AAIA;AAAA;AAAA;AAEA;;;;;;;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;;;;;;;;;;;;;;;;;;ACnBA;;;;;;;;AAQA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;;;;;;;;AAIA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAEA;;;;;;;;AAIA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;;;;;;AAGA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AADA;;;;;;;;;;;;;;;;;;ACxEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AADA;AACA;AADA;AAIA;AACA;AACA;AACA;AAHA;AAKA;AAEA;;;;;;;;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AADA;AAAA;AAFA;AAKA;AAAA;AAAA;AACA;AAEA;AAEA;AAFA;AAIA;AApBA;AAqBA;AACA;;;;;;;;;;;;;;;;;;ACjEA;;;;;;AAMA;;;;;AAKA;AACA;AAGA;AAAA;AACA;AAAA;AAEA;AAEA;;;;;;;AAGA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAEA;;;;;;;;AAIA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAIA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAEA;;;;;;;;;;AAMA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAQA;AAAA;AAAA;AAKA;AAAA;AALA;AAQA;AACA;AACA;AAVA;AAaA;AACA;AACA;AACA;AAEA;;;;;;;AAGA;AAAA;AACA;AAAA;AADA;AACA;;;;;;;;;;;;;ACnJA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;;;;;;;;AAMA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AADA;AAGA;AACA;AACA;AACA;AAHA;AACA;AAIA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAhBA;AAkBA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAVA;AACA;AAWA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;;;;;;;AAKA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAZA;AAcA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAVA;AACA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAbA;AAeA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AADA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AAFA;AAMA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;;;;;;;AAKA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AArEA;AAuEA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAbA;AACA;AAcA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAXA;AACA;AAYA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAdA;AACA;AAeA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AA9BA;AACA;AA+BA;AApFA;AAsFA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AANA;AAAA;AAMA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAjBA;AAAA;AACA;AAgBA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAPA;AAAA;AACA;AAMA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAdA;AAAA;AACA;AAaA;AAAA;AACA;AACA;AACA;AAHA;AAAA;AACA;AAGA;AACA;AACA;AAAA;AACA;AADA;AAAA;AACA;AACA;AACA;AADA;AACA;AAAA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACp7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAZA;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAFA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAFA;AAFA;AAOA;AAEA;AACA;AACA;;;AACA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAHA;AAMA;AACA;AARA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC5GA;AACA;AACA;;;;;;;;;AASA;;;AAGA;AAAA;AACA;AACA;AAFA;AAAA;AAKA;;;;;;;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAJA;AAMA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACxCA;AACA;;;;;AACA;;;;;;;;AAQA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAEA;;;;;;;;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;;;;;;;;;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAFA;AAIA;AACA;AAEA;;;;;;;AAGA;AAAA;AAAA;AAAA;AAAA;AAEA;;;;;;;;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;;;;;;;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAFA;AACA;AAFA;AACA;AADA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAQA;;;;;;;AAGA;AAAA;AACA;AADA;AAAA;AACA;;;;;;;;;;;;;;;;;;AClFA;AACA;AAAA;AACA;;;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;;;;;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AADA;AACA;AAGA;AACA;AACA;AAFA;AAKA;AACA;AACA;AAdA;AAcA;AACA;;;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;;;;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;;;AACA;AAAA;AACA;AACA;AACA;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;;;;;AAxDA;AACA;;;;;;;;;;;;;;;;;;ACbA;AACA;AAAA;AACA;AAAA;AACA;;;AACA;AACA;AAEA;;;;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;;;;;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAuBA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AArBA;AANA;AA+BA;AACA;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAAA;AAAA;AACA;AACA;AAMA;AAOA;AACA;;AACA;;;;;;;;;;;;;;;;;;;ACpGA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;;;AACA;AAEA;AAFA;;;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAcA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AArBA;AAAA;AAAA;AAqBA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AA5BA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A;;AACA;;AACA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;;;AAUA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;ACnBA;AACA;AAAA;AACA;;;;;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAPA;AACA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAAA;AACA;AADA;AASA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAfA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AACA;;;AAgBA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;;;AACA;AACA;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAGA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AAfA;AACA;;;AAgBA;AACA;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAMA;AAMA;AAEA;AAGA;;;;;;;;;;;;;;;;;ACzHA;AACA;AACA;AACA;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;AAEA;AACA;AAKA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAFA;AAIA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3FA;AACA;AALA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3CA;AAAA;AACA;AA2CA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAPA;AAUA;AACA;;;;;;;;;;;;;;;;;ACrIA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AAHA;AAXA;AAiBA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AAHA;AAhBA;AAsBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AACA;AAVA;AAAA;AAAA;AAAA;AAYA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AACA;AANA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBA;AAAA;AAAA;AACA;AAlBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkCA;AAAA;AAAA;AACA;AAnCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0CA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA;AAAA;AAAA;AACA;AAjBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AACA;AAvBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4BA;AAAA;AAAA;AACA;AA7BA;AAAA;AAAA;AAAA;AAAA;AAkCA;AA9EA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0FA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AACA;AANA;AAAA;AAAA;AAFA;AAAA;AAAA;AAYA;AAAA;AAAA;AACA;AAbA;AAAA;AAAA;AAxFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgHA;AAAA;AAAA;AACA;AAjHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyHA;AAAA;AAAA;AACA;AA1HA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkIA;AAAA;AAAA;AACA;AAnIA;AAAA;AAAA;AAAA;AAAA;AAuIA;AACA;;;;;;;;;;;;;;;;;;AC9MA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AACA;AAVA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AACA;AAhBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBA;AAAA;AAAA;AACA;AAzBA;AAAA;AAAA;AAAA;AA4BA;AACA;;;;;;;;;;;;;;;;;;ACrCA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AAFA;AAIA;AACA;AACA;AAFA;AATA;AAcA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;AAAA;AAAA;AACA;AAbA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8BA;AAAA;AAAA;AACA;AA/BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiDA;AAAA;AAAA;AACA;AAlDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsDA;AAAA;AAAA;AACA;AAvDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2DA;AAAA;AAAA;AACA;AA5DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqFA;AAAA;AAAA;AACA;AAtFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgGA;AAAA;AAAA;AACA;AAjGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4GA;AAAA;AAAA;AACA;AA7GA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyHA;AAAA;AAAA;AACA;AA1HA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsIA;AAAA;AAAA;AACA;AAvIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmJA;AAAA;AAAA;AACA;AApJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiKA;AAAA;AAAA;AACA;AAlKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+KA;AACA;;;;;;;;;;;;;;;;;;ACvMA;AACA;AAHA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AACA;AANA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAKA;AACA;;;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AAFA;AAIA;AACA;AACA;AAFA;AATA;AAcA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAAA;AAQA;AAZA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCA;AAAA;AAAA;AAAA;AApCA;AAAA;AA8CA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAFA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAFA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAFA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAFA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAFA;AAjBA;AACA;AAsBA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAIA;AAAA;AACA;AADA;AAAA;AACA;AALA;AAAA;AAAA;AAHA;AAAA;AAAA;AAAA;AAcA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AACA;AATA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBA;AAAA;AACA;AADA;AAAA;AACA;AAlBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBA;AAAA;AACA;AADA;AAAA;AACA;AAzBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BA;AAAA;AACA;AADA;AAAA;AACA;AAhCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsCA;AAAA;AACA;AADA;AAAA;AACA;AAvCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6CA;AAAA;AACA;AADA;AAAA;AACA;AA9CA;AAAA;AAAA;AAkDA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AACA;AACA;AAFA;AAAA;AACA;AAVA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBA;AAAA;AACA;AACA;AAFA;AAAA;AACA;AAxBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BA;AAAA;AACA;AACA;AAFA;AAAA;AACA;AAhCA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AACA;AADA;AAAA;AACA;AANA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;AAAA;AACA;AADA;AAAA;AACA;AAbA;AAAA;AAAA;AAAA;AAiBA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AACA;AADA;AAAA;AACA;AANA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;AAAA;AACA;AADA;AAAA;AACA;AAbA;AAAA;AAAA;AAAA;AArDA;AAAA;AAyEA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AACA;AACA;AAFA;AAAA;AACA;AAVA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBA;AAAA;AACA;AACA;AAFA;AAAA;AACA;AArBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4BA;AAAA;AACA;AACA;AAFA;AAAA;AACA;AA7BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AACA;AACA;AAFA;AAAA;AACA;AARA;AAAA;AAAA;AAAA;AAnCA;AAAA;AAAA;AAoDA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AACA;AARA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAaA;AAGA;AAAA;AAAA;AAIA;AAAA;AACA;AACA;AAFA;AAAA;AACA;AALA;AAAA;AAAA;AAAA;AAHA;AAbA;AAEA;AAAA;AAFA;AA+BA;;;;;;;;;;;;;;;;;ACxcA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AAEA;AACA;AACA;AADA;AAGA;AACA;AADA;AAGA;AACA;AADA;AAPA;AACA;AAWA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AACA;AAVA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBA;AAAA;AAAA;AACA;AAlBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AACA;AAvBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BA;AAAA;AACA;AADA;AAAA;AACA;AAhCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuCA;AAAA;AACA;AADA;AAAA;AACA;AAxCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+CA;AAAA;AACA;AADA;AAAA;AACA;AAhDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuDA;AAAA;AACA;AADA;AAAA;AACA;AAxDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AACA;AADA;AAAA;AACA;AAPA;AAAA;AAAA;AAAA;AAAA;AAFA;AACA;AALA;AAAA;AAAA;AAqBA;AA1FA;AAAA;AAAA;AAgGA;AACA;;;;;;;;;;;;;;;;;;ACnJA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AACA;AAPA;AAAA;AAAA;AAAA;AAqBA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AACA;AAPA;AAAA;AAAA;AAAA;AA3BA;AAkDA;AACA;;;;;;;;;;;;;;;;;;AC3DA;AACA;AAHA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAKA;AAnBA;AAAA;AAuBA;AA7BA;AA+BA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AACA;AATA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA;AAAA;AAAA;AACA;AAjBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AACA;AAvBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BA;AAAA;AAAA;AACA;AA9BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmCA;AAAA;AAAA;AACA;AApCA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2CA;AACA;;;;;;;;;;;;;;;;;;ACtFA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AACA;AAVA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA;AAAA;AAAA;AAAA;AAAA;AACA;AAjBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AAAA;AAAA;AACA;AAvBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAIA;AAAA;AACA;AADA;AAAA;AACA;AALA;AAAA;AAAA;AAAA;AA5BA;AAAA;AAAA;AAyCA;AACA;;;;;;;;;;;;;;;;;;ACnDA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AACA;AAVA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA;AAAA;AAAA;AAAA;AAAA;AACA;AAjBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AAAA;AAAA;AACA;AAvBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BA;AAAA;AAAA;AAAA;AAAA;AACA;AAhCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AACA;AArCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyCA;AAAA;AAAA;AAAA;AAAA;AACA;AA1CA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8CA;AAAA;AAAA;AAAA;AAAA;AACA;AA/CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuDA;AAAA;AACA;AADA;AAAA;AACA;AAxDA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6DA;AAAA;AACA;AADA;AAAA;AACA;AA9DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmEA;AAAA;AACA;AADA;AAAA;AACA;AApEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyEA;AAAA;AACA;AADA;AAAA;AACA;AA1EA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmFA;AACA;;;;;;;;;;;;;;;;;;AC3FA;AACA;AAFA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AACA;AAVA;AAAA;AAAA;AAAA;AAYA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AANA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;AAAA;AAAA;AAAA;AAAA;AACA;AAXA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBA;AAAA;AAAA;AAAA;AAAA;AACA;AApBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBA;AAAA;AAAA;AAAA;AAAA;AACA;AAzBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZA;AAAA;AA6CA;AACA;;;;;;;;;;;;;;;;;;ACvDA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAEA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AACA;AATA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBA;AACA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AAHA;AAPA;AAYA;AAAA;AAAA;AACA;AAbA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAjBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuDA;AAAA;AAAA;AACA;AAxDA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8DA;AACA;;;;;;;;;;;;;;;;;;AC9EA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AACA;AATA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA;AAAA;AAAA;AACA;AAjBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBA;AAAA;AAAA;AACA;AAtBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0BA;AAAA;AAAA;AACA;AA3BA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BA;AAAA;AAAA;AA7BA;AAAA;AAAA;AAwCA;AAAA;AAAA;AACA;AAzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4CA;AAAA;AAAA;AACA;AA7CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiDA;AAAA;AAAA;AACA;AAlDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoDA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AACA;AADA;AAAA;AACA;AANA;AAAA;AAAA;AAAA;AApDA;AAAA;AAAA;AA+DA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AACA;AADA;AAAA;AACA;AARA;AAAA;AAAA;AAAA;AA/DA;AAAA;AAAA;AA4EA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AACA;AADA;AAAA;AACA;AANA;AAAA;AAAA;AAAA;AA5EA;AAAA;AAAA;AAuFA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AACA;AADA;AAAA;AACA;AANA;AAAA;AAAA;AAAA;AAvFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0GA;AAAA;AAAA;AACA;AA3GA;AAAA;AAAA;AAAA;AA4GA;AAAA;AA5GA;AAqHA;AACA;;;;;;;;;;;;;;;;;;ACtIA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;AAAA;AAAA;AACA;AAXA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AACA;AAhBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBA;AAAA;AAAA;AAAA;AAAA;AACA;AArBA;AAAA;AAAA;AAAA;AAAA;AAuBA;AAAA;AAAA;AAAA;AAAA;AACA;AAxBA;AAAA;AAAA;AAAA;AAAA;AA8BA;AAAA;AAAA;AAAA;AAAA;AACA;AA/BA;AAAA;AAAA;AAAA;AAAA;AAiCA;AAAA;AAAA;AAAA;AAAA;AACA;AAlCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsCA;AAAA;AAAA;AAAA;AAAA;AACA;AAvCA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0CA;AAAA;AAAA;AAAA;AAAA;AACA;AA3CA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8CA;AAAA;AAAA;AAAA;AAAA;AACA;AA/CA;AAAA;AAAA;AAAA;AAkDA;AACA;;;;;;;;;;;;;;;;;;AC9DA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;AAAA;AAAA;AACA;AAbA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AACA;AATA;AAAA;AAAA;AAAA;AAtBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkDA;AAAA;AACA;AADA;AAAA;AACA;AAnDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyDA;AAAA;AACA;AADA;AAAA;AACA;AA1DA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+DA;AAAA;AACA;AADA;AAAA;AACA;AAhEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsEA;AAAA;AACA;AADA;AAAA;AACA;AAvEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkFA;AAAA;AAAA;AACA;AAnFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyFA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AACA;AANA;AAAA;AAAA;AAzFA;AAgGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;AAAA;AAAA;AA1GA;AAkHA;AACA;;;;;;;;;;;;;;;;;;AC1HA;AACA;AAFA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;AAAA;AAAA;AACA;AAdA;AAAA;AAAA;AAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA;AAAA;AAGA;AAAA;AAAA;AACA;AAJA;AAAA;AAAA;AAXA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAEA;AAAA;AAAA;AAIA;AAAA;AAAA;AACA;AALA;AAAA;AAAA;AAFA;AAtBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA;AAAA;AAAA;AACA;AAZA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AA3CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkEA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AACA;AANA;AAAA;AAAA;AAHA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAnEA;AAAA;AAAA;AAgFA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AARA;AAAA;AAAA;AAhFA;AAmGA;AACA;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAsBA;AAAA;AACA;AADA;AAAA;AACA;AAvBA;AAAA;AAAA;AAAA;AA8BA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAKA;AATA;AAYA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAEA;AAGA;AAkBA;AAAA;AAAA;AAKA;AAAA;AACA;AADA;AAAA;AACA;AANA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA;AAAA;AACA;AADA;AAAA;AACA;AAZA;AAAA;AAAA;AAlBA;AA4CA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcA;AAAA;AACA;AADA;AAAA;AACA;AAfA;AAAA;AAAA;AAAA;AAAA;AAAA;AAFA;AA0BA;AAAA;AAEA;AAAA;AAIA;AACA;AAFA;AAHA;AAAA;AAQA;AAAA;AAAA;AACA;AATA;AAAA;AAAA;AAAA;AAAA;AAAA;AAFA;AAoBA;;;;;;;;;;;;;;;;;ACxSA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA;AAAA;AAAA;AAAA;AAAA;AACA;AAZA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlBA;AAAA;AA0CA;AACA;;;;;;;;;;;;;;;;;;ACpDA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcA;AAAA;AAAA;AACA;AAfA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBA;AAAA;AAAA;AACA;AAnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AACA;AAvBA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0BA;AAAA;AAAA;AACA;AA3BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BA;AAAA;AAAA;AACA;AAhCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AACA;AArCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwCA;AAAA;AAAA;AACA;AAzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+CA;AAAA;AAAA;AACA;AAhDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsDA;AAAA;AAAA;AACA;AAvDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2DA;AAAA;AAAA;AACA;AA5DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkEA;AAAA;AAAA;AACA;AAnEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuEA;AAAA;AAAA;AACA;AAxEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8EA;AAAA;AAAA;AACA;AA/EA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmFA;AAAA;AAAA;AACA;AApFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0FA;AAAA;AAAA;AACA;AA3FA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+FA;AAAA;AAAA;AACA;AAhGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoGA;AAAA;AAAA;AACA;AArGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2GA;AAAA;AAAA;AACA;AA5GA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgHA;AAAA;AAAA;AACA;AAjHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqHA;AAAA;AAAA;AACA;AAtHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0HA;AAAA;AAAA;AACA;AA3HA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+HA;AAAA;AAAA;AACA;AAhIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoIA;AAAA;AAAA;AACA;AArIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyIA;AAAA;AAAA;AACA;AA1IA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8IA;AAAA;AAAA;AACA;AA/IA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqJA;AAAA;AAAA;AACA;AAtJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0JA;AAAA;AAAA;AACA;AA3JA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiKA;AAAA;AAAA;AACA;AAlKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsKA;AAAA;AAAA;AACA;AAvKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2KA;AAAA;AAAA;AACA;AA5KA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgLA;AAAA;AAAA;AACA;AAjLA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqLA;AAAA;AAAA;AACA;AAtLA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4LA;AAAA;AAAA;AACA;AA7LA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiMA;AAAA;AAAA;AACA;AAlMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsMA;AAAA;AAAA;AACA;AAvMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2MA;AAAA;AAAA;AACA;AA5MA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkNA;AAAA;AAAA;AACA;AAnNA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuNA;AAAA;AAAA;AACA;AAxNA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4NA;AAAA;AAAA;AACA;AA7NA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiOA;AAAA;AAAA;AACA;AAlOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsOA;AAAA;AAAA;AACA;AAvOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2OA;AAAA;AAAA;AACA;AA5OA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgPA;AAAA;AAAA;AACA;AAjPA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqPA;AAAA;AAAA;AACA;AAtPA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0PA;AAAA;AAAA;AACA;AA3PA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+PA;AAAA;AAAA;AACA;AAhQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoQA;AAAA;AAAA;AACA;AArQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyQA;AAAA;AAAA;AACA;AA1QA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8QA;AAAA;AAAA;AACA;AA/QA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2RA;AAAA;AAAA;AACA;AA5RA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgSA;AAAA;AAAA;AACA;AAjSA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsSA;AAAA;AAAA;AACA;AAvSA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6SA;AACA;;;;;;;;;;;;;;;;;;ACvTA;AACA;AAHA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAAA;AAIA;AACA;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAOA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AACA;AANA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AACA;AANA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AACA;AANA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AACA;AANA;AAAA;AAAA;AA5CA;AAqDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AACA;AADA;AAAA;AACA;AAPA;AAAA;AAAA;AAAA;AAUA;AAAA;AAAA;AA/DA;AAAA;AAAA;AAwEA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AACA;AADA;AAAA;AACA;AANA;AAAA;AAAA;AAAA;AAxEA;AAAA;AAAA;AAmFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AACA;AADA;AAAA;AACA;AAPA;AAAA;AAAA;AAAA;AAnFA;AAAA;AAAA;AAAA;AAkGA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AANA;AAAA;AAAA;AAAA;AAlGA;AAAA;AAAA;AAAA;AA6GA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AACA;AANA;AAAA;AAAA;AA7GA;AAsHA;AAAA;AAtHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArIA;AAAA;AAAA;AAmJA;AACA;;;;;;;;;;;;;;;;;;AChLA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AACA;AATA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;AAAA;AAAA;AACA;AAdA;AAAA;AAAA;AAAA;AAFA;AAAA;AAAA;AAqBA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAIA;AAAA;AACA;AADA;AAAA;AACA;AALA;AAAA;AAAA;AAAA;AAFA;AAYA;AAlCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6CA;AAAA;AAAA;AACA;AA9CA;AAAA;AAAA;AAAA;AAiDA;AACA;;;;;;;;;;;;;;;;;;AC5DA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBA;AAAA;AAAA;AACA;AAtBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8BA;AAAA;AAAA;AACA;AA/BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsCA;AAAA;AAAA;AACA;AAvCA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8CA;AACA;;;;;;;;;;;;;;;;;;ACzEA;AACA;AAAA;AACA;;;AACA;AAoBA;AACA;AAKA;;;;;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAFA;AAMA;AACA;;;AACA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AA1BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoDA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AACA;AArDA;AAAA;AAAA;AAAA;AAAA;AAyDA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AACA;AA1DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkEA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AACA;AAnEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuEA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AALA;AAAA;AAAA;AAAA;AAvEA;AAAA;AAwGA;AACA;;;;;AAvHA;AACA;;;;;;;;;;;;;;;;;;AC9BA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AACA;AARA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;AAAA;AAAA;AACA;AAbA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBA;AAAA;AAAA;AACA;AAxBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BA;AAAA;AACA;AADA;AAAA;AACA;AA9BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmCA;AAAA;AACA;AADA;AAAA;AACA;AApCA;AAAA;AAAA;AAAA;AAAA;AAwCA;AAAA;AACA;AADA;AAAA;AACA;AAzCA;AAAA;AAAA;AAAA;AAAA;AA6CA;AAAA;AAAA;AACA;AA9CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkDA;AAAA;AACA;AADA;AAAA;AACA;AAnDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwDA;AAAA;AACA;AADA;AAAA;AACA;AAzDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgEA;AACA;;;;;;;;;;;;;;;;;;AC1EA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AACA;AADA;AAAA;AACA;AAVA;AAAA;AAAA;AAAA;AAAA;AAcA;AAAA;AACA;AADA;AAAA;AACA;AAfA;AAAA;AAAA;AAAA;AAAA;AAmBA;AAAA;AACA;AADA;AAAA;AACA;AApBA;AAAA;AAAA;AAAA;AAAA;AAJA;AAAA;AA+BA;AAEA;AAAA;AAFA;AAYA;AACA;;;;;;;;;;;;;;;;;;;;ACzDA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;AACA;AACA;AACA;AACA;AACA;AAlBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;;;;;;;;;;;;;;;;;;AClCA;AACA;AAHA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;;;AACA;AACA;AACA;;;;;AACA;AAAA;AACA;AAAA;AACA;AAFA;AAGA;AACA;;;AACA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAAA;AARA;AAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AAbA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AA3BA;AAAA;AAAA;AA2BA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAtCA;AAAA;AAAA;AA6CA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;AACA;;;;;AA7EA;AACA;;;;;;;;;;;;;;;;;;ACfA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AADA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AADA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AADA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AADA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AADA;AAAA;AALA;AAOA;AACA;;;;;;;;;;;;;;;ACpDA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACJA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AArFA;AACA;AA0FA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAFA;AAIA;AACA;AACA;AAAA;AACA;AACA;;;;;;;;;;;;;;;;;;AC9HA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAEA;AAIA;AAEA;AAEA;AACA;AACA;;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;A","sourceRoot":""} \ No newline at end of file diff --git a/tgui-next/packages/tgui/public/images/tgui-bg-nanotrasen.svg b/tgui-next/packages/tgui/public/images/tgui-bg-nanotrasen.svg new file mode 100644 index 00000000000..d21b9f0a2a0 --- /dev/null +++ b/tgui-next/packages/tgui/public/images/tgui-bg-nanotrasen.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/tgui-next/packages/tgui/public/images/tgui-bg-syndicate.svg b/tgui-next/packages/tgui/public/images/tgui-bg-syndicate.svg new file mode 100644 index 00000000000..c2863b790df --- /dev/null +++ b/tgui-next/packages/tgui/public/images/tgui-bg-syndicate.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/tgui-next/packages/tgui/public/shim-console.js b/tgui-next/packages/tgui/public/shim-console.js new file mode 100644 index 00000000000..75ba1efa657 --- /dev/null +++ b/tgui-next/packages/tgui/public/shim-console.js @@ -0,0 +1,55 @@ +/** + * Shims the console in embedded IE8 window. + * + * You can subscribe using console.__subscribe__(fn) to handle + * incoming log messages, otherwise they will be simply lost. + */ + +/* eslint-disable */ +(function () { + +// Ignore user agents with console. +if (window.console) { + return; +} + +var noop = function () {}; + +var handleLogs = function () { + for (var i = 0; i < subscribers.length; i++) { + subscribers[i].apply(null, arguments); + } +}; + +var subscribers = []; + +// Start shimming +window.console = {}; + +console.__subscribe__ = function (fn) { + subscribers.push(fn); +}; + +console.debug = handleLogs; +console.error = handleLogs; +console.info = handleLogs; +console.log = handleLogs; +console.trace = handleLogs; +console.warn = handleLogs; + +console.assert = noop; +console.count = noop; +console.dir = noop; +console.dirxml = noop; +console.exception = noop; +console.group = noop; +console.groupCollapsed = noop; +console.groupEnd = noop; +console.table = noop; +console.clear = noop; +console.count = noop; +console.profile = noop; +console.profileEnd = noop; +console.timeStamp = noop; + +})(); diff --git a/tgui-next/packages/tgui/public/shim-css-om.js b/tgui-next/packages/tgui/public/shim-css-om.js new file mode 100644 index 00000000000..a033b9d93b7 --- /dev/null +++ b/tgui-next/packages/tgui/public/shim-css-om.js @@ -0,0 +1,39 @@ +/** + * CSS Object Model patches + * + * Adapted from: https://github.com/shawnbot/aight + */ + +/* eslint-disable */ +(function(Proto) { + + function toAttr(prop) { + return prop.replace(/-[a-z]/g, function(bit) { + return bit[1].toUpperCase(); + }); + } + + if (typeof Proto.setAttribute !== 'undefined') { + Proto.setProperty = function (prop, value) { + var attr = toAttr(prop); + if (!value) { + return this.removeAttribute(attr); + } + var str = String(value); + return this.setAttribute(attr, str); + }; + + Proto.getPropertyValue = function (prop) { + var attr = toAttr(prop); + return this.getAttribute(attr) || null; + }; + + Proto.removeProperty = function (prop) { + var attr = toAttr(prop); + var value = this.getAttribute(attr); + this.removeAttribute(attr); + return value; + }; + } + +})(CSSStyleDeclaration.prototype); diff --git a/tgui-next/packages/tgui/public/shim-dom4.js b/tgui-next/packages/tgui/public/shim-dom4.js new file mode 100644 index 00000000000..074c7a5c9f4 --- /dev/null +++ b/tgui-next/packages/tgui/public/shim-dom4.js @@ -0,0 +1,986 @@ +/** + * Copyright (C) 2013-2015 by Andrea Giammarchi - @WebReflection + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +/* eslint-disable */ +(function(window){ + 'use strict'; + /* jshint loopfunc: true, noempty: false*/ + // http://www.w3.org/TR/dom/#element + + function createDocumentFragment() { + return document.createDocumentFragment(); + } + + function createElement(nodeName) { + return document.createElement(nodeName); + } + + function enoughArguments(length, name) { + if (!length) throw new Error( + 'Failed to construct ' + + name + + ': 1 argument required, but only 0 present.' + ); + } + + function mutationMacro(nodes) { + if (nodes.length === 1) { + return textNodeIfPrimitive(nodes[0]); + } + for (var + fragment = createDocumentFragment(), + list = slice.call(nodes), + i = 0; i < nodes.length; i++ + ) { + fragment.appendChild(textNodeIfPrimitive(list[i])); + } + return fragment; + } + + function textNodeIfPrimitive(node) { + return typeof node === 'object' ? node : document.createTextNode(node); + } + + for(var + head, + property, + TemporaryPrototype, + TemporaryTokenList, + wrapVerifyToken, + document = window.document, + hOP = Object.prototype.hasOwnProperty, + defineProperty = Object.defineProperty || function (object, property, descriptor) { + if (hOP.call(descriptor, 'value')) { + object[property] = descriptor.value; + } else { + if (hOP.call(descriptor, 'get')) + object.__defineGetter__(property, descriptor.get); + if (hOP.call(descriptor, 'set')) + object.__defineSetter__(property, descriptor.set); + } + return object; + }, + indexOf = [].indexOf || function indexOf(value){ + var length = this.length; + while(length--) { + if (this[length] === value) { + break; + } + } + return length; + }, + // http://www.w3.org/TR/domcore/#domtokenlist + verifyToken = function (token) { + if (!token) { + throw 'SyntaxError'; + } else if (spaces.test(token)) { + throw 'InvalidCharacterError'; + } + return token; + }, + DOMTokenList = function (node) { + var + noClassName = typeof node.className === 'undefined', + className = noClassName ? + (node.getAttribute('class') || '') : node.className, + isSVG = noClassName || typeof className === 'object', + value = (isSVG ? + (noClassName ? className : className.baseVal) : + className + ).replace(trim, '') + ; + if (value.length) { + properties.push.apply( + this, + value.split(spaces) + ); + } + this._isSVG = isSVG; + this._ = node; + }, + classListDescriptor = { + get: function get() { + return new DOMTokenList(this); + }, + set: function(){} + }, + trim = /^\s+|\s+$/g, + spaces = /\s+/, + SPACE = '\x20', + CLASS_LIST = 'classList', + toggle = function toggle(token, force) { + if (this.contains(token)) { + if (!force) { + // force is not true (either false or omitted) + this.remove(token); + } + } else if(force === undefined || force) { + force = true; + this.add(token); + } + return !!force; + }, + DocumentFragmentPrototype = window.DocumentFragment && DocumentFragment.prototype, + Node = window.Node, + NodePrototype = (Node || Element).prototype, + CharacterData = window.CharacterData || Node, + CharacterDataPrototype = CharacterData && CharacterData.prototype, + DocumentType = window.DocumentType, + DocumentTypePrototype = DocumentType && DocumentType.prototype, + ElementPrototype = (window.Element || Node || window.HTMLElement).prototype, + HTMLSelectElement = window.HTMLSelectElement || createElement('select').constructor, + selectRemove = HTMLSelectElement.prototype.remove, + SVGElement = window.SVGElement, + properties = [ + 'matches', ( + ElementPrototype.matchesSelector || + ElementPrototype.webkitMatchesSelector || + ElementPrototype.khtmlMatchesSelector || + ElementPrototype.mozMatchesSelector || + ElementPrototype.msMatchesSelector || + ElementPrototype.oMatchesSelector || + function matches(selector) { + var parentNode = this.parentNode; + return !!parentNode && -1 < indexOf.call( + parentNode.querySelectorAll(selector), + this + ); + } + ), + 'closest', function closest(selector) { + var parentNode = this, matches; + while ( + // document has no .matches + (matches = parentNode && parentNode.matches) && + !parentNode.matches(selector) + ) { + parentNode = parentNode.parentNode; + } + return matches ? parentNode : null; + }, + 'prepend', function prepend() { + var firstChild = this.firstChild, + node = mutationMacro(arguments); + if (firstChild) { + this.insertBefore(node, firstChild); + } else { + this.appendChild(node); + } + }, + 'append', function append() { + this.appendChild(mutationMacro(arguments)); + }, + 'before', function before() { + var parentNode = this.parentNode; + if (parentNode) { + parentNode.insertBefore( + mutationMacro(arguments), this + ); + } + }, + 'after', function after() { + var parentNode = this.parentNode, + nextSibling = this.nextSibling, + node = mutationMacro(arguments); + if (parentNode) { + if (nextSibling) { + parentNode.insertBefore(node, nextSibling); + } else { + parentNode.appendChild(node); + } + } + }, + // https://dom.spec.whatwg.org/#dom-element-toggleattribute + 'toggleAttribute', function toggleAttribute(name, force) { + var had = this.hasAttribute(name); + if (1 < arguments.length) { + if (had && !force) + this.removeAttribute(name); + else if (force && !had) + this.setAttribute(name, ""); + } + else if (had) + this.removeAttribute(name); + else + this.setAttribute(name, ""); + return this.hasAttribute(name); + }, + // WARNING - DEPRECATED - use .replaceWith() instead + 'replace', function replace() { + this.replaceWith.apply(this, arguments); + }, + 'replaceWith', function replaceWith() { + var parentNode = this.parentNode; + if (parentNode) { + parentNode.replaceChild( + mutationMacro(arguments), + this + ); + } + }, + 'remove', function remove() { + var parentNode = this.parentNode; + if (parentNode) { + parentNode.removeChild(this); + } + } + ], + slice = properties.slice, + i = properties.length; i; i -= 2 + ) { + property = properties[i - 2]; + if (!(property in ElementPrototype)) { + ElementPrototype[property] = properties[i - 1]; + } + // avoid unnecessary re-patch when the script is included + // gazillion times without any reason whatsoever + // https://github.com/WebReflection/dom4/pull/48 + if (property === 'remove' && !selectRemove._dom4) { + // see https://github.com/WebReflection/dom4/issues/19 + (HTMLSelectElement.prototype[property] = function () { + return 0 < arguments.length ? + selectRemove.apply(this, arguments) : + ElementPrototype.remove.call(this); + })._dom4 = true; + } + // see https://github.com/WebReflection/dom4/issues/18 + if (/^(?:before|after|replace|replaceWith|remove)$/.test(property)) { + if (CharacterData && !(property in CharacterDataPrototype)) { + CharacterDataPrototype[property] = properties[i - 1]; + } + if (DocumentType && !(property in DocumentTypePrototype)) { + DocumentTypePrototype[property] = properties[i - 1]; + } + } + // see https://github.com/WebReflection/dom4/pull/26 + if (/^(?:append|prepend)$/.test(property)) { + if (DocumentFragmentPrototype) { + if (!(property in DocumentFragmentPrototype)) { + DocumentFragmentPrototype[property] = properties[i - 1]; + } + } else { + try { + createDocumentFragment().constructor.prototype[property] = properties[i - 1]; + } catch(o_O) {} + } + } + } + + // most likely an IE9 only issue + // see https://github.com/WebReflection/dom4/issues/6 + if (!createElement('a').matches('a')) { + ElementPrototype[property] = function(matches){ + return function (selector) { + return matches.call( + this.parentNode ? + this : + createDocumentFragment().appendChild(this), + selector + ); + }; + }(ElementPrototype[property]); + } + + // used to fix both old webkit and SVG + DOMTokenList.prototype = { + length: 0, + add: function add() { + for(var j = 0, token; j < arguments.length; j++) { + token = arguments[j]; + if(!this.contains(token)) { + properties.push.call(this, property); + } + } + if (this._isSVG) { + this._.setAttribute('class', '' + this); + } else { + this._.className = '' + this; + } + }, + contains: (function(indexOf){ + return function contains(token) { + i = indexOf.call(this, property = verifyToken(token)); + return -1 < i; + }; + }([].indexOf || function (token) { + i = this.length; + while(i-- && this[i] !== token){} + return i; + })), + item: function item(i) { + return this[i] || null; + }, + remove: function remove() { + for(var j = 0, token; j < arguments.length; j++) { + token = arguments[j]; + if(this.contains(token)) { + properties.splice.call(this, i, 1); + } + } + if (this._isSVG) { + this._.setAttribute('class', '' + this); + } else { + this._.className = '' + this; + } + }, + toggle: toggle, + toString: function toString() { + return properties.join.call(this, SPACE); + } + }; + + if (SVGElement && !(CLASS_LIST in SVGElement.prototype)) { + defineProperty(SVGElement.prototype, CLASS_LIST, classListDescriptor); + } + + // http://www.w3.org/TR/dom/#domtokenlist + // iOS 5.1 has completely screwed this property + // classList in ElementPrototype is false + // but it's actually there as getter + if (!(CLASS_LIST in document.documentElement)) { + defineProperty(ElementPrototype, CLASS_LIST, classListDescriptor); + } else { + // iOS 5.1 and Nokia ASHA do not support multiple add or remove + // trying to detect and fix that in here + TemporaryTokenList = createElement('div')[CLASS_LIST]; + TemporaryTokenList.add('a', 'b', 'a'); + if ('a\x20b' != TemporaryTokenList) { + // no other way to reach original methods in iOS 5.1 + TemporaryPrototype = TemporaryTokenList.constructor.prototype; + if (!('add' in TemporaryPrototype)) { + // ASHA double fails in here + TemporaryPrototype = window.TemporaryTokenList.prototype; + } + wrapVerifyToken = function (original) { + return function () { + var i = 0; + while (i < arguments.length) { + original.call(this, arguments[i++]); + } + }; + }; + TemporaryPrototype.add = wrapVerifyToken(TemporaryPrototype.add); + TemporaryPrototype.remove = wrapVerifyToken(TemporaryPrototype.remove); + // toggle is broken too ^_^ ... let's fix it + TemporaryPrototype.toggle = toggle; + } + } + + if (!('contains' in NodePrototype)) { + defineProperty(NodePrototype, 'contains', { + value: function (el) { + while (el && el !== this) el = el.parentNode; + return this === el; + } + }); + } + + if (!('head' in document)) { + defineProperty(document, 'head', { + get: function () { + return head || ( + head = document.getElementsByTagName('head')[0] + ); + } + }); + } + + // requestAnimationFrame partial polyfill + (function () { + for (var + raf, + rAF = window.requestAnimationFrame, + cAF = window.cancelAnimationFrame, + prefixes = ['o', 'ms', 'moz', 'webkit'], + i = prefixes.length; + !cAF && i--; + ) { + rAF = rAF || window[prefixes[i] + 'RequestAnimationFrame']; + cAF = window[prefixes[i] + 'CancelAnimationFrame'] || + window[prefixes[i] + 'CancelRequestAnimationFrame']; + } + if (!cAF) { + // some FF apparently implemented rAF but no cAF + if (rAF) { + raf = rAF; + rAF = function (callback) { + var goOn = true; + raf(function () { + if (goOn) callback.apply(this, arguments); + }); + return function () { + goOn = false; + }; + }; + cAF = function (id) { + id(); + }; + } else { + rAF = function (callback) { + return setTimeout(callback, 15, 15); + }; + cAF = function (id) { + clearTimeout(id); + }; + } + } + window.requestAnimationFrame = rAF; + window.cancelAnimationFrame = cAF; + }()); + + // http://www.w3.org/TR/dom/#customevent + try{new window.CustomEvent('?');}catch(o_O){ + window.CustomEvent = function( + eventName, + defaultInitDict + ){ + + // the infamous substitute + function CustomEvent(type, eventInitDict) { + /*jshint eqnull:true */ + var event = document.createEvent(eventName); + if (typeof type != 'string') { + throw new Error('An event name must be provided'); + } + if (eventName == 'Event') { + event.initCustomEvent = initCustomEvent; + } + if (eventInitDict == null) { + eventInitDict = defaultInitDict; + } + event.initCustomEvent( + type, + eventInitDict.bubbles, + eventInitDict.cancelable, + eventInitDict.detail + ); + return event; + } + + // attached at runtime + function initCustomEvent( + type, bubbles, cancelable, detail + ) { + /*jshint validthis:true*/ + this.initEvent(type, bubbles, cancelable); + this.detail = detail; + } + + // that's it + return CustomEvent; + }( + // is this IE9 or IE10 ? + // where CustomEvent is there + // but not usable as construtor ? + window.CustomEvent ? + // use the CustomEvent interface in such case + 'CustomEvent' : 'Event', + // otherwise the common compatible one + { + bubbles: false, + cancelable: false, + detail: null + } + ); + } + + // window.Event as constructor + try { new Event('_'); } catch (o_O) { + /* jshint -W022 */ + o_O = (function ($Event) { + function Event(type, init) { + enoughArguments(arguments.length, 'Event'); + var out = document.createEvent('Event'); + if (!init) init = {}; + out.initEvent( + type, + !!init.bubbles, + !!init.cancelable + ); + return out; + } + Event.prototype = $Event.prototype; + return Event; + }(window.Event || function Event() {})); + defineProperty(window, 'Event', {value: o_O}); + // Android 4 gotcha + if (Event !== o_O) Event = o_O; + } + + // window.KeyboardEvent as constructor + try { new KeyboardEvent('_', {}); } catch (o_O) { + /* jshint -W022 */ + o_O = (function ($KeyboardEvent) { + // code inspired by https://gist.github.com/termi/4654819 + var + initType = 0, + defaults = { + char: '', + key: '', + location: 0, + ctrlKey: false, + shiftKey: false, + altKey: false, + metaKey: false, + altGraphKey: false, + repeat: false, + locale: navigator.language, + detail: 0, + bubbles: false, + cancelable: false, + keyCode: 0, + charCode: 0, + which: 0 + }, + eventType + ; + try { + var e = document.createEvent('KeyboardEvent'); + e.initKeyboardEvent( + 'keyup', false, false, window, '+', 3, + true, false, true, false, false + ); + initType = ( + (e.keyIdentifier || e.key) == '+' && + (e.keyLocation || e.location) == 3 + ) && ( + e.ctrlKey ? e.altKey ? 1 : 3 : e.shiftKey ? 2 : 4 + ) || 9; + } catch(o_O) {} + eventType = 0 < initType ? 'KeyboardEvent' : 'Event'; + + function getModifier(init) { + for (var + out = [], + keys = [ + 'ctrlKey', + 'Control', + 'shiftKey', + 'Shift', + 'altKey', + 'Alt', + 'metaKey', + 'Meta', + 'altGraphKey', + 'AltGraph' + ], + i = 0; i < keys.length; i += 2 + ) { + if (init[keys[i]]) + out.push(keys[i + 1]); + } + return out.join(' '); + } + + function withDefaults(target, source) { + for (var key in source) { + if ( + source.hasOwnProperty(key) && + !source.hasOwnProperty.call(target, key) + ) target[key] = source[key]; + } + return target; + } + + function withInitValues(key, out, init) { + try { + out[key] = init[key]; + } catch(o_O) {} + } + + function KeyboardEvent(type, init) { + enoughArguments(arguments.length, 'KeyboardEvent'); + init = withDefaults(init || {}, defaults); + var + out = document.createEvent(eventType), + ctrlKey = init.ctrlKey, + shiftKey = init.shiftKey, + altKey = init.altKey, + metaKey = init.metaKey, + altGraphKey = init.altGraphKey, + modifiers = initType > 3 ? getModifier(init) : null, + key = String(init.key), + chr = String(init.char), + location = init.location, + keyCode = init.keyCode || ( + (init.keyCode = key) && + key.charCodeAt(0) + ) || 0, + charCode = init.charCode || ( + (init.charCode = chr) && + chr.charCodeAt(0) + ) || 0, + bubbles = init.bubbles, + cancelable = init.cancelable, + repeat = init.repeat, + locale = init.locale, + view = init.view || window, + args + ; + if (!init.which) init.which = init.keyCode; + if ('initKeyEvent' in out) { + out.initKeyEvent( + type, bubbles, cancelable, view, + ctrlKey, altKey, shiftKey, metaKey, keyCode, charCode + ); + } else if (0 < initType && 'initKeyboardEvent' in out) { + args = [type, bubbles, cancelable, view]; + switch (initType) { + case 1: + args.push(key, location, ctrlKey, shiftKey, altKey, metaKey, altGraphKey); + break; + case 2: + args.push(ctrlKey, altKey, shiftKey, metaKey, keyCode, charCode); + break; + case 3: + args.push(key, location, ctrlKey, altKey, shiftKey, metaKey, altGraphKey); + break; + case 4: + args.push(key, location, modifiers, repeat, locale); + break; + default: + args.push(char, key, location, modifiers, repeat, locale); + } + out.initKeyboardEvent.apply(out, args); + } else { + out.initEvent(type, bubbles, cancelable); + } + for (key in out) { + if (defaults.hasOwnProperty(key) && out[key] !== init[key]) { + withInitValues(key, out, init); + } + } + return out; + } + KeyboardEvent.prototype = $KeyboardEvent.prototype; + return KeyboardEvent; + }(window.KeyboardEvent || function KeyboardEvent() {})); + defineProperty(window, 'KeyboardEvent', {value: o_O}); + // Android 4 gotcha + if (KeyboardEvent !== o_O) KeyboardEvent = o_O; + } + + // window.MouseEvent as constructor + try { new MouseEvent('_', {}); } catch (o_O) { + /* jshint -W022 */ + o_O = (function ($MouseEvent) { + function MouseEvent(type, init) { + enoughArguments(arguments.length, 'MouseEvent'); + var out = document.createEvent('MouseEvent'); + if (!init) init = {}; + out.initMouseEvent( + type, + !!init.bubbles, + !!init.cancelable, + init.view || window, + init.detail || 1, + init.screenX || 0, + init.screenY || 0, + init.clientX || 0, + init.clientY || 0, + !!init.ctrlKey, + !!init.altKey, + !!init.shiftKey, + !!init.metaKey, + init.button || 0, + init.relatedTarget || null + ); + return out; + } + MouseEvent.prototype = $MouseEvent.prototype; + return MouseEvent; + }(window.MouseEvent || function MouseEvent() {})); + defineProperty(window, 'MouseEvent', {value: o_O}); + // Android 4 gotcha + if (MouseEvent !== o_O) MouseEvent = o_O; + } + + if (!document.querySelectorAll('*').forEach) { + (function () { + function patch(what) { + var querySelectorAll = what.querySelectorAll; + what.querySelectorAll = function qSA(css) { + var result = querySelectorAll.call(this, css); + result.forEach = Array.prototype.forEach; + return result; + }; + } + patch(document); + patch(Element.prototype); + }()); + } + + try { + // https://drafts.csswg.org/selectors-4/#the-scope-pseudo + document.querySelector(':scope *'); + } catch(o_O) { + (function () { + var dataScope = 'data-scope-' + (Math.random() * 1e9 >>> 0); + var proto = Element.prototype; + var querySelector = proto.querySelector; + var querySelectorAll = proto.querySelectorAll; + proto.querySelector = function qS(css) { + return find(this, querySelector, css); + }; + proto.querySelectorAll = function qSA(css) { + return find(this, querySelectorAll, css); + }; + function find(node, method, css) { + node.setAttribute(dataScope, null); + var result = method.call( + node, + String(css).replace( + /(^|,\s*)(:scope([ >]|$))/g, + function ($0, $1, $2, $3) { + return $1 + '[' + dataScope + ']' + ($3 || ' '); + } + ) + ); + node.removeAttribute(dataScope); + return result; + } + }()); + } +}(window)); +(function (global){'use strict'; + + // a WeakMap fallback for DOM nodes only used as key + var DOMMap = global.WeakMap || (function () { + + var + counter = 0, + dispatched = false, + drop = false, + value + ; + + function dispatch(key, ce, shouldDrop) { + drop = shouldDrop; + dispatched = false; + value = undefined; + key.dispatchEvent(ce); + } + + function Handler(value) { + this.value = value; + } + + Handler.prototype.handleEvent = function handleEvent(e) { + dispatched = true; + if (drop) { + e.currentTarget.removeEventListener(e.type, this, false); + } else { + value = this.value; + } + }; + + function DOMMap() { + counter++; // make id clashing highly improbable + this.__ce__ = new Event(('@DOMMap:' + counter) + Math.random()); + } + + DOMMap.prototype = { + 'constructor': DOMMap, + 'delete': function del(key) { + return dispatch(key, this.__ce__, true), dispatched; + }, + 'get': function get(key) { + dispatch(key, this.__ce__, false); + var v = value; + value = undefined; + return v; + }, + 'has': function has(key) { + return dispatch(key, this.__ce__, false), dispatched; + }, + 'set': function set(key, value) { + dispatch(key, this.__ce__, true); + key.addEventListener(this.__ce__.type, new Handler(value), false); + return this; + }, + }; + + return DOMMap; + + }()); + + function Dict() {} + Dict.prototype = (Object.create || Object)(null); + + // https://dom.spec.whatwg.org/#interface-eventtarget + + function createEventListener(type, callback, options) { + function eventListener(e) { + if (eventListener.once) { + e.currentTarget.removeEventListener( + e.type, + callback, + eventListener + ); + eventListener.removed = true; + } + if (eventListener.passive) { + e.preventDefault = createEventListener.preventDefault; + } + if (typeof eventListener.callback === 'function') { + /* jshint validthis: true */ + eventListener.callback.call(this, e); + } else if (eventListener.callback) { + eventListener.callback.handleEvent(e); + } + if (eventListener.passive) { + delete e.preventDefault; + } + } + eventListener.type = type; + eventListener.callback = callback; + eventListener.capture = !!options.capture; + eventListener.passive = !!options.passive; + eventListener.once = !!options.once; + // currently pointless but specs say to use it, so ... + eventListener.removed = false; + return eventListener; + } + + createEventListener.preventDefault = function preventDefault() {}; + + var + Event = global.CustomEvent, + dE = global.dispatchEvent, + aEL = global.addEventListener, + rEL = global.removeEventListener, + counter = 0, + increment = function () { counter++; }, + indexOf = [].indexOf || function indexOf(value){ + var length = this.length; + while(length--) { + if (this[length] === value) { + break; + } + } + return length; + }, + getListenerKey = function (options) { + return ''.concat( + options.capture ? '1' : '0', + options.passive ? '1' : '0', + options.once ? '1' : '0' + ); + }, + augment + ; + + try { + aEL('_', increment, {once: true}); + dE(new Event('_')); + dE(new Event('_')); + rEL('_', increment, {once: true}); + } catch(o_O) {} + + if (counter !== 1) { + (function () { + var dm = new DOMMap(); + function createAEL(aEL) { + return function addEventListener(type, handler, options) { + if (options && typeof options !== 'boolean') { + var + info = dm.get(this), + key = getListenerKey(options), + i, tmp, wrap + ; + if (!info) dm.set(this, (info = new Dict())); + if (!(type in info)) info[type] = { + handler: [], + wrap: [] + }; + tmp = info[type]; + i = indexOf.call(tmp.handler, handler); + if (i < 0) { + i = tmp.handler.push(handler) - 1; + tmp.wrap[i] = (wrap = new Dict()); + } else { + wrap = tmp.wrap[i]; + } + if (!(key in wrap)) { + wrap[key] = createEventListener(type, handler, options); + aEL.call(this, type, wrap[key], wrap[key].capture); + } + } else { + aEL.call(this, type, handler, options); + } + }; + } + function createREL(rEL) { + return function removeEventListener(type, handler, options) { + if (options && typeof options !== 'boolean') { + var + info = dm.get(this), + key, i, tmp, wrap + ; + if (info && (type in info)) { + tmp = info[type]; + i = indexOf.call(tmp.handler, handler); + if (-1 < i) { + key = getListenerKey(options); + wrap = tmp.wrap[i]; + if (key in wrap) { + rEL.call(this, type, wrap[key], wrap[key].capture); + delete wrap[key]; + // return if there are other wraps + for (key in wrap) return; + // otherwise remove all the things + tmp.handler.splice(i, 1); + tmp.wrap.splice(i, 1); + // if there are no other handlers + if (tmp.handler.length === 0) + // drop the info[type] entirely + delete info[type]; + } + } + } + } else { + rEL.call(this, type, handler, options); + } + }; + } + + augment = function (Constructor) { + if (!Constructor) return; + var proto = Constructor.prototype; + proto.addEventListener = createAEL(proto.addEventListener); + proto.removeEventListener = createREL(proto.removeEventListener); + }; + + if (global.EventTarget) { + augment(EventTarget); + } else { + augment(global.Text); + augment(global.Element || global.HTMLElement); + augment(global.HTMLDocument); + augment(global.Window || {prototype:global}); + augment(global.XMLHttpRequest); + } + + }()); + } + +}(self)); diff --git a/tgui-next/packages/tgui/public/shim-html5shiv.js b/tgui-next/packages/tgui/public/shim-html5shiv.js new file mode 100644 index 00000000000..6027449ccbc --- /dev/null +++ b/tgui-next/packages/tgui/public/shim-html5shiv.js @@ -0,0 +1,329 @@ +/** + * HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem + * MIT/GPL2 Licensed + */ + +/* eslint-disable */ +;(function(window, document) { +/*jshint evil:true */ + /** version */ + var version = '3.7.3'; + + /** Preset options */ + var options = window.html5 || {}; + + /** Used to skip problem elements */ + var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i; + + /** Not all elements can be cloned in IE **/ + var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i; + + /** Detect whether the browser supports default html5 styles */ + var supportsHtml5Styles; + + /** Name of the expando, to work with multiple documents or to re-shiv one document */ + var expando = '_html5shiv'; + + /** The id for the the documents expando */ + var expanID = 0; + + /** Cached data for each document */ + var expandoData = {}; + + /** Detect whether the browser supports unknown elements */ + var supportsUnknownElements; + + (function() { + try { + var a = document.createElement('a'); + a.innerHTML = ''; + //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles + supportsHtml5Styles = ('hidden' in a); + + supportsUnknownElements = a.childNodes.length == 1 || (function() { + // assign a false positive if unable to shiv + (document.createElement)('a'); + var frag = document.createDocumentFragment(); + return ( + typeof frag.cloneNode == 'undefined' || + typeof frag.createDocumentFragment == 'undefined' || + typeof frag.createElement == 'undefined' + ); + }()); + } catch(e) { + // assign a false positive if detection fails => unable to shiv + supportsHtml5Styles = true; + supportsUnknownElements = true; + } + + }()); + + /*--------------------------------------------------------------------------*/ + + /** + * Creates a style sheet with the given CSS text and adds it to the document. + * @private + * @param {Document} ownerDocument The document. + * @param {String} cssText The CSS text. + * @returns {StyleSheet} The style element. + */ + function addStyleSheet(ownerDocument, cssText) { + var p = ownerDocument.createElement('p'), + parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement; + + p.innerHTML = 'x'; + return parent.insertBefore(p.lastChild, parent.firstChild); + } + + /** + * Returns the value of `html5.elements` as an array. + * @private + * @returns {Array} An array of shived element node names. + */ + function getElements() { + var elements = html5.elements; + return typeof elements == 'string' ? elements.split(' ') : elements; + } + + /** + * Extends the built-in list of html5 elements + * @memberOf html5 + * @param {String|Array} newElements whitespace separated list or array of new element names to shiv + * @param {Document} ownerDocument The context document. + */ + function addElements(newElements, ownerDocument) { + var elements = html5.elements; + if(typeof elements != 'string'){ + elements = elements.join(' '); + } + if(typeof newElements != 'string'){ + newElements = newElements.join(' '); + } + html5.elements = elements +' '+ newElements; + shivDocument(ownerDocument); + } + + /** + * Returns the data associated to the given document + * @private + * @param {Document} ownerDocument The document. + * @returns {Object} An object of data. + */ + function getExpandoData(ownerDocument) { + var data = expandoData[ownerDocument[expando]]; + if (!data) { + data = {}; + expanID++; + ownerDocument[expando] = expanID; + expandoData[expanID] = data; + } + return data; + } + + /** + * returns a shived element for the given nodeName and document + * @memberOf html5 + * @param {String} nodeName name of the element + * @param {Document|DocumentFragment} ownerDocument The context document. + * @returns {Object} The shived element. + */ + function createElement(nodeName, ownerDocument, data){ + if (!ownerDocument) { + ownerDocument = document; + } + if(supportsUnknownElements){ + return ownerDocument.createElement(nodeName); + } + if (!data) { + data = getExpandoData(ownerDocument); + } + var node; + + if (data.cache[nodeName]) { + node = data.cache[nodeName].cloneNode(); + } else if (saveClones.test(nodeName)) { + node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode(); + } else { + node = data.createElem(nodeName); + } + + // Avoid adding some elements to fragments in IE < 9 because + // * Attributes like `name` or `type` cannot be set/changed once an element + // is inserted into a document/fragment + // * Link elements with `src` attributes that are inaccessible, as with + // a 403 response, will cause the tab/window to crash + // * Script elements appended to fragments will execute when their `src` + // or `text` property is set + return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node; + } + + /** + * returns a shived DocumentFragment for the given document + * @memberOf html5 + * @param {Document} ownerDocument The context document. + * @returns {Object} The shived DocumentFragment. + */ + function createDocumentFragment(ownerDocument, data){ + if (!ownerDocument) { + ownerDocument = document; + } + if(supportsUnknownElements){ + return ownerDocument.createDocumentFragment(); + } + data = data || getExpandoData(ownerDocument); + var clone = data.frag.cloneNode(), + i = 0, + elems = getElements(), + l = elems.length; + for(;i + + + + + + + + + + + + + + + + +
+
+ Loading...
+
+
+ + + + + + + + + diff --git a/tgui-next/packages/tgui/public/tgui-main.html b/tgui-next/packages/tgui/public/tgui-main.html new file mode 100644 index 00000000000..2d341cff95b --- /dev/null +++ b/tgui-next/packages/tgui/public/tgui-main.html @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + diff --git a/tgui-next/packages/tgui/routes.js b/tgui-next/packages/tgui/routes.js new file mode 100644 index 00000000000..9d356f9d151 --- /dev/null +++ b/tgui-next/packages/tgui/routes.js @@ -0,0 +1,126 @@ +import { Acclimator } from './interfaces/Acclimator'; +import { AiAirlock } from './interfaces/AiAirlock'; +import { AirAlarm } from './interfaces/AirAlarm'; +import { AirlockElectronics } from './interfaces/AirlockElectronics'; +import { APC } from './interfaces/APC'; +import { AtmosAlertConsole } from './interfaces/AtmosAlertConsole'; +import { AtmosControlConsole } from './interfaces/AtmosControlConsole'; +import { AtmosFilter } from './interfaces/AtmosFilter'; +import { AtmosMixer } from './interfaces/AtmosMixer'; +import { AtmosPump } from './interfaces/AtmosPump'; +import { BorgPanel } from './interfaces/BorgPanel'; +import { BrigTimer } from './interfaces/BrigTimer'; +import { BSA } from './interfaces/BSA'; +import { Canister } from './interfaces/Canister'; +import { Cargo } from './interfaces/Cargo'; +import { CellularEmporium } from './interfaces/CellularEmporium'; +import { CentcomPodlauncher } from './interfaces/CentcomPodlauncher'; +import { ChemDispenser } from './interfaces/ChemDispenser'; +import { Crayon } from './interfaces/Crayon'; +import { DisposalUnit } from './interfaces/DisposalUnit'; +import { KitchenSink } from './interfaces/KitchenSink'; +import { ThermoMachine } from './interfaces/ThermoMachine'; +import { Wires } from './interfaces/Wires'; + +const ROUTES = { + airalarm: { + component: () => AirAlarm, + scrollable: true, + }, + acclimator: { + component: () => Acclimator, + scrollable: false, + }, + ai_airlock: { + component: () => AiAirlock, + scrollable: false, + }, + canister: { + component: () => Canister, + scrollable: false, + }, + airlock_electronics: { + component: () => AirlockElectronics, + scrollable: false, + }, + apc: { + component: () => APC, + scrollable: false, + }, + atmos_alert: { + component: () => AtmosAlertConsole, + scrollable: true, + }, + atmos_control: { + component: () => AtmosControlConsole, + scrollable: true, + }, + atmos_filter: { + component: () => AtmosFilter, + scrollable: false, + }, + atmos_mixer: { + component: () => AtmosMixer, + scrollable: false, + }, + atmos_pump: { + component: () => AtmosPump, + scrollable: false, + }, + borgopanel: { + component: () => BorgPanel, + scrollable: true, + }, + brig_timer: { + component: () => BrigTimer, + scrollable: false, + }, + bsa: { + component: () => BSA, + scrollable: false, + }, + cargo: { + component: () => Cargo, + scrollable: true, + }, + cellular_emporium: { + component: () => CellularEmporium, + scrollable: true, + }, + centcom_podlauncher: { + component: () => CentcomPodlauncher, + scrollable: false, + }, + chem_dispenser: { + component: () => ChemDispenser, + scrollable: true, + }, + thermomachine: { + component: () => ThermoMachine, + scrollable: false, + }, + crayon: { + component: () => Crayon, + scrollable: true, + }, + disposal_unit: { + component: () => DisposalUnit, + scrollable: false, + }, + wires: { + component: () => Wires, + scrollable: false, + }, +}; + +export const getRoute = state => { + // Show a kitchen sink + if (state.showKitchenSink) { + return { + component: () => KitchenSink, + scrollable: true, + }; + } + // Refer to the routing table + return ROUTES[state.config && state.config.interface]; +}; diff --git a/tgui-next/packages/tgui/store.js b/tgui-next/packages/tgui/store.js new file mode 100644 index 00000000000..5d4afbf82b2 --- /dev/null +++ b/tgui-next/packages/tgui/store.js @@ -0,0 +1,30 @@ +import { flow } from 'common/fp'; +import { applyMiddleware, createStore as createReduxStore } from 'common/redux'; +import { backendReducer } from './backend'; +import { toastReducer } from './components/Toast'; +import { hotKeyMiddleware, hotKeyReducer } from './hotkeys'; +import { createLogger } from './logging'; + +const logger = createLogger('store'); + +// const loggingMiddleware = store => next => action => { +// const { type, payload } = action; +// logger.log('dispatching', type); +// next(action); +// }; + +export const createStore = () => { + const reducer = flow([ + // State initializer + (state = {}, action) => state, + // Global state reducers + backendReducer, + toastReducer, + hotKeyReducer, + ]); + const middleware = [ + // loggingMiddleware, + hotKeyMiddleware, + ]; + return createReduxStore(reducer, applyMiddleware(...middleware)); +}; diff --git a/tgui-next/packages/tgui/styles/atomic.scss b/tgui-next/packages/tgui/styles/atomic.scss new file mode 100644 index 00000000000..6d3e30427b9 --- /dev/null +++ b/tgui-next/packages/tgui/styles/atomic.scss @@ -0,0 +1,4 @@ +// Atomic classes +@import './atomic/candystripe.scss'; +@import './atomic/color.scss'; +@import './atomic/text.scss'; diff --git a/tgui-next/packages/tgui/styles/atomic/candystripe.scss b/tgui-next/packages/tgui/styles/atomic/candystripe.scss new file mode 100644 index 00000000000..ad3e95b4d4c --- /dev/null +++ b/tgui-next/packages/tgui/styles/atomic/candystripe.scss @@ -0,0 +1,3 @@ +.candystripe:nth-child(odd) { + background-color: $section-color-candystripe; +} diff --git a/tgui-next/packages/tgui/styles/atomic/color.scss b/tgui-next/packages/tgui/styles/atomic/color.scss new file mode 100644 index 00000000000..7ea7ef09a3a --- /dev/null +++ b/tgui-next/packages/tgui/styles/atomic/color.scss @@ -0,0 +1,5 @@ +@each $color-name, $color-value in $color-map { + .color-#{$color-name} { + color: $color-value !important; + } +} diff --git a/tgui-next/packages/tgui/styles/atomic/text.scss b/tgui-next/packages/tgui/styles/atomic/text.scss new file mode 100644 index 00000000000..a1a967bca9c --- /dev/null +++ b/tgui-next/packages/tgui/styles/atomic/text.scss @@ -0,0 +1,27 @@ +.text-left { + text-align: left; +} + +.text-center { + text-align: center; +} + +.text-right { + text-align: right; +} + +.text-bold { + font-weight: bold; +} + +.text-italic { + font-style: italic; +} + +.text-big { + font-size: 125%; +} + +.text-small { + font-size: 75%; +} diff --git a/tgui-next/packages/tgui/styles/color-map.scss b/tgui-next/packages/tgui/styles/color-map.scss new file mode 100644 index 00000000000..7ee6b1242af --- /dev/null +++ b/tgui-next/packages/tgui/styles/color-map.scss @@ -0,0 +1,39 @@ +// Mapping of color names +$color-map: ( + 'white': $white, + 'pink': $pink, + 'pale-red': $pale-red, + 'crimson': $crimson, + 'red': $red, + 'dark-red': $dark-red, + 'magenta': $magenta, + 'yellow': $yellow, + 'yellow-orange': $yellow-orange, + 'bright-yellow': $bright-yellow, + 'orange': $orange, + 'gold': $gold, + 'brown': $brown, + 'pale-green': $pale-green, + 'green': $green, + 'grass-green': $grass-green, + 'dark-green': $dark-green, + 'violet': $violet, + 'purple': $purple, + 'blue': $blue, + 'cyan': $cyan, + 'royal-blue': $royal-blue, + 'pale-blue': $pale-blue, + 'black': $black, + 'black-gray': $black-gray, + 'dark-gray': $dark-gray, + 'gray': $gray, + 'grey': $grey, + 'silver': $silver, + 'light-gray': $light-gray, + 'normal': $color-normal, + 'good': $color-good, + 'average': $color-average, + 'bad': $color-bad, + 'highlight': $color-highlight, + 'label': $pale-blue, +); diff --git a/tgui-next/packages/tgui/styles/components.scss b/tgui-next/packages/tgui/styles/components.scss new file mode 100644 index 00000000000..cae0fefa8fc --- /dev/null +++ b/tgui-next/packages/tgui/styles/components.scss @@ -0,0 +1,11 @@ +// Components +@import '../components/Button.scss'; +@import '../components/Flex.scss'; +@import '../components/LabeledList.scss'; +@import '../components/Layout.scss'; +@import '../components/NoticeBox.scss'; +@import '../components/ProgressBar.scss'; +@import '../components/Section.scss'; +@import '../components/Tabs.scss'; +@import '../components/TitleBar.scss'; +@import '../components/Tooltip.scss'; diff --git a/tgui-next/packages/tgui/styles/functions.scss b/tgui-next/packages/tgui/styles/functions.scss new file mode 100644 index 00000000000..2d097512779 --- /dev/null +++ b/tgui-next/packages/tgui/styles/functions.scss @@ -0,0 +1,136 @@ +/** + * Copyright (c) 2018 Aleksej Komarov + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +// Type-casting +// -------------------------------------------------------- + +// Get a unit-less numeric value +@function num($value) { + @if type-of($value) != number { + @error 'Could not convert `#{$value}` - must be `type-of number`'; + @return null; + } + @if unit($value) == '%' { + @return $value / 100%; + } + @return $value / ($value * 0 + 1); +} + + +// Color +// -------------------------------------------------------- + +// Increases the lightness component of the color relative to +// its current lightness. +@function lighten($color, $percent) { + @return hsl( + hue($color), + saturation($color), + lightness($color) * (1 + num($percent))); +} + +// Decreases the lightness component of the color relative to +// its current lightness. +@function darken($color, $percent) { + @return hsl( + hue($color), + saturation($color), + lightness($color) * (1 - num($percent))); +} + +// Returns the NTSC luminance of `$color` as a float (between 0 and 1). +// 1 is pure white, 0 is pure black. +@function luminance($color) { + $colors: ( + 'red': red($color), + 'green': green($color), + 'blue': blue($color) + ); + + @each $name, $value in $colors { + $adjusted: 0; + $value: $value / 255; + @if $value < 0.03928 { + $value: $value / 12.92; + } + @else { + $value: ($value + .055) / 1.055; + $value: math-pow($value, 2.4); + } + $colors: map-merge($colors, ($name: $value)); + } + + @return (map-get($colors, 'red') * .2126) + + (map-get($colors, 'green') * .7152) + + (map-get($colors, 'blue') * .0722); +} + + +// Power function polyfill +// -------------------------------------------------------- + +@function math-pow($number, $exp) { + @if (round($exp) != $exp) { + @return math-exp($exp * math-ln($number)); + } + // Traditional method for integers + $value: 1; + @if $exp > 0 { + @for $i from 1 through $exp { + $value: $value * $number; + } + } + @else if $exp < 0 { + @for $i from 1 through -$exp { + $value: $value / $number; + } + } + @return $value; +} + +@function math-factorial($value) { + @if $value == 0 { + @return 1; + } + $result: 1; + @for $index from 1 through $value { + $result: $result * $index; + } + @return $result; +} + +@function math-summation($iteratee, $input, $initial: 0, $limit: 100) { + $sum: 0; + @for $index from $initial to $limit { + $sum: $sum + call(get-function($iteratee), $input, $index); + } + @return $sum; +} + +@function math-exp-maclaurin($x, $n) { + $result: math-pow($x, $n) / math-factorial($n); + @return $result; +} + +@function math-exp($value) { + $result: math-summation(math-exp-maclaurin, $value, 0, 100); + @return $result; +} + +@function math-ln-maclaurin($x, $n) { + $result: (math-pow(-1, $n + 1) / $n) * (math-pow($x - 1, $n)); + @return $result; +} + +@function math-ln($value) { + $ten-exp: 1; + $ln-ten: 2.30258509; + @while ($value > math-pow(10, $ten-exp)) { + $ten-exp: $ten-exp + 1; + } + $value: $value / math-pow(10, $ten-exp); + $result: math-summation(math-ln-maclaurin, $value, 1, 100); + @return $result + $ten-exp * $ln-ten; +} diff --git a/tgui-next/packages/tgui/styles/main.scss b/tgui-next/packages/tgui/styles/main.scss new file mode 100644 index 00000000000..123ad5f24a5 --- /dev/null +++ b/tgui-next/packages/tgui/styles/main.scss @@ -0,0 +1,41 @@ +// Core styles +@import './functions.scss'; +@import './variables.scss'; +@import './reset.scss'; + +// Themable styles +@import './color-map.scss'; +@import './atomic.scss'; +@import './components.scss'; + +// Miscellaneous bits +body { + color: $text-color-normal; + background-color: $background-color-start; + background-image: linear-gradient(to bottom, + $background-color-start 0%, + $background-color-end 100%); +} + +.Layout__content { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1.0' viewBox='0 0 425 200' opacity='.3'%3E%3Cpath d='M178 0h-71a7 6 0 00-7 6v188a7 6 0 007 6h53a7 6 0 007-6V92l72 105a7 6 0 006 3h73a7 6 0 007-6V6a7 6 0 00-7-6h-55a7 6 0 00-6 6v103L184 3a7 6 0 00-6-3zM5 22a13 13 0 018-22h67a5 5 0 015 5v80zM420 178a13 13 0 01-8 22h-67a5 5 0 01-5-5v-80z'/%3E%3C/svg%3E"); + background-size: 70%; + background-position: center; + background-repeat: no-repeat; +} + +// Syndicate theme +.theme-syndicate { + @import './themes/syndicate.scss'; + @import './color-map.scss'; + @import './atomic.scss'; + @import './components.scss'; +} + +// Clockwork theme +.theme-clockwork { + @import './themes/clockwork.scss'; + @import './color-map.scss'; + @import './atomic.scss'; + @import './components.scss'; +} diff --git a/tgui-next/packages/tgui/styles/reset.scss b/tgui-next/packages/tgui/styles/reset.scss new file mode 100644 index 00000000000..88c0cc82521 --- /dev/null +++ b/tgui-next/packages/tgui/styles/reset.scss @@ -0,0 +1,47 @@ +html, body { + box-sizing: border-box; + height: 100%; + margin: 0; +} + +html { + overflow: hidden; + cursor: default; // Reset the cursor. +} + +body { + overflow: auto; + font-family: Verdana, Geneva, sans-serif; + font-size: 12px; +} + +*, *:before, *:after { + box-sizing: inherit; +} + +h1, h2, h3, h4, h5, h6 { + display: block; + margin: 0; + padding: 6px 0; +} + +h1 { + font-size: 18px; +} + +h2 { + font-size: 16px; +} + +h3 { + font-size: 14px; +} + +h4 { + font-size: 12px; +} + +td, th { + vertical-align: baseline; + text-align: left; +} diff --git a/tgui-next/packages/tgui/styles/themes/clockwork.scss b/tgui-next/packages/tgui/styles/themes/clockwork.scss new file mode 100644 index 00000000000..39afbe69734 --- /dev/null +++ b/tgui-next/packages/tgui/styles/themes/clockwork.scss @@ -0,0 +1,56 @@ +$color-normal: #B18B25; +$color-good: #CFBA47; +$color-average: #896B19; +$color-bad: #5F380E; +$color-highlight: #B18B25; +$text-color-normal: #B18B25; +$text-color-inverse: #2D1400; +$background-color-start: #B18B25; +$background-color-end: #5F380E; +$rule-color-normal: #B18B25; +$rule-color-dark: #896B19; +$titlebar-color-text: #CFBA47; +$titlebar-color-button: #CFBA47; +$titlebar-color-background: #5F380E; +$titlebar-color-coreshadow: #170800; +$titlebar-color-shadow: rgba(#000, 0.1); +$resize-color: #5F380E; +$display-color-title: #CFBA47; +$display-color-background: rgba(#2D1400, 0.9); +$display-color-shadow: rgba(#000, 0.3); +$notice-color-first: #000000; +$notice-color-second: #170800; +$section-color-label: #B18B25; +$bar-color-normal: #B18B25; +$bar-color-good: #CFBA47; +$bar-color-average: #896B19; +$bar-color-bad: #5F380E; +$bar-color-border: #170800; +$bar-color-background: #2D1400; +$button-color-normal: #5F380E; +$button-color-disabled: #2D1400; +$button-color-selected: #CFBA47; +$button-color-caution: $yellow-orange; +$button-color-danger: $yellow; +$button-color-border: #170800; +$button-lighten-hover: 5%; +$input-color-text: #B18B25; +$input-color-background: #CFBA47; +$tooltip-color-border: #170800; +$tooltip-color-background: #2D1400; + +// Body style +@at-root #{selector-unify(&, body)} { + color: $text-color-normal; + background-color: $background-color-start; + background-image: linear-gradient(to bottom, + $background-color-start 0%, + $background-color-end 100%); +} + +.Layout__content { + background-image: none; + background-size: 70%; + background-position: center; + background-repeat: no-repeat; +} diff --git a/tgui-next/packages/tgui/styles/themes/syndicate.scss b/tgui-next/packages/tgui/styles/themes/syndicate.scss new file mode 100644 index 00000000000..731c67b7005 --- /dev/null +++ b/tgui-next/packages/tgui/styles/themes/syndicate.scss @@ -0,0 +1,40 @@ +$color-good: $pale-green; +$color-highlight: $black; +$background-color-start: #750000; +$background-color-end: #340404; +$rule-color-normal: $dark-gray; +$titlebar-color-background: #910101; +$titlebar-color-text: $pale-red; +$titlebar-color-button: $pale-red; +$display-color-background: rgba(#000, 0.33); +$display-color-shadow: rgba(#000, 0.5); +$notice-color-first: #750000; +$notice-color-second: #910101; +$section-color-label: $white; +$bar-color-normal: $black; +$bar-color-good: $pale-green; +$bar-color-border: $black; +$button-color-normal: $dark-green; +$button-color-disabled: $gray; +$button-color-selected: $dark-red; +$button-color-caution: $yellow-orange; +$button-color-danger: $yellow; +$input-color-text: $white; +$input-color-background: $dark-red; +$rule-color-normal: rgba(#000, 0.25); + +// Body style +@at-root #{selector-unify(&, body)} { + color: $text-color-normal; + background-color: $background-color-start; + background-image: linear-gradient(to bottom, + $background-color-start 0%, + $background-color-end 100%); +} + +.Layout__content { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1.0' viewBox='0 0 200 289.7' opacity='.3'%3E%3Cpath d='M94 0C75 0 59 3 45 9c-14 7-24 15-32 27C6 47 3 61 3 76c0 11 3 21 8 30 6 9 14 17 25 25 12 7 27 15 46 23 20 8 35 16 45 22s17 13 21 20 6 16 6 26c0 16-5 28-15 37-11 8-25 12-45 12-14 0-25-1-34-4-9-4-16-9-22-16-5-7-10-17-13-29H0v57c34 7 64 11 90 11 16 0 30-2 44-4 13-3 25-8 34-14 10-6 18-15 23-25 6-10 8-22 8-36 0-13-3-25-9-35-7-9-16-18-28-26-11-7-28-15-49-24-17-8-31-14-39-20-9-6-19-12-25-19-5-6-9-15-9-25 0-9 2-17 6-23 11-15 41-2 45 24 5 7 9 16 12 28h21V35c-5-6-10-10-16-14l4 2c7 2 13 7 17 14 5 6 9 16 12 28h9c0 7-2 10-4 13-3 3-5 6-4 13 1 8 10 10 14 9l-5-2s2 1 6-1c-4 1-11-1-12-7-1-5 1-7 3-10 3-4 6-7 5-15h9V9a280 280 0 00-68-9zm70 17v41l3 3c5 6 9 16 12 28h21V33c-7-4-20-10-36-16zm-28 6l8 18c-12-7-14-10-8-18zm23 0c2 8 1 11-5 18l5-18zm15 24l8 18c-12-7-14-10-8-18zm23 0c2 8 1 11-5 18l5-18zM97 49l9 18c-12-7-14-10-9-18zm23 0c3 8 2 11-4 18l4-18z'/%3E%3C/svg%3E"); + background-size: 70%; + background-position: center; + background-repeat: no-repeat; +} diff --git a/tgui-next/packages/tgui/styles/variables.scss b/tgui-next/packages/tgui/styles/variables.scss new file mode 100644 index 00000000000..56dfde4ce8f --- /dev/null +++ b/tgui-next/packages/tgui/styles/variables.scss @@ -0,0 +1,104 @@ +// Base colors +$white: #ffffff; +$pink: #ffc0cb; +$pale-red: #e74242; +$crimson: #dc143c; +$red: #b00e0e; +$dark-red: #9d0808; +$magenta: #ff00ff; +$yellow: #9a9d00; +$bright-yellow: lighten($yellow, 50%); +$yellow-orange: #be6209; +$orange: #ffa500; +$gold: #fdd700; +$brown: #a52a2a; +$pale-green: #73e573; +$green: #2f943c; +$grass-green: #537d29; +$dark-green: #397439; +$violet: #ee82ee; +$purple: #800080; +$blue: #0000ff; +$cyan: #00ffff; +$royal-blue: #40628a; +$pale-blue: #8ba5c4; +$black: #000000; +$black-gray: #161616; +$dark-gray: #272727; +$gray: #363636; +// i'm sorry these are different, grey is used for some uis like wire +$grey: #808080; +$silver: #c0c0c0; +$light-gray: #999999; + +// Branding Colors +$color-normal: $royal-blue; +$color-good: $grass-green; +$color-average: $yellow-orange; +$color-bad: $red; +$color-highlight: $pale-blue; + +// Text +$text-color-normal: $white; +$text-color-inverse: $black; + +// Background +$background-color-start: #2a2a2a; +$background-color-end: #202020; + +// Rules (
etc) +$rule-color-normal: $royal-blue; +$rule-color-dark: $dark-gray; +$rule-size: 2px; + +// Titlebar +$titlebar-color-text: $pale-blue; +$titlebar-color-button: $pale-blue; +$titlebar-color-background: $gray; +$titlebar-color-coreshadow: $black-gray; +$titlebar-color-shadow: rgba(#000, 0.1); + +// Resize +$resize-color: $gray; + +// Display +$display-color-title: $white; +$display-color-background: rgba(#000, 0.33); +$display-color-shadow: rgba(#000, 0.5); + +// Notice +$notice-color-first: #bb9b68; +$notice-color-second: #b1905d; +$notice-color-border: $dark-gray; + +// Section +$section-color-label: $pale-blue; +$section-color-candystripe: rgba(#000, 0.25); + +// Bar +$bar-color-normal: $color-normal; +$bar-color-good: $color-good; +$bar-color-average: $color-average; +$bar-color-bad: $color-bad; +$bar-color-border: $royal-blue; +$bar-color-background: $dark-gray; + +// Buttons +$button-color-normal: $royal-blue; +$button-color-disabled: $light-gray; +$button-color-selected: $green; +$button-color-caution: $yellow; +$button-color-danger: $dark-red; +$button-color-border: $dark-gray; +$button-lighten-hover: 15%; +$button-desaturate-inactive: 50%; + +// Input +$input-color-text: $black; +$input-color-placeholder: $light-gray; +$input-color-border: $dark-gray; +$input-color-background: $white; + +// Tooltips +$tooltip-color-border: $dark-gray; +$tooltip-color-background: $gray; diff --git a/tgui-next/packages/tgui/webpack.config.js b/tgui-next/packages/tgui/webpack.config.js new file mode 100644 index 00000000000..ff3fb79cded --- /dev/null +++ b/tgui-next/packages/tgui/webpack.config.js @@ -0,0 +1,222 @@ +const webpack = require('webpack'); +const path = require('path'); +const BuildNotifierPlugin = require('webpack-build-notifier'); +const ExtractCssChunks = require('extract-css-chunks-webpack-plugin'); + +module.exports = (env = {}, argv) => { + const config = { + mode: argv.mode === 'production' ? 'production' : 'development', + context: __dirname, + entry: { + tgui: [ + path.resolve(__dirname, './styles/main.scss'), + path.resolve(__dirname, './index.js'), + ], + }, + output: { + path: path.resolve(__dirname, './public/bundles'), + filename: '[name].bundle.js', + chunkFilename: '[name].chunk.js', + }, + resolve: { + extensions: ['.mjs', '.js', '.jsx'], + alias: {}, + }, + module: { + rules: [ + { + test: /\.m?jsx?$/, + // exclude: /node_modules/, + use: [ + { + loader: 'babel-loader', + options: { + presets: [ + ['@babel/preset-env', { + modules: 'commonjs', + useBuiltIns: 'entry', + corejs: '3', + spec: false, + loose: true, + targets: { + ie: '8', + }, + }], + ], + plugins: [ + '@babel/plugin-transform-jscript', + 'babel-plugin-inferno', + ], + }, + }, + ], + }, + { + test: /\.scss$/, + use: [ + { + loader: ExtractCssChunks.loader, + options: { + hot: argv.hot, + }, + }, + { + loader: 'css-loader', + options: { + url: false, + }, + }, + { + loader: 'sass-loader', + options: {}, + }, + ], + }, + { + test: /\.css$/, + use: [ + { + loader: ExtractCssChunks.loader, + options: { + hot: argv.hot, + }, + }, + { + loader: 'css-loader', + options: { + url: false, + }, + }, + ], + }, + { + test: /\.(png|jpg|gif|ico)$/, + use: [ + { + loader: 'file-loader', + options: { + name: 'images/[name].[ext]', + }, + }, + ], + }, + { + test: /\.(ttf|woff|woff2|eot|svg)$/, + use: [ + { + loader: 'file-loader', + options: { + name: 'fonts/[name].[ext]', + }, + }, + ], + }, + ], + }, + optimization: { + noEmitOnErrors: true, + // splitChunks: { + // cacheGroups: { + // commons: { + // test: /[\\/]node_modules[\\/]/, + // name: 'vendor', + // chunks: 'all', + // }, + // }, + // }, + }, + performance: { + hints: false, + }, + // Unfortunately, source maps don't work with BYOND's IE. + devtool: false, + plugins: [ + new webpack.EnvironmentPlugin({ + NODE_ENV: env.NODE_ENV || argv.mode || 'development', + WEBPACK_HMR_ENABLED: env.WEBPACK_HMR_ENABLED || argv.hot || false, + }), + new ExtractCssChunks({ + filename: '[name].bundle.css', + chunkFilename: '[name].chunk.css', + orderWarning: true, + }), + ], + }; + + // Add a bundle analyzer to the plugins array + if (argv.analyze) { + const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); + config.plugins = [ + ...config.plugins, + new BundleAnalyzerPlugin(), + ]; + } + + // Production specific options + if (argv.mode === 'production') { + const TerserPlugin = require('terser-webpack-plugin'); + const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin'); + config.optimization.minimizer = [ + new TerserPlugin({ + extractComments: false, + terserOptions: { + ie8: true, + // mangle: false, + output: { + ascii_only: true, + // beautify: true, + // indent_level: 2, + }, + }, + }), + ]; + config.plugins = [ + ...config.plugins, + new OptimizeCssAssetsPlugin({ + assetNameRegExp: /\.css$/g, + cssProcessor: require('cssnano'), + cssProcessorPluginOptions: { + preset: ['default', { + discardComments: { + removeAll: true, + }, + }], + }, + canPrint: true, + }), + ]; + } + + // Development specific options + if (argv.mode !== 'production') { + config.plugins = [ + ...config.plugins, + new BuildNotifierPlugin(), + ]; + if (argv.hot) { + config.plugins.push(new webpack.HotModuleReplacementPlugin()); + } + config.devServer = { + // Informational flags + progress: false, + quiet: false, + noInfo: false, + // Fine-grained logging control + clientLogLevel: 'silent', + stats: { + assets: false, + builtAt: false, + cached: false, + children: false, + chunks: false, + colors: true, + hash: false, + timings: false, + version: false, + modules: false, + }, + }; + } + + return config; +}; diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js index f426cfe6b73..2f667c540db 100644 --- a/tgui/assets/tgui.js +++ b/tgui/assets/tgui.js @@ -1 +1 @@ -require=function i(o,s,p){function u(e,t){if(!s[e]){if(!o[e]){var n="function"==typeof require&&require;if(!t&&n)return n(e,!0);if(c)return c(e,!0);var a=Error("Cannot find module '"+e+"'");throw a.code="MODULE_NOT_FOUND",a}var r=s[e]={exports:{}};o[e][0].call(r.exports,function(t){return u(o[e][1][t]||t)},r,r.exports,i,o,s,p)}return s[e].exports}for(var c="function"==typeof require&&require,t=0;to;)i.call(t,a=r[o++])&&e.push(a);return e}},{78:78,81:81,82:82}],34:[function(t,e,n){var m=t(41),g=t(24),v=t(43),b=t(92),y=t(26),_="prototype",x=function(t,e,n){var a,r,i,o,s=t&x.F,p=t&x.G,u=t&x.S,c=t&x.P,l=t&x.B,d=p?m:u?m[e]||(m[e]={}):(m[e]||{})[_],f=p?g:g[e]||(g[e]={}),h=f[_]||(f[_]={});for(a in p&&(n=e),n)i=((r=!s&&d&&void 0!==d[a])?d:n)[a],o=l&&r?y(i,m):c&&"function"==typeof i?y(Function.call,i):i,d&&b(d,a,i,t&x.U),f[a]!=i&&v(f,a,o),c&&h[a]!=i&&(h[a]=i)};m.core=g,x.F=1,x.G=2,x.S=4,x.P=8,x.B=16,x.W=32,x.U=64,x.R=128,e.exports=x},{24:24,26:26,41:41,43:43,92:92}],35:[function(t,e,n){var a=t(127)("match");e.exports=function(e){var n=/./;try{"/./"[e](n)}catch(t){try{return n[a]=!1,!"/./"[e](n)}catch(t){}}return!0}},{127:127}],36:[function(t,e,n){e.exports=function(t){try{return!!t()}catch(t){return!0}}},{}],37:[function(t,e,n){"use strict";var s=t(43),p=t(92),u=t(36),c=t(29),l=t(127);e.exports=function(e,t,n){var a=l(e),r=n(c,a,""[e]),i=r[0],o=r[1];u(function(){var t={};return t[a]=function(){return 7},7!=""[e](t)})&&(p(String.prototype,e,i),s(RegExp.prototype,a,2==t?function(t,e){return o.call(t,this,e)}:function(t){return o.call(t,this)}))}},{127:127,29:29,36:36,43:43,92:92}],38:[function(t,e,n){"use strict";var a=t(8);e.exports=function(){var t=a(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},{8:8}],39:[function(t,e,n){"use strict";var h=t(50),m=t(52),g=t(116),v=t(26),b=t(127)("isConcatSpreadable");e.exports=function t(e,n,a,r,i,o,s,p){for(var u,c,l=i,d=0,f=!!s&&v(s,p,3);ddocument.F=Object<\/script>"),t.close(),c=t.F;n--;)delete c[u][s[n]];return c()};t.exports=Object.create||function(t,e){var n;return null!==t?(r[u]=i(t),n=new r,r[u]=null,n[p]=t):n=c(),void 0===e?n:o(n,e)}},{100:100,31:31,32:32,44:44,73:73,8:8}],72:[function(t,e,n){var a=t(8),r=t(45),i=t(118),o=Object.defineProperty;n.f=t(30)?Object.defineProperty:function(t,e,n){if(a(t),e=i(e,!0),a(n),r)try{return o(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},{118:118,30:30,45:45,8:8}],73:[function(t,e,n){var o=t(72),s=t(8),p=t(81);e.exports=t(30)?Object.defineProperties:function(t,e){s(t);for(var n,a=p(e),r=a.length,i=0;ir;)o(a,n=e[r++])&&(~p(i,n)||i.push(n));return i}},{100:100,115:115,12:12,42:42}],81:[function(t,e,n){var a=t(80),r=t(32);e.exports=Object.keys||function(t){return a(t,r)}},{32:32,80:80}],82:[function(t,e,n){n.f={}.propertyIsEnumerable},{}],83:[function(t,e,n){var r=t(34),i=t(24),o=t(36);e.exports=function(t,e){var n=(i.Object||{})[t]||Object[t],a={};a[t]=e(n),r(r.S+r.F*o(function(){n(1)}),"Object",a)}},{24:24,34:34,36:36}],84:[function(t,e,n){var p=t(81),u=t(115),c=t(82).f;e.exports=function(s){return function(t){for(var e,n=u(t),a=p(n),r=a.length,i=0,o=[];i>>0||(o.test(n)?16:10))}:a},{109:109,110:110,41:41}],88:[function(t,e,n){e.exports=function(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},{}],89:[function(t,e,n){var a=t(8),r=t(52),i=t(69);e.exports=function(t,e){if(a(t),r(e)&&e.constructor===t)return e;var n=i.f(t);return(0,n.resolve)(e),n.promise}},{52:52,69:69,8:8}],90:[function(t,e,n){e.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},{}],91:[function(t,e,n){var r=t(92);e.exports=function(t,e,n){for(var a in e)r(t,a,e[a],n);return t}},{92:92}],92:[function(t,e,n){var i=t(41),o=t(43),s=t(42),p=t(122)("src"),a="toString",r=Function[a],u=(""+r).split(a);t(24).inspectSource=function(t){return r.call(t)},(e.exports=function(t,e,n,a){var r="function"==typeof n;r&&(s(n,"name")||o(n,"name",e)),t[e]!==n&&(r&&(s(n,p)||o(n,p,t[e]?""+t[e]:u.join(e+""))),t===i?t[e]=n:a?t[e]?t[e]=n:o(t,e,n):(delete t[e],o(t,e,n)))})(Function.prototype,a,function(){return"function"==typeof this&&this[p]||r.call(this)})},{122:122,24:24,41:41,42:42,43:43}],93:[function(t,e,n){e.exports=function(e,n){var a=n===Object(n)?function(t){return n[t]}:n;return function(t){return(t+"").replace(e,a)}}},{}],94:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}},{}],95:[function(t,e,n){"use strict";var a=t(34),p=t(4),u=t(26),c=t(40);e.exports=function(t){a(a.S,t,{from:function(t,e,n){var a,r,i,o,s=e;return p(this),(a=void 0!==s)&&p(s),null==t?new this:(r=[],a?(i=0,o=u(s,n,2),c(t,!1,function(t){r.push(o(t,i++))})):c(t,!1,r.push,r),new this(r))}})}},{26:26,34:34,4:4,40:40}],96:[function(t,e,n){"use strict";var a=t(34);e.exports=function(t){a(a.S,t,{of:function(){for(var t=arguments.length,e=Array(t);t--;)e[t]=arguments[t];return new this(e)}})}},{34:34}],97:[function(e,t,n){function r(t,e){if(i(t),!a(e)&&null!==e)throw TypeError(e+": can't set as prototype!")}var a=e(52),i=e(8);t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,n,a){try{(a=e(26)(Function.call,e(75).f(Object.prototype,"__proto__").set,2))(t,[]),n=!(t instanceof Array)}catch(t){n=!0}return function(t,e){return r(t,e),n?t.__proto__=e:a(t,e),t}}({},!1):void 0),check:r}},{26:26,52:52,75:75,8:8}],98:[function(t,e,n){"use strict";var a=t(41),r=t(72),i=t(30),o=t(127)("species");e.exports=function(t){var e=a[t];i&&e&&!e[o]&&r.f(e,o,{configurable:!0,get:function(){return this}})}},{127:127,30:30,41:41,72:72}],99:[function(t,e,n){var a=t(72).f,r=t(42),i=t(127)("toStringTag");e.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,i)&&a(t,i,{configurable:!0,value:e})}},{127:127,42:42,72:72}],100:[function(t,e,n){var a=t(101)("keys"),r=t(122);e.exports=function(t){return a[t]||(a[t]=r(t))}},{101:101,122:122}],101:[function(t,e,n){var a=t(24),r=t(41),i="__core-js_shared__",o=r[i]||(r[i]={});(e.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:a.version,mode:t(60)?"pure":"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})},{24:24,41:41,60:60}],102:[function(t,e,n){var r=t(8),i=t(4),o=t(127)("species");e.exports=function(t,e){var n,a=r(t).constructor;return void 0===a||null==(n=r(a)[o])?e:i(n)}},{127:127,4:4,8:8}],103:[function(t,e,n){"use strict";var a=t(36);e.exports=function(t,e){return!!t&&a(function(){e?t.call(null,function(){},1):t.call(null)})}},{36:36}],104:[function(t,e,n){var p=t(114),u=t(29);e.exports=function(s){return function(t,e){var n,a,r=u(t)+"",i=p(e),o=r.length;return i<0||o<=i?s?"":void 0:(n=r.charCodeAt(i))<55296||56319"+r+""}var r=t(34),i=t(36),o=t(29),s=/"/g;e.exports=function(e,t){var n={};n[e]=t(a),r(r.P+r.F*i(function(){var t=""[e]('"');return t!==t.toLowerCase()||3p&&(u=u.slice(0,p)),a?u+r:r+u}},{108:108,116:116,29:29}],108:[function(t,e,n){"use strict";var r=t(114),i=t(29);e.exports=function(t){var e=i(this)+"",n="",a=r(t);if(a<0||a==1/0)throw RangeError("Count can't be negative");for(;0>>=1)&&(e+=e))1&a&&(n+=e);return n}},{114:114,29:29}],109:[function(t,e,n){function a(t,e,n){var a={},r=s(function(){return!!p[t]()||"​…"!="​…"[t]()}),i=a[t]=r?e(l):p[t];n&&(a[n]=i),o(o.P+o.F*r,"String",a)}var o=t(34),r=t(29),s=t(36),p=t(110),i="["+p+"]",u=RegExp("^"+i+i+"*"),c=RegExp(i+i+"*$"),l=a.trim=function(t,e){return t=r(t)+"",1&e&&(t=t.replace(u,"")),2&e&&(t=t.replace(c,"")),t};e.exports=a},{110:110,29:29,34:34,36:36}],110:[function(t,e,n){e.exports="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff"},{}],111:[function(t,e,n){function a(){var t=+this;if(y.hasOwnProperty(t)){var e=y[t];delete y[t],e()}}function r(t){a.call(t.data)}var i,o,s,p=t(26),u=t(47),c=t(44),l=t(31),d=t(41),f=d.process,h=d.setImmediate,m=d.clearImmediate,g=d.MessageChannel,v=d.Dispatch,b=0,y={},_="onreadystatechange";h&&m||(h=function(t){for(var e=[],n=1;n>1,c=23===e?A(2,-24)-A(2,-77):0,l=0,d=t<0||0===t&&1/t<0?1:0;for((t=T(t))!=t||t===E?(r=t!=t?1:0,a=p):(a=O(R(t)/M),t*(i=A(2,-a))<1&&(a--,i*=2),2<=(t+=1<=a+u?c/i:c*A(2,1-u))*i&&(a++,i/=2),p<=a+u?(r=0,a=p):1<=a+u?(r=(t*i-1)*A(2,e),a+=u):(r=t*A(2,u-1)*A(2,e),a=0));8<=e;o[l++]=255&r,r/=256,e-=8);for(a=a<>1,s=r-7,p=n-1,u=t[p--],c=127&u;for(u>>=7;0>=-s,s+=e;0>8&255]}function V(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function z(t){return I(t,52,8)}function W(t){return I(t,23,4)}function H(t,e,n){m(t[_],e,{get:function(){return this[n]}})}function Q(t,e,n,a){var r=f(+n);if(r+e>t[N])throw C(x);var i=t[D]._b,o=r+t[F],s=i.slice(o,o+e);return a?s:s.reverse()}function K(t,e,n,a,r,i){var o=f(+n);if(o+e>t[N])throw C(x);for(var s=t[D]._b,p=o+t[F],u=a(+r),c=0;cJ;)(Y=X[J++])in w||s(w,Y,P[Y]);i||($.constructor=w)}var Z=new k(new w(2)),tt=k[_].setInt8;Z.setInt8(0,2147483648),Z.setInt8(1,2147483649),!Z.getInt8(0)&&Z.getInt8(1)||p(k[_],{setInt8:function(t,e){tt.call(this,t,e<<24>>24)},setUint8:function(t,e){tt.call(this,t,e<<24>>24)}},!0)}else w=function(t){c(this,w,b);var e=f(t);this._b=g.call(Array(e),0),this[N]=e},k=function(t,e,n){c(this,k,y),c(t,w,y);var a=t[N],r=l(e);if(r<0||a>24},getUint8:function(t){return Q(this,1,t)[0]},getInt16:function(t,e){var n=Q(this,2,t,e);return(n[1]<<8|n[0])<<16>>16},getUint16:function(t,e){var n=Q(this,2,t,e);return n[1]<<8|n[0]},getInt32:function(t,e){return q(Q(this,4,t,e))},getUint32:function(t,e){return q(Q(this,4,t,e))>>>0},getFloat32:function(t,e){return B(Q(this,4,t,e),23,4)},getFloat64:function(t,e){return B(Q(this,8,t,e),52,8)},setInt8:function(t,e){K(this,1,t,U,e)},setUint8:function(t,e){K(this,1,t,U,e)},setInt16:function(t,e,n){K(this,2,t,G,e,n)},setUint16:function(t,e,n){K(this,2,t,G,e,n)},setInt32:function(t,e,n){K(this,4,t,V,e,n)},setUint32:function(t,e,n){K(this,4,t,V,e,n)},setFloat32:function(t,e,n){K(this,4,t,W,e,n)},setFloat64:function(t,e,n){K(this,8,t,z,e,n)}});v(w,b),v(k,y),s(k[_],o.VIEW,!0),n[b]=w,n[y]=k},{10:10,113:113,114:114,116:116,121:121,30:30,36:36,41:41,43:43,60:60,7:7,72:72,77:77,91:91,99:99}],121:[function(t,e,n){for(var a,r=t(41),i=t(43),o=t(122),s=o("typed_array"),p=o("view"),u=!(!r.ArrayBuffer||!r.DataView),c=u,l=0,d="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");l<9;)(a=r[d[l++]])?(i(a.prototype,s,!0),i(a.prototype,p,!0)):c=!1;e.exports={ABV:u,CONSTR:c,TYPED:s,VIEW:p}},{122:122,41:41,43:43}],122:[function(t,e,n){var a=0,r=Math.random();e.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++a+r).toString(36))}},{}],123:[function(t,e,n){var a=t(41).navigator;e.exports=a&&a.userAgent||""},{41:41}],124:[function(t,e,n){var a=t(52);e.exports=function(t,e){if(!a(t)||t._t!==e)throw TypeError("Incompatible receiver, "+e+" required!");return t}},{52:52}],125:[function(t,e,n){var a=t(41),r=t(24),i=t(60),o=t(126),s=t(72).f;e.exports=function(t){var e=r.Symbol||(r.Symbol=i?{}:a.Symbol||{});"_"==t[0]||t in e||s(e,t,{value:o.f(t)})}},{126:126,24:24,41:41,60:60,72:72}],126:[function(t,e,n){n.f=t(127)},{127:127}],127:[function(t,e,n){var a=t(101)("wks"),r=t(122),i=t(41).Symbol,o="function"==typeof i;(e.exports=function(t){return a[t]||(a[t]=o&&i[t]||(o?i:r)("Symbol."+t))}).store=a},{101:101,122:122,41:41}],128:[function(t,e,n){var a=t(18),r=t(127)("iterator"),i=t(59);e.exports=t(24).getIteratorMethod=function(t){if(null!=t)return t[r]||t["@@iterator"]||i[a(t)]}},{127:127,18:18,24:24,59:59}],129:[function(t,e,n){var a=t(34),r=t(93)(/[\\^$*+?.()|[\]{}]/g,"\\$&");a(a.S,"RegExp",{escape:function(t){return r(t)}})},{34:34,93:93}],130:[function(t,e,n){var a=t(34);a(a.P,"Array",{copyWithin:t(9)}),t(6)("copyWithin")},{34:34,6:6,9:9}],131:[function(t,e,n){"use strict";var a=t(34),r=t(13)(4);a(a.P+a.F*!t(103)([].every,!0),"Array",{every:function(t,e){return r(this,t,e)}})},{103:103,13:13,34:34}],132:[function(t,e,n){var a=t(34);a(a.P,"Array",{fill:t(10)}),t(6)("fill")},{10:10,34:34,6:6}],133:[function(t,e,n){"use strict";var a=t(34),r=t(13)(2);a(a.P+a.F*!t(103)([].filter,!0),"Array",{filter:function(t,e){return r(this,t,e)}})},{103:103,13:13,34:34}],134:[function(t,e,n){"use strict";var a=t(34),r=t(13)(6),i="findIndex",o=!0;i in[]&&[,][i](function(){o=!1}),a(a.P+a.F*o,"Array",{findIndex:function(t,e){return r(this,t,1=t.length?(this._t=void 0,r(1)):r(0,"keys"==e?n:"values"==e?t[n]:[n,t[n]])},"values"),i.Arguments=i.Array,a("keys"),a("values"),a("entries")},{115:115,56:56,58:58,59:59,6:6}],141:[function(t,e,n){"use strict";var a=t(34),r=t(115),i=[].join;a(a.P+a.F*(t(48)!=Object||!t(103)(i)),"Array",{join:function(t){return i.call(r(this),void 0===t?",":t)}})},{103:103,115:115,34:34,48:48}],142:[function(t,e,n){"use strict";var a=t(34),i=t(115),o=t(114),s=t(116),p=[].lastIndexOf,u=!!p&&!1;a(a.P+a.F*(u||!t(103)(p)),"Array",{lastIndexOf:function(t,e){if(u)return p.apply(this,arguments)||0;var n=i(this),a=s(n.length),r=a-1;for(1>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},{34:34}],165:[function(t,e,n){var a=t(34),r=Math.exp;a(a.S,"Math",{cosh:function(t){return(r(t=+t)+r(-t))/2}})},{34:34}],166:[function(t,e,n){var a=t(34),r=t(61);a(a.S+a.F*(r!=Math.expm1),"Math",{expm1:r})},{34:34,61:61}],167:[function(t,e,n){var a=t(34);a(a.S,"Math",{fround:t(62)})},{34:34,62:62}],168:[function(t,e,n){var a=t(34),p=Math.abs;a(a.S,"Math",{hypot:function(t,e){for(var n,a,r=0,i=0,o=arguments.length,s=0;i>>16)*o+i*(n&r>>>16)<<16>>>0)}})},{34:34,36:36}],170:[function(t,e,n){var a=t(34);a(a.S,"Math",{log10:function(t){return Math.log(t)*Math.LOG10E}})},{34:34}],171:[function(t,e,n){var a=t(34);a(a.S,"Math",{log1p:t(63)})},{34:34,63:63}],172:[function(t,e,n){var a=t(34);a(a.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},{34:34}],173:[function(t,e,n){var a=t(34);a(a.S,"Math",{sign:t(65)})},{34:34,65:65}],174:[function(t,e,n){var a=t(34),r=t(61),i=Math.exp;a(a.S+a.F*t(36)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(r(t)-r(-t))/2:(i(t-1)-i(-t-1))*(Math.E/2)}})},{34:34,36:36,61:61}],175:[function(t,e,n){var a=t(34),r=t(61),i=Math.exp;a(a.S,"Math",{tanh:function(t){var e=r(t=+t),n=r(-t);return e==1/0?1:n==1/0?-1:(e-n)/(i(t)+i(-t))}})},{34:34,61:61}],176:[function(t,e,n){var a=t(34);a(a.S,"Math",{trunc:function(t){return(0w;w++)i(g,_=x[w])&&!i(m,_)&&d(m,_,l(g,_));(m.prototype=v).constructor=m,t(92)(r,h,m)}},{109:109,118:118,19:19,30:30,36:36,41:41,42:42,46:46,71:71,72:72,75:75,77:77,92:92}],178:[function(t,e,n){var a=t(34);a(a.S,"Number",{EPSILON:Math.pow(2,-52)})},{34:34}],179:[function(t,e,n){var a=t(34),r=t(41).isFinite;a(a.S,"Number",{isFinite:function(t){return"number"==typeof t&&r(t)}})},{34:34,41:41}],180:[function(t,e,n){var a=t(34);a(a.S,"Number",{isInteger:t(51)})},{34:34,51:51}],181:[function(t,e,n){var a=t(34);a(a.S,"Number",{isNaN:function(t){return t!=t}})},{34:34}],182:[function(t,e,n){var a=t(34),r=t(51),i=Math.abs;a(a.S,"Number",{isSafeInteger:function(t){return r(t)&&i(t)<=9007199254740991}})},{34:34,51:51}],183:[function(t,e,n){var a=t(34);a(a.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},{34:34}],184:[function(t,e,n){var a=t(34);a(a.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},{34:34}],185:[function(t,e,n){var a=t(34),r=t(86);a(a.S+a.F*(Number.parseFloat!=r),"Number",{parseFloat:r})},{34:34,86:86}],186:[function(t,e,n){var a=t(34),r=t(87);a(a.S+a.F*(Number.parseInt!=r),"Number",{parseInt:r})},{34:34,87:87}],187:[function(t,e,n){"use strict";function u(t,e){for(var n=-1,a=e;++n<6;)a+=t*o[n],o[n]=a%1e7,a=i(a/1e7)}function c(t){for(var e=6,n=0;0<=--e;)n+=o[e],o[e]=i(n/t),n=n%t*1e7}function l(){for(var t=6,e="";0<=--t;)if(""!==e||0===t||0!==o[t]){var n=o[t]+"";e=""===e?n:e+h.call("0",7-n.length)+n}return e}var a=t(34),d=t(114),f=t(5),h=t(108),r=1..toFixed,i=Math.floor,o=[0,0,0,0,0,0],m="Number.toFixed: incorrect invocation!",g=function(t,e,n){return 0===e?n:e%2==1?g(t,e-1,n*t):g(t*t,e/2,n)};a(a.P+a.F*!t(36)(function(){r.call({})}),"Number",{toFixed:function(t){var e,n,a,r,i=f(this,m),o=d(t),s="",p="0";if(o<0||20t;)e(a[t++]);c._c=[],c._n=!1,n&&!c._h&&N(c)})}}function i(t){var e=this;e._d||(e._d=!0,(e=e._w||e)._v=t,e._s=2,e._a||(e._a=e._c.slice()),r(e,!0))}var o,s,p,u,c=n(60),d=n(41),f=n(26),h=n(18),m=n(34),g=n(52),v=n(4),b=n(7),y=n(40),_=n(102),x=n(111).set,w=n(68)(),k=n(69),S=n(88),C=n(123),E=n(89),P="Promise",T=d.TypeError,A=d.process,O=A&&A.versions,R=O&&O.v8||"",M=d[P],L="process"==h(A),j=s=k.f,D=!!function(){try{var t=M.resolve(1),e=(t.constructor={})[n(127)("species")]=function(t){t(a,a)};return(L||"function"==typeof PromiseRejectionEvent)&&t.then(a)instanceof e&&0!=R.indexOf("6.6")&&!~C.indexOf("Chrome/66")}catch(t){}}(),N=function(i){x.call(d,function(){var t,e,n,a=i._v,r=F(i);if(r&&(t=S(function(){L?A.emit("unhandledRejection",a,i):(e=d.onunhandledrejection)?e({promise:i,reason:a}):(n=d.console)&&n.error&&n.error("Unhandled promise rejection",a)}),i._h=L||F(i)?2:1),i._a=void 0,r&&t.e)throw t.v})},F=function(t){return 1!==t._h&&0===(t._a||t._c).length},I=function(e){x.call(d,function(){var t;L?A.emit("rejectionHandled",e):(t=d.onrejectionhandled)&&t({promise:e,reason:e._v})})},B=function(t){var n,a=this;if(!a._d){a._d=!0,a=a._w||a;try{if(a===t)throw T("Promise can't be resolved itself");(n=l(t))?w(function(){var e={_w:a,_d:!1};try{n.call(t,f(B,e,1),f(i,e,1))}catch(t){i.call(e,t)}}):(a._v=t,a._s=1,r(a,!1))}catch(t){i.call({_w:a,_d:!1},t)}}};D||(M=function(t){b(this,M,P,"_h"),v(t),o.call(this);try{t(f(B,this,1),f(i,this,1))}catch(t){i.call(this,t)}},(o=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=n(91)(M.prototype,{then:function(t,e){var n=j(_(this,M));return n.ok="function"!=typeof t||t,n.fail="function"==typeof e&&e,n.domain=L?A.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&r(this,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),p=function(){var t=new o;this.promise=t,this.resolve=f(B,t,1),this.reject=f(i,t,1)},k.f=j=function(t){return t===M||t===u?new p(t):s(t)}),m(m.G+m.W+m.F*!D,{Promise:M}),n(99)(M,P),n(98)(P),u=n(24)[P],m(m.S+m.F*!D,P,{reject:function(t){var e=j(this);return(0,e.reject)(t),e.promise}}),m(m.S+m.F*(c||!D),P,{resolve:function(t){return E(c&&this===u?M:this,t)}}),m(m.S+m.F*!(D&&n(57)(function(t){M.all(t).catch(a)})),P,{all:function(t){var o=this,e=j(o),s=e.resolve,p=e.reject,n=S(function(){var a=[],r=0,i=1;y(t,!1,function(t){var e=r++,n=!1;a.push(void 0),i++,o.resolve(t).then(function(t){n||(n=!0,a[e]=t,--i||s(a))},p)}),--i||s(a)});return n.e&&p(n.v),e.promise},race:function(t){var e=this,n=j(e),a=n.reject,r=S(function(){y(t,!1,function(t){e.resolve(t).then(n.resolve,a)})});return r.e&&a(r.v),n.promise}})},{102:102,111:111,123:123,127:127,18:18,24:24,26:26,34:34,4:4,40:40,41:41,52:52,57:57,60:60,68:68,69:69,7:7,88:88,89:89,91:91,98:98,99:99}],209:[function(t,e,n){var a=t(34),i=t(4),o=t(8),s=(t(41).Reflect||{}).apply,p=Function.apply;a(a.S+a.F*!t(36)(function(){s(function(){})}),"Reflect",{apply:function(t,e,n){var a=i(t),r=o(n);return s?s(a,e,r):p.call(a,e,r)}})},{34:34,36:36,4:4,41:41,8:8}],210:[function(t,e,n){var a=t(34),p=t(71),u=t(4),c=t(8),l=t(52),r=t(36),d=t(17),f=(t(41).Reflect||{}).construct,h=r(function(){function t(){}return!(f(function(){},[],t)instanceof t)}),m=!r(function(){f(function(){})});a(a.S+a.F*(h||m),"Reflect",{construct:function(t,e,n){u(t),c(e);var a=arguments.length<3?t:u(n);if(m&&!h)return f(t,e,a);if(t==a){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var r=[null];return r.push.apply(r,e),new(d.apply(t,r))}var i=a.prototype,o=p(l(i)?i:Object.prototype),s=Function.apply.call(t,o,e);return l(s)?s:o}})},{17:17,34:34,36:36,4:4,41:41,52:52,71:71,8:8}],211:[function(t,e,n){var a=t(72),r=t(34),i=t(8),o=t(118);r(r.S+r.F*t(36)(function(){Reflect.defineProperty(a.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(t,e,n){i(t),e=o(e,!0),i(n);try{return a.f(t,e,n),!0}catch(t){return!1}}})},{118:118,34:34,36:36,72:72,8:8}],212:[function(t,e,n){var a=t(34),r=t(75).f,i=t(8);a(a.S,"Reflect",{deleteProperty:function(t,e){var n=r(i(t),e);return!(n&&!n.configurable)&&delete t[e]}})},{34:34,75:75,8:8}],213:[function(t,e,n){"use strict";function a(t){this._t=i(t),this._i=0;var e,n=this._k=[];for(e in t)n.push(e)}var r=t(34),i=t(8);t(55)(a,"Object",function(){var t,e=this._k;do{if(this._i>=e.length)return{value:void 0,done:!0}}while(!((t=e[this._i++])in this._t));return{value:t,done:!1}}),r(r.S,"Reflect",{enumerate:function(t){return new a(t)}})},{34:34,55:55,8:8}],214:[function(t,e,n){var a=t(75),r=t(34),i=t(8);r(r.S,"Reflect",{getOwnPropertyDescriptor:function(t,e){return a.f(i(t),e)}})},{34:34,75:75,8:8}],215:[function(t,e,n){var a=t(34),r=t(79),i=t(8);a(a.S,"Reflect",{getPrototypeOf:function(t){return r(i(t))}})},{34:34,79:79,8:8}],216:[function(t,e,n){var o=t(75),s=t(79),p=t(42),a=t(34),u=t(52),c=t(8);a(a.S,"Reflect",{get:function t(e,n){var a,r,i=arguments.length<3?e:arguments[2];return c(e)===i?e[n]:(a=o.f(e,n))?p(a,"value")?a.value:void 0!==a.get?a.get.call(i):void 0:u(r=s(e))?t(r,n,i):void 0}})},{34:34,42:42,52:52,75:75,79:79,8:8}],217:[function(t,e,n){var a=t(34);a(a.S,"Reflect",{has:function(t,e){return e in t}})},{34:34}],218:[function(t,e,n){var a=t(34),r=t(8),i=Object.isExtensible;a(a.S,"Reflect",{isExtensible:function(t){return r(t),!i||i(t)}})},{34:34,8:8}],219:[function(t,e,n){var a=t(34);a(a.S,"Reflect",{ownKeys:t(85)})},{34:34,85:85}],220:[function(t,e,n){var a=t(34),r=t(8),i=Object.preventExtensions;a(a.S,"Reflect",{preventExtensions:function(t){r(t);try{return i&&i(t),!0}catch(t){return!1}}})},{34:34,8:8}],221:[function(t,e,n){var a=t(34),r=t(97);r&&a(a.S,"Reflect",{setPrototypeOf:function(t,e){r.check(t,e);try{return r.set(t,e),!0}catch(t){return!1}}})},{34:34,97:97}],222:[function(t,e,n){var p=t(72),u=t(75),c=t(79),l=t(42),a=t(34),d=t(90),f=t(8),h=t(52);a(a.S,"Reflect",{set:function t(e,n,a){var r,i,o=arguments.length<4?e:arguments[3],s=u.f(f(e),n);if(!s){if(h(i=c(e)))return t(i,n,a,o);s=d(0)}if(l(s,"value")){if(!1===s.writable||!h(o))return!1;if(r=u.f(o,n)){if(r.get||r.set||!1===r.writable)return!1;r.value=a,p.f(o,n,r)}else p.f(o,n,d(0,a));return!0}return void 0!==s.set&&(s.set.call(o,a),!0)}})},{34:34,42:42,52:52,72:72,75:75,79:79,8:8,90:90}],223:[function(t,e,n){var a=t(41),i=t(46),r=t(72).f,o=t(77).f,s=t(53),p=t(38),u=a.RegExp,c=u,l=u.prototype,d=/a/g,f=/a/g,h=new u(d)!==d;if(t(30)&&(!h||t(36)(function(){return f[t(127)("match")]=!1,u(d)!=d||u(f)==f||"/a/i"!=u(d,"i")}))){u=function(t,e){var n=this instanceof u,a=s(t),r=void 0===e;return!n&&a&&t.constructor===u&&r?t:i(h?new c(a&&!r?t.source:t,e):c((a=t instanceof u)?t.source:t,a&&r?p.call(t):e),n?this:l,u)};function m(e){e in u||r(u,e,{configurable:!0,get:function(){return c[e]},set:function(t){c[e]=t}})}for(var g=o(c),v=0;g.length>v;)m(g[v++]);(l.constructor=u).prototype=l,t(92)(a,"RegExp",u)}t(98)("RegExp")},{127:127,30:30,36:36,38:38,41:41,46:46,53:53,72:72,77:77,92:92,98:98}],224:[function(t,e,n){t(30)&&"g"!=/./g.flags&&t(72).f(RegExp.prototype,"flags",{configurable:!0,get:t(38)})},{30:30,38:38,72:72}],225:[function(t,e,n){t(37)("match",1,function(a,r,t){return[function(t){"use strict";var e=a(this),n=null==t?void 0:t[r];return void 0!==n?n.call(t,e):RegExp(t)[r](e+"")},t]})},{37:37}],226:[function(t,e,n){t(37)("replace",2,function(r,i,o){return[function(t,e){"use strict";var n=r(this),a=null==t?void 0:t[i];return void 0!==a?a.call(t,n,e):o.call(n+"",t,e)},o]})},{37:37}],227:[function(t,e,n){t(37)("search",1,function(a,r,t){return[function(t){"use strict";var e=a(this),n=null==t?void 0:t[r];return void 0!==n?n.call(t,e):RegExp(t)[r](e+"")},t]})},{37:37}],228:[function(e,t,n){e(37)("split",2,function(r,i,o){"use strict";var f=e(53),h=o,m=[].push,t="split",g="length",v="lastIndex";if(""[t](/.?/)[g]){var b=void 0===/()??/.exec("")[1];o=function(t,e){var n=this+"";if(void 0===t&&0===e)return[];if(!f(t))return h.call(n,t,e);var a,r,i,o,s,p=[],u=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),c=0,l=void 0===e?4294967295:e>>>0,d=RegExp(t.source,u+"g");for(b||(a=RegExp("^"+d.source+"$(?!\\s)",u));(r=d.exec(n))&&!(c<(i=r.index+r[0][g])&&(p.push(n.slice(c,r.index)),!b&&1=l));)d[v]===r.index&&d[v]++;return c===n[g]?!o&&d.test("")||p.push(""):p.push(n.slice(c)),p[g]>l?p.slice(0,l):p}}else 0;return[function(t,e){var n=r(this),a=null==t?void 0:t[i];return void 0!==a?a.call(t,n,e):o.call(n+"",t,e)},o]})},{37:37,53:53}],229:[function(e,t,n){"use strict";e(224);function a(t){e(92)(RegExp.prototype,s,t,!0)}var r=e(8),i=e(38),o=e(30),s="toString",p=/./[s];e(36)(function(){return"/a/b"!=p.call({source:"a",flags:"b"})})?a(function(){var t=r(this);return"/".concat(t.source,"/","flags"in t?t.flags:!o&&t instanceof RegExp?i.call(t):void 0)}):p.name!=s&&a(function(){return p.call(this)})},{224:224,30:30,36:36,38:38,8:8,92:92}],230:[function(t,e,n){"use strict";var a=t(20),r=t(124);e.exports=t(23)("Set",function(e){return function(t){return e(this,0>10),e%1024+56320))}return n.join("")}})},{112:112,34:34}],241:[function(t,e,n){"use strict";var a=t(34),r=t(105),i="includes";a(a.P+a.F*t(35)(i),"String",{includes:function(t,e){return!!~r(this,t,i).indexOf(t,1=e.length?{value:void 0,done:!0}:(t=a(e,n),this._i+=t.length,{value:t,done:!1})})},{104:104,56:56}],244:[function(t,e,n){"use strict";t(106)("link",function(e){return function(t){return e(this,"a","href",t)}})},{106:106}],245:[function(t,e,n){var a=t(34),o=t(115),s=t(116);a(a.S,"String",{raw:function(t){for(var e=o(t.raw),n=s(e.length),a=arguments.length,r=[],i=0;ir;)c(W,e=n[r++])||e==U||e==h||a.push(e);return a}function p(t){for(var e,n=t===Q,a=N(n?H:E(t)),r=[],i=0;a.length>i;)!c(W,e=a[i++])||n&&!c(Q,e)||r.push(W[e]);return r}var u=t(41),c=t(42),l=t(30),d=t(34),f=t(92),h=t(66).KEY,m=t(36),g=t(101),v=t(99),b=t(122),y=t(127),_=t(126),x=t(125),w=t(33),k=t(50),S=t(8),C=t(52),E=t(115),P=t(118),T=t(90),A=t(71),O=t(76),R=t(75),M=t(72),L=t(81),j=R.f,D=M.f,N=O.f,F=u.Symbol,I=u.JSON,B=I&&I.stringify,q="prototype",U=y("_hidden"),G=y("toPrimitive"),V={}.propertyIsEnumerable,z=g("symbol-registry"),W=g("symbols"),H=g("op-symbols"),Q=Object[q],K="function"==typeof F,Y=u.QObject,$=!Y||!Y[q]||!Y[q].findChild,X=l&&m(function(){return 7!=A(D({},"a",{get:function(){return D(this,"a",{value:7}).a}})).a})?function(t,e,n){var a=j(Q,e);a&&delete Q[e],D(t,e,n),a&&t!==Q&&D(Q,e,a)}:D,J=K&&"symbol"==typeof F.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof F},Z=function(t,e,n){return t===Q&&Z(H,e,n),S(t),e=P(e,!0),S(n),c(W,e)?(n.enumerable?(c(t,U)&&t[U][e]&&(t[U][e]=!1),n=A(n,{enumerable:T(0,!1)})):(c(t,U)||D(t,U,T(1,{})),t[U][e]=!0),X(t,e,n)):D(t,e,n)};K||(f((F=function(t){if(this instanceof F)throw TypeError("Symbol is not a constructor!");var e=b(0et;)y(tt[et++]);for(var nt=L(y.store),at=0;nt.length>at;)x(nt[at++]);d(d.S+d.F*!K,"Symbol",{for:function(t){return c(z,t+="")?z[t]:z[t]=F(t)},keyFor:function(t){if(!J(t))throw TypeError(t+" is not a symbol!");for(var e in z)if(z[e]===t)return e},useSetter:function(){$=!0},useSimple:function(){$=!1}}),d(d.S+d.F*!K,"Object",{create:function(t,e){return void 0===e?A(t):r(A(t),e)},defineProperty:Z,defineProperties:r,getOwnPropertyDescriptor:o,getOwnPropertyNames:s,getOwnPropertySymbols:p}),I&&d(d.S+d.F*(!K||m(function(){var t=F();return"[null]"!=B([t])||"{}"!=B({a:t})||"{}"!=B(Object(t))})),"JSON",{stringify:function(t){for(var e,n,a=[t],r=1;r>>0,i=n>>>0;return(e>>>0)+(a>>>0)+((r&i|(r|i)&~(r+i>>>0))>>>31)|0}})},{34:34}],281:[function(t,e,n){var a=t(34);a(a.S,"Math",{imulh:function(t,e){var n=+t,a=+e,r=65535&n,i=65535&a,o=n>>16,s=a>>16,p=(o*i>>>0)+(r*i>>>16);return o*s+(p>>16)+((r*s>>>0)+(65535&p)>>16)}})},{34:34}],282:[function(t,e,n){var a=t(34);a(a.S,"Math",{isubh:function(t,e,n,a){var r=t>>>0,i=n>>>0;return(e>>>0)-(a>>>0)-((~r&i|~(r^i)&r-i>>>0)>>>31)|0}})},{34:34}],283:[function(t,e,n){var a=t(34);a(a.S,"Math",{RAD_PER_DEG:180/Math.PI})},{34:34}],284:[function(t,e,n){var a=t(34);a(a.S,"Math",{radians:function(t){return.017453292519943295*t}})},{34:34}],285:[function(t,e,n){var a=t(34);a(a.S,"Math",{scale:t(64)})},{34:34,64:64}],286:[function(t,e,n){var a=t(34);a(a.S,"Math",{signbit:function(t){return(t=+t)!=t?t:0==t?1/t==1/0:0>>16,s=a>>>16,p=(o*i>>>0)+(r*i>>>16);return o*s+(p>>>16)+((r*s>>>0)+(65535&p)>>>16)}})},{34:34}],288:[function(t,e,n){"use strict";var a=t(34),r=t(117),i=t(4),o=t(72);t(30)&&a(a.P+t(74),"Object",{__defineGetter__:function(t,e){o.f(r(this),t,{get:i(e),enumerable:!0,configurable:!0})}})},{117:117,30:30,34:34,4:4,72:72,74:74}],289:[function(t,e,n){"use strict";var a=t(34),r=t(117),i=t(4),o=t(72);t(30)&&a(a.P+t(74),"Object",{__defineSetter__:function(t,e){o.f(r(this),t,{set:i(e),enumerable:!0,configurable:!0})}})},{117:117,30:30,34:34,4:4,72:72,74:74}],290:[function(t,e,n){var a=t(34),r=t(84)(!0);a(a.S,"Object",{entries:function(t){return r(t)}})},{34:34,84:84}],291:[function(t,e,n){var a=t(34),p=t(85),u=t(115),c=t(75),l=t(25);a(a.S,"Object",{getOwnPropertyDescriptors:function(t){for(var e,n,a=u(t),r=c.f,i=p(a),o={},s=0;i.length>s;)void 0!==(n=r(a,e=i[s++]))&&l(o,e,n);return o}})},{115:115,25:25,34:34,75:75,85:85}],292:[function(t,e,n){"use strict";var a=t(34),r=t(117),i=t(118),o=t(79),s=t(75).f;t(30)&&a(a.P+t(74),"Object",{__lookupGetter__:function(t){var e,n=r(this),a=i(t,!0);do{if(e=s(n,a))return e.get}while(n=o(n))}})},{117:117,118:118,30:30,34:34,74:74,75:75,79:79}],293:[function(t,e,n){"use strict";var a=t(34),r=t(117),i=t(118),o=t(79),s=t(75).f;t(30)&&a(a.P+t(74),"Object",{__lookupSetter__:function(t){var e,n=r(this),a=i(t,!0);do{if(e=s(n,a))return e.set}while(n=o(n))}})},{117:117,118:118,30:30,34:34,74:74,75:75,79:79}],294:[function(t,e,n){var a=t(34),r=t(84)(!1);a(a.S,"Object",{values:function(t){return r(t)}})},{34:34,84:84}],295:[function(t,e,n){"use strict";function r(t){return null==t?void 0:f(t)}function i(t){var e=t._c;e&&(t._c=void 0,e())}function o(t){return void 0===t._o}function s(t){o(t)||(t._o=void 0,i(t))}function a(e,t){h(e),this._c=void 0,this._o=e,e=new _(this);try{var n=t(e),a=n;null!=n&&("function"==typeof n.unsubscribe?n=function(){a.unsubscribe()}:f(n),this._c=n)}catch(t){return void e.error(t)}o(this)&&i(this)}var p=t(34),u=t(41),c=t(24),l=t(68)(),d=t(127)("observable"),f=t(4),h=t(8),m=t(7),g=t(91),v=t(43),b=t(40),y=b.RETURN;a.prototype=g({},{unsubscribe:function(){s(this)}});var _=function(t){this._s=t};_.prototype=g({},{next:function(t){var e=this._s;if(!o(e)){var n=e._o;try{var a=r(n.next);if(a)return a.call(n,t)}catch(t){try{s(e)}finally{throw t}}}},error:function(t){var e=this._s;if(o(e))throw t;var n=e._o;e._o=void 0;try{var a=r(n.error);if(!a)throw t;t=a.call(n,t)}catch(t){try{i(e)}finally{throw t}}return i(e),t},complete:function(t){var e=this._s;if(!o(e)){var n=e._o;e._o=void 0;try{var a=r(n.complete);t=a?a.call(n,t):void 0}catch(t){try{i(e)}finally{throw t}}return i(e),t}}});var x=function(t){m(this,x,"Observable","_f")._f=f(t)};g(x.prototype,{subscribe:function(t){return new a(t,this._f)},forEach:function(a){var r=this;return new(c.Promise||u.Promise)(function(t,e){f(a);var n=r.subscribe({next:function(t){try{return a(t)}catch(t){e(t),n.unsubscribe()}},error:e,complete:t})})}}),g(x,{from:function(t){var e="function"==typeof this?this:x,n=r(h(t)[d]);if(n){var a=h(n.call(t));return a.constructor===e?a:new e(function(t){return a.subscribe(t)})}return new e(function(e){var n=!1;return l(function(){if(!n){try{if(b(t,!1,function(t){if(e.next(t),n)return y})===y)return}catch(t){if(n)throw t;return void e.error(t)}e.complete()}}),function(){n=!0}})},of:function(){for(var t=0,e=arguments.length,a=Array(e);t",a.insertBefore(n.lastChild,a.firstChild)}(t,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),s||function(e,n){n.cache||(n.cache={},n.createElem=e.createElement,n.createFrag=e.createDocumentFragment,n.frag=n.createFrag()),e.createElement=function(t){return h.shivMethods?d(t,e,n):n.createElem(t)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+c().join().replace(/[\w\-:]+/g,function(t){return n.createElem(t),n.frag.createElement(t),'c("'+t+'")'})+");return n}")(h,n.frag)}(t,e),t}!function(){try{var t=o.createElement("a");t.innerHTML="",n="hidden"in t,s=1==t.childNodes.length||function(){o.createElement("a");var t=o.createDocumentFragment();return void 0===t.cloneNode||void 0===t.createDocumentFragment||void 0===t.createElement}()}catch(t){s=n=!0}}();var h={elements:e.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:"3.7.3-pre",shivCSS:!1!==e.shivCSS,supportsUnknownElements:s,shivMethods:!1!==e.shivMethods,type:"default",shivDocument:f,createElement:d,createDocumentFragment:function(t,e){if(t=t||o,s)return t.createDocumentFragment();for(var n=(e=e||l(t)).frag.cloneNode(),a=0,r=c(),i=r.length;a=-a&&t.vec[0]*r>=-a;var o=e.vec[0]*t.vec[1]-e.vec[1]*t.vec[0];if(0==o)return!1;var s=(i*e.vec[0]-r*e.vec[1])/o,p=(i*t.vec[0]-r*t.vec[1])/o;return-a<=s&&a<=p||a<=s&&-a<=p},matrixTransform:function(t,e){return t.map(function(t){return{x:t.x*e[0]+t.y*e[2]+e[4],y:t.x*e[1]+t.y*e[3]+e[5]}})},transformEllipse:function(t,e,n,a){var r=Math.PI/180,i=Math.cos(n*r),o=Math.sin(n*r),s=[t*(a[0]*i+a[2]*o),t*(a[1]*i+a[3]*o),e*(-a[0]*o+a[2]*i),e*(-a[1]*o+a[3]*i)],p=s[0]*s[0]+s[2]*s[2],u=s[1]*s[1]+s[3]*s[3],c=((s[0]-s[3])*(s[0]-s[3])+(s[2]+s[1])*(s[2]+s[1]))*((s[0]+s[3])*(s[0]+s[3])+(s[2]-s[1])*(s[2]-s[1])),l=(p+u)/2;if(c<1e-10*l)return{rx:Math.sqrt(l),ry:Math.sqrt(l),ax:0,isDegenerate:!1};var d=s[0]*s[1]+s[2]*s[3],f=l+(c=Math.sqrt(c))/2,h=l-c/2,m=void 0,g=void 0,v=void 0;return v=0<=(m=Math.abs(d)<1e-10&&Math.abs(f-u)<1e-10?90:180*Math.atan(Math.abs(f-u)>>0,"function"!=typeof t)throw new TypeError;for(r=0;r "+t),(r=n.node||a.fragment&&a.fragment.rendered&&a.find("*"))&&e.push(r)}}console.warn.apply(console,["%cRactive.js: %c"+t,"color: rgb(114, 157, 52);","color: rgb(85, 85, 85);"].concat(e))},nt=function(){console.log.apply(console,arguments)}):at=nt=rt=B;var ft='A function was specified for "%s" %s, but no %s was returned',ht=function(t,e){return'Missing "'+t+'" '+e+" plugin. You may need to download a plugin via http://docs.ractivejs.org/latest/plugins#"+e+"s"};function mt(t,e,n){var a=gt(t,e,n);return a?a[t][n]:null}function gt(t,e,n){for(;e;){if(n in e[t])return e;if(e.isolated)return null;e=e.parent}}var vt=function(t,e,n,a){if(t===e)return bt(e);if(a){var r=mt("interpolators",n,a);if(r)return r(t,e)||bt(e);pt(ht(a,"interpolator"))}return yt.number(t,e)||yt.array(t,e)||yt.object(t,e)||bt(e)};function bt(t){return function(){return t}}var yt={number:function(e,t){var n;return tt(e)&&tt(t)?(n=(t=+t)-(e=+e))?function(t){return e+t*n}:function(){return e}:null},array:function(t,e){var n,a,r,i;if(!X(t)||!X(e))return null;for(n=[],a=[],i=r=Math.min(t.length,e.length);i--;)a[i]=vt(t[i],e[i]);for(i=r;i=this.duration?(null!==r&&(ge.start(this.root),this.root.viewmodel.set(r,this.to),ge.end()),this.step&&this.step(1,this.to),this.complete(this.to),-1==(a=this.root._animations.indexOf(this))&<("Animation was not found"),this.root._animations.splice(a,1),this.running=!1):(e=this.easing?this.easing(t/this.duration):t/this.duration,null!==r&&(n=this.interpolator(e),ge.start(this.root),this.root.viewmodel.set(r,n),ge.end()),this.step&&this.step(e,n),!0))},stop:function(){var t;this.running=!1,-1==(t=this.root._animations.indexOf(this))&<("Animation was not found"),this.root._animations.splice(t,1)}};function ke(t,e,n){var a,r,i,o,s,p,u,c,l,d,f,h,m,g;if(a=new Xt(function(t){return r=t}),"object"!=typeof t)return(n=n||{}).complete&&a.then(n.complete),n.complete=r,o=Ee(this,t,e,n),a.stop=function(){return o.stop()},a;for(i in p=(n=e||{}).easing,u=n.duration,s=[],c=n.step,l=n.complete,(c||l)&&(f={},n.step=null,n.complete=null,d=function(n){return function(t,e){f[n]=e}}),t)t.hasOwnProperty(i)&&((c||l)&&(h=d(i),n={easing:p,duration:u},c&&(n.step=h)),n.complete=l?h:B,s.push(Ee(this,i,t[i],n)));return g={easing:p,duration:u},c&&(g.step=function(t){return c(t,f)}),l&&a.then(function(t){return l(t,f)}),g.complete=r,m=Ee(this,null,null,g),s.push(m),a.stop=function(){for(var t;t=s.pop();)t.stop();m&&m.stop()},a}var Se=ye,Ce={stop:B};function Ee(t,e,n,a){var r,i,o,s;return null!==(e=e&&Pt(Ot(e)))&&(s=t.viewmodel.get(e)),we.abort(e,t),Z(s,n)?(a.complete&&a.complete(a.to),Ce):(a.easing&&"function"!=typeof(r="function"==typeof a.easing?a.easing:t.easing[a.easing])&&(r=null),i=void 0===a.duration?400:a.duration,o=new Se({keypath:e,from:s,to:n,root:t,duration:i,easing:r,interpolator:a.interpolator,step:a.step,complete:a.complete}),we.add(o),t._animations.push(o),o)}function Pe(){return this.detached||(this.el&&Wt(this.el.__ractive_instances__,this),this.detached=this.fragment.detach(),Te.fire(this)),this.detached}var Te=new Bt("detach");function Ae(t){return this.el?this.fragment.find(t):null}function Oe(t,e){if(this._isComponentQuery?!this.selector||t.name===this.selector:t.node?p(t.node,this.selector):null)return this.push(t.node||t.instance),e||this._makeDirty(),!0}function Re(){var t,e,n;t=this._root[this._isComponentQuery?"liveComponentQueries":"liveQueries"],e=this.selector,-1!=(n=t.indexOf(e))&&(t.splice(n,1),t[e]=null)}function Me(t,e){var n,a,r,i,o,s,p,u;for(n=je(t.component||t._ractive.proxy),a=je(e.component||e._ractive.proxy),r=zt(n),i=zt(a);r&&r===i;)n.pop(),a.pop(),o=r,r=zt(n),i=zt(a);if(r=r.component||r,i=i.component||i,(p=r.parentFragment)===(u=i.parentFragment))return p.items.indexOf(r)-u.items.indexOf(i)||n.length-a.length;if(s=o.fragments)return s.indexOf(p)-s.indexOf(u)||n.length-a.length;throw Error("An unexpected condition was met while comparing the position of two components. Please file an issue at https://github.com/RactiveJS/Ractive/issues - thanks!")}function Le(t){var e;return(e=t.parentFragment)?e.owner:t.component&&(e=t.component.parentFragment)?e.owner:void 0}function je(t){var e,n;for(e=[t],n=Le(t);n;)e.push(n),n=Le(n);return e}function De(t,e){return t.compareDocumentPosition?2&t.compareDocumentPosition(e)?1:-1:Me(t,e)}function Ne(){this.sort(this._isComponentQuery?Me:De),this._dirty=!1}function Fe(){var t=this;this._dirty||(this._dirty=!0,ge.scheduleTask(function(){t._sort()}))}function Ie(t){var e=this.indexOf(this._isComponentQuery?t.instance:t);-1!=e&&this.splice(e,1)}var Be=function(t,e,n,a){var r=[];return W(r,{selector:{value:e},live:{value:n},_isComponentQuery:{value:a},_test:{value:Oe}}),n&&W(r,{cancel:{value:Re},_root:{value:t},_sort:{value:Ne},_makeDirty:{value:Fe},_remove:{value:Ie},_dirty:{value:!1,writable:!0}}),r};function qe(t,e){var n,a;return this.el?(e=e||{},n=this._liveQueries,(a=n[t])?e&&e.live?a:a.slice():((a=Be(this,t,!!e.live,!1)).live&&(n.push(t),n["_"+t]=a),this.fragment.findAll(t,a),a)):[]}function Ue(t,e){var n,a;return e=e||{},n=this._liveComponentQueries,(a=n[t])?e&&e.live?a:a.slice():((a=Be(this,t,!!e.live,!0)).live&&(n.push(t),n["_"+t]=a),this.fragment.findAllComponents(t,a),a)}function Ge(t){return this.fragment.findComponent(t)}function Ve(t){return this.container?this.container.component&&this.container.component.name===t?this.container:this.container.findContainer(t):null}function ze(t){return this.parent?this.parent.component&&this.parent.component.name===t?this.parent:this.parent.findParent(t):null}var We={enqueue:function(t,e){t.event&&(t._eventQueue=t._eventQueue||[],t._eventQueue.push(t.event)),t.event=e},dequeue:function(t){t._eventQueue&&t._eventQueue.length?t.event=t._eventQueue.pop():delete t.event}},He=function(t,e){var n=void 0===arguments[2]?{}:arguments[2];if(!e)return;n.event?n.event.name=e:n.event={name:e,_noArg:!0};var a=Pt(e).wildcardMatches();!function t(e,n,a,r){var i=void 0!==arguments[4]&&arguments[4];var o,s,p=!0;We.enqueue(e,a);for(s=n.length;0<=s;s--)(o=e._subs[n[s]])&&(p=Qe(e,o,a,r)&&p);We.dequeue(e);if(e.parent&&p){if(i&&e.component){var u=e.component.name+"."+n[n.length-1];n=Pt(u).wildcardMatches(),a&&(a.component=e)}t(e.parent,n,a,r)}}(t,a,n.event,n.args,!0)};function Qe(t,e,n,a){var r=null,i=!1;n&&!n._noArg&&(a=[n].concat(a));for(var o=0,s=(e=e.slice()).length;o\~:]))+)((?::[^\s\+\>\~\(]+(?:\([^\)]+\))?)?\s*[\s\+\>\~]?)\s*/g,Fn=/^@media/,In=/\[data-ractive-css~="\{[a-z0-9-]+\}"]/g;function Bn(t){return t.trim?t.trim():t.replace(/^\s+/,"").replace(/\s+$/,"")}function qn(t){return t.str}var Un=1,Gn={name:"css",extend:function(t,e,n){if(n.css){var a=Un++,r=n.noCssTransform?n.css:Ln(n.css,a);e.cssId=a,An.add({id:a,styles:r})}},init:function(){}};var Vn={name:"data",extend:function(t,e,n){var a=void 0,r=void 0;if(n.data&&et(n.data))for(a in n.data)(r=n.data[a])&&"object"==typeof r&&(et(r)||X(r))&<("Passing a `data` option with object and array properties to Ractive.extend() is discouraged, as mutating them is likely to cause bugs. Consider using a data function instead:\n\n // this...\n data: function () {\n return {\n myObject: {}\n };\n })\n\n // instead of this:\n data: {\n myObject: {}\n }");e.data=zn(e.data,n.data)},init:function(t,e,n){var a=zn(t.prototype.data,n.data);return"function"==typeof a&&(a=a.call(e)),a||{}},reset:function(t){var e=this.init(t.constructor,t,t.viewmodel);return t.viewmodel.reset(e),!0}};function zn(t,e){!function(t){t&&t.constructor!==Object&&("function"==typeof t||("object"!=typeof t?pt("data option must be an object or a function, `"+t+"` is not valid"):lt("If supplied, options.data should be a plain JavaScript object - using a non-POJO as the root object may work, but is discouraged")))}(e);var n="function"==typeof t,a="function"==typeof e;return e||n||(e={}),n||a?function(){return Hn(a?Wn(e,this):e,n?Wn(t,this):t)}:Hn(e,t)}function Wn(t,e){var n=t.call(e);if(n)return"object"!=typeof n&&pt("Data function must return an object"),n.constructor!==Object&&dt("Data function returned something other than a plain JavaScript object. This might work, but is strongly discouraged"),n}function Hn(t,e){if(t&&e){for(var n in e)n in t||(t[n]=e[n]);return t}return t||e}var Qn=null,Kn=["preserveWhitespace","sanitize","stripComments","delimiters","tripleDelimiters","interpolate"],Yn={fromId:function(t,e){var n;if(!a){if(e&&e.noThrow)return;throw Error("Cannot retrieve template #"+t+" as Ractive is not running in a browser.")}Xn(t)&&(t=t.substring(1));if(!(n=document.getElementById(t))){if(e&&e.noThrow)return;throw Error("Could not find template element with id #"+t)}if("SCRIPT"==n.tagName.toUpperCase())return"textContent"in n?n.textContent:n.innerHTML;if(e&&e.noThrow)return;throw Error("Template element with id #"+t+", must be a - - - - - - - -
-
- Loading...
-
-
- - - diff --git a/tools/travis/build_tgui.sh b/tools/travis/build_tgui.sh index 0141f3e117b..6ed1c684ed1 100755 --- a/tools/travis/build_tgui.sh +++ b/tools/travis/build_tgui.sh @@ -1,7 +1,19 @@ #!/bin/bash set -euo pipefail -cd tgui -source ~/.nvm/nvm.sh +## Change to project root relative to the script +cd "$(dirname "${0}")/../.." +base_dir="$(pwd)" + +## Setup NVM +[[ -e ~/.nvm/nvm.sh ]] && source ~/.nvm/nvm.sh + +echo "Building 'tgui'" +cd "${base_dir}/tgui" npm ci node node_modules/gulp/bin/gulp.js --min + +echo "Building 'tgui-next'" +cd "${base_dir}/tgui-next" +bin/tgui --clean +bin/tgui