Fix ghost issues and add some shit suggested on the server.

This commit is contained in:
Rob Nelson
2013-12-10 00:02:16 -08:00
parent e00e8b5f49
commit e36ded12dc
8 changed files with 49 additions and 42 deletions

View File

@@ -1202,7 +1202,7 @@ proc/oview_or_orange(distance = world.view , center = usr , type)
proc/get_mob_with_client_list()
var/list/mobs = list()
for(var/mob/M in world)
for(var/mob/M in mob_list)
if (M.client)
mobs += M
return mobs

View File

@@ -70,6 +70,7 @@ datum/preferences
var/language = "None" //Secondary language
//Mob preview
var/icon/preview_icon = null
var/icon/preview_icon_front = null
var/icon/preview_icon_side = null

View File

@@ -1,6 +1,3 @@
#define GHOST_DARK_ALPHA 10
#define GHOST_LIGHT_ALPHA 255
#define GHOST_DARK_CUTOFF 1
/mob/dead/observer
name = "ghost"
desc = "It's a g-g-g-g-ghooooost!" //jinkies!
@@ -34,6 +31,7 @@
see_invisible = SEE_INVISIBLE_OBSERVER
see_in_dark = 100
verbs += /mob/dead/observer/proc/dead_tele
stat = DEAD
var/turf/T
@@ -75,11 +73,25 @@
if(!name) //To prevent nameless ghosts
name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
real_name = name
ghostMulti = new(src)
..()
/mob/dead/attackby(obj/item/W, mob/user)
if(istype(W,/obj/item/weapon/tome))
var/mob/dead/M = src
if(src.invisibility != 0)
M.invisibility = 0
user.visible_message( \
"\red [user] drags ghost, [M], to our plan of reality!", \
"\red You drag [M] to our plan of reality!" \
)
else
user.visible_message ( \
"\red [user] just tried to smash his book into that ghost! It's not very effective", \
"\red You get the feeling that the ghost can't become any more visible." \
)
/mob/dead/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
return 1
/*
@@ -224,34 +236,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
return
// In darkness over a certain threshold, ghosts become slightly visible for the spooky value.
/mob/dead/observer/proc/amInDarkPlace()
//var/turf/simulated/T = get_turf(src)
//if(!istype(T))
// return 0
//if(T.lighting_lumcount <= GHOST_DARK_CUTOFF)
// return 1
return 0
/mob/dead/observer/proc/updateSpookyAlpha()
if(amInDarkPlace())
alpha=GHOST_DARK_ALPHA
invisibility=0
else
alpha=GHOST_LIGHT_ALPHA
invisibility=INVISIBILITY_OBSERVER
///mob/dead/observer/SetLuminosity(new_luminosity, max_luminosity)
// ..()
// updateSpookyAlpha()
/mob/dead/observer/Move(NewLoc, direct)
dir = direct
if(NewLoc)
loc = NewLoc
for(var/obj/effect/step_trigger/S in NewLoc)
S.HasEntered(src)
updateSpookyAlpha() // Added SetLuminosity above, probably not worth it.
return
loc = get_turf(src) //Get out of closets and such as a ghost
if((direct & NORTH) && y < world.maxy)
@@ -265,7 +256,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
for(var/obj/effect/step_trigger/S in locate(x, y, z)) //<-- this is dumb
S.HasEntered(src)
updateSpookyAlpha()
/mob/dead/observer/examine()
if(usr)

View File

@@ -722,6 +722,8 @@ var/list/slot_equipment_priority = list( \
set category = "IC"
set src = usr
if(istype(loc,/obj/mecha)) return
if(hand)
var/obj/item/W = l_hand
if (W)
@@ -826,6 +828,10 @@ var/list/slot_equipment_priority = list( \
return
else
var/deathtime = world.time - src.timeofdeath
var/mob/dead/observer/G = src
if(G.has_enabled_antagHUD == 1 && config.antag_hud_restricted)
usr << "\blue <B>Upon using the antagHUD you forfeighted the ability to join the round.</B>"
return
var/deathtimeminutes = round(deathtime / 600)
var/pluralcheck = "minute"
if(deathtimeminutes == 0)

View File

@@ -125,13 +125,21 @@
var/obj/O = locate("landmark*Observer-Start")
src << "\blue Now teleporting."
observer.loc = O.loc
observer.timeofdeath = world.time // Set the time of death so that the respawn timer works correctly.
client.prefs.update_preview_icon()
observer.icon = client.prefs.preview_icon
observer.alpha = 127
if(client.prefs.be_random_name)
client.prefs.real_name = random_name(client.prefs.gender)
observer.real_name = client.prefs.real_name
observer.name = observer.real_name
if(!client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
observer.verbs -= /mob/dead/observer/verb/toggle_antagHUD // Poor guys, don't know what they are missing!
observer.key = key
del(src)
return 1
if(href_list["late_join"])
@@ -364,10 +372,10 @@ Round Duration: [round(hours)]h [round(mins)]m<br>"}
var/datum/language/chosen_language
if(client.prefs.language)
chosen_language = all_languages[client.prefs.language]
chosen_language = all_languages["[client.prefs.language]"]
if(chosen_language)
if(is_alien_whitelisted(src, client.prefs.language) || !config.usealienwhitelist || !(chosen_language.flags & WHITELISTED))
new_character.add_language(client.prefs.language)
new_character.add_language("client.prefs.language")
if(ticker.random_players || appearance_isbanned(src)) //disabling ident bans for now
new_character.gender = pick(MALE, FEMALE)
client.prefs.real_name = random_name(new_character.gender)

View File

@@ -131,7 +131,7 @@ datum/preferences
proc/update_preview_icon() //seriously. This is horrendous.
del(preview_icon_front)
del(preview_icon_side)
var/icon/preview_icon = null
del(preview_icon)
var/g = "m"
if(gender == FEMALE) g = "f"

View File

@@ -79,6 +79,8 @@
<h3 class="author">N3X15 updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Circuit imprinters have a processing queue and use the new internal material handling system for easier addition of materials in the future.</li>
<li class="rscadd">Added blast doors to atmos mix tank.</li>
<li class="rscadd">RPD added to CE's office.</li>
<li class="bugfix">Fix monkeys not having their genes set correctly.</li>
</ul>
<h3 class="author">Imported from Baystation 12:</h3>

View File

@@ -5175,12 +5175,12 @@
"bVA" = (/obj/machinery/atmospherics/pipe/manifold{_color = "yellow"; icon_state = "manifold-y"; level = 2},/obj/machinery/meter,/turf/simulated/floor,/area/atmos)
"bVB" = (/obj/machinery/atmospherics/pipe/manifold{_color = "yellow"; icon_state = "manifold-y"; level = 2},/turf/simulated/floor,/area/atmos)
"bVC" = (/obj/machinery/atmospherics/pipe/simple{_color = "yellow"; dir = 4; icon_state = "intact-y"; level = 2},/turf/simulated/floor,/area/atmos)
"bVD" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/valve/digital{_color = "yellow"; dir = 4; name = "Gas Mix Outlet Valve"},/turf/simulated/floor{dir = 5; icon_state = "green"},/area/atmos)
"bVD" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id = "mixing_vent"; name = "Mixing Tank Emergency Vent"; p_open = 0},/turf/simulated/floor/plating,/area/atmos)
"bVE" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple{_color = "green"; dir = 4; icon_state = "intact-g"; level = 2},/obj/machinery/atmospherics/pipe/simple{_color = "cyan"; icon_state = "intact-c"},/obj/machinery/atmospherics/pipe/simple{_color = "yellow"; dir = 4; icon_state = "intact-y"; level = 2},/obj/structure/grille,/turf/simulated/floor/plating,/area/atmos)
"bVF" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple{_color = "yellow"; dir = 4; icon_state = "intact-y"; level = 2},/obj/machinery/atmospherics/pipe/simple{_color = "green"; icon_state = "intact-g"; level = 2},/turf/space,/area)
"bVG" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; level = 1},/obj/structure/grille,/obj/machinery/meter,/turf/simulated/wall/r_wall,/area/atmos)
"bVH" = (/obj/machinery/atmospherics/unary/vent_pump{canSpawnMice = 0; dir = 8; external_pressure_bound = 0; frequency = 1441; icon_state = "in"; id_tag = "waste_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
"bVI" = (/obj/machinery/camera{c_tag = "Atmospherics Waste Tank"},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
"bVI" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/valve/digital{_color = "yellow"; dir = 4; name = "Gas Mix Outlet Valve"},/obj/machinery/door_control{desc = "A remote control-switch for the engineering security doors."; id = "mixing_vent"; name = "EMERGENCY VENT"; pixel_x = 25; pixel_y = 0; req_access_txt = "10"},/turf/simulated/floor{dir = 5; icon_state = "green"},/area/atmos)
"bVJ" = (/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
"bVK" = (/obj/machinery/door/airlock/external{req_access_txt = "13"; req_one_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bVL" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/wall,/area/maintenance/asmaint)
@@ -5252,7 +5252,7 @@
"bWZ" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold{tag = "icon-manifold-g (EAST)"; icon_state = "manifold-g"; dir = 4; level = 2; _color = "green"},/turf/space,/area)
"bXa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/atmos)
"bXb" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "waste_sensor"; output = 63},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
"bXc" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
"bXc" = (/obj/machinery/camera{c_tag = "Atmospherics Waste Tank"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
"bXd" = (/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bXe" = (/turf/simulated/wall/r_wall,/area/medical/virology)
"bXf" = (/obj/structure/sign/biohazard,/turf/simulated/wall,/area/medical/virology)
@@ -6191,7 +6191,7 @@
"cpc" = (/obj/structure/closet/secure_closet/engineering_chief{req_access_txt = "0"},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cpd" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cpe" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/clothing/glasses/meson{pixel_y = 4},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 1},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cpf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/table/reinforced,/obj/item/weapon/folder/yellow,/obj/item/weapon/stamp/ce,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cpf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/table/reinforced,/obj/item/weapon/folder/yellow,/obj/item/weapon/stamp/ce,/obj/item/weapon/pipe_dispenser,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cpg" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/pen,/obj/item/weapon/lighter/zippo,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cph" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/cable,/turf/simulated/floor/plating,/area/engine/chiefs_office)
"cpi" = (/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor,/area/engine/break_room)
@@ -10358,7 +10358,7 @@
"dRj" = (/obj/machinery/light{dir = 1},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/obj/machinery/computer/rdconsole/mommi,/turf/simulated/floor{icon_state = "white"},/area/construction/mommi_nest)
"dRk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/construction/mommi_nest)
"dRl" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "MoMMI Nest APC"; pixel_y = 24},/obj/machinery/light_switch{pixel_x = 13; pixel_y = 25},/obj/structure/table,/obj/item/weapon/storage/bag/plasticbag,/obj/item/weapon/storage/bag/plasticbag,/obj/item/weapon/storage/bag/plasticbag,/obj/item/weapon/storage/bag/plasticbag,/turf/simulated/floor{icon_state = "white"},/area/construction/mommi_nest)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -10515,9 +10515,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaagaagbHRbRFbRGbRHbHRbKwbRIbHRbKwbRJbHRaaaaaaaaaaaabHTbRKbRLbRMbRNbHTbRObHTbRPbRQbRRbRSbRSbRTbRUbRVbRWbRXbRYbRZbRZbRZbSabSbbRZbRZbScbRYbSdbSebSfbSfbSgbRZbJDbJDbJDbJDbJDbJDbJDbJDbJDbIzbsZbShbSibSjbSkbSlbxLbSmbPIbSnbSobSpbSqbSrbsZbSsbStbSubSvbSwbSxbSybSzbSAbSBbSCbSDbSEboKbSFboKbRkbNhboKbSGbRmbRnbSHbSIbSJbSKbSLbSMbSNbSObIHbSPbIMbBQbKnbKnbKnbKnbKnaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaabGebLPbLPbLPbLPbLPbLPbSQbHzbLObLPbSRbHBbHBbHBbHBbGeaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabHRbHRbHRbHRbHRbHRbHRbHRbKwbNIbSSbSTbSTbSTbSTbSTbSTbSTbSTbSTbSTbSUbSVbSWbSXbSYbSZbTabTbbTcbTcbTdbTebTfbTgbThbTibTjbTkbTlbTmbTnbTobTpbTqbTrbTsbTtbTuaagaaaaaaaaaaaaaaaaaabJDbTvbIzbsZbPFbrwbsZbrwbPFbTwbsZbrwbrwbrwbrwbrwbrwbsZbTxbIAbTybTzbTAbTBbTCbTDbTEbTFbTGbTHbTIbTJboKbTKbRkbNhbTLbTMbRmbRnbSHbTNbRqbTObRqbTPbTQbTRbIHbSPbIMbTSbTTbhLaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagbGebHBbHBbHBbHBbHBbHBbORbHzbSRbHBbHBbHBbHBbHBbGebGeaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabHRbTUbTVbTWbTWbTXbTWbTWbTYbTZbUabSTbUbbUcbUdbUebUfbUgbUhbUibUjbUkbUlbUmbUnbUobUpbUqbUrbUsbUsbUtbUubTfbUvbThbTibUwbTkbUxbUybUzbUAbUBbUCbUDbUEbUFbUGbUHbUIbUIbUIbUIbUIaaabJDbUJbUKbQLbQMbQNbQLbULbUMbUNbUObULbQNbQNbQNbQNbQNbUPbUQbIAbURbUSbUTbUUbUVbUWbUXbIAbIAbrQbUYbrQbrQbrQbUZbNhbVabrQbIHbIHbIHbIHbIHbVbbIHbIHbIHbIHbIHbSPbIMbVcbTTbhLaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaabGebGebNAbHBbHBbHBbHBbHBbHzbHBbHBbHBbHBbHBbGebGeaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVdaaaaagaagbVebVebVebVebVebVebVebVebRJbVfbVfbVfbVfbVfbVgbVfbVfbSTbVhbVibVjbVjbVjbVjbVjbVjbVjbVkbSTbVlbVmbUobVnbVobTcbVpbTcbVqbVrbVsbVtbVubVvbVwbTkbVxbUybVybVzbVAbVBbVCbVCbVDbVEbVFbVGbVHbVIbVJbUIaaabJDbJDbVKbVLbVMbVNbPybVObVPbVQbVRbVObVObVSbVTbVObVObVUbIzbIAbIAbIAbIAbIAbIAbVVbOxbIAbVWbVXbVYbVZbWabrQbUYbWbbWcbrQbWdbWebWfbWgbWhbWibBQbBQbWjbBQbBQbSPbIMbWkbhLbhLbhLaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagbGdbGebWlbQfbQfbHBbHBbHBbHzbHBbHBbHBbHBbGebGeaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWmbWnbWobWpbWpbWpbWqbWrbWsbWtbWubWvbWwbVebWxbWybWzbWAbWBbWCbWDbWEbWFbSVbWGbVibVjbVjbWHbVjbVjbWIbWJbWKbSTbWLbVmbUobUpbWMbTcbTcbTcbWNbWObWPbWQbWRbVwbWSbWTbVwbWUbVybVzbWVbWWbWWbWWbWXbWYbWZbXabXbbVJbXcbUIaagbJDbTvbXdbJDaaaaagaaabXebXfbXgbXhbXeaagaagaaaaagbJDbXibXjbQNbQNbQNbQNbQNbQNbQLbXkbQNbXlbQNbQMbXmbQNbULbXnbXobXpbXqbXrbXrbXrbXrbXsbXtbXrbXrbXrbXrbXrbXubXvbXwbXxbXybhLbhLbhLbhLaaaaagaaaaaaaaabXzbXzbXzaagaaaaaaaagaaaaaaaagaaaaaabKobGebIObGebGebHBbHBbHBbHzbHBbHBbHBbGebGeaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXAbXAbXAbXAbXAbXBbXCbXDbXEbXEbXFbVebXGbVfbXHbXIbXIbXJbXIbXKbXLbSVbXMbVibVjbXNbXObXPbVjbXQbXRbXSbSTbXTbXUbXVbXWbXWbXXbXYbTcbXZbYabYbbYcbYdbYebYfbYgbYgbYhbYibYjbYkbVCbVCbYlbYmbYnbYobVGbYpbVJbVJbUIaagbJDbXdbXdbJDaaaaagaaabYqbYrbYsbYtbYqaagaagaaaaagbJDbYubYvbYwbYxbMzbYybYybYzbYAbYBbYCbYDbVObVSbVTbVObVObYEbYFbYGbYHbYHbYIbYJbYJbYKbYHbYHbYIbYJbYJbYKbYHbYLbBQbYMbYNbYObYPbYNbYQbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYSbYTbYTbYUbGebGebHBbHBbYVbHBbHBbGebGeaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVdaaaaagaagbVebVebVebVebVebVebVebVebRJbVfbVfbVfbVfbVfbVgbVfbVfbSTbVhbVibVjbVjbVjbVjbVjbVjbVjbVkbSTbVlbVmbUobVnbVobTcbVpbTcbVqbVrbVsbVtbVubVvbVwbTkbVxbUybVybVzbVAbVBbVCbVCbVIbVEbVFbVGbVHbXcbVJbVDaaabJDbJDbVKbVLbVMbVNbPybVObVPbVQbVRbVObVObVSbVTbVObVObVUbIzbIAbIAbIAbIAbIAbIAbVVbOxbIAbVWbVXbVYbVZbWabrQbUYbWbbWcbrQbWdbWebWfbWgbWhbWibBQbBQbWjbBQbBQbSPbIMbWkbhLbhLbhLaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagbGdbGebWlbQfbQfbHBbHBbHBbHzbHBbHBbHBbHBbGebGeaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWmbWnbWobWpbWpbWpbWqbWrbWsbWtbWubWvbWwbVebWxbWybWzbWAbWBbWCbWDbWEbWFbSVbWGbVibVjbVjbWHbVjbVjbWIbWJbWKbSTbWLbVmbUobUpbWMbTcbTcbTcbWNbWObWPbWQbWRbVwbWSbWTbVwbWUbVybVzbWVbWWbWWbWWbWXbWYbWZbXabXbbVJbVJbVDaagbJDbTvbXdbJDaaaaagaaabXebXfbXgbXhbXeaagaagaaaaagbJDbXibXjbQNbQNbQNbQNbQNbQNbQLbXkbQNbXlbQNbQMbXmbQNbULbXnbXobXpbXqbXrbXrbXrbXrbXsbXtbXrbXrbXrbXrbXrbXubXvbXwbXxbXybhLbhLbhLbhLaaaaagaaaaaaaaabXzbXzbXzaagaaaaaaaagaaaaaaaagaaaaaabKobGebIObGebGebHBbHBbHBbHzbHBbHBbHBbGebGeaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXAbXAbXAbXAbXAbXBbXCbXDbXEbXEbXFbVebXGbVfbXHbXIbXIbXJbXIbXKbXLbSVbXMbVibVjbXNbXObXPbVjbXQbXRbXSbSTbXTbXUbXVbXWbXWbXXbXYbTcbXZbYabYbbYcbYdbYebYfbYgbYgbYhbYibYjbYkbVCbVCbYlbYmbYnbYobVGbYpbVJbVJbVDaagbJDbXdbXdbJDaaaaagaaabYqbYrbYsbYtbYqaagaagaaaaagbJDbYubYvbYwbYxbMzbYybYybYzbYAbYBbYCbYDbVObVSbVTbVObVObYEbYFbYGbYHbYHbYIbYJbYJbYKbYHbYHbYIbYJbYJbYKbYHbYLbBQbYMbYNbYObYPbYNbYQbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYRbYSbYTbYTbYUbGebGebHBbHBbYVbHBbHBbGebGeaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaagaagbYWbYXbYYbYZbYYbZabZbbZcbZdbZdbZebVebXGbVfbZfbXIbXIbZgbXIbZhbZibSVbZjbVibVjbZkbZlbZmbVjbXQbZnbZobZpbWLbVmbUobZqbRSbZrbZsbZtbZubZvbTfbZwbZxbZybZzbTtbTtbZAbZBbZCbZCbZDbZDbZEbZDbZFbZGbUIbUIbUIbUIbUIaagbJDbJDbZHbJDaagaagaagbZIbZJbZKbZLbZIaagaaaaaaaagbJDbJDbJDbJDbJDbZMbJDbJDbZNbZObZPbJDbZQaaaaaaaaaaaabZRbZSbZTbZUbZRaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaabhLbZVbjDbZWbhLbhLbhLbhLaaaaagaaaaaaaaabXzbXzbXzaagaaaaaaaagaaaaaaaagaagaagbZXbZYbZZbIPbGdbGebGebHBbHCbHBbGebGeaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagbYWcaacabcaccadbXDcaebXDcafbXDcagcahcaibVfcajcakbXIbXJbXIcalcambSVcanbVibVjbVjbVjbVjbVjcaocapcaqcapcarcasbUocatbRSbTccaucavcawcaxbTfcaybYecazcaAbVwbVwcaBcaCbVCbVCcaDcaEcaFcaGcaHbVFbVGcaIcaJcaJbUIaagaagbXdbXdbXdaaaaagaaacaKcaLcaMcaNcaKaagaaaaaaaagaaaaaaaaabJDcaOcaPcaQbJDaaacaRaaaaaacaSaaaaaaaaaaaacaTcaUcaVcaWcaTaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaacaXcaXcaYcaZcaXaaaaaaaaaaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagcbabGbbGbbGcbGdbGdbGebGebGebGebGfaagaagaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagbYWcbbcbccbdcbccbecbfcbgcbhcbicbjbVebXGbVfcajcbkcblcbmcbncbocbpcbqcbrcbsbXObVjbXObVjbVjcbtcbucbvcapcbwbVmbUocbxcbycbzcbAbTtcbBcbCcbDbTtcbEcbFcbGbVwbVwcaBcbHcbIbWWcbJcbJcbKcbLbWYcbMbXacbNcbOcbPbUIaagaaaaaaaaaaaaaaaaaaaaacbQbXecbRcbScbQaagaagaagaagaagaagaaabJDcbTcbUbXdbJDaaacbVaaaaaacaSaaaaaaaaaaaacbWcbXcbYcbZcbWaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaacaXccaccbccccaXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaaaaaaaaaaaaaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa